您的位置:首页 > 其它

使用org mode导出LaTeX

2016-11-21 22:37 330 查看

Table of Contents

1. 使用org mode导出LaTeX

1.1. Org默认的LaTeX导出

1.2. 定制LaTeX导出模板

1.2.1. 更改pdf引擎

1.2.2. 自定义模板

1.3. 更多功能

1.3.1. 如何添加宏包

1.3.2. 添加LaTeX环境

1.3.3. org导出选项

使用org mode导出LaTeX

Org mode是Emacs下一个重要组件, 也是Emacs的 Killer Application . 几乎所有Emacs下的功能Vim都有对应的插件, 但是唯有org mode, Vim下始终没有一个能与之相媲美的工具. org mode的口号是”Your Life in Plain Text”. org所有内容都是以纯文本的形式保存. 这一点和Mardown类似, 但org mode的功能远远多与Markdown. 用户可以用它做GTD, 写日记, 写程序, 做笔记, 项目管理或写blog. org mode还有非常丰富的导出功能, 可以导出HTML, Textinfo, LaTex文档和幻灯片, 甚至Markdown. org mode还提供了export的API, 用户可是根据自己的需求定义自己的导出格式. 使用org写作,可以真正做到了内容与形式的分离. 本文就是在org mode下写的, 然后转换成Markdown上传到博客的, 还可将其导出LaTeX和pdf.

Org默认的LaTeX导出

org 已经提供了LaTeX的导出功能, 默认使用了
documentclass{paper}
. 例如:

#+TITLE: Org to \LaTeX
* Introduction
** section 1
** section 2
** subsection 1
hello world!
你好!
$$a^{2} + b^{2}$$


Ctrl
c
e
之后, 会弹出
export
的buffer, 提示用户选择导出类型, 按
l
表示导出LaTeX, 接着按
o
键表示导出pdf文件, 并且打开. 导出的LaTeX文件如下:

% Created 2016-11-21 Mon 21:28
\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fixltx2e}
\usepackage{graphicx}
\usepackage{longtable}
\usepackage{float}
\usepackage{wrapfig}
\usepackage{rotating}
\usepackage[normalem]{ulem}
\usepackage{amsmath}
\usepackage{textcomp}
\usepackage{marvosym}
\usepackage{wasysym}
\usepackage{amssymb}
\usepackage{hyperref}
\tolerance=1000
\date{\today}
\title{Org to \LaTeX}
\begin{document}

\maketitle
\tableofcontents
\section{Introduction}
\label{sec-1}
\subsection{section 1}
\label{sec-1-1}
\subsection{section 2}
\label{sec-1-2}
\subsection{subsection 1}
\label{sec-1-3}
hello world!
你好!
$$a^{2} + b^{2}$$
% Emacs 24.4.1 (Org mode 8.2.10)
\end{document}


效果如下图片:



从写法上看, org mode非常紧凑, LaTeX文件要麻烦的多. 这是因为导出时org已经自动为我们做了转换, 用户只需要关心写作的内容而非LaTeX烦人的细节.上面tex文件中package是org mode默认的, 用户可以根据自己的需求添加更改.你可以定制自己的LaTeX模板, 同样的org内容, 选择不同的模板就能得到不同格式的pdf文件, 实现内容与形式的分离. org mode还集成了GTD, 版本控制, 插入图片, 插入表格, 以及公式编辑和预览等功能, 写文档非常之方便.

定制LaTeX导出模板

有时我们需要定制自己的导出模板, org mode 也可以非常方便的做到.下面是几个常用的功能.

更改pdf引擎

org默认的pdf引擎是pdftex,我们将其更改为xeLaTeX. 后者处理中文的效果更好一些. 在
./emac.d/init.el
文件中加入如下的
lisp
语句:

;;xelatex                                                                                                             (setq org-latex-pdf-process '("xelatex -interaction nonstopmode %f"
"xelatex -interaction nonstopmode %f"))


该命令是将org mode的默认pdf引擎改为xelatex.

自定义模板

下面将建立一个自己的模板, 取名
org-article
需要在
./emac.d/init.el
中添加如下的语句:

;;org-export latex
(require 'ox-latex)
(add-to-list 'org-latex-classes
'("org-article"
"\\documentclass{article}
\\usepackage{graphicx}
\\usepackage{xcolor}
\\usepackage{xeCJK}
\\usepackage{fixltx2e}
\\usepackage{longtable}
\\usepackage{float}
\\usepackage{tikz}
\\usepackage{wrapfig}
\\usepackage{latexsym,amssymb,amsmath}
\\usepackage{textcomp}
\\usepackage{listings}
\\usepackage{marvosym}
\\usepackage{textcomp}
\\usepackage{latexsym}
\\usepackage{natbib}
\\usepackage{geometry}
[NO-DEFAULT-PACKAGES]
[PACKAGES]
[EXTRA]"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}")))


这里使用了16个个宏包, 也几乎是latex中最常用的宏包, 例如,
xeCJK
是对中文的支持,
tikz
是LaTeX下的绘图包,
listings
是对代码的支持.

注意到上述代码中的
[NO-DEFAULT-PACKAGES]
. 其含义的是不加载org默认的宏包, 只有上面代码给的这些宏包. 以上的这些宏包是基本够用,需要添加其他包在org文件中直接操作, 这个将会在后面讲解.

有了上述的配置, 下面重新用上面的例子测试:

#+LATEX_CLASS: org-article
#+TITLE: Org to \LaTeX * Introduction ** section 1 ** section 2 ** subsection 1 hello world! 你好! $$a^{2} + b^{2}$$


相比之前的例子, 增加了
#+LATEX_CLASS_OPTIONS: org-article
这一句, 意思是使用
org-article
这个配置. 现在重新 按
Ctrl
c
e
之后, 会弹出
export
的buffer, 提示用户选择导出类型, 按
l
表示导出LaTeX, 接着按
o
键表示导出pdf文件, 并且打开. 导出的LaTeX文件如下:



更多功能

上面已经实现了基本功能. 下面是如何在org文件里操作实现导出的控制.

如何添加宏包

当需要添加新的宏包时, 只需要在org文件上边添加
#+LATEX_HEADER:\uspackage{packagename}
. 例如:

#+LATEX_HEADER: \usepackage[colorlinks=true,linkcolor=red]{hyperref}
#+LATEX_CLASS: org-article
#+TITLE: Org to \LaTeX * Introduction ** section 1 ** section 2 ** subsection 1 hello world! 你好! $$a^{2} + b^{2}$$


上面的
#+LATEX_HEADER: \usepackage[colorlinks=true,linkcolor=red]{hyperref}
的含义是给目录添加索引并且使用红色. 效果如下图:



添加LaTeX环境

在LaTeX中, 需要各种各样的环境. 比如摘要, 公式, 表格和
4000
图片等. org可以直接在org文档里嵌入LaTeX代码实现. 所有以
#+begin_latex
开头, 以
#+end_latex
结尾的都会被默认成LaTeX代码. 例如, 希望在上面的里面加入摘要. 如下:

#+LATEX_HEADER: \usepackage[colorlinks=true,linkcolor=red]{hyperref}
#+LATEX_CLASS: org-article

#+TITLE: Org to \LaTeX
#+BEGIN_LaTeX
\begin{abstract}
This is an abstract with ordinary Org-mode markup.
\end{abstract}
#+END_LaTeX
* Introduction
** section 1
** section 2
** subsection 1
hello world!
你好!
$$a^{2} + b^{2}$$


则导出的文档如下:



同理, 表格, 数学公式和和图片也同样嵌入.

org导出选项

org可以根据需要控制导出格式的设置,比如有时不希望导出作者和邮件, 有时候不希望某部分导出. 这些都通过添加导出开关实现. 例如,

#+LATEX_CLASS: org-article
#+OPTIONS: H:3 author:nil c:nil date:nil email:nil |:t <:nil
#+OPTIONS: p:nil pri:nil tags:nil todo:nil timestamp:nil tasks:t
#+LATEX_HEADER: \usepackage[colorlinks=true,linkcolor=red]{hyperref}
#+TITLE: Org to \LaTeX
#+BEGIN_LaTeX
\begin{abstract}
This is an abstract with ordinary Org-mode markup.
\end{abstract}
#+END_LaTeX
* Introduction
** section 1                                                                    :noexport:
** section 2
** subsection 1
hello world!
你好!
$$a^{2} + b^{2}$$


上面设定使用a4纸张,
options
有如下含义

H:3只导出3级目录
author:nil不导出作者
date:nil不显示时间
email:nil不导出email
其他也是类似的选项. 注意到
section1
添加了
:export:
标签, 这样
section1
将不会导出. 所以最终pdf输出如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  latex emacs orgmode