如何使用 Emacs 创建 LaTeX 文档

本教程将引导您使用 GNU Emacs 创建 LaTeX 文档。LaTeX 是一种强大的开源排版系统。
277 位读者喜欢这篇文章。
document sending

Opensource.com

在他的优秀文章 LaTeX 文档创建入门 中,作者 Aaron Cocker 介绍了 LaTeX 排版系统,并解释了如何使用 TeXstudio 创建 LaTeX 文档。他还列出了许多用户在创建 LaTeX 文档时觉得有用的 LaTeX 编辑器。

文章中的这条评论 Greg Pittman 引起了我的注意:“刚开始使用 LaTeX 时,似乎需要输入大量内容……”。这是真的。LaTeX 涉及大量的输入和调试,如果您遗漏了像感叹号这样的特殊字符,这可能会让许多用户,特别是初学者感到沮丧。在本文中,我将向您介绍 GNU Emacs,并介绍如何使用它来创建 LaTeX 文档。

创建您的第一个文档

通过键入以下命令启动 Emacs

emacs -q --no-splash helloworld.org

-q 标志确保不会加载 Emacs 初始化。--no-splash-screen 标志可防止显示启动画面,以确保只有一个窗口打开,其中包含文件 helloworld.org

Emacs startup screen

GNU Emacs,helloworld.org 文件在一个缓冲区窗口中打开。

让我们以 Emacs 的方式添加一些 LaTeX 标头:转到菜单栏中的 Org,然后选择 导出/发布

template_flow.png

如何插入默认模板。

在下一个窗口中,Emacs 提供了导出或插入模板的选项。通过输入 # ([#] 插入模板) 插入模板。这将把光标移动到迷你缓冲区,提示符显示 Options category:。此时您可能不知道类别名称;按 Tab 键查看可能的补全。键入“default”并按 Enter。将插入以下内容

#+TITLE: helloworld
#+DATE: <2018-03-12 Mon>
#+AUTHOR:
#+EMAIL: makerpm@nubia
#+OPTIONS: ':nil *:t -:t ::t <:t H:3 \n:nil ^:t arch:headline
#+OPTIONS: author:t c:nil creator:comment d:(not "LOGBOOK") date:t
#+OPTIONS: e:t email:nil f:t inline:t num:t p:nil pri:nil stat:t
#+OPTIONS: tags:t tasks:t tex:t timestamp:t toc:t todo:t |:t
#+CREATOR: Emacs 25.3.1 (Org mode 8.2.10)
#+DESCRIPTION:
#+EXCLUDE_TAGS: noexport
#+KEYWORDS:
#+LANGUAGE: en
#+SELECT_TAGS: export

根据需要更改标题、日期、作者和电子邮件。我的看起来像这样

#+TITLE: Hello World! My first LaTeX document
#+DATE: \today
#+AUTHOR: Sachin Patil
#+EMAIL: psachin@redhat.com

我们现在不想创建目录,因此将 toc 的值从 t 更改为 nil 内联,如下所示

#+OPTIONS: tags:t tasks:t tex:t timestamp:t toc:nil todo:t |:t

让我们添加一个部分和段落。一个部分以星号 (*) 开头。我们将从 Aaron 的帖子(来自 Lipsum Lorem Ipsum 生成器)复制一些段落的内容

* Introduction

  \paragraph{}
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras lorem
  nisi, tincidunt tempus sem nec, elementum feugiat ipsum. Nulla in
  diam libero. Nunc tristique ex a nibh egestas sollicitudin.

  \paragraph{}
  Mauris efficitur vitae ex id egestas. Vestibulum ligula felis,
  pulvinar a posuere id, luctus vitae leo. Sed ac imperdiet orci, non
  elementum leo. Nullam molestie congue placerat. Phasellus tempor et
  libero maximus commodo.

helloworld_file.png

Helloworld.org 文件

有了内容后,我们将内容导出为 PDF。再次从 Org 菜单中选择 导出/发布,但这次,键入 l(导出到 LaTeX),然后键入 o(作为 PDF 文件并打开)。这不仅会打开 PDF 文件供您查看,还会将文件另存为 helloworld.pdf,与 helloworld.org 位于同一路径中。

