在组织模式代码块导出中显示纠结的文件名

时间:2016-08-09 18:13:52

标签: emacs org-mode literate-programming

我在Emacs org模式下进行文字编程。当我将Latex导出为pdf时,我希望代码纠缠在一起的文件名由每个代码块显示。我在manual中找不到合适的标题参数。

这是我的组织文件:

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 个答案:

答案 0 :(得分:3)

有几个选项都需要您进行一些黑客攻击。这两个示例显示了如何使用过滤器来修改src块的导出。

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)))

这就是我最近可能会做的事情。