> For the complete documentation index, see [llms.txt](https://overleaf-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://overleaf-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 发行版，只需点击“Recompile”按钮即可生成最终文档；如果你是这种情况，可以跳过本文。否则，如果你需要学习如何在电脑上编译文档，本文将介绍如何从 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. 点击 Recompile 按钮旁边的“Logs and output files”按钮。
5. 向右滚动到底部，然后点击“Other logs and output files”。
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` 包使用，推荐它们。它们也支持所有 .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://overleaf-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.
