latex.webp

1. 学术文档制备的范式转移:从字处理到排版编程

在学术界、出版界及高精尖技术文档领域,文档制备工具的选择远非简单的软件偏好问题,而是关乎信息架构、长期维护成本及知识呈现精度的根本性决策。长期以来,文档处理领域存在着两种截然不同的哲学:以 Microsoft Word 为代表的“所见即所得”(WYSIWYG - What You See Is What You Get)模式,以及以 LaTeX 为代表的“所见即所想”(WYSIWYM - What You See Is What You Mean)模式。本章将深入剖析这两种模式的内在逻辑,并论证为何 LaTeX 在特定领域仍具有不可替代的统治地位。

1.1 排版哲学的二元对立

“所见即所得”工具降低了文档创作的准入门槛。用户在屏幕上直接操作视觉元素,调整字体、间距和版式。然而,这种直观性在处理长篇复杂文档时往往转化为巨大的维护负担。研究表明,当文档长度超过 50 页,或包含大量交叉引用、数学公式及图表时,Word 的格式稳定性会显著下降。微小的局部调整(如插入一张图片)可能引发多米诺骨牌效应,导致整篇文档的排版错乱。

相比之下,LaTeX 采用了一种基于标记语言(Markup Language)的编程范式。用户编写的是包含内容与逻辑指令的纯文本源代码(.tex),通过编译器渲染生成最终的 PDF 文档。这种“内容与格式分离”的设计哲学带来了以下核心优势:

  • 逻辑结构优先: 作者只需定义“这是章节标题”、“这是参考文献”,具体的视觉呈现(如字号、字体、缩进)由预定义的文档类(Document Class)统一控制。这确保了即便是在数千页的巨著中,格式的一致性也能得到数学级的保证。
  • 排版算法的优越性: LaTeX 内置了极高精度的断行与断页算法(如 Knuth-Plass 算法),能够自动处理连字符、单词间距调整及孤行控制,其排版质量——尤其是数学公式的呈现——被公认为达到了印刷工业的最高标准。
  • 版本控制的兼容性: 由于源文件是纯文本,LaTeX 项目可以完美集成 Git 等版本控制系统,支持差异比对(Diff)、分支管理及多人协作开发,这在二进制格式的 Word 文档中是极难实现的。

1.2 成本收益分析与适用场景

选择 LaTeX 并非没有代价。其陡峭的学习曲线要求用户记忆指令、理解编译逻辑,并具备一定的调试能力。这种“先苦后甜”的特性决定了其适用人群的特殊性。

维度 Microsoft Word LaTeX
学习曲线 极低,即开即用 高,需掌握语法与编译逻辑
排版质量 依赖用户手动调整,易不一致 自动化,出版级精度
公式处理 鼠标点击或快捷键,效率较低 纯文本代码,极快且美观
参考文献 需插件(如 EndNote),易出错 BibTeX/BibLaTeX 自动管理,极其稳定
适用场景 商业信函、短篇报告、非技术文档 学术论文、博士学位论文、书籍、技术手册
协作模式 批注与修订(Track Changes) 实时云端协作(Overleaf)或 Git 版本控制

对于只需要撰写一两页简单商业信函的用户,Word 无疑是效率之选;但对于需要撰写包含数百个公式、引用上百篇文献的博士论文的研究者而言,LaTeX 的自动化特性所节省的时间成本将远远超过其初期的学习投入。

2. Overleaf :LaTeX 的云端进化

传统 LaTeX 工作流要求用户在本地计算机上安装庞大的 TeX 发行版(如 TeX Live, MiKTeX,体积常超 5GB)并配置编辑器。环境配置的复杂性(如宏包缺失、字体路径错误)曾是阻碍新手入门的最大障碍。Overleaf 平台的出现通过“云端容器化”技术彻底解决了这一痛点,将 LaTeX 转型为一种 SaaS(软件即服务)体验。

2.1 核心架构与功能特性

Overleaf 提供了一个基于浏览器的完整 LaTeX 开发环境,其核心价值主张在于消除环境差异与增强协作。

  • 零配置环境: 所有项目运行在 Overleaf 维护的云端服务器上,预装了 TeX Live 的完整宏包库。用户无需担心本地缺少某个宏包或编译器版本不兼容的问题。这种环境的一致性对于跨操作系统(Windows/macOS/Linux)的团队协作至关重要。
  • 实时协作(Real-time Collaboration): 类似于 Google Docs,Overleaf 支持多名用户同时编辑同一个.tex 文件。系统能够处理并发写入冲突,并提供即时的光标位置同步。这对于导师修改学生论文或多国学者共同撰写稿件是革命性的功能。
  • 所见即所想的实时预览: 虽然 LaTeX 本质是非 WYSIWYG 的,但 Overleaf 采用了双栏布局(左侧代码,右侧 PDF),并通过后台自动编译(Auto Compile)技术,实现了近似实时的预览效果,极大降低了新手对“盲写代码”的恐惧感。

2.2 账户分级与资源限制详解

为了维持服务器成本与服务质量,Overleaf 设置了严格的资源配额体系。理解这些限制对于选择合适的方案至关重要。

功能指标 免费版 (Free Plan) 标准版 (Standard) 专业版 (Professional)
项目总数 无限 (Unlimited) 无限 无限
受邀协作者 每项目 人 (仅限注册用户) 每项目0 人 无限
编译超时限制 60 秒 240 秒 240 秒
编译服务器性能 基础性能 优先分配高速服务器 优先分配高速服务器
版本历史 最近 24 小时 完整历史记录 完整历史记录
高级集成 GitHub, Dropbox, Mendeley, Zotero 包含所有集成
离线工作 仅下载 Zip 可通过 Git 同步到本地编辑 可通过 Git 同步到本地编辑

深度解析:

  1. 协作者限制的规避与风险: 免费版虽然限制“受邀协作者”(Email Invite)为 人,但用户可以通过开启“链接分享”(Link Sharing)功能,将编辑链接发送给多人。这种方式允许无限人数编辑,但安全性较低(任何持有链接者均可修改),且无法精确控制权限。
  2. 编译超时(Timeout)是硬伤: 免费版 60 秒的编译限制是最大的技术瓶颈。当文档包含大量高分辨率图片、复杂的 TikZ 矢量绘图或极其庞大的参考文献库时,编译过程极易超时导致失败。这是迫使重度用户升级付费版或转向本地编译的主要原因。
  3. 版本控制的重要性: 标准版提供的完整历史记录(Full Project History)和 Git 集成对于长期项目(如学位论文)至关重要,它允许用户回溯到数月前的任意版本,充当了“后悔药”的角色。

3. LaTeX 文档的解剖学结构

掌握 LaTeX 的关键在于理解其严格的文档结构。一个标准的 LaTeX 文件并非杂乱无章的文字堆砌,而是由具有特定功能的代码块组成的有机体。

3.1 宏观架构:导言区与正文区

每一个 LaTeX 文档在逻辑上都分为两个绝对独立的区域:

  1. 导言区(The Preamble):

    • 范围:\documentclass 开始,直到 \begin{document} 之前。
    • 功能: 这是文档的“控制中心”。在这里,作者定义文档的整体类型(如文章、书、幻灯片)、页面尺寸、页边距、加载功能扩展包(Packages)以及定义自定义命令。导言区的内容绝不会直接出现在最终的 PDF 页面上,但它决定了页面呈现的一切规则。
    • 典型代码:
    \documentclass[12pt, a4paper]{article} % 设定文档类、字号、纸张
    \usepackage[utf8]{inputenc}          % 设定输入编码
    \usepackage{graphicx}                % 加载图片支持
    \title{文档标题}                      % 设定元数据
    
  2. 正文区(The Body):

    • 范围: 被包裹在 \begin{document}\end{document} 之间的部分。
    • 功能: 这是文档的“内容容器”。所有的文字、公式、图表代码都必须放置于此。任何写在 \end{document} 之后的内容都会被编译器无视。

3.2 语法基石:命令与环境

LaTeX 的语法由两个基本单元构成:命令(Commands)和环境(Environments)。

  • 命令(Commands): 以反斜杠 \ 开头,后跟命令名称。命令可以接受参数。
    • 必需参数: 用花括号 {} 包裹。例如 \textbf{加粗},必须告诉 LaTeX 加粗什么内容。
    • 可选参数: 用方括号 [] 包裹,通常位于命令名和必需参数之间。例如 \documentclass[12pt]{article},其中 12pt 是可选的,若不写则默认 10pt
    • 无参命令:\newpage(换页)、\today(今日日期),直接执行动作或插入特定内容。
  • 环境(Environments): 用于处理具有特定格式的大段内容。所有环境都必须成对出现。
    • 语法: \begin{name}... \end{name}
    • 示例: equation 环境用于公式,itemize 环境用于列表,center 环境用于居中对齐。
    • 嵌套规则: 环境可以嵌套,但必须像洋葱皮一样严格对应,不能交叉。例如 \begin{A} \begin{B}... \end{B} \end{A} 是合法的,而 \begin{A} \begin{B}... \end{A} \end{B} 将导致致命编译错误。

3.3 文档类的选择策略

\documentclass 是文档的第一行代码,它决定了整个文件的排版骨架。

文档类 (Class) 适用场景 结构特征 备注
article 期刊论文、短篇报告、作业 最高层级为 \section 无章节(Chapter)概念,紧凑排版
report 硕士/博士学位论文、长篇技术报告 最高层级为 \chapter 默认单面打印,章节起始页换页
book 出版书籍 包含 \part\chapter 默认双面打印,奇偶页页眉不同
beamer 学术演讲幻灯片 基于 frame环境 替代 PowerPoint,支持动态覆盖
ctexart/ctexbook 中文文档 预设中文支持 针对中文排版优化的 article/book 变体

4. 文本格式化与页面布局

虽然 LaTeX 提倡结构化写作,但在实际撰写中,作者仍需对文本进行精细的格式控制。

4.1 字体样式与字号控制

LaTeX 提供了语义化和视觉化两套字体控制命令。推荐使用语义化命令,以便于全局样式的统一修改。

  • 字重与样式:
    • 加粗: \textbf{text} (Text Bold Face)
    • 斜体: \textit{text} (Text Italic)。注意:在中文排版中,由于汉字斜体视觉效果不佳,通常使用 \emph{text} ,在 ctex 宏包下默认渲染为楷体以示强调。
    • 下划线: \underline{text}
    • 等宽字体: \texttt{text} (Typewriter),常用于排版代码片段或文件名。
    • 小型大写字母: \textsc{text} (Small Caps),常用于人名或首字母缩写。
  • 字号调整:LaTeX 的字号是相对的。在 documentclass[12pt]{article} 中设定了基准字号为2pt 后,以下命令会基于基准按比例缩放:
    \tiny < \scriptsize < \footnotesize < \small < \normalsize (基准) < \large < \Large < \LARGE < \huge < \Huge2

4.2 列表系统的构建

结构化的列表是技术文档的基石。LaTeX 原生支持三种列表模式,均支持多层嵌套。

  1. 无序列表 (Unordered List):使用 itemize 环境。默认符号为圆点(bullet),第二层为破折号。
    \begin{itemize}
        \item 核心论点一
        \item 核心论点二
    \end{itemize}
    
  2. 有序列表 (Ordered List):使用 enumerate 环境。默认生成., 2., 3. 编号。进阶技巧: 通过加载 usepackage{enumitem},可以轻松自定义编号格式。例如 begin{enumerate}[label=(alph*)] 将生成 (a), (b), (c) 格式的编号,这在编写试卷选择题时极其实用。
  3. 描述列表 (Description List):使用 description 环境,用于名词解释或定义。
    \begin{description}
        \item[编译器] 将源代码转换为可执行文件的程序。
        \item[解释器] 直接执行源代码的程序。
    \end{description}
    

4.3 特殊字符的转义处理

LaTeX 预留了若干字符作为指令标记,如果需要在正文中直接显示这些字符,必须使用反斜杠进行转义(Escape)。

特殊字符 LaTeX 功能含义 正文输出代码
% 注释引导符 \%
$ 数学模式界定符 \$
& 表格列分隔符 \&
_ 数学下标 \_
{ } 参数界定符 \{ \}
# 宏参数 \#
\ 命令引导符 \textbackslash
^ 数学上标 \textasciicircum
~ 不可断行空格 \textasciitilde

5. 数学排版:理工科的核心生产力

数学公式排版是 LaTeX 的灵魂。其基于逻辑描述的输入方式,使得作者可以像书写代码一样构建复杂的数学结构,而无需像在 Word 中那样频繁点击鼠标寻找符号。

5.1 数学模式的两种形态

LaTeX 严格区分文本模式(Text Mode)与数学模式(Math Mode)。任何数学符号必须进入数学模式才能被正确渲染。

  1. 行内公式 (Inline Mode):
    • 场景: 公式嵌入在段落文字流中,与正文混排。
    • 语法: 使用一对美元符号 $... $\(... \)
    • 排版特征: 也就是“压缩模式”。为了不破坏行间距,巨算符(如求和 \sum、积分 \int)的上下限会被移动到符号右侧,分式 \frac 的字号会被强制缩小。
    • 示例: 根据 $E=mc^2$ 可知...
  2. 行间公式 (Display Mode):
    • 场景: 公式独占一行,居中显示,用于强调重要推导。
    • 语法:
      • 无编号:\[... \]\begin{equation*}... \end{equation*}
      • 自动编号:\begin{equation}... \end{equation}
    • 排版特征: 符号完全展开,积分号和求和号的上下限垂直居中,分式保持正常大小,视觉冲击力强。

5.2 核心数学符号表详解

进行数学排版前,务必在导言区加载美国数学会提供的宏包:\usepackage{amsmath}\usepackage{amssymb}

5.2.1 希腊字母与重音

符号 代码 符号 代码 符号 代码
​\alpha \alpha ​\theta \theta ​\Phi \Phi
​\beta \beta ​\lambda \lambda ​\Psi \Psi
​\gamma \gamma ​\pi \pi ​\Omega \Omega
​\Delta \Delta ​\sigma \sigma ​\partial \partial

(注意:大写希腊字母通常只需将命令首字母大写,如 \Gamma。小写命令首字母大写无效的,通常是因为该字母与拉丁字母同形,如大写 Alpha 就是 A)

5.2.2 常用运算符与关系符

类别 符号 代码 说明
基础运算 ​\times \times 乘号(非字母 x)
​\div \div 除号
​\pm \pm 加减号
集合论 ​\in \in 属于
​\cup \cup 并集
​\cap \cap 交集
​\subset \subset 子集
逻辑与关系 ​\neq \neq 不等于
​\leq \leq 小于等于
​\geq \geq 大于等于
​\forall \forall 任意
​\exists \exists 存在
​\rightarrow \rightarrow 推出/右箭头

5.2.3 复杂结构:上下标、分式与根号

  • 上标与下标: 使用 ^_
    • 单个字符:x^2
    • 多个字符(必须用花括号包裹):x^{2\alpha}a_{i,j}初学者常犯错误是写成 x^2\alpha ,导致 alpha 掉下来变成普通乘法。
  • 分式: \frac{分子}{分母}
    • 嵌套分式:\frac{a}{\frac{b}{c}}
  • 根号: \sqrt{x}
    • n 次根:\sqrt[n]{x}

5.3 矩阵与多行公式对齐

矩阵排版:

使用 amsmath 包提供的专用环境,无需手动画格子。

  • pmatrix: 圆括号矩阵​\begin{pmatrix} a & b \\ c & d \end{pmatrix}
  • bmatrix: 方括号矩阵​\begin{bmatrix} a & b \\ c & d \end{bmatrix}
  • vmatrix: 行列式(竖线)​\begin{vmatrix} a & b \\ c & d \end{vmatrix}

代码段

A = \begin{bmatrix}
    & x & x^2 \\
    & y & y^2 \\
    & z & z^2
\end{bmatrix}

语法要点: & 分隔列,\\ 分隔行。

多行对齐(Alignment):

推导公式时,需要等号对齐。严禁使用空格强行对齐!应使用 align 环境。

代码段

\begin{align}
    f(x) &= (x+a)(x+b) \label{eq:step1} \\
         &= x^2 + (a+b)x + ab \label{eq:step2}
\end{align}

解析: & 符号放在等号之前,表示对齐锚点。每行末尾用 \\ 换行。align 环境默认给每一行都编号。若某一行不需要编号,在行末添加 \notag 指令。若所有行都不需要编号,使用 align* 环境。

6. 图形元素与浮动体机制

