代码之家  ›  专栏  ›  技术社区  ›  iperetta

导出为pdf时,如何将代码块封装到框架中?

  •  5
  • iperetta  · 技术社区  · 7 年前

    我已经使用组织模式+emacs有一段时间了,我喜欢制作内容是多么容易。我经常从同一个文档(首先是一个网页,然后是一个pdf文档)中使用html+pdf导出组合。我的问题是导出代码块( #+BEGIN_SRC ...) pdf格式。

    html ,导出命令( C-c C-e h h )给了我一个满意的解决方案:它使用一个框架来封装代码(当您将鼠标指针放在上面时显示编程语言),并使用另一个框架来生成消息(正如我设置的那样) :export both ). 使用时 #+CAPTION: my caption here ,生成的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
    

    以下是结果 html 以及由此产生的 pdf .

    2 回复  |  直到 3 年前
        1
  •  10
  •   pietrodito    3 年前

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

    我们将使用 minted 包裹 . 为了完整性,我必须这样设置一切:


    铸造的 使用Python包突出显示名为 Pygmets . 您可以通过以下方式安装:

    pip install Pygments
    

    Emacs设置

    • 在组织文件前言中,您需要一行: #+LaTeX_HEADER: \usepackage{minted}
    • 源代码块导出使用变量 org-latex-listings . 您必须将其设置为: (setq org-latex-listings 'minted) .
    • 最后但同样重要的是,你必须允许 pdflatex Pygments . 选择是 -shell-escape . 描述对LaTeX编译器调用的emacs变量是 org-latex-pdf-process .

    为了实现这三点,我在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"))
    

    注意:请参阅 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
    

    enter image description here


    铸造手册

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

        2
  •  3
  •   Alex Ott    7 年前

    组织模式使用Minted包在PDF/LaTeX中突出显示源代码

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

    #+ATTR_LATEX: :options frame=single
    

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

    请参阅Minted LaTeX package的文档,可能还有TeX stackexchange上的这两个答案: 1 2