在org mode代码块导出中显示纠缠的文件名

3
我正在使用Emacs org mode进行文学编程。当我将Latex导出为pdf时,我希望每个代码块显示它所生成的代码文件名。在手册中,我找不到适合的标题参数。
这是我的org文件:
A piece of Python code:
#+BEGIN_SRC python :tangle pythontest.py
  print("hello")
#+END_SRC

这是我的.emacs文件:
(org-babel-do-load-languages
 'org-babel-load-languages
 '((python . t)))

这里是PDF导出的一部分截图,内容包含文本: Latex pdf output
1个回答

3
有几种选项都需要您进行一些操作。这两个示例展示了如何使用过滤器修改src块的导出。它们对我来说有点笨拙。另一种替代方法是使用预处理钩子,像这样修改导出之前的org文件的临时副本: http://kitchingroup.cheme.cmu.edu/blog/2014/09/22/Showing-what-data-went-into-a-code-block-on-export/ http://kitchingroup.cheme.cmu.edu/blog/2013/09/30/Attaching-code-blocks-to-a-pdf-file-during-export/
(defun add-tangled-name (backend)
  (let ((src-blocks (org-element-map (org-element-parse-buffer) 'src-block #'identity)))
(setq src-blocks (nreverse src-blocks))
    (loop for src in src-blocks
      do
      (goto-char (org-element-property :begin src)) 
      (let ((tangled-name (cdr (assoc :tangle (nth 2 (org-babel-get-src-block-info))))))        
        (insert (format "=Tangle: %s=\n" tangled-name))))))

(let ((org-export-before-processing-hook '(add-tangled-name))
      (org-latex-pdf-process '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
                   "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
                   "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"))
      (async nil)
      (subtreep t)
      (visible-only nil)
      (body-only nil)
      (ext-plist '()))
  (org-open-file (org-latex-export-to-pdf nil t)))

这是我现在可能会做的事情。

非常感谢,使用预处理钩子的想法很好。当我将您帖子中的代码粘贴到我的.emacs文件中时,它对我不起作用,但也许我使用它的方式不正确?我不了解足够的elisp以理解所有内容。 - 8n8
“不起作用”是什么意思?你有收到错误吗?它可能不应该放在.emacs文件中。我会把它放在你想要导出的文档中的elisp src块中,并从那里运行它。你可以把它放在一个标记为:noexport:的部分中,这样该块就不会显示在你的文档中。 - John Kitchin

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