如何使用 Emacs 创建 LaTeX 文档

本教程将引导您完成使用 GNU Emacs 在 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 提供导出或插入模板的选项。通过输入 # ([#] 插入模板)来插入模板。这将把光标移动到迷你缓冲区,提示符显示 选项类别:。此时您可能不知道类别名称;按 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 模式提供的功能远不止我在这篇文章中介绍的;您可以在 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 模式似乎是一个有趣的替代方案。

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

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

顺便说一句,我添加了 texlive-wrapfig,它解决了这个问题,但我想我应该把遇到的问题提出来,以便其他人受益。

回复 作者:Greg P

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

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

回复 作者: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。
```

回复 作者:Greg P

这几乎就像您需要创建一个通用文本文档,然后在之后粘贴设置(?)。或者,也许编写一个 Perl 或 Python 脚本来将默认设置转换为 html(?)。如果我要使用它,我可能必须编写自己的文档,因为我在那里找到的文档既冗长又简洁——除非您想继续写关于这方面的文章....

回复 作者:Greg P

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

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

回复 作者:Greg P

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

添加“\paragraph”是因为内容是从 Aaron 的帖子中复制的(只是想演示“它有效”)

“...一个文件适用于所有”是最终情况,用户会随着时间的推移获得它。这是一个介绍,我想保持简单。

回复 作者:Justin Kaipada (未验证)

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.