> For the complete documentation index, see [llms.txt](https://ayakaleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ayakaleaf-pro.ayaka.space/latex/zh-cn/geng-duo-zhu-ti/08-choosing-a-latex-compiler.md).

# 选择 LaTeX 编译器

LaTeX 文档中的样式、内容和布局是通过以下方式定义的 *标签* 或 *命令* 在一个普通的 .tex 文件中，这个文件可用于生成文档的几种“人类可读”版本。生成最终输出最简单的方法是使用 [Overleaf](http://www.overleaf.com). Overleaf 提供了可直接使用的 LaTeX 发行版，只需点击“重新编译”按钮即可生成最终文档；如果你的情况正是如此，你可以跳过这篇文章。否则，如果你需要学习如何在计算机上编译文档，本文将介绍如何从 LaTeX 文件生成 PS、DVI 和 PDF 输出。

## 引言

LaTeX 文档是带有 .tex 扩展名的普通文档（参见 [在 LaTeX 中创建文档](/latex/zh-cn/latex-ji-chu/01-learn-latex-in-30-minutes.md) 文章中的示例），这个纯文本文件包含一些标记命令，用于格式化文档，但是，你究竟如何生成最终输出呢？这取决于你想要生成的文档类型。

假设你已保存文档并将文件命名为“mydocument.tex”。要创建一个 .PDF 文件，只需在系统终端中运行此命令。

`pdflatex mydocument.tex`

随后会出现一个名为“mydocument.pdf”的文件。

## TeX 发行版

能够编译 TeX 和 LaTeX 文档的一组程序称为 TeX 排版系统或 TeX 发行版。针对不同操作系统，有许多可用的 TeX 发行版：

* **MiKTeX** 适用于 Windows
* **TeX Live** 适用于 Linux 和其他类 UNIX 系统
* **MacTeX** macOS 版 TeX Live 的再发行版
* **teTeX** 适用于 Linux 和其他类 UNIX 系统；现在已不再积极维护
* **proTeXt** 基于 MiKTeX

当然，如果你不想经历安装 TeX 发行版的过程，你也可以使用像 [Overleaf](http://www.overleaf.com).

## LaTeX 编辑器

有许多专门用于 LaTeX 的高级文本编辑器，适用于最流行的操作系统，其中一些可以免费下载，而另一些是专有软件：

* 开源：AUCTEX、GNU TeXmacs、Gummi、Kile、LaTeXila、MeWa、TeXShop、TeXnicCenter、Texmaker、TeXstudio、TeXworks
* 免费软件：LEd、WinShell
* 专有/共享软件：Inlage、Scientific WorkPlace、WinEdt

还有一些通用编辑器可通过插件添加适合 LaTeX 的选项。例如，广为人知的 emacs 和 vim 都有 LaTeX 扩展，Atom、VS Code 和 Sublime Text 也有。

值得一提的是， [Overleaf](http://overleaf.com) 中的编辑器可以自定义为模拟 emacs 或 vim 的行为。它还 *可定制主题*，因此你可以选择与上述某些编辑器相同的语法高亮。你可以通过点击 Overleaf 项目中文件列表面板上方的 Overleaf 菜单图标来找到这些设置。

## 输出格式

所有 TeX 发行版都提供三种输出格式。要生成特定输出，必须在 *终端* （Linux 和 macOS）或 *命令提示符* （Windows）中运行命令来编译文档。

例如，如果你想编译一个名为“mydocument.tex”的文件，可以使用下面的任一命令：

**latex mydocument.tex**

这将创建“mydocument.dvi”，一个 DVI 文档

**pdflatex mydocument.tex**

这将生成“mydocument.pdf”，一个 PDF 文档

还有一些额外的命令可用于在不同格式之间转换，也支持 PS 图像。有关命令和输出格式的示意说明，请参见 [参考指南](#reference-guide) 。

下面提供了每种输出格式的说明：

* **（DVI）** 设备无关文件格式由二进制数据组成，用于描述文档的视觉布局，而不依赖于任何特定的图像格式、显示硬件或打印机。
* **（PS）** PostScript 文件格式描述页面上的文本和图形，并基于矢量图形。迄今为止，PostScript 一直是桌面出版领域的标准。
* **（PDF）** 便携式文档格式是一种基于 PostScript 的文件格式，用于以与应用软件、硬件和操作系统无关的方式表示文档。它如今已被广泛用作打印和网络分发的文件格式。

注意： *如今大多数编辑器都包含可快速访问的图标，用于编译为不同的输出格式，因此你不必真的在系统提示符中运行这些命令。*

在 Overleaf 中，最终编译输出始终是 PDF 文档。如果你需要从你的 Overleaf 项目中生成 DVI 文件，可以这样做：

1. 请确保你的项目中只使用 .eps 和 .ps 图像。
2. 点击 **Overleaf 菜单** 图标，在文件列表面板上方，并将 *编译器* 设置为“LaTeX”。
3. 重新编译你的项目。
4. 点击重新编译按钮旁边的“日志和输出文件”按钮。
5. 向右滚动到底部，然后点击“其他日志和输出文件”。
6. 这样你就应该能够下载生成的 .dvi 文件了。

![下载其他输出文件](/files/ad72153e2d0953da4c7c0f0d485a799d3d8eb64f)

## 其他编译器

其他可能的编译器设置有 pdfLaTeX（默认）、XeLaTeX 和 LuaLaTeX。通常你可以使用 pdfLaTeX，但选择哪种编译器取决于每个项目的需求。

* LaTeX 仅支持 .eps 和 .ps 图像格式用于 `\includegraphics`. 如果你项目中的所有图像都是 .eps 文件，那么建议使用此编译器设置。
* pdfLaTeX 支持 .png、.jpg、.pdf 图像格式。它会在编译过程中即时将 .eps 图像转换为 .pdf，这可能会延长所需的编译时间。（pdfLaTeX 可能无法 `pstricks` 在 Overleaf 上表现良好。）
* XeLaTeX 和 LuaLaTeX 都开箱即用地稳健支持 UTF-8，以及 Truetype 和 OpenType。因此，如果你需要在 Overleaf 上排版非拉丁文字脚本，并结合 `polyglossia` pacakge。它们也支持所有 .png、.jpg、.pdf *和* .eps 图像格式。
* XeLaTeX 支持 `pstricks`；但 LuaLaTeX 不支持。
* 你可以通过将 Lua 代码直接嵌入到文档中来扩展 LuaLaTeX 的功能。

## 编译带有交叉引用的文档

在某些情况下，当文档包含交叉引用时，你必须编译源文件两次。这样才能在目录、图像列表、定理引用编号等中包含正确的编号。

在第一次编译期间，LaTeX 编译器会写入 .aux 文件，以保存有关不同编号的信息；在第二次编译期间，编译器会读取这些信息，以便正确生成目录、参考文献等。

这个过程可以通过命令自动化 `latexmk`. 例如，要从“mydocument.tex”文件创建一个 pdf，只需运行

`latexmk -pdf mydocument.tex`

一次即可，即使文档中引用了图像和参考文献也是如此。你可以更改 *-pdf* 更改为 *-dvi* 来设置不同的文件类型。

## 参考指南

**LaTeX 编译文件流程**

![LaTeX 文件流程](/files/cc775e708e79cf6bfb7c407c91040f60b987f72a)

## 进一步阅读

* [在 LaTeX 中创建文档](/latex/zh-cn/latex-ji-chu/01-learn-latex-in-30-minutes.md)
* [在 Overleaf 中创建文档](/latex/zh-cn/zhi-shi-ku/031-creating-a-document-in-overleaf.md)
* [编译超时错误调试](/latex/zh-cn/zhi-shi-ku/038-fixing-and-preventing-compile-timeouts.md)
* [多文件 LaTeX 项目](/latex/zh-cn/wen-dang-jie-gou/08-multi-file-latex-projects.md)
* [LaTeX2ε 的不算太短的介绍](http://www.ctan.org/tex-archive/info/lshort/)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ayakaleaf-pro.ayaka.space/latex/zh-cn/geng-duo-zhu-ti/08-choosing-a-latex-compiler.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
