使用var

时间:2018-01-07 14:57:14

标签: emacs org-mode

组织模式缓存选项,请参阅https://orgmode.org/manual/cache.html,在导出到html时节省了大量时间。不幸的是,在传递var参数时,我无法使其工作。

这就是Org的样子:

  #+tblname: howtocache
  | x | y |
  |---+---|
  | 1 | 5 |
  | 2 | 2 |
  | 3 | 1 |
  | 4 | 6 |
  | 5 | 3 |

  #+begin_src gnuplot :cache yes :var data=howtocache :exports code :file howtocache.png
  reset

  plot data u 1:2 w l
  #+end_src

  #+RESULTS[4a0d86e3196a769ad675be613318b8fb77d47f2e]:
  [[file:howtocache.png]]

当我评估gnuplot块时,我总是得到一个新的哈希值。

gnuplot 缓冲区中,我看到数据是从不同的临时文件中提供的。

  • 一次运行: data =" c:/ Users / harald / AppData / Local / Temp / babel-14152bAf / gnuplot-141521-y"
  • 另一场比赛: data =" c:/ Users / harald / AppData / Local / Temp / babel-14152bAf / gnuplot-14152OnU"

可能是根据文件名计算哈希值。

主要问题是:如何将缓存与var一起使用?

2 个答案:

答案 0 :(得分:0)

找到合理的解决方案:

https://emacs.stackexchange.com/a/24126

  

手动评估更改,而不是导出

     

:eval no-export放入标题参数中,处理不会   仅在您使用C-c C-c或手动调用时才会在导出时发生   M-x org-babel-execute-buffer

答案 1 :(得分:0)

感谢您提供有关不断变化的临时文件的信息,我发现了适用于常规执行和导出的gnuplot缓存的通用解决方案。与其直接将数据传递到gnuplot src块并让ob-gnuplot编写一个临时文件,不如我自己编写该临时文件,然后对其进行缓存,然后将文件名传递给gnuplot src块。之所以可行,是因为ob-gnuplot仅在其输入中写入矢量文件,而我们通过给它一个字符串来绕过它。

根据上面的示例,有一些代码需要说明:

  #+tblname: howtocache
  | x | y |
  |---+---|
  | 1 | 5 |
  | 2 | 2 |
  | 3 | 1 |
  | 4 | 6 |
  | 5 | 3 |

  #+name: data-file
  #+begin_src elisp :cache yes :var data=howtocache
  (org-babel-gnuplot-table-to-data data (org-babel-temp-file "gnuplot-") '())
  #+end_src

  #+RESULTS[25d02647c9b4a748ce6798d81e70d72c3ace0846]: data-file
  : /var/folders/n4/vg52wwmn02xbfx_4g2l53z1m0000gn/T/babel-eiHU75/gnuplot-8osPqw

  #+begin_src gnuplot :cache yes :var data=data-file :exports code :file howtocache.png
  reset

  plot data u 1:2 w l
  #+end_src

  #+RESULTS[af6331cf9eac29a503e86eb07dc76a1a0d808f85]:
  [[file:howtocache.png]]

希望这对于将来使用相同用例的该线程的Google员工来说是有用的