LaTeX公式编号与定理引用怎么设置

讲清LaTeX里公式编号的常用写法、多行公式的编号处理,以及定理、定义如何用标签被正文和其他定理引用,并给出编译后的核对方法。

写论文或讲义时,很多人能让公式自动编号,却在正文里手写“见式(3)”。一旦前面增加或删除一个公式,编号全部错位,只能逐处改。定理、引理、定义的引用也是同一个问题,手写编号既难维护,也容易和期刊模板冲突。

这篇文章写给已经会写基本 LaTeX、但还没掌握编号与交叉引用的人。读完你能分清公式编号的几种写法,知道多行推导怎么只给需要的行编号,也能照着步骤让定理和定义在正文中被正确引用,并在编译后检查结果。

LaTeX 的编号和引用依赖“标签”机制:给对象打上名字,正文里按名字引用,编号由编译器自动生成。下面的内容都围绕这一机制展开。

公式编号和定理引用怎么设?一句话结论

用标签加交叉引用命令:公式用 eqref 引用,定理和定义用 ref 引用(需要带上“定理”字样时用 cleveref 宏包的 cref),编号全部由 LaTeX 自动生成,不要手写数字。

你的情况推荐做法原因
单个独立公式需要编号放进 equation 环境并加标签,正文用 eqref编号自动生成,引用时自动带括号
多行推导,每行都要或只有部分行要编号用 align 环境,需要编号的行加标签,其余行用 notag编号跟着行走,删行不影响其他编号
论文要求 (2.1) 这类按章节编号在导言区用 numberwithin 设置公式按 section 计数计数器随章节重置,格式统一
定理、定义要被其他地方引用环境内加标签,正文用 ref;需要“定理 2.1”字样时用 crefref 只给编号,cref 会自动补上类别名

开始之前:先确认这几点

  • 导言区加载 amsmath 和 amsthm。 eqref 和 align 依赖 amsmath,定理环境依赖 amsthm。缺少它们,命令会报错,或者编号不符合预期。
  • 先看模板是否已经定义定理环境。 期刊和学位论文模板通常自带 theorem、definition 等环境。重复定义会报错,应直接使用模板里已有的名字。
  • 统一标签前缀。 建议公式用 eq:,定理用 thm:,定义用 def:,引理用 lem:。标签名区分大小写,同一文档内不能重复,前缀能显著减少冲突。
  • 提前决定编号范围。 论文一般要求按章节编号,讲义常用全文连续编号。这个选择要在写第一个公式之前确定,中途改动会让所有引用都要重新核对。
  • 原稿是 LaTeX 源码包时,先在本地编译通过。 只有源文件能正常编译,才能判断标签与编号是否对应。如果用 OmniDoc 翻译 LaTeX 源码包,译后也要对照原文检查公式编号和引用,不能只看译文是否通顺。

在 LaTeX 里给公式编号并引用的步骤

  1. 在导言区加载 amsmath 宏包。如果需要点击引用跳转,再加载 hyperref,并尽量放在其他宏包之后。
  2. 用 equation 环境写需要编号的公式。编译后公式右侧会自动显示编号。
  3. 在 equation 环境内部、公式之后写标签命令,例如标签名 eq:energy。标签必须在环境内,写到环境外会引用到上一个编号。
  4. 在正文需要引用的位置写 eqref,例如“由式 \eqref{eq:energy} 可得”的形式。括号会自动生成,不必手动加。
  5. 多行推导改用 align 环境,每一行用双反斜杠换行。只在需要引用的行加标签,不需要编号的行加 notag。
  6. 如果要按章节编号,在导言区设置公式计数器随 section 重置。设置后,公式编号会变成“章号.序号”的形式。
  7. 连续编译两次。第一次记录标签位置,第二次把编号写进引用处。

定理与定义的编号和引用步骤

  1. 在导言区用 newtheorem 定义定理环境,例如环境名 theorem,显示名 Theorem。
  2. 定义 definition 环境时,让它与定理共用计数器:环境名后接方括号,里面写 theorem,显示名写 Definition。这样定义和定理会连续编号,不会各自从 1 开始。
  3. 如果希望定理按章节编号,在 newtheorem 的末尾加方括号写 section。这个写法要放在导言区,不要在正文中修改。
  4. 在定理环境的 begin 命令之后,紧接着写标签,例如 thm:main。标签放在正文第一行之前,编号才准确。
  5. 在正文中用 ref 引用,例如写“由定理 \ref{thm:main} 可知”,输出的是“定理 2.1”这类编号。
  6. 如果希望输出自动带上“Theorem”或“定理”字样,加载 cleveref 宏包,并放在 hyperref 之后,然后用 cref 代替 ref。
  7. 在定义里引用定理,写法与正文相同:在 definition 环境中写 ref 和对应标签即可。遇到定义在定理之前的向前引用,同样需要编译两次。

做完后逐项核对

编译完成后,打开 PDF 逐项检查下面几项。

检查项怎么看有问题怎么办
引用处是否显示问号在 PDF 中查看正文里的编号连续编译两次;仍有问号就检查标签名拼写
引用与被引对象是否对应点击引用跳转(需 hyperref),或翻到对应页核对检查标签是否写在对应环境内部
标签是否重复查看编译日志中的 multiply defined 警告给其中一个标签换名
定理和定义编号是否连续目测定理环境的编号顺序检查定义环境是否引用了 theorem 计数器
多行公式的编号是否多出或缺失逐行查看 align 环境的右侧编号对不需要编号的行加 notag,对需要的行补标签
增删内容后引用是否同步修改后重新编译,并再次检查引用处连续编译两次,确认问号消失

📊 核心对比

写法编号情况适合场景
equation 环境整个公式一个编号单个需要被引用的公式
align 环境每行可单独决定是否编号多行推导,只引用其中几行
equation* 或 \[ \]没有编号不需要引用的展示公式
在公式中使用 tag 命令编号内容由自己指定需要特殊标记,如星号或附录编号

❓ 常见问题(FAQ)

1. 引用处显示问号,是哪里出了问题?

多数情况是没有连续编译两次,LaTeX 第一次编译只记录标签位置,第二次才会把编号写入引用。如果编译两次仍有问号,检查标签名是否拼写一致,并确认标签确实写在了对应环境内部。

2. LaTeX 公式编号格式怎么改成 (2.1) 这种?

在导言区设置公式计数器随 section 重置,编号就会变成“章号.序号”的形式。注意这个设置要在文档开始前完成,正文中途修改容易让前后编号不一致。

3. 引用公式时能不能不带括号?

可以。eqref 会自动加括号,如果只想要数字本身,可以改用 ref。两者都依赖同一个标签,只是输出的格式不同。

4. 在定义里引用定理,写法和正文有区别吗?

没有区别。在定义环境里直接写 ref 和定理标签即可。如果定义和定理互相引用,同样要编译两次才能让编号稳定。

5. 用 OmniDoc 翻译 LaTeX 源码包后,公式编号还能直接用吗?

译后文件需要重新编译,并对照原文检查公式编号、标签引用和定理序号。翻译只是处理文字内容,判断编号是否正确仍要靠编译结果和人工核对。

📝 总结

LaTeX 的公式编号和定理引用,核心是给对象加标签、用引用命令调用,把编号交给编译器维护。按本文的步骤设置好计数器和标签前缀,编译两次后逐项核对,就能避免手写编号带来的错位问题。

打开 OmniDoc,编辑、转换或翻译你的 LaTeX 文档

更新于 2026-11-04