如何将代码块从组织模式导出到封装到框架中的 pdf

ipe*_*tta 4 pdf emacs org-mode

我已经使用 org-mode + emacs 有一段时间了,我喜欢制作内容是多么容易。我经常使用来自同一文档的 html + pdf 导出组合(首先是网页,然后是 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)生成的文档在代码和结果周围都没有框架(真是一团糟),并且标题在代码和结果之间显示为“图 #:我的标题在这里”。

如何获得这两个代码不同的框架和结果 ,并房源般的字幕从组织模式导出为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
Run Code Online (Sandbox Code Playgroud)

这是生成的html和生成的pdf

pie*_*ito 6

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

为了完整性。这就是我必须设置一切的方式:


需要Python

minted使用 Python 包突出显示名为Pygmets 的语法。你可以安装它:

pip install Pygments
Run Code Online (Sandbox Code Playgroud)

Emacs 设置

  • 在 org 文件序言中,您需要以下行: #+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 文件中添加了这个 snipet

;; 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"))
Run Code Online (Sandbox Code Playgroud)

注意:请参阅此处了解为什么需要对 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
Run Code Online (Sandbox Code Playgroud)

等等! 在此处输入图片说明


铸造手册

要使用不同的框架样式,请查看手册