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

如何将代码块从组织模式导出到封装到框架中的pdf,pdf,emacs,org-mode,Pdf,Emacs,Org Mode,我已经使用org模式+emacs有一段时间了,我喜欢制作内容是多么容易。我经常从同一个文档中使用html+pdf导出组合(首先是网页,然后是pdf文档)。我的问题是将代码块(#+BEGIN\u SRC…)导出为pdf 对于html,export命令(C-C-e h)为我提供了一个令人满意的解决方案:它使用一个框架来封装代码(当鼠标指针停留在其上时显示编程语言),并对生成的消息使用不同的框架(如我设置的:导出两个)。使用#+CAPTION:my CAPTION here在#+BEGIN_SRC之前

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

对于html,export命令(
C-C-e h
)为我提供了一个令人满意的解决方案:它使用一个框架来封装代码(当鼠标指针停留在其上时显示编程语言),并对生成的消息使用不同的框架(如我设置的
:导出两个
)。使用
#+CAPTION:my CAPTION here
#+BEGIN_SRC
之前时,生成的html页面在代码框之前包含“Listing#:my CAPTION here”

对于pdf,由export命令(
C-C-e-l p
)生成的文档在代码或结果周围都没有框架(一团乱麻),在代码和结果之间,标题显示为“Figure#:我的标题在这里”

当从组织模式导出到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
#+标题:导出测试
#+选项:toc:nil
#+字幕:字幕,我的字幕!
#+BEGIN_SRC C C:results输出:同时导出
int i,x=10;
对于(i=0;i

下面是结果和结果。

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

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

#+ATTR_LATEX: :options frame=single
#+ATTR_LATEX: :options frame=single
#+BEGIN_SRC emacs-lisp
  (defun Fib (n)
    (if (< n 2) n (+ (Fib (- n 1)) (Fib (- n 2)))))
#+END_SRC
或者,如果要对所有文件进行这些更改,则需要自定义“org latex listings options”和/或“org latex minted options”变量


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

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

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


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

pip install Pygments

Emacs设置
  • 在组织文件前言中,您需要一行:
    #+LaTeX\u头:\usepackage{minted}
  • 源代码块导出使用变量
    org
    。您必须将其设置为:
    (setq org latex listings'minted)
  • 最后但并非最不重要的一点是,您必须允许
    pdflatex
    执行shell命令,以便使用Python包
    Pygments
    。选项是
    -shell转义
    。描述对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"))
注意:请参阅以了解为什么需要三次呼叫pdflatex。如果使用bibtex,则必须插入相应的行


返回您的组织文件 现在,您可以在源代码块顶部添加LaTeX属性:

#+ATTR_LATEX: :options frame=single
#+ATTR_LATEX: :options frame=single
#+BEGIN_SRC emacs-lisp
  (defun Fib (n)
    (if (< n 2) n (+ (Fib (- n 1)) (Fib (- n 2)))))
#+END_SRC
#+ATTR\u LATEX::options frame=single
#+BEGIN_SRC emacs lisp
(除纤维(n)
(如果(
瞧!


铸造手册
要使用不同的框架样式,请检查

我看到您的答案已被接受,但我无法使其生效。这一行加在哪里?在文件的开头?是的,在文件的开头(至少如果我没记错的话:-)