大家在使用 LaTeX 时,肯定为功能相似的命令或平时习惯所困扰过,大多数问题在于「什么是最佳实施方法?」这点上,于是我列举一些问题,希望得到充分的回答。当然回答者可以自己(或联系我)补充更多没考虑到的问题。
另外,在回答问题时候,希望明确指出回答的是第几点问题(你不必回答所有的问题!),希望能在第一句给出结论,后面再进行具体的分析。
下面是问题:
$...$ 而不要 \(...\)?\[...\] 而不要 $$...$$?如果加上 equation* 环境最佳选择又是什么?align 环境而不要 eqnarray 环境?matrix,bmatrix,pmatrix,vmatrix,Vmatrix 等环境而不要 array 环境去实现矩阵?\bigl,\bigm,\bigr 等命令处理定界符而尽量不要 \left,\right?\to,\gets 还是 \rightarrow,\leftarrowa/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
eqnarray的又一罪状\documentclass[12pt]{article}
\usepackage{showframe}
\usepackage{amsmath,amssymb}
\setlength{\parindent}{0cm}
\numberwithin{equation}{section}
\begin{document}
\section{aaa}
\section{bbb}
\section{ccc}
Why?
\begin{subequations}
\begin{eqnarray}
\tan^{-1}\left(\frac{1}{F_{2n-2}}\right) &=& \tan^{-1}\left(\frac{1}{F_{2n}}\right)+\tan^{-1}\left(\frac{1}{L_{2n-2}}\right)+\tan^{-1}\left(\frac{1}{L_{2n}}\right)\,,\\
\tan^{-1}\left(\frac{2}{L_{2n-1}}\right) &=& \tan^{-1}\left(\frac{1}{F_{2n}}\right)+\tan^{-1}\left(\frac{1}{L_{2n}}\right)\,,
\end{eqnarray}
\end{subequations}
Why not?
\begin{subequations}
\begin{align}
\tan^{-1}\left(\frac{1}{F_{2n-2}}\right) &=& \tan^{-1}\left(\frac{1}{F_{2n}}\right)+\tan^{-1}\left(\frac{1}{L_{2n-2}}\right)+\tan^{-1}\left(\frac{1}{L_{2n}}\right)\,,\\
\tan^{-1}\left(\frac{2}{L_{2n-1}}\right) &=& \tan^{-1}\left(\frac{1}{F_{2n}}\right)+\tan^{-1}\left(\frac{1}{L_{2n}}\right)\,,
\end{align}
\end{subequations}
\end{document}
同样的在上述论文的2.2节,出现「编号与内容重叠」的问题...

数学模式里,为什么要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:
12832latexdef \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。
推荐
$...$而非\(...\)还有一点是,报错信息比较可读。既然提到了
\bfseries和\textbf顺带说下\itshape和\textit这个在「倾斜矫正」上是有差异的。见
https://tex.stackexchange.com/questions/93961/how-does-italic-correction-work
没做验证,但我猜
\check@icl和\check@icr正是在自动进行左侧(Left)和右侧(Right)的斜体修正(Italic Correction)@u70550 这是不是意味着,更推荐用text某某{文字},而不是famliy、series等命令?
@u115385
以下是个人看法
作为
latex2e的用户,我们应该尽量使用「封装好的高层命令」(忘记在哪里看过了...),而尽量少使用plain-TeX提供的底层命令...这意味着应该尽量优先使用
\textbf(latex2e)而不是底层的\bf(plain=TeX)命令。以下来自「
texdoc usrguide-historic」但从上面的文档来看,
\textbf和\bfseries「 似乎基本 」上是 同类型 也是 同封装层次 的命令,无非是:\textbf吃一个参数,自带一个编组\bfseries对当前编组内的所有字体生效因此在我自己的使用中,如果是要在句子中加粗部分内容,我会更prefer用
\textbf:如果要指定某个编组内的设置,我会更prefer用
\bfseries:前者是语义更明确,后者是我不知道用
\textbf要怎么写...@u115385 关于这两者区别: