关于 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
被浏览
123
2 个回答
shadow
shadow 2小时前
这个人懒得不得了,竟然啥也没写

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

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

image.png

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

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

Sagittarius Rover
Sagittarius Rover 4小时前
我要成为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

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览