在 Word 中,图片被视为字符,随光标移动。而在 LaTeX 中,图片和表格被设计为“浮动体”(Floats)。这是一种智能排版机制:用户只提供内容,而 LaTeX 引擎根据页面剩余空间、美学规则(如避免页面仅剩一行文字)自动决定将图表放置在当前页顶部、底部或单独一页。

6.1 插入图片的标准流程

要在文档中插入图片,必须在导言区加载 \usepackage{graphicx}

代码段

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.8\textwidth]{images/result_graph.png}
    \caption{实验结果对比图}
    \label{fig:results}
\end{figure}

代码详解:

  1. \begin{figure}[...] :声明这是一个浮动体环境。
  2. 位置参数 [htbp] :这是给 LaTeX 的建议列表,按优先级排序:
    • h (here): 尽量放在代码所在位置。
    • t (top): 页面顶部。
    • b (bottom): 页面底部。
    • p (page): 单独一页存放浮动体。
    • ! (override): 忽略部分内置的美学参数(如“单页图片占比上限”),强制尝试放置。常用组合为 [h!] [htbp]
  3. \centering:使图片居中,否则默认左对齐。
  4. \includegraphics[options]{filename} :核心指令。
    • width=0.8\textwidth强烈推荐使用相对宽度而非绝对单位(如 5cm)。这意味着图片宽度永远占据文本版心宽度的 80%,无论纸张大小如何变化,图片比例始终协调。
  5. \caption{...} :自动生成图注(如“图:实验结果...”)。
  6. \label{...} :生成内部索引锚点,用于交叉引用。注意:Label 必须放在 Caption 之后,否则引用编号会出错

6.2 子图排版 (Subfigures)

科研论文常需要将多张小图并排展示(如 (a) 图,(b) 图)。现代 LaTeX 推荐使用 subcaption 宏包(即 subfigures 环境)。

代码段

\usepackage{subcaption}...
​
\begin{figure}[h!]
    \centering
    \begin{subfigure}[b]{0.45\textwidth}
        \includegraphics[width=\textwidth]{img_a.png}
        \caption{条件 A}
    \end{subfigure}
    \hfill  % 弹性空格,将两图推向两侧
    \begin{subfigure}[b]{0.45\textwidth}
        \includegraphics[width=\textwidth]{img_b.png}
        \caption{条件 B}
    \end{subfigure}
    \caption{不同条件下的微观结构对比}
\end{figure}

7. 表格数据的表达

表格是 LaTeX 中最令初学者头痛的部分,因为其语法繁琐且不够直观。但一旦掌握,其生成的表格(尤其是学术三线表)具有极高的专业度。

7.1 基础表格语法

最基本的表格由 tabular 环境构建。

代码段

\begin{table}[t]
    \centering
    \caption{基础数据表}
    \begin{tabular}{|l|c|r|} % 列格式定义
        \hline
        姓名 & 年龄 & 分数 \\ \hline
        Alice & 24 & 95 \\
        Bob & 22 & 88 \\ \hline
    \end{tabular}
\end{table}

列格式说明:

  • l: 左对齐 (Left)
  • c: 居中 (Center)
  • r: 右对齐 (Right)
  • |: 竖线边框。注:现代排版审美极力反对在表格中使用竖线

7.2 专业三线表 (Booktabs)

学术出版界普遍认为,竖线会割裂数据的横向阅读流。因此,推荐使用 booktabs 宏包制作“三线表”。

代码段

\usepackage{booktabs}...

\begin{table}[h]
    \centering
    \begin{tabular}{lcc}
        \toprule  % 粗顶线
        模型 & 准确率 (\%) & 召回率 (\%) \\
        \midrule  % 细中线
        SVM & 85.2 & 78.4 \\
        ResNet & 92.1 & 89.5 \\
        \bottomrule % 粗底线
    \end{tabular}
\end{table}

这种表格仅在头部和底部有粗线,中间有细分隔线,不仅美观,而且不仅数据层次分明 。

7.3 复杂表格与工具推荐

