PhysChen.com
主页
物理
笔记 科普 研究
教学
IB 课程
编程
笔记 项目
随笔
所感 所思
摄影
Shenzhen Portrait Cats Others Wuhan Japan
关于
主页
物理
笔记 科普 研究
编程
笔记 项目
摄影
Shenzhen Portrait Cats Others Wuhan Japan
教学
IB 课程
随笔
所感 所思
关于
文章目录
    LaTeX\LaTeXLATE​X 入门指南:基础模板、常用技巧与问题排查 陈华的个人主页

    文章信息

    • 标题: LaTeX\LaTeXLATE​X 入门指南:基础模板、常用技巧与问题排查
    • 发布时间: 2026 年 7 月 14 日
    • 最近更新: 2026 年 7 月 16 日
    • 来源: https://physchen.com/zh-Hans/programming/notes/latex-common-commands/
    • 摘要: 面向初学者的 LaTeX 入门与实践指南,系统介绍安装与编译环境、基础模板、数学公式、图表、交叉引用、参考文献、自定义命令和常见问题排查。

    目录

      LaTeX\LaTeXLATE​X 入门指南:基础模板、常用技巧与问题排查

      发布于 2026 年 7 月 14 日 更新于 2026 年 7 月 16 日
      • LaTeX
      • Typesetting

      在 AI 辅助写作逐渐普及之后⁠,我们不必先记住大量命令⁠,才能完成一份像样的文档⁠。但如果完全不了解 LaTeX\LaTeXLATE​X 的基本结构⁠,就很难判断生成的代码是否合理⁠,也不容易在编译出错时定位问题⁠。对初学者而言⁠,更实际的目标不是“⁠背会 LaTeX\LaTeXLATE​X⁠”⁠,而是先理解它能做什么⁠、文档由哪些部分组成⁠,以及遇到具体需求时应该去哪里查找解决方案⁠。

      本文首先帮助第一次接触 LaTeX\LaTeXLATE​X 的读者建立一套基础而完整的认识⁠,然后给出一份可以继续扩展的基础模板⁠,并围绕模板中的文档类⁠、宏包⁠、公式⁠、图表⁠、交叉引用和参考文献逐项说明⁠。后续章节则补充模板中没有直接展示的文本与数学语法⁠、自定义命令⁠、项目组织方式和常见问题排查方法⁠。

      若希望进行更系统的学习⁠,推荐阅读《⁠一份(⁠不太⁠)简短的 LaTeX,2ε\LaTeX,2\varepsilonLATE​X,2ε 介绍⁠》⁠。它对文档结构⁠、数学公式⁠、图表和参考文献等主题都有较为完整的介绍⁠。

      先认识 LaTeX\LaTeXLATE​X

      LaTeX\LaTeXLATE​X 不是所见即所得的文字处理器⁠,而是一套运行在 TeX 引擎之上的文档准备与排版系统⁠。我们在 .tex 源文件中写入正文⁠、文档结构和排版命令⁠,再通过 XeLaTeX⁠、LuaLaTeX 等编译程序生成 PDF 文档⁠。

      除了排版完整文档⁠,LaTeX\LaTeXLATE​X 也可以用于单独制作数学公式⁠、示意图和其他排版元素⁠。例如⁠,可以使用 standalone 文档类⁠,将一段公式或 TikZ 绘图编译为边界紧凑的独立 PDF⁠,再借助 dvisvgm 或 Inkscape 转换为 SVG 等格式⁠。若需要在 Markdown⁠、HTML⁠、LaTeX 和 Word 等文档格式之间进行转换⁠,则可以使用 Pandoc⁠。

      LaTeX\LaTeXLATE​X 尤其适合以下内容⁠:

      • 数学公式较多的作业⁠、讲义⁠、论文和书籍⁠;
      • 需要统一管理章节⁠、编号⁠、目录和交叉引用的长文档⁠;
      • 需要规范管理参考文献的学术写作⁠;
      • 需要绘制数学图形⁠、物理示意图或科研图表的文档⁠;
      • 希望将内容与版式分离⁠,以便长期维护和复用的项目⁠。

      LaTeX\LaTeXLATE​X 的基本工作流程

      一份典型的 LaTeX\LaTeXLATE​X 文档需要经历以下过程⁠:

      LaTeX 源文件  ⟹  编译  ⟹  PDF 文档\text{$\LaTeX$ 源文件}\implies \text{编译}\implies \text{PDF 文档}LATE​X 源文件⟹编译⟹PDF 文档

      LaTeX\LaTeXLATE​X 文档通常包含文档类⁠、导言区和正文三个主要部分⁠。理解这一结构⁠,还需要认识文档类⁠、宏包⁠、命令和环境四个基本概念⁠:

      概念作用示例
      文档类决定文档的基本类型和整体结构article⁠、book⁠、ctexart
      宏包为文档增加额外功能amsmath⁠、graphicx⁠、hyperref
      命令对内容执行排版或结构操作\section{}⁠、\textbf{}
      环境包围一段具有共同结构的内容equation⁠、figure⁠、table

      命令通常以反斜杠开头⁠。必选参数写在花括号中⁠,可选参数写在方括号中⁠。例如⁠,下面的命令将图片宽度设置为正文宽度的 80%⁠:

      \includegraphics[width=0.8\textwidth]{figure.pdf}

      了解文档的基本构成后⁠,可以在项目文件夹中创建源文件 main.tex⁠,并写入以下最小示例⁠:

      \documentclass{article} % 文档类
      
      % 导言区:加载宏包、设置格式、定义命令
      
      \begin{document}
      
      Hello, \LaTeX! % 正文
      
      \end{document}

      像 \LaTeX 这样的控制词会忽略紧随其后的普通空格⁠。写成 \LaTeX{} 可以利用空组明确结束命令⁠,从而在其后正常输入需要保留的空格⁠。

      保存文档后⁠,需要将源文件编译为 PDF⁠。为便于表述⁠,本文会将 xelatex⁠、lualatex 等程序统称为“⁠编译命令⁠”⁠。更严格地说⁠,它们是以不同 TeX 引擎运行 LaTeX\LaTeXLATE​X 格式的命令行程序⁠。

      打开终端⁠,将路径切换到源文件所在目录⁠,然后运行⁠:

      xelatex main.tex

      若未另行指定输出目录⁠,编译成功后通常会在当前目录生成 main.pdf⁠。此外还可能生成 .aux⁠、.log⁠、.out⁠、.toc 等辅助文件⁠,用于保存交叉引用⁠、目录⁠、PDF 书签和编译信息⁠,通常不需要手动编辑⁠。

      选择 TeX 发行版或在线环境

      LaTeX\LaTeXLATE​X 的实际使用依赖编译引擎⁠、宏包⁠、字体和辅助工具⁠。一般不需要逐个安装这些组件⁠,而是安装一个完整的 TeX 发行版⁠,或者使用在线编译环境⁠。

      使用环境推荐方案说明
      WindowsTeX Live 或 MiKTeXTeX Live 提供较完整⁠、统一的环境⁠;MiKTeX 支持按需安装宏包
      macOSMacTeX基于 TeX Live⁠,并附带适用于 macOS 的图形界面工具
      LinuxTeX Live可以通过系统包管理器或官方安装程序安装
      在线使用Overleaf在浏览器中编辑和编译⁠,无须配置本地 TeX 环境

      对于需要长期写作⁠、使用较多数学和绘图宏包的用户⁠,通常建议安装较完整的 TeX Live 或 MacTeX⁠。精简安装虽然占用空间较小⁠,但后续可能需要频繁补装宏包⁠。

      Windows

      Windows 用户可以选择 TeX Live 或 MiKTeX⁠。安装完成后⁠,在命令提示符或 PowerShell 中运行⁠:

      xelatex --version

      如果能够显示版本信息⁠,说明 xelatex 已经可以被系统调用⁠。

      macOS

      macOS 用户通常安装 MacTeX⁠。安装完成后⁠,可以在终端运行⁠:

      xelatex --version

      MacTeX 基于 TeX Live⁠,并附带 TeXShop 等适用于 macOS 的图形界面工具⁠。

      Linux

      不同发行版的软件包名称有所不同⁠。以 Debian 或 Ubuntu 为例⁠,可以安装较完整的 TeX Live⁠:

      sudo apt update
      sudo apt install texlive-full

      texlive-full 包含大多数常用宏包⁠,但占用空间较大⁠。若只进行基础写作⁠,也可以根据实际需要选择更精简的软件包组合⁠。

      选择编辑器与编译方式

      TeX 发行版负责提供编译引擎⁠、宏包和辅助工具⁠,而编写 .tex 源文件通常需要文本编辑器或专用的 LaTeX\LaTeXLATE​X 编辑器⁠。许多编辑器还集成了编译⁠、PDF 预览⁠、错误定位和正反向搜索等功能⁠。

      常见的编辑器包括⁠:

      • TeXstudio⁠:功能完整⁠,适合初学者和传统桌面工作流⁠;
      • TeXworks⁠:界面简洁⁠,适合基础编辑和编译⁠;
      • Visual Studio Code⁠:配合 LaTeX Workshop 扩展使用⁠,适合同时进行写作⁠、编程和版本管理⁠;
      • Overleaf⁠:在线协作方便⁠,不需要配置本地编译环境⁠。

      常见的 LaTeX\LaTeXLATE​X 编译命令如下⁠:

      命令特点适用场景
      pdflatex传统且稳定⁠,但对 Unicode⁠、中文和系统字体支持有限纯英文文档或传统模板
      xelatex直接支持 Unicode 和系统字体⁠,中文配置方便中文文档⁠、多语言文档
      lualatex支持 Unicode 和现代字体⁠,扩展能力较强中文文档⁠、复杂排版和可编程排版
      latex传统上生成 DVI 文件⁠,而不是直接生成 PDFDVI/PostScript 工作流

      本文示例默认使用 xelatex⁠。对于包含中文的普通文档⁠,XeLaTeX 通常是较容易配置的选择⁠。

      无论使用哪一种编辑器⁠,至少应确认以下设置⁠:源文件采用 UTF-8 编码⁠;项目使用正确的编译命令⁠;编辑器能够调用已经安装的 TeX 发行版⁠;编译后可以正常预览 PDF⁠;必要时能够从源代码定位到 PDF⁠,或从 PDF 反向定位到源代码⁠。若使用了 fontspec 宏包或系统字体配置⁠,却误用 pdfLaTeX 编译⁠,通常会出现宏包报错⁠、字体配置失败或中文无法正常显示等问题⁠。

      Visual Studio Code 的基础配置

      若使用 Visual Studio Code⁠,推荐安装 LaTeX Workshop 扩展⁠,并在项目的 .vscode/settings.json 中加入以下基础配置⁠:

      {
        "latex-workshop.latex.tools": [
          {
            "name": "xelatex",
            "command": "xelatex",
            "args": [
              "-synctex=1",
              "-interaction=nonstopmode",
              "-file-line-error",
              "%DOC%"
            ]
          }
        ],
        "latex-workshop.latex.recipes": [
          {
            "name": "xelatex",
            "tools": [
              "xelatex"
            ]
          }
        ],
        "latex-workshop.latex.recipe.default": "first",
        "latex-workshop.latex.autoBuild.run": "onSave",
        "latex-workshop.view.pdf.viewer": "tab",
        "files.encoding": "utf8"
      }

      其中⁠,-synctex=1 启用源代码与 PDF 之间的正向和反向定位⁠;-interaction=nonstopmode 允许编译器在遇到错误时继续处理⁠,以输出更完整的日志⁠;-file-line-error 使错误信息包含源文件名和行号⁠;%DOC% 表示当前正在编译的 .tex 文件⁠。其余设置分别指定默认构建方案⁠、保存时自动构建⁠、在 Visual Studio Code 标签页中预览 PDF⁠,以及使用 UTF-8 文件编码⁠。

      这条 recipe 每次只运行一次 xelatex⁠,适合简单示例⁠。目录⁠、交叉引用或参考文献尚未更新时⁠,需要再次编译⁠,或者改用 latexmk 自动完成所需的多轮构建⁠。

      使用 latexmk 自动编译

      部分文档需要多次运行 xelatex⁠,或者还需要调用 BibTeX⁠、Biber 等工具⁠。此时可以使用 latexmk 自动判断所需的编译步骤⁠:

      latexmk -xelatex main.tex

      latexmk 会检查辅助文件和依赖关系⁠,并重复调用相应工具⁠,直到交叉引用⁠、目录和参考文献达到稳定状态⁠,或者检测到无法继续处理的错误⁠。清理普通辅助文件可以使用 latexmk -c⁠;若还需要删除生成的 PDF⁠,则可以使用 latexmk -C⁠。

      latexmk -c
      latexmk -C

      对于长期维护的项目⁠,latexmk 通常比手动重复运行编译命令更方便⁠。如果在 Windows 上使用 MiKTeX⁠,并出现无法启动 latexmk 或缺少 Perl 的错误⁠,可以暂时改用直接调用 xelatex 的构建方案⁠,或者另行配置可用的 Perl 环境⁠。

      推荐的项目结构

      简单项目可以只包含一个 .tex 文件⁠:

      latex-demo/
      └── main.tex

      稍复杂的项目建议将主文件⁠、参考文献⁠、图片⁠、章节和编辑器配置分别存放⁠:

      latex-project/
      ├── main.tex
      ├── refs.bib
      ├── figures/
      │   ├── diagram.pdf
      │   └── plot.png
      ├── sections/
      │   ├── introduction.tex
      │   └── conclusion.tex
      └── .vscode/
          └── settings.json

      其中⁠,main.tex 是主文件⁠,refs.bib 保存参考文献⁠,figures/ 保存图片和绘图文件⁠,sections/ 保存拆分后的章节⁠,.vscode/settings.json 则保存项目级编辑器配置⁠。在主文件中可以使用⁠:

      \input{sections/introduction}

      将其他 .tex 文件的内容插入当前位置⁠。

      建立最小可用工作流

      第一次配置 LaTeX\LaTeXLATE​X 环境时⁠,不必立即加入复杂字体⁠、参考文献和绘图设置⁠。更稳妥的做法是先确认终端能够运行 xelatex --version⁠,编辑器能够以 UTF-8 编码保存 .tex 文件⁠,并且下面的最小工作流可以正常完成⁠:

      编写 main.tex
          ↓
      使用 xelatex 编译
          ↓
      生成并查看 main.pdf

      如果第一次编译失败⁠,应先检查 TeX 发行版是否已经安装⁠、编辑器是否选择了正确的构建方案⁠、文件扩展名是否确实为 .tex⁠、\begin{document} 与 \end{document} 是否完整⁠,以及中文文档是否使用了 ctexart⁠、ctexrep⁠、ctexbook 或 ctex 宏包⁠。在最小示例能够稳定编译之后⁠,再逐步加入数学宏包⁠、图片⁠、参考文献⁠、TikZ 绘图和自定义格式⁠,会更容易定位后续问题⁠。

      一份可继续扩展的基础模板

      下面这份模板适合包含中文⁠、数学公式⁠、图表⁠、交叉引用和参考文献的普通文章⁠。它保留了较常用的基础功能⁠,但没有预先加载大量暂时用不到的宏包⁠,便于在后续写作中继续扩展⁠。

      模板默认使用 xelatex 编译⁠,并让 ctex 自动选择中文字体⁠。这可以减少对本地特定字体的依赖⁠,提高在不同计算机或在线环境中成功编译的概率⁠。不过⁠,不同系统实际选用的字体可能不同⁠,因此最终版面未必完全一致⁠。

      主文件 main.tex

      \documentclass[11pt,a4paper]{ctexart}
      
      % 数学公式与符号
      \usepackage{amsmath,amssymb,amsthm}
      \usepackage{bm}
      
      % 图片、表格与单位
      \usepackage{graphicx}
      \usepackage{booktabs}
      \usepackage{siunitx}
      
      % 超链接通常在大多数宏包之后加载
      \usepackage[
        colorlinks = true,
        bookmarks = true,
        linkcolor = blue,
        citecolor = blue,
        urlcolor = blue
      ]{hyperref}
      
      % 正体微分符号
      \newcommand{\dd}{\mathop{}\!\mathrm{d}}
      
      \title{\LaTeX{} 基础模板}
      \author{
        Hua Chen\thanks{
          Email: \href{mailto:hua@physchen.com}{hua@physchen.com}
        }
      }
      \date{\today}
      
      \begin{document}
      
      \maketitle
      
      \begin{abstract}
      这里填写摘要。
      \end{abstract}
      
      \tableofcontents
      
      \section{引言}
      \label{sec:introduction}
      
      这是正文。可以使用 \textbf{粗体}、\textit{斜体}
      和行内原样文本 \verb|x = 1|。
      
      文献引用写作~\cite{lamport1994}。
      
      \section{一个公式示例}
      \label{sec:equation-example}
      
      爱因斯坦场方程为
      \begin{equation}
        R_{\mu\nu}
        - \frac{1}{2}R g_{\mu\nu}
        + \Lambda g_{\mu\nu}
        = \frac{8\pi G}{c^4}T_{\mu\nu}.
        \label{eq:einstein}
      \end{equation}
      
      式~\eqref{eq:einstein} 中,
      $g_{\mu\nu}$ 表示时空度规。
      
      正体微分符号可以写作
      \begin{equation}
        \int_a^b f(x) \dd x.
      \end{equation}
      
      \section{一个表格示例}
      \label{sec:table-example}
      
      \begin{table}[htbp]
        \centering
        \caption{常用物理常量的示例数值}
        \label{tab:constants}
        \begin{tabular}{lll}
          \toprule
          物理量 & 符号 & 数值 \\
          \midrule
          真空光速
            & $c$
            & \qty{299792458}{\metre\per\second} \\
          引力常数
            & $G$
            & \qty{6.67430e-11}
              {\newton\metre\squared\per\kilogram\squared} \\
          普朗克常数
            & $h$
            & \qty{6.62607015e-34}{\joule\second} \\
          \bottomrule
        \end{tabular}
      \end{table}
      
      表~\ref{tab:constants} 展示了表格、
      单位排版和交叉引用的基本写法。
      
      \bibliographystyle{unsrt}
      \bibliography{refs}
      
      \appendix
      
      \section{附录}
      \label{app:example}
      
      这里填写附录内容。
      
      \end{document}

      文档类⁠、编译器与字体

      模板使用 \documentclass[11pt,a4paper]{ctexart}⁠。其中⁠,ctexart 是适用于中文文章的文档类⁠,11pt 设置正文的基础字号⁠,a4paper 将纸张尺寸设置为 A4⁠。

      ctexart 对应标准文档类 article⁠。类似地⁠,ctexrep 对应 report⁠,适合较长报告和学位论文⁠;ctexbook 对应 book⁠,适合书籍和包含章结构的长文档⁠。

      中文文档类对应的标准文档类适用场景
      ctexartarticle短篇文章⁠、作业⁠、讲义和普通论文
      ctexrepreport较长报告⁠、学位论文
      ctexbookbook书籍和包含章结构的长文档

      模板主要面向 XeLaTeX 和 LuaLaTeX⁠。pdfLaTeX 也可以在 ctex 的支持下排版中文⁠,但它对 Unicode 字符和系统字体的直接支持不如 XeLaTeX⁠、LuaLaTeX 灵活⁠。若使用 fontspec 或手动设置系统字体⁠,则必须使用 XeLaTeX 或 LuaLaTeX⁠。

      为了提高可移植性⁠,基础模板让 ctex 自动选择字体⁠。确实需要指定系统字体时⁠,可以使用 fontset=none⁠,再分别设置西文和中文字体⁠:

      \documentclass[
        11pt,
        a4paper,
        fontset=none
      ]{ctexart}
      
      \setmainfont{Palatino Linotype}
      \setsansfont{Arial}
      \setmonofont{Courier New}
      
      \setCJKmainfont[
        BoldFont = SimHei,
        ItalicFont = KaiTi
      ]{SimSun}

      以上示例只用于展示命令结构⁠。字体名称需要根据操作系统中实际安装的字体调整⁠,不应将其视为跨平台模板⁠。这里将楷体指定为中文的 ItalicFont⁠,表示在请求斜体字形时改用楷体⁠;这是一种中文排版中的替代方案⁠,并不意味着楷体是宋体的几何斜体⁠。

      如果字体不存在⁠,可以改用当前系统已经安装的字体⁠,删除 fontset=none 和手动字体设置以恢复 ctex 默认配置⁠,或者使用 TeX 发行版通常附带的开放字体⁠,例如 Fandol 字体⁠。在在线编译环境中上传字体文件时⁠,还需要确保具有相应的使用权限⁠。如果文档需要在多台设备或持续集成环境中编译⁠,字体应被视为项目依赖⁠,而不是只在某一台电脑上“⁠碰巧可用⁠”的外观设置⁠。

      导言区与宏包

      \documentclass 与 \begin{document} 之间的部分称为导言区⁠,通常用于加载宏包⁠、设置页面和字体⁠、定义命令与环境⁠,以及设置标题⁠、作者和日期⁠。

      模板加载的宏包分别负责以下功能⁠:

      宏包主要用途
      amsmath提供公式环境⁠、公式对齐和数学文本等功能
      amssymb提供额外的数学符号
      amsthm提供定理⁠、定义⁠、引理和证明环境的机制
      bm加粗希腊字母和其他数学符号
      graphicx插入和缩放图片
      booktabs提供三线表命令
      siunitx统一排版数值⁠、单位和不确定度
      hyperref创建超链接⁠、PDF 书签和可点击的交叉引用

      并不是每份文档都需要加载所有这些宏包⁠。不使用定理环境时⁠,可以删除 amsthm⁠;不需要加粗数学符号时⁠,可以删除 bm⁠;不使用参考文献时⁠,可以删除正文中的 \cite{}⁠、\bibliographystyle{} 和 \bibliography{}⁠。

      宏包通常应集中放在导言区⁠,并按照功能分组⁠。这样在出现宏包冲突或编译错误时⁠,更容易判断问题来自哪一部分⁠。除非宏包文档另有要求⁠,hyperref 一般放在大多数宏包之后加载⁠。

      标题⁠、摘要⁠、目录与章节结构

      模板在导言区通过 \title{}⁠、\author{} 和 \date{} 定义标题信息⁠,并在正文开始后使用 \maketitle 生成标题⁠:

      \title{\LaTeX{} 基础模板}
      \author{
        Hua Chen\thanks{
          Email: \href{mailto:hua@physchen.com}{hua@physchen.com}
        }
      }
      \date{\today}
      
      \begin{document}
      
      \maketitle
      
      \end{document}

      \today 会根据当前语言和日期设置输出编译当天的日期⁠。若需要固定日期⁠,可以直接写成 \date{2026 年 7 月 14 日}⁠。\thanks{} 则用于添加与作者信息关联的脚注⁠,例如电子邮箱⁠、单位说明或致谢信息⁠。

      摘要使用 abstract 环境⁠,目录使用 \tableofcontents⁠:

      \begin{abstract}
      这里填写摘要。
      \end{abstract}
      
      \tableofcontents

      目录⁠、章节编号和页码依赖辅助文件⁠,通常需要至少编译两次才能完全更新⁠。

      常用的章节命令包括⁠:

      \section{一级标题}
      \subsection{二级标题}
      \subsubsection{三级标题}

      不同文档类支持的最高层级不同⁠。article 和 ctexart 没有 \chapter{}⁠;report⁠、book⁠、ctexrep 和 ctexbook 则支持章结构⁠。

      在源文件中留出一个空行即可开始新段落⁠:

      这是第一段。
      
      这是第二段。

      通常不应使用 \\ 代替段落⁠,也不应通过堆叠空格⁠、连续的 \\ 或大量手工空白命令来调整版面⁠。

      正文强调与原样文本

      正文中常用的字体命令包括⁠:

      \textbf{粗体}
      \textit{斜体}
      \emph{强调}
      \texttt{等宽字体}
      \textsf{无衬线字体}
      \textrm{衬线字体}

      在一般写作中⁠,表达语义上的强调时⁠,通常优先使用 \emph{}⁠。它会根据上下文选择合适的强调样式⁠:在普通正文中通常表现为斜体⁠,在已经是斜体的上下文中则可能恢复为正体⁠。需要明确指定外观时⁠,再使用 \textbf{} 或 \textit{}⁠。

      行内展示一小段原样文本时⁠,可以使用 \verb⁠:

      \verb|x = 1|
      \verb+x = 1+
      \verb!x = 1!

      \verb 后面的第一个字符会被用作定界符⁠,因此定界符本身不能出现在需要展示的内容中⁠。\verb 不能直接用于命令参数⁠、章节标题⁠、脚注和普通数学环境中⁠。较长的代码块通常应使用 verbatim⁠、listings 或 minted 等环境⁠。

      数学公式与数学符号

      模板加载了 amsmath⁠、amssymb⁠、amsthm 和 bm⁠。其中⁠,amsmath 是数学文档中最常用的基础宏包之一⁠。

      行内公式可以使用 \(...\) 或 $...$⁠:

      \(E=mc^2\)
      $E=mc^2$

      在标准 LaTeX\LaTeXLATE​X 文档中⁠,两种写法都很常见⁠。\(...\) 的定界范围更明确⁠,而 $...$ 更简洁⁠。

      单个需要编号的行间公式通常使用 equation⁠;不需要编号时⁠,可以使用 equation* 或 \[...\]⁠:

      \begin{equation}
        E = mc^2.
        \label{eq:mass-energy}
      \end{equation}
      
      \[
        E = mc^2.
      \]
      
      \begin{equation*}
        E = mc^2.
      \end{equation*}

      在标准 LaTeX\LaTeXLATE​X 文档中⁠,应避免使用 Plain TeX 风格的 $$...$$⁠。推荐使用 \[...\]⁠、equation 或其他 amsmath 环境⁠,以便正确处理间距⁠、编号和文档级版式设置⁠。

      多行公式通常使用 align⁠,并在需要对齐的位置放置 &⁠:

      \begin{align}
        (a+b)^2 &= a^2 + 2ab + b^2, \\
        (a-b)^2 &= a^2 - 2ab + b^2.
      \end{align}

      align 默认给每一行编号⁠。若某一行不需要编号⁠,可以在该行末尾使用 \notag 或 \nonumber⁠;如果整组公式都不需要编号⁠,可以在 \[...\] 中嵌套 aligned⁠:

      \[
      \begin{aligned}
        F &= ma, \\
        p &= mv.
      \end{aligned}
      \]

      单个公式通常使用 equation⁠,不必为了一个对齐点使用 align⁠。

      公式也是句子的一部分⁠。公式末尾是否使用逗号⁠、句号或其他标点⁠,应由整句话的语法结构决定⁠。例如⁠:

      根据质能关系
      \begin{equation}
        E = mc^2,
      \end{equation}
      物体的静质量对应一定的静能量。

      标点通常直接紧跟公式内容⁠,不需要在标点前额外加入数学间距⁠。

      数学环境中常用的字体命令如下⁠:

      命令典型用途
      \mathrm{}数学模式中的罗马正体
      \mathit{}数学斜体⁠;普通变量通常无须显式指定
      \mathbf{}将拉丁字母和数字排成加粗正体
      \mathsf{}无衬线数学字体
      \mathtt{}等宽数学字体
      \mathcal{}大写拉丁字母的书法体
      \mathbb{}黑板粗体⁠,常用于数集

      \mathbf{} 只适用于拉丁字母和数字⁠,并会把字母排成正体⁠,不适合作为本文的矢量记号⁠。本文中的矢量⁠、矩阵和张量统一使用 \boldsymbol{}⁠,它可以保留数学符号原有的字形⁠,并适用于希腊字母⁠;加载 bm 后⁠,也可以使用功能更完整的 \bm{}⁠。同一文档应始终遵守统一的符号约定⁠。

      模板还定义了正体微分符号⁠:

      \newcommand{\dd}{\mathop{}\!\mathrm{d}}

      于是积分可以写成⁠:

      \int_a^b f(x) \dd x

      在这个定义中⁠,\mathop{} 创建一个空的数学运算符⁠,使 TeX 在其左侧加入适当的运算符间距⁠;\! 抵消空运算符右侧多出的细间距⁠;\mathrm{d} 则输出正体字母 d⁠。这样定义后⁠,\dd 能够自动处理微分符号左侧的间距⁠。

      \dd 只负责输出微分符号及其左侧间距⁠,积分变量仍需单独书写⁠,因此通常写作⁠:

      \dd x
      \dd t
      \dd^4 x

      而不是将变量作为 \dd 的参数写成 \dd{x}⁠。若只将命令定义为 \newcommand{\dd}{\mathrm{d}}⁠,也能得到正体 d⁠,但需要在积分中手动写成 \int f(x)\,\dd x⁠。两种方案都可以采用⁠,但应在全文中保持一致⁠。

      定理⁠、定义与证明环境

      模板加载了 amsthm⁠,但加载宏包后⁠,并不会自动出现名为 theorem⁠、definition 或 lemma 的环境⁠。需要在导言区通过 \newtheorem 创建具体环境⁠:

      \newtheorem{theorem}{定理}[section]
      \newtheorem{lemma}[theorem]{引理}
      
      \theoremstyle{definition}
      \newtheorem{definition}[theorem]{定义}
      
      \theoremstyle{remark}
      \newtheorem*{remark}{注}

      \newtheorem{theorem}{定理}[section] 创建名为 theorem 的环境⁠,显示名称为“⁠定理⁠”⁠,并按章节编号⁠。例如⁠,第 2 节中的第一个定理可能编号为“⁠定理 2.1⁠”⁠。\newtheorem{lemma}[theorem]{引理} 则使引理与定理共用同一套计数器⁠。

      定义完成后⁠,可以在正文中写⁠:

      \begin{theorem}
      设函数 $f$ 在闭区间 $[a,b]$ 上连续,
      则 $f$ 在该区间上有界。
      \end{theorem}
      
      \begin{proof}
      这里填写证明。
      \end{proof}

      带星号的 \newtheorem*{remark}{注} 创建不编号的环境⁠。amsthm 提供 plain⁠、definition 和 remark 三种常用样式⁠,分别适合定理与引理⁠、定义与例题⁠,以及注释与说明⁠。不需要定理⁠、定义和证明环境时⁠,可以从基础模板中删除 amsthm⁠。

      数值与单位

      模板使用 siunitx 统一处理数值和单位⁠:

      \usepackage{siunitx}

      基本用法为⁠:

      \qty{299792458}{\metre\per\second}

      其中⁠,第一个参数是数值⁠,第二个参数是单位⁠。与手动写作相比⁠,siunitx 可以统一处理数值与单位之间的间距⁠、科学计数法⁠、单位字体⁠、复合单位⁠、不确定度和表格中的数值对齐⁠。

      \qty{3.00e8}{\metre\per\second}
      
      \qty{6.67430e-11}
        {\newton\metre\squared\per\kilogram\squared}
      
      \qty{9.81}{\metre\per\second\squared}
      
      \num{6.02214076e23}
      
      \unit{\joule\per\kelvin}
      
      \qty{1.234(5)}{\metre}

      \qty{} 同时排版数值和单位⁠,\num{} 只排版数值⁠,\unit{} 只排版单位⁠。数值带不确定度时⁠,可以使用类似 \qty{1.234(5)}{\metre} 的写法⁠。具体输出形式还可以通过 \sisetup{} 在导言区统一设置⁠。

      在部分 Markdown 编辑器⁠、MathJax 或 KaTeX 环境中⁠,也可能支持⁠:

      \pu{3.00e8 m s-1}

      在标准 LaTeX 文档中⁠,\pu{} 由 mhchem 宏包提供⁠:

      \usepackage[version=4]{mhchem}
      
      \pu{3.00e8 m s-1}
      \ce{H2O}
      \ce{2H2 + O2 -> 2H2O}

      mhchem 同时提供化学式和化学方程式命令 \ce{}⁠。Markdown⁠、MathJax 或 KaTeX 是否能够使用 \pu{} 和 \ce{}⁠,取决于编辑器是否启用了相应扩展⁠,不能仅根据标准 LaTeX 中的支持情况判断⁠。若主要目标是规范排版物理量和单位⁠,标准 LaTeX 文档通常优先使用 siunitx 的 \qty{}⁠、\num{} 和 \unit{}⁠。

      图片与 TikZ

      模板已经加载 graphicx⁠,因此可以直接插入项目中的图片⁠:

      \begin{figure}[htbp]
        \centering
        \includegraphics[
          width=0.8\textwidth
        ]{figures/example.pdf}
        \caption{示例图片}
        \label{fig:example}
      \end{figure}

      引用时写作⁠:

      图~\ref{fig:example}

      常用尺寸参数包括 width=\textwidth⁠、width=0.8\textwidth⁠、height=5cm 和 scale=0.5⁠。通常只指定宽度或高度中的一个⁠,以保持图片原始宽高比⁠;若同时指定宽度和高度⁠,可能会使图片发生变形⁠。

      figure 是浮动环境⁠。参数 [htbp] 表示允许 LaTeX\LaTeXLATE​X 尝试将浮动体放在接近源代码位置⁠、页顶⁠、页底或单独的浮动页⁠。这只是位置建议⁠,不是强制定位命令⁠。

      \label{} 通常应写在 \caption{} 之后⁠,因为图片或表格的编号通常由 \caption{} 更新⁠:

      \caption{示例图片}
      \label{fig:example}

      基础模板没有默认加载 TikZ⁠。确实需要绘制数学图形或物理示意图时⁠,可以在导言区加入⁠:

      \usepackage{tikz}
      \usetikzlibrary{calc}

      其他 TikZ 库应根据实际需要加载⁠,不必一次加入大量暂时用不到的功能⁠。

      表格与 booktabs

      tabular 环境负责表格本身的行列结构⁠,外层的 table 环境则提供浮动⁠、标题和交叉引用功能⁠。模板加载 booktabs⁠,从而可以使用 \toprule⁠、\midrule 和 \bottomrule 绘制三线表⁠。

      \begin{table}[htbp]
        \centering
        \caption{参数取值}
        \label{tab:parameters}
        \begin{tabular}{ccc}
          \toprule
          参数 & 符号 & 数值 \\
          \midrule
          真空光速
            & $c$
            & \qty{2.99792458e8}{\metre\per\second} \\
          引力常数
            & $G$
            & \qty{6.67430e-11}
              {\newton\metre\squared\per\kilogram\squared} \\
          \bottomrule
        \end{tabular}
      \end{table}

      列格式 {ccc} 表示三列内容均居中⁠。常见的列格式如下⁠:

      格式含义
      l左对齐
      c居中
      r右对齐
      p{4cm}固定宽度并允许自动换行

      科技文档中的表格通常不需要大量竖线⁠。利用列对齐⁠、适当留白和三线表结构⁠,往往比完整网格更易读⁠。

      编号与交叉引用

      模板通过 \label{} 为章节⁠、公式和表格设置标签⁠,再通过 \ref{} 或相应的专用命令进行引用⁠:

      \section{引言}
      \label{sec:introduction}
      
      \begin{equation}
        E = mc^2
        \label{eq:mass-energy}
      \end{equation}
      
      见第~\ref{sec:introduction}~节
      和式~\eqref{eq:mass-energy}。

      建议为标签使用统一前缀⁠:

      对象推荐前缀示例
      公式eq:eq:mass-energy
      图片fig:fig:spacetime
      表格tab:tab:constants
      章节sec:sec:introduction
      附录app:app:derivation
      定理thm:thm:noether

      标签名称主要用于源代码管理⁠,不会直接出现在输出文档中⁠。标签应简洁⁠、稳定⁠,并能够说明对象含义⁠。

      目录⁠、编号和交叉引用通常需要至少编译两次才能更新⁠。如果 PDF 中出现 ??⁠,应先重新编译⁠,再检查 \label{} 与 \ref{} 的名称是否一致⁠、是否存在重复标签⁠、标签是否放在正确位置⁠,以及辅助文件是否已正确更新⁠。

      波浪号 ~ 表示不可断行空格⁠,因此 图~\ref{fig:example} 可以避免“⁠图⁠”和编号被分到两行⁠。

      超链接与 PDF 书签

      模板通过以下方式加载 hyperref⁠:

      \usepackage[
        colorlinks = true,
        bookmarks = true,
        linkcolor = blue,
        citecolor = blue,
        urlcolor = blue
      ]{hyperref}

      colorlinks=true 使用彩色文本显示链接⁠,而不是彩色边框⁠;bookmarks=true 生成 PDF 书签⁠;linkcolor⁠、citecolor 和 urlcolor 分别设置内部交叉引用⁠、文献引用和网址的颜色⁠。

      加载 hyperref 后⁠,可以使用⁠:

      \href{https://physchen.com}{陈华的个人主页}
      
      \href{mailto:hua@physchen.com}
        {hua@physchen.com}
      
      \url{https://physchen.com}

      章节⁠、公式⁠、图表和参考文献的内部引用也会自动变成可点击链接⁠。若不希望链接显示为彩色⁠,可以使用⁠:

      \usepackage[hidelinks]{hyperref}

      章节标题可以包含数学公式⁠:

      \section{质能方程:$E=mc^2$}

      但是加载 hyperref 后⁠,复杂数学命令未必能够直接写入 PDF 书签⁠。此时可以分别提供排版标题和纯文本书签⁠:

      \section{
        质能方程:
        \texorpdfstring{$E=mc^2$}{E = mc^2}
      }

      \texorpdfstring{LaTeX 排版内容}{PDF 书签文本} 的第一个参数用于正文排版⁠,第二个参数则用于 PDF 书签⁠。

      参考文献与编译流程

      模板正文中使用了 \cite{lamport1994}⁠,因此还需要在 main.tex 所在目录创建 refs.bib⁠,并写入对应的参考文献条目⁠:

      @book{lamport1994,
        author    = {Leslie Lamport},
        title     = {LaTeX: A Document Preparation System},
        edition   = {2},
        publisher = {Addison-Wesley},
        year      = {1994}
      }

      模板文末使用⁠:

      \bibliographystyle{unsrt}
      \bibliography{refs}

      其中⁠,unsrt 表示参考文献按照正文中的引用顺序排列⁠;refs 对应当前目录下的 refs.bib⁠,不需要写扩展名⁠。

      一个简单的期刊论文条目为⁠:

      @article{einstein1905,
        author  = {Albert Einstein},
        title   = {Zur Elektrodynamik bewegter K{\"o}rper},
        journal = {Annalen der Physik},
        year    = {1905},
        volume  = {322},
        number  = {10},
        pages   = {891--921}
      }

      正文中可以写⁠:

      文献~\cite{einstein1905}

      使用传统 BibTeX 工作流时⁠,可以按照以下顺序编译⁠:

      xelatex main.tex
      bibtex main
      xelatex main.tex
      xelatex main.tex

      更方便的方式是使用⁠:

      latexmk -xelatex main.tex

      latexmk 通常会根据辅助文件自动调用 BibTeX⁠,并完成所需的多轮编译⁠。

      新文档也可以使用 biblatex 与 Biber⁠。它们提供更灵活的参考文献管理能力⁠,但配置方式和编译流程与传统 BibTeX 不同⁠,不应将两套写法直接混用⁠。

      参考文献和附录的先后顺序应服从学校⁠、期刊或出版社的格式要求⁠。本文基础模板采用“⁠正文—参考文献—附录⁠”的顺序⁠。

      附录

      模板使用 \appendix 将后续章节切换为附录⁠,之后仍然使用普通章节命令⁠:

      \appendix
      
      \section{补充推导}
      \label{app:derivation}

      对于 article 或 ctexart⁠,附录通常使用字母编号⁠,例如“⁠A⁠”“⁠B⁠”等⁠;对于 book⁠、report⁠、ctexbook 或 ctexrep⁠,则通常以章为单位组织附录⁠。

      \appendix 本身不是包围内容的环境⁠,因此不需要对应的结束命令⁠。

      多行公式跨页

      对于包含较长推导的文档⁠,可以在导言区加入⁠:

      \allowdisplaybreaks

      它允许 align⁠、gather 等多行公式环境在必要时跨页⁠。公式较少或推导较短的普通文章通常不需要默认启用⁠。

      若需要控制允许跨页的程度⁠,可以写成⁠:

      \allowdisplaybreaks[1]

      可选参数的取值范围为 1 到 4⁠。数值越大⁠,LaTeX\LaTeXLATE​X 越倾向于允许显示公式跨页⁠;不提供可选参数时⁠,相当于使用最高等级⁠。

      若希望在某个具体换行位置允许分页⁠,可以将 \displaybreak 放在对应的 \\ 之前⁠:

      \begin{align}
        A &= B + C
        \displaybreak\\
        D &= E + F.
      \end{align}

      \displaybreak 也可以接受 0 到 4 的可选参数⁠,用于调节该位置允许分页的倾向⁠。

      模板的扩展原则

      这份模板适合作为写作起点⁠,而不是固定不变的最终配置⁠。随着文档需求增加⁠,可以逐步加入 TikZ 绘图⁠、代码高亮⁠、复杂表格⁠、定理环境⁠、biblatex 参考文献方案⁠、页面布局设置⁠,以及新的自定义命令和环境⁠;不再需要的宏包也应及时删除⁠。

      较稳妥的扩展方式是每次只增加一项功能⁠,添加宏包或设置后立即编译⁠,确认当前文档仍能正常生成⁠,再继续加入下一项配置⁠。这样一旦出现宏包冲突或编译错误⁠,更容易判断问题来自哪里⁠。

      文本排版补充

      这一节补充基础模板中没有直接展示的常用文本结构和排版符号⁠。

      列表

      无序列表使用 itemize⁠,有序列表使用 enumerate⁠,带有说明性标签的列表则可以使用 description⁠:

      \begin{itemize}
        \item 第一项
        \item 第二项
      \end{itemize}
      
      \begin{enumerate}
        \item 第一步
        \item 第二步
      \end{enumerate}
      
      \begin{description}
        \item[位置] 描述物体所在的空间位置。
        \item[速度] 描述位置随时间的变化率。
        \item[加速度] 描述速度随时间的变化率。
      \end{description}

      列表可以嵌套⁠,但层级不宜过深⁠。若需要系统调整列表间距⁠、编号格式和标签⁠,可以使用 enumitem 宏包⁠。

      注释与特殊字符

      百分号 % 后直到行末的内容都是注释⁠:

      这是正文。 % 这是注释

      注释不会出现在最终文档中⁠。百分号还会忽略当前源代码行末的换行⁠,因此有时可以用于防止命令定义或分行书写产生不需要的空格⁠。

      以下字符在 LaTeX\LaTeXLATE​X 中具有特殊含义⁠:

      # $ % & _ { } ~ ^ \

      在文本模式中⁠,常见输入方式如下⁠:

      字符输入方式字符输入方式
      #\#$\$
      %\%&\&
      _\_{⁠、}\{⁠、\}
      ~\textasciitilde{}^\textasciicircum{}
      \\textbackslash{}

      在数学环境中⁠,_ 和 ^ 分别表示下标和上标⁠,而不是普通字符⁠。

      空格与不可断行

      LaTeX\LaTeXLATE​X 会合并源文件中连续的普通空格⁠。例如⁠:

      This    is     a sentence.

      其输出效果通常与只输入一个空格相同⁠。在源文件中换行一次⁠,通常也只相当于一个普通空格⁠;只有空行才表示新段落⁠。

      波浪号 ~ 表示不可断行空格⁠,适合将名称与编号保持在同一行⁠:

      图~\ref{fig:example}
      表~\ref{tab:example}
      式~\eqref{eq:example}
      文献~\cite{example}
      第~1~章

      若要显示可见的 ASCII 波浪号⁠,应使用 \textasciitilde{}⁠,而不是直接输入 ~⁠。反斜杠加普通空格 \ 可以显式插入一个普通词间空格⁠,但在大多数正文中并不需要手动使用⁠。

      引号⁠、短横线与省略号

      传统英文单引号和双引号分别写作⁠:

      `single quotation'
      
      ``double quotation''

      左侧使用反引号⁠,右侧使用单引号⁠。中文文档通常可以直接输入中文引号⁠:

      “中文双引号”
      ‘中文单引号’

      需要自动处理多语言引号时⁠,可以使用 csquotes 宏包⁠。

      英文排版中⁠,不同数量的短横线具有不同含义⁠:

      输入名称典型用途
      -连字符(⁠hyphen⁠)well-known
      --连接号(⁠en dash⁠)1--10
      ---破折号(⁠em dash⁠)text---text

      中文破折号通常直接输入“⁠—⁠—⁠”⁠。英文正文中的省略号可以使用 \ldots⁠,中文正文通常直接输入中文省略号“⁠…⁠…⁠”⁠。数学环境中的省略号还包括 \cdots⁠、\vdots 和 \ddots⁠,分别适合不同的排列方向和数学语境⁠。

      常用数学语法补充

      这一节补充基础模板中没有逐项展示的常用数学语法⁠。

      上下标⁠、分数与根式

      基本写法包括⁠:

      x^2
      a_i
      x_{i+1}
      \frac{a+b}{c}
      \sqrt{x}
      \sqrt[n]{x}

      分别表示 x2x^2x2⁠、aia_iai​⁠、xi+1x_{i+1}xi+1​⁠、a+bc\frac{a+b}{c}ca+b​⁠、x\sqrt{x}x​ 和 xn\sqrt[n]{x}nx​⁠。

      当上下标包含多个字符时⁠,必须使用花括号⁠:

      x^{n+1}
      a_{ij}

      例如⁠,x^n+1 表示 xn+1x^n+1xn+1⁠,而不是 xn+1x^{n+1}xn+1⁠;a_ij 也不会得到完整的双字符下标⁠。

      \frac 会根据当前数学环境选择合适的大小⁠。amsmath 还提供 \dfrac 和 \tfrac⁠,分别强制使用展示样式和文本样式⁠:

      \dfrac{a}{b}
      \tfrac{a}{b}

      正文中通常优先使用 \frac⁠。在行内公式中频繁使用 \dfrac 会增大行距⁠。

      定界符

      当定界符需要随内部内容伸缩时⁠,可以成对使用 \left 和 \right⁠:

      \left(\frac{x}{y}\right)
      \left[\frac{x}{y}\right]
      \left\{\frac{x}{y}\right\}

      若只显示一侧⁠,可以使用句点表示不可见的定界符⁠:

      \left.V(\phi)\right|_{\phi=\phi_{\min}}

      自动调整后的括号有时会显得过大⁠。需要手动控制尺寸时⁠,可以使用⁠:

      \bigl(x+y\bigr)
      \Bigl(\frac{x}{y}\Bigr)
      \biggl(\sum_{i=1}^n a_i\biggr)
      \Biggl(\int_0^\infty f(x)\,\mathrm{d}x\Biggr)

      其中的 l 和 r 分别表示左⁠、右定界符⁠,有助于得到正确的数学间距⁠。

      绝对值和范数可以写成⁠:

      \lvert x\rvert
      \lVert \bm{x}\rVert

      相比直接使用键盘字符 |⁠,\lvert⁠、\rvert⁠、\lVert 和 \rVert 能够提供更明确的定界符语义⁠。

      数学公式中的文本⁠、标签与条件

      数学环境中的普通文字或说明性短语应使用 \text{}⁠:

      x =
      \begin{cases}
        1, & \text{if } x > 0, \\
        0, & \text{otherwise}.
      \end{cases}

      \text{} 由 amsmath 提供⁠,会使用正文文本字体⁠,并允许在数学公式中插入普通语言文字⁠。

      物理符号中的正体标签⁠、缩写或约定名称常使用 \mathrm{}⁠:

      F_{\mathrm{b}}
      =
      \rho_{\mathrm{fluid}}
      V_{\mathrm{disp}}g

      这里的 b⁠、fluid 和 disp 是物理量的标签⁠,而不是彼此相乘的变量⁠。一般而言⁠,\text{} 用于普通语言文字⁠,\mathrm{} 则用于数学符号中的正体字母或标签⁠。

      标准运算符与自定义运算符

      具有固定数学含义的标准运算符应使用对应命令⁠:

      \sin x
      \cos x
      \tan x
      \ln x
      \exp x
      \min f(x)
      \max f(x)
      \det A

      不要直接写成 sin x 或 ln x⁠,否则字母会被当作多个变量逐个排版⁠,字体和间距都不正确⁠。

      只使用一次的自定义运算符可以写成⁠:

      \operatorname{rank} A

      若某个运算符会反复使用⁠,应在导言区通过 \DeclareMathOperator 定义⁠,具体方法将在下一节介绍⁠。

      数学间距

      LaTeX\LaTeXLATE​X 会自动处理大部分数学间距⁠。确有需要时⁠,可以使用以下命令⁠:

      命令效果
      \,小间距
      \:中等间距
      \;较大间距
      \quad一个较大的水平间距
      \qquad两个 \quad
      \!负间距

      常见例子包括⁠:

      \int f(x)\,\mathrm{d}x
      
      a \quad \text{and} \quad b

      应尽量避免为了视觉对齐而堆叠大量间距命令⁠。若多个公式需要对齐⁠,应优先使用 align⁠、aligned⁠、cases⁠、matrix 等结构化环境⁠。

      自定义命令与项目扩展技巧

      当某个符号⁠、格式或结构会在文档中反复出现时⁠,可以在导言区定义自定义命令⁠。这样既能减少重复代码⁠,也能使源文件表达更明确的语义⁠。例如⁠,如果全文都通过同一个命令表示向量⁠,那么以后需要修改向量样式时⁠,只需修改一处定义⁠,而不必逐个修改正文⁠。

      \newcommand 的基本语法

      最基本的语法为⁠:

      \newcommand{\命令名}{定义内容}

      例如⁠:

      \newcommand{\RR}{\mathbb{R}}

      正文中写 $x\in\RR$ 即可得到实数集符号⁠。命令名应选择具有明确含义且不容易与已有命令冲突的形式⁠。过短的命令虽然输入方便⁠,但更容易覆盖文档类或宏包已经定义的命令⁠。

      定义无参数命令时⁠,也可以显式写出参数个数为零⁠:

      \newcommand{\RR}[0]{\mathbb{R}}

      不过 [0] 通常可以省略⁠。

      定义带参数的命令

      命令最多可以接收九个参数⁠,基本语法为⁠:

      \newcommand{\命令名}[参数个数]{定义内容}

      参数在定义中依次用 #1⁠、#2⁠、#3 等表示⁠。例如⁠,可以定义向量和内积命令⁠:

      \newcommand{\vect}[1]{\bm{#1}}
      
      \newcommand{\inner}[2]{
        \left\langle #1,#2 \right\rangle
      }

      正文中写⁠:

      \vect{x}
      \vect{p}
      \vect{\alpha}
      
      \inner{\psi}{\phi}

      分别相当于⁠:

      \bm{x}
      \bm{p}
      \bm{\alpha}
      
      \left\langle \psi,\phi \right\rangle

      在 \inner{\psi}{\phi} 中⁠,#1 对应 \psi⁠,#2 对应 \phi⁠。较长的命令定义可以分行书写⁠,但需要注意源代码中的换行和缩进有时会产生空格⁠。复杂命令应通过实际编译结果确认其输出⁠。

      定义带可选参数的命令

      \newcommand 可以为第一个参数设置默认值⁠:

      \newcommand
        {\命令名}
        [参数个数]
        [第一个参数的默认值]
        {定义内容}

      例如⁠,可以定义带默认下标的范数⁠:

      \newcommand{\norm}[2][2]{
        \left\lVert #2 \right\rVert_{#1}
      }

      正文中写 \norm{x}⁠,相当于⁠:

      \left\lVert x \right\rVert_2

      写成 \norm[\infty]{x}⁠,则得到无穷范数⁠。

      需要注意的是⁠,\newcommand 只能为第一个参数提供默认值⁠。如果需要更复杂的参数接口⁠,可以使用现代 LaTeX 提供的 \NewDocumentCommand⁠;不过⁠,对于普通文档中的多数需求⁠,\newcommand 已经足够⁠。

      \renewcommand 与 \providecommand

      如果命令已经存在⁠,再使用 \newcommand 定义同名命令会报错⁠。这种保护机制可以防止无意中覆盖已有命令⁠。确实需要重新定义已有命令时⁠,可以使用⁠:

      \renewcommand{\命令名}{新定义}

      例如⁠:

      \renewcommand{\contentsname}{目录}

      修改文档类或宏包提供的命令之前⁠,应先确认原命令的用途和参数结构⁠。随意覆盖底层命令可能导致难以定位的问题⁠。

      \providecommand 的语法与 \newcommand 相似⁠:

      \providecommand{\RR}{\mathbb{R}}

      它只在命令尚未定义时创建命令⁠;若命令已经存在⁠,则保持原定义不变⁠,也不会报错⁠。因此⁠,在编写可能被复制到不同项目中的通用片段时⁠,\providecommand 有时比 \newcommand 更稳妥⁠。

      命令命令不存在时命令已经存在时
      \newcommand创建命令报错
      \renewcommand报错重新定义
      \providecommand创建命令保持原定义

      常用数学符号命令

      除了微分符号⁠,还可以根据全文的符号约定定义其他高频命令⁠:

      \newcommand{\ee}{\mathrm{e}}
      \newcommand{\ii}{\mathrm{i}}
      \newcommand{\RR}{\mathbb{R}}
      \newcommand{\CC}{\mathbb{C}}
      \newcommand{\vect}[1]{\bm{#1}}

      于是可以写⁠:

      \ee^{\ii kx}
      x\in\RR
      \vect{p}

      自定义命令应尽量表达语义⁠,而不只是保存某种外观⁠。例如⁠,\vect{p} 表示“⁠向量 ppp⁠”⁠,比直接在全文反复书写 \bm{p} 更能体现符号用途⁠。不过⁠,如果某项内容只出现一两次⁠,则未必值得单独定义命令⁠。

      使用 \DeclareMathOperator 定义运算符

      反复使用的数学运算符不应通过普通文本或简单的 \mathrm{} 模拟⁠。加载 amsmath 后⁠,可以在导言区使用⁠:

      \DeclareMathOperator{\rank}{rank}
      \DeclareMathOperator{\Tr}{Tr}
      \DeclareMathOperator{\diag}{diag}

      正文中可以写⁠:

      \rank A
      \Tr(\rho)
      \diag(a_1,\ldots,a_n)

      \DeclareMathOperator 会自动使用正体字体⁠,并按照数学运算符规则处理左右间距⁠。

      需要像 \lim 一样允许上下限出现在运算符正下方时⁠,可以使用带星号的形式⁠:

      \DeclareMathOperator*{\argmin}{arg\,min}
      \DeclareMathOperator*{\argmax}{arg\,max}

      然后写⁠:

      \argmin_{x\in X} f(x)

      在展示公式中⁠,下标可以出现在运算符下方⁠。

      使用 mathtools 定义成对定界符

      若文档中频繁使用绝对值⁠、范数⁠、期望值或内积⁠,可以加载⁠:

      \usepackage{mathtools}

      然后定义⁠:

      \DeclarePairedDelimiter{\abs}
        {\lvert}{\rvert}
      
      \DeclarePairedDelimiter{\norm}
        {\lVert}{\rVert}
      
      \DeclarePairedDelimiter{\avg}
        {\langle}{\rangle}

      正文中可以写⁠:

      \abs{x}
      \norm{\vect{x}}
      \avg{A}

      带星号的形式会自动调整定界符大小⁠:

      \abs*{\frac{x}{y}}

      也可以手动指定尺寸⁠:

      \abs[\Big]{\frac{x}{y}}

      这种方式通常比直接将 \left 和 \right 写入普通 \newcommand 更灵活⁠,因为它同时保留了固定尺寸⁠、自动尺寸和手动尺寸三种选择⁠。

      使用 \newenvironment 定义环境

      除了命令⁠,还可以通过 \newenvironment 定义新的环境⁠:

      \newenvironment
        {环境名}
        {开始部分}
        {结束部分}

      例如⁠,可以定义一个简单的重点提示环境⁠:

      \newenvironment{important}
        {\begin{quote}\bfseries}
        {\end{quote}}

      正文中使用⁠:

      \begin{important}
      这一结论只适用于惯性参考系。
      \end{important}

      环境开始时执行 \begin{quote}\bfseries⁠,结束时执行 \end{quote}⁠。如果需要带参数的环境⁠,可以写成⁠:

      \newenvironment{namednote}[1]
        {\begin{quote}
         \textbf{#1}\par}
        {\end{quote}}

      正文中使用⁠:

      \begin{namednote}{注意}
      这里填写提示内容。
      \end{namednote}

      复杂的提示框⁠、颜色框和可分页环境通常更适合使用 tcolorbox⁠、mdframed 等专用宏包⁠,而不是完全依靠 \newenvironment 手工实现⁠。

      集中管理全局设置

      许多宏包都提供了统一设置接口⁠。与其在正文中反复指定格式⁠,不如将全局规则集中放在导言区⁠。

      加载 siunitx 后⁠,可以使用⁠:

      \sisetup{
        per-mode = symbol,
        exponent-product = \times,
        uncertainty-mode = separate
      }

      统一设置全文的数值和单位格式⁠。这样当期刊⁠、学校或个人格式要求发生变化时⁠,只需修改导言区的一处设置⁠,而不必逐个修改正文中的数值⁠。

      hyperref 也可以先单独加载⁠,再通过 \hypersetup 集中管理链接样式和 PDF 元数据⁠:

      \usepackage{hyperref}
      
      \hypersetup{
        colorlinks = true,
        bookmarks = true,
        linkcolor = blue,
        citecolor = blue,
        urlcolor = blue,
        pdftitle = {文档标题},
        pdfauthor = {Hua Chen}
      }

      如果项目中的图片统一存放在 figures/ 目录⁠,还可以使用⁠:

      \graphicspath{{figures/}}

      之后便可以将 \includegraphics{figures/example.pdf} 简化为 \includegraphics{example.pdf}⁠。多个图片目录可以写成⁠:

      \graphicspath{
        {figures/}
        {images/}
        {plots/}
      }

      每个路径都需要单独放在一组花括号中⁠,并通常以 / 结尾⁠。

      使用 \input⁠、\include 和 \includeonly

      较长文档可以拆分为多个源文件⁠。\input 会将目标文件的内容直接插入当前位置⁠:

      \input{sections/introduction}

      通常不需要写 .tex 扩展名⁠。\input 适合插入章节⁠、表格⁠、公式推导⁠、TikZ 图形和重复使用的配置片段⁠。

      \include 更适合按章拆分长文档⁠:

      \include{chapters/introduction}

      \include 通常会在前后分页⁠,并为每个文件生成独立的辅助文件⁠,因此不适合插入很短的局部内容⁠。

      使用 \includeonly 可以只编译指定章节⁠,同时尽量保留其他章节的编号和交叉引用信息⁠:

      \includeonly{
        chapters/introduction,
        chapters/results
      }

      \includeonly 只控制通过 \include 引入的文件⁠,不影响 \input⁠。一般而言⁠,局部内容和短文件使用 \input⁠,书籍或论文的完整章使用 \include⁠,需要选择性编译章时再配合 \includeonly⁠。

      设置编号方式和目录深度

      加载 amsmath 后⁠,可以让公式按章节编号⁠:

      \numberwithin{equation}{section}

      公式编号将从 (1)⁠、(2)⁠、(3) 变为类似 (1.1)⁠、(1.2)⁠、(2.1) 的形式⁠。

      目录显示深度可以通过⁠:

      \setcounter{tocdepth}{2}

      进行设置⁠。对于 article 和 ctexart⁠,常见层级为⁠:

      数值层级
      0section
      1subsection
      2subsubsection

      对于 book 和 report 类文档⁠,层级编号会因为存在 chapter 而有所不同⁠。

      章节编号深度可以使用⁠:

      \setcounter{secnumdepth}{2}

      这表示编号到 \subsubsection 层级⁠。目录深度和编号深度是两个独立设置⁠:前者控制哪些层级出现在目录中⁠,后者控制哪些层级显示编号⁠。

      使用分组限制设置范围

      花括号可以形成局部分组⁠,使字体⁠、字号或对齐设置只在特定范围内生效⁠:

      {
        \small
        这段文字使用较小字号。
      }
      
      {
        \centering
        局部居中的内容\par
      }

      分组结束后⁠,设置会自动恢复⁠。许多环境本身也会形成分组⁠,因此在环境内部修改字体⁠、颜色或长度时⁠,设置通常不会影响环境外部⁠。相比在后文手动恢复设置⁠,利用分组限制作用范围通常更安全⁠。

      自定义命令的维护原则

      自定义命令虽然方便⁠,但过度使用也会降低源文件的可读性和可移植性⁠。较稳妥的做法是优先定义具有明确语义⁠、会在全文反复使用的命令⁠,避免为了缩短少量输入而创建大量晦涩缩写⁠。

      命令名应尽量避免覆盖已有命令⁠。自定义命令可以集中放在 main.tex 的导言区⁠,也可以在项目扩大后拆分到单独文件⁠:

      \input{preamble/commands}

      命令定义中不应加入不必要的固定空格⁠。数学间距应尽量由符号语义和数学原子类型决定⁠,而不是依赖大量手工空格⁠。修改某个公共命令的参数或输出形式后⁠,还应重新编译并检查全文⁠,因为一个命令可能已经在许多位置被使用⁠。

      常见问题排查

      从第一条关键错误开始

      编译日志中可能同时出现大量错误⁠,但后面的错误往往只是第一个错误引发的连锁反应⁠。排查时应优先寻找第一条真正的错误信息⁠,并检查花括号⁠、数学定界符以及 \begin⁠、\end 是否成对⁠,命令是否拼写正确⁠,所需宏包是否已经加载⁠,是否直接输入了 %⁠、_⁠、& 等特殊字符⁠,以及当前编译器是否符合文档类和字体配置要求⁠。

      一次只撤销或修改一个可疑位置⁠,比同时改动多项设置更容易定位问题⁠。

      错误⁠:

      Undefined control sequence

      通常表示 LaTeX\LaTeXLATE​X 不认识某个命令⁠。常见原因包括命令拼写错误⁠、忘记加载提供该命令的宏包⁠、自定义命令尚未定义⁠、定义命令的文件没有被正确 \input⁠,或者当前编译方式不支持所使用的命令⁠。

      例如⁠,使用⁠:

      \qty{3}{\metre}

      之前需要加载 siunitx⁠;使用⁠:

      \bm{\alpha}

      之前需要加载 bm⁠。

      若使用 \newcommand{\RR}{...} 时出现命令已经定义的错误⁠,说明该命令已经由文档类⁠、宏包或其他配置定义⁠。应先确认原命令的用途⁠,再考虑更换命令名称⁠、使用 \renewcommand 明确覆盖⁠,或者在通用片段中使用 \providecommand⁠。不建议为了消除错误而盲目将所有 \newcommand 改成 \renewcommand⁠。

      目录⁠、编号和参考文献没有更新

      交叉引用⁠、目录和参考文献列表依赖辅助文件⁠,通常需要多轮编译⁠。若引用显示为 ??⁠,应先确认 \label{eq:example} 与 \ref{eq:example} 的名称完全一致⁠,然后再次编译⁠,或者直接使用⁠:

      latexmk -xelatex main.tex

      目录内容保存在 .toc 文件中⁠。新增⁠、删除或修改章节标题后⁠,通常也需要再次编译⁠。如果目录或引用长期不更新⁠,可以清理辅助文件后重新构建⁠:

      latexmk -c
      latexmk -xelatex main.tex

      也可以手动删除 .aux⁠、.toc⁠、.out 等辅助文件后重新编译⁠。若同时删除 .bbl 文件⁠,还需要重新运行 BibTeX 或 Biber⁠;使用 latexmk 时通常可由其自动完成⁠。

      图片位置或文件路径异常

      figure 和 table 是浮动环境⁠,LaTeX\LaTeXLATE​X 会综合当前页剩余空间⁠、浮动体尺寸和浮动规则决定实际位置⁠。图片没有出现在源代码所在位置⁠,并不一定表示排版错误⁠。可以先检查图片是否过大⁠、[htbp] 是否提供了足够的位置选择⁠、当前页面是否有足够空间⁠,以及是否连续放置了过多浮动体⁠。

      应避免一开始就使用大量强制定位命令破坏分页⁠。确有严格定位需求时⁠,可以研究 float 宏包提供的 [H] 参数⁠,但它应谨慎使用⁠。

      如果编译器无法找到图片⁠,应检查文件路径⁠、文件名大小写⁠、图片是否已经复制到项目目录⁠、\graphicspath 是否设置正确⁠,以及当前编译环境是否支持相应图片格式⁠。例如⁠:

      \includegraphics{figures/example.pdf}

      要求项目中实际存在⁠:

      figures/example.pdf

      Windows 文件系统通常不严格区分大小写⁠,但 Linux 和许多在线编译环境会区分⁠。因此⁠,Example.pdf 与 example.pdf 可能被视为两个不同文件⁠。

      字体与中文编译问题

      如果出现与 fontspec 或字体名称有关的错误⁠,应检查当前是否使用 XeLaTeX 或 LuaLaTeX⁠、字体是否已经安装⁠、字体名称是否与系统识别名称一致⁠,以及在线编译环境中是否存在该字体⁠。字体文件名不一定等于 fontspec 使用的字体族名称⁠,必要时可以通过操作系统字体管理工具或 fc-list 等命令检查字体信息⁠。

      如果中文无法正常显示⁠,可以依次检查源文件是否使用 UTF-8 编码⁠,是否使用 ctexart⁠、ctexrep⁠、ctexbook 或加载了 ctex⁠,是否使用 XeLaTeX 或 LuaLaTeX⁠,手动指定的中文字体是否存在⁠,以及编辑器是否实际调用了预期的编译命令⁠。

      对于初学者⁠,最稳妥的中文文档开头通常是⁠:

      \documentclass{ctexart}

      并使用⁠:

      xelatex main.tex

      进行编译⁠。

      跨设备编译与旧结果问题

      模板在另一台电脑上不能编译⁠,通常是因为缺少字体⁠、图片⁠、.bib 文件⁠、拆分后的 .tex 文件或宏包⁠,也可能是编译器⁠、TeX 发行版版本或文件名大小写不同⁠。

      一个可移植的项目至少应包含全部 .tex 源文件⁠、图片和绘图资源⁠、.bib 文件⁠、项目级编辑器配置⁠,以及对编译方式和额外字体依赖的说明⁠。如果项目使用 Git⁠,还应合理配置 .gitignore⁠。通常可以忽略 .aux⁠、.log⁠、.out⁠、.toc 等可重新生成的辅助文件⁠,但不应忽略源文件⁠、图片和参考文献数据库⁠。

      如果修改源文件后仍然显示旧结果⁠,可能是编辑器没有保存文件⁠、编译了另一个同名文件⁠、主文件设置错误⁠、PDF 预览没有刷新⁠、辅助文件仍保留旧状态⁠,或者编译在中途失败⁠,旧 PDF 没有被覆盖⁠。可以检查终端中的实际编译路径和日志⁠,并尝试⁠:

      latexmk -C
      latexmk -xelatex main.tex

      需要注意⁠,latexmk -C 会同时删除生成的 PDF⁠,因此应确保源文件和资源文件已经妥善保存⁠。

      写在最后

      第一次接触 LaTeX\LaTeXLATE​X⁠,不需要把本文所有命令都记下来⁠。先形成以下习惯⁠,已经足以应付大多数入门写作⁠:

      • 中文文档优先使用 XeLaTeX 或 LuaLaTeX⁠;
      • 从精简模板开始⁠,只加载实际需要的宏包⁠;
      • 用结构命令表达章节⁠、列表⁠、图表和公式⁠,不用空格硬调版面⁠;
      • 给公式⁠、图片⁠、表格和章节设置有规律的标签⁠;
      • 将公式视为句子的一部分⁠,注意文字⁠、正体符号和标点⁠;
      • 将重复出现的符号和格式定义为语义明确的命令⁠;
      • 遇到问题时先阅读第一条关键错误信息⁠,再检查最近的改动⁠;
      • 不确定命令时可以借助 AI⁠,但仍应通过编译结果和宏包文档进行验证⁠。

      这篇文章既是一份 LaTeX\LaTeXLATE​X 入门说明⁠,也是一篇日常速查笔记⁠:忘记某个命令时可以迅速定位⁠,需要新功能时也能判断应将其加入基础模板⁠、正文结构还是项目级配置⁠。

      对于初学者⁠,只要能够从基础模板出发⁠,独立完成一份包含中文⁠、公式⁠、图表⁠、交叉引用和参考文献的文档⁠,就已经建立了继续学习和维护更复杂项目所需的基础⁠。

      上一篇 JavaScript 7. 现代语法、协议与元编程 2026 年 7 月 19 日 下一篇 JavaScript 2. 函数 2026 年 7 月 11 日
      © 2026 CHEN Hua All rights reserved
      闽ICP备2026003335号 · 粤公网安备44030002014022号
      © Hua Chen / PhysChen.com