org_to_pdf.png

将 helloworld.org 导出到 helloworld.pdf

org_and_pdf_file.png

在底部打开的 helloworld.pdf 文件

您还可以通过按 Alt + x,然后键入“org-latex-export-to-pdf”将 org 导出为 PDF。使用 Tab 键自动完成。

Emacs 还创建了 helloworld.tex 文件,以便您可以控制内容。

org_tex_pdf.png

Emacs,LaTeX、org 和 PDF 文件在三个不同的窗口中打开

您可以使用以下命令将 .tex 文件编译为 .pdf

pdflatex helloworld.tex

您还可以将 .org 文件导出为 HTML 或简单的文本文件。我喜欢 .org 文件的原因是它们可以被推送到 GitHub,在那里它们像任何其他 Markdown 格式一样呈现。

创建 LaTeX Beamer 演示文稿

让我们更进一步,使用相同的文件并进行一些修改来创建 LaTeX Beamer 演示文稿,如下所示

#+TITLE: LaTeX Beamer presentation
#+DATE: \today
#+AUTHOR: Sachin Patil
#+EMAIL: psachin@redhat.com
#+OPTIONS: ':nil *:t -:t ::t <:t H:3 \n:nil ^:t arch:headline
#+OPTIONS: author:t c:nil creator:comment d:(not "LOGBOOK") date:t
#+OPTIONS: e:t email:nil f:t inline:t num:t p:nil pri:nil stat:t
#+OPTIONS: tags:t tasks:t tex:t timestamp:t toc:nil todo:t |:t
#+CREATOR: Emacs 25.3.1 (Org mode 8.2.10)
#+DESCRIPTION:
#+EXCLUDE_TAGS: noexport
#+KEYWORDS:
#+LANGUAGE: en
#+SELECT_TAGS: export
#+LATEX_CLASS: beamer
#+BEAMER_THEME: Frankfurt
#+BEAMER_INNER_THEME: rounded


* Introduction
*** Programming
    - Python
    - Ruby

*** Paragraph one

    Lorem ipsum dolor sit amet, consectetur adipiscing
    elit. Cras lorem nisi, tincidunt tempus sem nec, elementum feugiat
    ipsum. Nulla in diam libero. Nunc tristique ex a nibh egestas
    sollicitudin.

*** Paragraph two

    Mauris efficitur vitae ex id egestas. Vestibulum
    ligula felis, pulvinar a posuere id, luctus vitae leo. Sed ac
    imperdiet orci, non elementum leo. Nullam molestie congue
    placerat. Phasellus tempor et libero maximus commodo.

* Thanks
*** Links
    - Link one
    - Link two

我们在标头中添加了另外三行

#+LATEX_CLASS: beamer
#+BEAMER_THEME: Frankfurt
#+BEAMER_INNER_THEME: rounded

要导出为 PDF,请按 Alt + x 并键入“org-beamer-export-to-pdf”。

latex_beamer_presentation.png

使用 Emacs 和 Org 模式创建的 Latex Beamer 演示文稿

我希望您喜欢使用 Emacs 创建此 LaTeX 和 Beamer 文档(请注意,使用键盘快捷键比鼠标更快)。Emacs Org-mode 提供的功能远不止我可以在这篇文章中介绍的内容;您可以在 orgmode.org 上了解更多信息。

标签
psachin
Sachin 热衷于自由和开源软件。 他是 GNU Emacs 的忠实用户,喜欢谈论和撰写关于开源、GNU/Linux、Git 和 Python 的文章。 他之前曾在 OpenStack、ManageIQ/CloudForms 和 Red Hat Insights 上工作过。 他还喜欢在业余时间探索 Swift 对象存储。 可以通过 IRC 与他联系,地址为 psachin@{Libera.Chat, Freenode, OFTC, gnome}。

14 条评论

