如何将代码块从组织模式导出到封装到框架中的pdf
我已经使用org模式+emacs有一段时间了,我喜欢制作内容是多么容易。我经常从同一个文档中使用html+pdf导出组合(首先是网页,然后是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之前
#+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)
(如果(
瞧!
铸造手册
要使用不同的框架样式,请检查我看到您的答案已被接受,但我无法使其生效。这一行加在哪里?在文件的开头?是的,在文件的开头(至少如果我没记错的话:-)