关于 LaTeX 的「要」与「不要」的问题?

发布于 2025-07-13 03:29:26

大家在使用 LaTeX 时,肯定为功能相似的命令或平时习惯所困扰过,大多数问题在于「什么是最佳实施方法?」这点上,于是我列举一些问题,希望得到充分的回答。当然回答者可以自己(或联系我)补充更多没考虑到的问题。

另外,在回答问题时候,希望明确指出回答的是第几点问题(你不必回答所有的问题!),希望能在第一句给出结论,后面再进行具体的分析。

下面是问题:

  1. 数学模式里,为什么要 $...$ 而不要 \(...\)
  2. 数学模式里,为什么要 \[...\] 而不要 $$...$$?如果加上 equation* 环境最佳选择又是什么?
  3. 数学模式里,为什么要 align 环境而不要 eqnarray 环境?
  4. 数学模式里,为什么要 matrix,bmatrix,pmatrix,vmatrix,Vmatrix 等环境而不要 array 环境去实现矩阵?
  5. 数学模式里,为什么要 \bigl,\bigm,\bigr 等命令处理定界符而尽量不要 \left,\right
  6. 数学模式里,箭头是使用 \to,\gets 还是 \rightarrow,\leftarrow
  7. 数学模式里,a/b,\frac,\tfrac,\dfrac,\cfrac 的区别和用法?
  8. 数学模式里,f^a_nf_n^a 的区别?如果带上撇号(')又应该怎么输入最佳?
  9. \bf,\bfseries,\mathbf,\boldmath,\unboldmath,\bm,\boldsymbol 等这几个命令的区别和用法?
  10. \par,\\,\noindent,\newline,\linebreak 和空行等这几个命令的区别和用法?
  11. 行距/行间距/段间距的区别是什么?
  12. 调整行距时,为什么推荐设定 \linespread 而非修改 \baselineskip
  13. 关于行间距的 \lineskip\lineskiplimit 两个命令的区别是什么?调整行间距的方法中使用 \setlength 还是 \openup 命令?

查看更多

关注者
1
被浏览
211
2 个回答
shadow
shadow 1天前
这个人懒得不得了,竟然啥也没写

问题 5\bigl 等命令能更加随意的改变定界符的大小以适应不同大小的公式,\left, \right命令也能一定程度的自适应公式大小,但这种适应只能覆盖一小部分场景。

本质上,这二者都是 TeX 层面的命令,它们都受 \delimiterfactor\delimitershortfall 的影响,具体见 TeXbook

image.png

下面的例子可以看到 \delimiterfactor 对二者的影响程度不同
image.png

此外,\bigl, \bigr, \bigm, \big 等命令之间的差别就是定界符和公式之间的水平间距
image.png

Sagittarius Rover
我要成为Typst糕手/(ㄒoㄒ)/~~

有空的话逐个补充吧(虽然我也不是很懂)。

感觉每一个都可以算是「典中典」的「日经问题」,而且应该都能在「TeX.SE」上找到高赞回答。

关于一:

数学模式里,为什么要 $...$ 而不要 \(...\)

TL;DR: 更推荐$ $,一方面可以在plainTeX内使用,另一方面\(\)不容易因为过多的()影响代码的可读性。

image.png

image.png

Ref: https://tex.stackexchange.com/a/513/322482


关于二:

数学模式里,为什么要 \[...\] 而不要 $$...$$

TL;DR: 其实是很典的,$$...$$前后的间距处理不正确,而\[...\]可以正确处理公式前后的行间距。

如果加上 equation* 环境最佳选择又是什么?

amsmath文档里的表述是:\[...\]equation*完全等价。

但考虑到代码可读性和这个评论,似乎equation*在语义上会略好于\[\]

Ref1: 详见「孟晨」的这个回答
(P.S.)上述的评论区还有刘海洋对问题一的comment😀

Ref2: https://tex.stackexchange.com/questions/503/why-is-preferable-to


问题一与问题二的表述性质不太相同。

对于问题一:是「推荐」$...$而不是\(...\)

对于问题二:是「几乎不要(never)」(或者说严重点「禁止」)使用$$...$$,请使用\[...\]equation*.


关于三:

数学模式里,为什么要 align 环境而不要 eqnarray 环境?

TL;DR: 两个主要缺陷:

  • eqnarray在等号=周围设置的水平间距与其他数学环境(如\[...\]>$$...$$)不一致(其间距更宽)。
  • eqnarray(以及eqnarray*!)的公式编号定义不明确,导致引用时出现编号错误——尤其在使用\nonumber命令时。

经典回答在:https://tex.stackexchange.com/a/197/322482

详见Ref: https://tug.org/pracjourn/2006-4/madsen/madsen.pdf


关于四:

数学模式里,为什么要 matrix,bmatrix,pmatrix,vmatrix,Vmatrix 等环境而不要 array 环境去实现矩阵?

也许是这个链接(?)

  • array是LaTeX所有文档类通用的默认环境,而matrix需通过amsmath宏包或AMS类(如amsbook, amsart)引入。
  • matrix环境主要为实现命名统一性而存在,因amsmath还提供带定界符的矩阵变体(如pmatrix, bmatrix, Bmatrix, vmatrix, Vmatrix)。
  • matrix无需像array那样指定列对齐参数(如{ccc}),默认支持最多10列居中对齐(如需其他对齐方式仍需使用array)。若需超过10列,需修改MaxMatrixCols计数器。
  • matrix的水平间距更紧凑(即array的宽度大于matrix)。

(Translation Powered By Gemini...)


关于六:

数学模式里,箭头是使用 \to,\gets 还是 \rightarrow,\leftarrow

首先使用latexdef看定义的区别:

latexdef \gets
\gets:
\mathchar"3220

\the\gets:
12832

latexdef \leftarrow

\leftarrow:
\mathchar"3220

\the\leftarrow:
12832
latexdef \to

\to:
\mathchar"3221

\the\to:
12833

latexdef \rightarrow

\rightarrow:
\mathchar"3221

\the\rightarrow:
12833

一方面,从定义上看:\to\rightarrow内部「使用的字符是同一个

但另一方面....IMHO, 优秀的code要保持代码语义上的可读性,换言之:

  • 当想表达的是\to语义上的「趋向于」的意思,例如\lim_{n\to\infty}时,用\rightarrow是不合适的
  • 当仅仅想表达\rightarrow语义上的「从A到B的指向」的含义,而非「to」的意思时,用\to也是不合适的

关于九:

\bf,\bfseries,\mathbf,\boldmath,\unboldmath,\bm,\boldsymbol 等这几个命令的区别和用法?

来自@u73286 老师的回答:

\bf: TeX 自带的命令,和现在的 NFSS 字体机制不太兼容,不推荐使用;
\bfseries: NFSS 下切换粗体的命令, 和 \textbf 一样;
\mathbf: 这个字体在默认配置下对应:OT1 cmr bx n, 其实就是 \textbf 对应的字体;
\boldsymbol: 由 AMSTeX 宏集中的 amsbsy 宏包提供, 部分情况下可能出现一些间距问题;
\bm: 会自动处理加粗对应的数学字体,还附带一些间距和斜体纠正, 推荐使用;
还有两个:
\boldmath: 和 \unboldmath 对应,是由于 LaTeX2e 的历史原因才保留下来的;
\mathversion{bold}\mathversion{normal},它们和 \boldmath, \unboldmath 差不多,都会改变整个公式的样式, 但是推荐使用前者, 而不是 \boldmath, \unboldmath

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览