这很有趣。 在 Scribus,我们至少在概念上正在努力转换当前的文档。 原本的想法是切换到 Markdown,但当我查找 Markdown 时,似乎主要的重点是从 Markdown 到 HTML。 Org-mode 似乎是一个有趣的替代方案。

感谢您的提及,我很高兴您喜欢这篇文章 :),这非常互惠,因为具有讽刺意味的是,我过去几个月才开始使用 Emacs,并且一直在寻找在 Emacs 中正确使用 LaTeX 的方法。

这需要一段时间才能掌握。
我在导出时遇到了一个问题,它告诉我它找不到 wrapfig.sty。
我如何确保我拥有所有需要的文件?

顺便说一句,我添加了 texlive-wrapfig,它解决了这个问题,但我认为我应该为了其他人的利益而提出我遇到的问题。

回复 by Greg P

大多数情况下,依赖项可以通过安装 texlive 来处理

```
sudo dnf install texlive
```
但有时它们必须单独安装。 我很高兴您通过查看错误解决了这个问题。

回复 by Greg P

我又来了。 现在我已经解决了 PDF 问题,我尝试导出到 HTML,这可以正常工作,尽管 \paragraph{} 出现在网页上。 此外,还有一个创建的验证链接(失败),但我不知道它来自哪里。

嗨 Greg,您可能想使用 html 模板而不是默认模板导出为 HTML。 不要使用“default”类别,而是使用“html”,这应该可以解决问题。

关于 \paragraph 和 \today,这些对于 html 导出无效(它们是 LaTeX 标签)。

以下是我用于 html 导出的内容

```
#+TITLE: Hello World! 我的第一个 LaTeX 文档
#+OPTIONS: html-link-use-abs-url:nil html-postamble:auto
#+OPTIONS: html-preamble:t html-scripts:t html-style:t
#+OPTIONS: html5-fancy:nil tex:t
#+CREATOR: Emacs 25.3.1 (Org mode 8.2.10)
#+HTML_CONTAINER: div
#+HTML_DOCTYPE: xhtml-strict
#+HTML_HEAD
#+HTML_HEAD_EXTRA
#+HTML_LINK_HOME
#+HTML_LINK_UP
#+HTML_MATHJAX
#+INFOJS_OPT
#+LATEX_HEADER
#+OPTIONS: tags:t tasks:t tex:t timestamp:t toc:nil todo:t |:t

* 简介

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras lorem
nisi, tincidunt tempus sem nec, elementum feugiat ipsum. Nulla in
diam libero. Nunc tristique ex a nibh egestas sollicitudin.

Mauris efficitur vitae ex id egestas. Vestibulum ligula felis,
pulvinar a posuere id, luctus vitae leo. Sed ac imperdiet orci, non
elementum leo. Nullam molestie congue placerat. Phasellus tempor et
libero maximus commodo.
```

回复 by Greg P

这几乎就像您需要创建一个通用文本文档,然后在之后粘贴设置(?)。 或者,也许编写一个 Perl 或 Python 脚本来将默认设置转换为 html(?)。 如果我要使用它,我可能不得不编写自己的文档,因为我发现的东西又厚又简洁——除非您想继续写关于这方面的内容……

回复 by Greg P

我应该提到,创建单独的文件以导出为 pdf 和 html 似乎是多余的,并且不符合 org-mode 的性质。 我通常每个导出都有一个文件!

不需要 OP 添加段落的方式,留下一个空行应该会自动执行 AFIK!。 即使您想添加仅在 Latex 中导出的内联 Latex 命令,也可以使用我记不住的选项,只需搜索“Latex export org mode”即可。

回复 by Greg P

正如我所说,在转换为 HTML 时,latex 标签“\today”的读取不如预期。 只需指定一个日期即可解决问题。

由于内容是从 Aaron 的帖子中复制的(只是想证明“它有效”),因此添加了“\paragraph”。

"...一个文件解决所有问题" 是最终情况,用户最终会理解这一点。 这只是个介绍,我希望保持简单。

回复 ,作者是 Justin Kaipada (未验证)

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.