Emacs org-mode:在缓冲区中定义变量并访问变量

9
我希望在org文件中定义一个缓冲范围的变量,并在以后使用该变量的值,例如,为latex导出定义图像的宽度。
有没有办法做到这一点?
可以使用“#+CONSTANTS:”吗?
理想情况下,应该这样工作:
我在缓冲区中定义一个变量“image_width”,例如:
image_width=10

在for循环中使用此变量,并将其用于 #+ATTR_LATEX: 设置,例如,#+ATTR_LATEX: :width $image_width

3个回答

1

如果您希望常量仅适用于缓冲区,有两种方法(未经测试):

  • 在您的Org文件中的最后8行(左右)使用“本地变量”;

  • 使用Org的“#+MACRO:”功能。


1
我尝试了你的方法,并定义了宏 #+MACRO: image_width 16。在 org 文件中,这在纯文本中完美地工作并且符合预期,{{{image_width}}} 将在导出文件中替换为 _16_。然而,当我将其添加到 LaTeX 属性中,例如 #+ATTR_LATEX: :center :placement [H] :width {{{image_width}}}cm,我得到的是 \includegraphics[width={{{image_width}}}cm]{test.png} 而不是 \includegraphics[width=16cm]{test.png}。所以,对我来说这不起作用。 - jotsetung
你至少应该将此作为一个功能报告。我确实有这样的印象,它应该能够很好地工作。 - fniessen

1
您可以使用#+NAME:标签声明变量。然后通过将其传递给需要它的src块中的:var来使用它。
这将类似于以下内容:
#+NAME: instance-id
| abcd |

#+BEGIN_SRC sh :var id=instance-id
echo $id
#+END_SRC

#+RESULTS:
: abcd

#+BEGIN_SRC python :var myvar=instance-id[0, 0]
print myvar
#+END_SRC

#+RESULTS:
: abcd

注意Python源代码块中的instance-id[0, 0]。我将变量声明为数组,因此需要像这样取消引用该值。

-2
在你的.emacs文件中定义一个变量。就像定义函数一样,你可以将变量绑定到某个值上。你可以使用setq或defvar、defconst等命令,具体取决于你的需求。例如:
(setq image-width 10)
设置完变量后,确保执行eval-buffer命令。

谢谢您指出如何定义变量。那么我该如何获取值,即 org 文件中的 10 值呢?理想情况下,实际值应在导出 org 文件之前包含在 org 文件中。 - jotsetung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接