对于包含合并单元格(\multirow, \multicolumn)的复杂表格,手写代码极易出错。强烈建议使用 TablesGenerator (https://www.tablesgenerator.com/)。这是一个在线可视化编辑器,用户像在 Excel 中一样操作表格,然后一键复制生成的 LaTeX 代码到 Overleaf 中。

8. 参考文献与引用管理

手动管理参考文献是论文写作的噩梦:格式繁多(APA, IEEE, MLA)、排序复杂、修改困难。LaTeX 通过建立独立的文献数据库,彻底自动化了这一过程。

8.1 数据库构建:BibTeX 文件

用户需创建一个扩展名为 .bib 的纯文本文件(如 ref.bib),其中存储了文献的元数据。

代码段

@article{vaswani2017attention,
  title={Attention is all you need},
  author={Vaswani, Ashish and others},
  journal={Advances in neural information processing systems},
  volume={30},
  year={2017}
}

@book{knuth1984texbook,
  title={The TeXbook},
  author={Knuth, Donald Ervin},
  year={1984},
  publisher={Addison-Wesley}
}

提示: 几乎所有学术数据库(Google Scholar, IEEE Xplore, Web of Science)都提供 "Export to BibTeX" 功能,直接复制即可。

8.2 BibTeX 与 BibLaTeX 的技术抉择

目前存在两种主流的引用处理后端:

  1. BibTeX (传统标准):

    • 优点: 兼容性极好,所有老牌期刊模板都支持。
    • 缺点: 对非拉丁字符(如中文作者名)支持差,样式定制极难(需编程逆波兰表达式)。
    • 用法:
      \bibliographystyle{plain} % 设定样式
      \bibliography{ref}        % 导入 ref.bib
      
    • 引用命令: \cite{key}
  2. BibLaTeX (现代推荐):

    • 优点: 原生支持 UTF-8(完美处理中文文献),样式定制简单,功能极其强大(支持多套参考文献、按章节引用)。
    • 缺点: 部分老旧期刊投稿系统可能不支持。
    • 用法:
    \usepackage[style=ieee, backend=biber]{biblatex}
    \addbibresource{ref.bib}
    ...
    \printbibliography % 在需要打印参考文献的地方
    
    • 建议: 在 Overleaf 上从零开始写论文时,首选 BibLaTeX

9. 本地化与中文排版解决方案

早期的 LaTeX 中文支持极其繁琐(需要 CJK 宏包和字体生成)。得益于 ctex 宏集和 XeLaTeX 引擎的普及,现在在 Overleaf 上撰写中文文档已变得轻而易举。

9.1 标准中文配置方案

要在 Overleaf 上完美编译中文,必须遵循“引擎+宏包”的双重配置:

  1. 设置编译器 (Compiler):在 Overleaf 项目页面的左上角 "Menu" -> "Settings" -> "Compiler" 中,必须选择 XeLaTeX。原因: 传统的 pdfLaTeX 不支持 UTF-8 字符集,而 XeLaTeX 直接支持 Unicode 和调用系统字体,是处理中日韩文字的标准引擎3。

  2. 使用 ctex 宏包或文档类:

    • 方案 A (推荐 - 整体接管): 直接使用 ctexart (对应 article), ctexrep (对应 report), ctexbook (对应 book) 文档类。代码段

      \documentclass{ctexart}
      \begin{document}
      你好,LaTeX!这里可以无缝混排 English。
      \end{document}
      

      优势: 自动将 "Abstract" 翻译为 "摘要","Table of Contents" 翻译为 "目录",并预设了符合中文排版习惯的行距和首行缩进 。

    • 方案 B (插件模式): 如果必须使用期刊提供的特定英文模板(如 IEEEtran),则加载 ctex 宏包。

    \documentclass{IEEEtran}
    \usepackage{ctex}
    \begin{document}
    

9.2 字体配置与繁体支持

Overleaf 的服务器基于 Linux,并没有预装 Windows 的“宋体/黑体”。ctex 宏包会自动调用服务器上开源的 Fandol 字体系列(FandolSong, FandolHei)。

如果需要繁体中文或特定字体,可以使用 xeCJK 宏包进行底层配置:

代码段

\usepackage{xeCJK}
\setCJKmainfont{Noto Serif CJK SC} % 设置谷歌开源宋体
\setCJKsansfont{Noto Sans CJK SC}  % 设置谷歌开源黑体

一个爱学习,爱拍照,爱记录的人