大家在使用 LaTeX 时,肯定为功能相似的命令或平时习惯所困扰过,大多数问题在于「什么是最佳实施方法?」这点上,于是我列举一些问题,希望得到充分的回答。当然回答者可以自己(或联系我)补充更多没考虑到的问题。
另外,在回答问题时候,希望明确指出回答的是第几点问题(你不必回答所有的问题!),希望能在第一句给出结论,后面再进行具体的分析。
下面是问题:
$...$
而不要 \(...\)
?\[...\]
而不要 $$...$$
?如果加上 equation*
环境最佳选择又是什么?align
环境而不要 eqnarray
环境?matrix
,bmatrix
,pmatrix
,vmatrix
,Vmatrix
等环境而不要 array
环境去实现矩阵?\bigl
,\bigm
,\bigr
等命令处理定界符而尽量不要 \left
,\right
?\to
,\gets
还是 \rightarrow
,\leftarrow
a/b
,\frac
,\tfrac
,\dfrac
,\cfrac
的区别和用法?f^a_n
和 f_n^a
的区别?如果带上撇号('
)又应该怎么输入最佳?\bf
,\bfseries
,\mathbf
,\boldmath
,\unboldmath
,\bm
,\boldsymbol
等这几个命令的区别和用法?\par
,\\
,\noindent
,\newline
,\linebreak
和空行等这几个命令的区别和用法?\linespread
而非修改 \baselineskip
?\lineskip
和 \lineskiplimit
两个命令的区别是什么?调整行间距的方法中使用 \setlength
还是 \openup
命令?问题 5: \bigl
等命令能更加随意的改变定界符的大小以适应不同大小的公式,\left, \right
命令也能一定程度的自适应公式大小,但这种适应只能覆盖一小部分场景。
本质上,这二者都是 TeX 层面的命令,它们都受 \delimiterfactor
和 \delimitershortfall
的影响,具体见 TeXbook
下面的例子可以看到 \delimiterfactor
对二者的影响程度不同
此外,\bigl, \bigr, \bigm, \big
等命令之间的差别就是定界符和公式之间的水平间距
有空的话逐个补充吧(虽然我也不是很懂)。
感觉每一个都可以算是「典中典」的「日经问题」,而且应该都能在「TeX.SE」上找到高赞回答。
数学模式里,为什么要$...$
而不要\(...\)
?
TL;DR: 更推荐$ $
,一方面可以在plainTeX
内使用,另一方面\(\)
不容易因为过多的(
和)
影响代码的可读性。
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
。