如何将代码块从org-mode导出到封装到框架中的pdf

时间:2017-09-27 02:23:29

标签: pdf emacs org-mode

我现在已经使用org-mode + emacs了一段时间,我喜欢制作内容是多么容易。我经常使用同一文档中的html + pdf export组合(首先是一个网页,下面是一个pdf文档)。我的问题是将代码块(#+BEGIN_SRC ...)导出为pdf。

html ,导出命令(C-c C-e h h)给了我一个满意的解决方案:它使用一个框架来封装代码(当你将鼠标指针放在它上面时显示编程语言并为结果消息使用不同的框架(我设置:export both)。在#+CAPTION: my caption here之前使用#+BEGIN_SRC时,生成的html页面包含" 列出#:我的标题"在代码框之前。

pdf ,导出命令(C-c C-e l p)生成的文档在代码或结果(真正的混乱)周围都没有框架,并且字幕显示为& #34; 图#:我的标题"在代码和结果之间。

从org-mode导出为pdf时,如何为代码块获取不同的代码和结果框架类似于列表的字幕

这是一个最小的例子:

#+TITLE: EXPORT TESTINGS
#+OPTIONS: toc:nil

#+CAPTION: Caption, my caption!
#+BEGIN_SRC C :results output :exports both
int i, x = 10;
for(i = 0; i < x; i++)
    printf("%d ",i);
printf(" ~ %d\n", x);
#+END_SRC

以下是生成的html和生成的pdf

2 个答案:

答案 0 :(得分:5)

基于Alex Ott的回答(以及几个小时的网络浏览),我终于做到了。

为了完整。这就是我必须设置所有内容的方式:


需要Python

minted使用Python包突出显示名为Pygmets的语法。您可以通过以下方式安装它:

pip install Pygments

Emacs设置

  • 在组织文件序言中,您需要以下行:#+LaTeX_HEADER: \usepackage{minted}
  • 源代码块导出使用变量org-latex-listings。您必须使用(setq org-latex-listings 'minted)进行设置。
  • 最后但并非最不重要的一点,您必须允许pdflatex执行shell命令才能使用Python软件包Pygments。选项为-shell-escape。用于描述对LaTeX编译器的调用的emacs变量为org-latex-pdf-process

要达到这3点,我已在我的init文件中添加了此摘要

;; inside .emacs file
(setq org-latex-listings 'minted
      org-latex-packages-alist '(("" "minted"))
      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"))

注意:请参阅here,以了解为什么需要对pdflatex进行三个调用。如果使用bibtex,则必须插入相应的行。


返回到您的组织文件

现在,您可以在源代码块的顶部添加LaTeX属性:

#+ATTR_LATEX: :options frame=single
#+BEGIN_SRC emacs-lisp
  (defun Fib (n)
    (if (< n 2) n (+ (Fib (- n 1)) (Fib (- n 2)))))
#+END_SRC

Etvoilà! enter image description here


手册手册

要使用不同的框架样式,请检查manual

答案 1 :(得分:2)

Org-mode使用Minted包在PDF / LaTeX中突出显示源代码

如果对特定代码块使用以下配置参数,则可以将选项传递给Minted包:

#+ATTR_LATEX: :options frame=single

或者,如果您想对所有文件进行这些更改,则需要自定义'org-latex-listings-options'和/或'org-latex-minted-options'变量。

请参阅Minted LaTeX软件包的文档,也许是TeX stackexchange上的这两个答案:12