我在读LaTeX:不要使用这些命令,但作者没有解释为什么它们不好。有人能帮我理解一下吗?
\\
(除了表格、数组或诗句等特殊环境)\textbf
或\bf
(通常需要\vec
或分段\paragraph
)\texttt
或\tt
(通常需要逐字环境或\url
命令)\textit
或 \it (使用\emph
)\textsf
或者\sf
\mathrm
或\rm
(通常需要\operatorname{}
或\text{}
)\tag
\eqno
\dfrac
\displaystyle
\hspace
\vspace
\limits
\noindent
\newpage
\clearpage
\linebreak
\pagebreak
答案1
我不同意链接页面中表达的一些观点。要避免的命令列表没有区分要不惜一切代价避免的命令和应该在序言中定义个人宏的命令;列出的一些命令做在文档主体中占有一席之地。
笔记以下内容不应理解为“照做,否则你就错了”;大多数建议对于短文档来说意义不大,因为一眼就足以控制整个文档,而为单一用途定义个人命令会浪费时间。对于短文档,只需严格遵循前两节。
必须的命令绝不使用
两个字母的字体更改命令(例如\bf
、或\it
)必须\tt
\sf
绝不可用于文档正文或序言中。自 1992 年引入 LaTeX2e 以来,它们已过时。
问题在于\\
有人可能还记得阿尔弗雷德·希区柯克的电影《哈里的麻烦》,其中一具尸体出现在新英格兰一个安静的小镇上,引起了各种麻烦。我们的电影也\\
很相似。
该\\
命令应该非常稀有表示“断行” ,除非在需要明确标记换行符的环境中:flushleft
,,,,,,,,flushright
center
tabular
tabbing
align
gather
multline
派生换行符。然而,在某些情况下,它能可以使用,但是不是用于表示段落结束或“留一个空白行”。
该\noindent
命令非常相似:我认为除了涉及 TeX 编程解释的非常特殊情况外,文档主体中没有使用过该命令(此类文档通常需要手动调整,但这是例外,而不是常规)。如果\noindent
文档中需要该命令,则文档的准备方式存在问题。
字体更改命令
“现代”字体更改命令应被视为构建逻辑结构的工具。例如,\textit
或\mathit
(区别在于前者尊重输入中的空格,因为它切换到文本模式)应该用于数学公式中的多字母标识符。如果我们的变量被称为不同之处,那么$difference=a-b$
就是错误的,而是$\mathit{difference}=a-b$
正确的。然而,在序言中这样说会更好
\newcommand{\mli}[1]{\mathit{#1}}
% macho programmer version
% \newcommand{\mli}{\mathit}
这样,如果我们改变了关于如何表示这些变量的想法,就可以随意重新定义它:只需修改的定义\mli
,这样就避免了在文档中寻找\mathit
。
如果我们想要数字集的符号具有统一的外观,最好这样说
\usepackage{amssymb} % or amsfonts
\newcommand{\numberset}[1]{\mathbb{#1}} % or \newcommand{\numberset}{\mathbb}
\newcommand{\N}{\numberset{N}}
\newcommand{\Z}{\numberset{Z}}
\newcommand{\Q}{\numberset{Q}}
因此改变的含义将会改变、和\numberset
的所有呈现。\N
\Z
\Q
同样的考虑也适用于其他字体更改命令:寻找看起来像逻辑单元在您的文档中并为其定义一个宏(或环境)。
一个例外是\emph
这已经是一个高级命令:它意味着强调如何实现强调则留给班级(或用户)去决定。
间距命令
从理论角度来看,\hspace
和\vspace
在文档主体中没有位置。但是,偶尔的构造可能需要它们,而不必费心为单一用途定义环境。例如,如果我们想要一个奉献页,很容易说
\cleardoublepage
\thispagestyle{empty}
\vspace*{\stretch{1}}
\begin{flushleft}
\sffamily\slshape
To the masters in directing,\\
John Ford, John Ford and John Ford
\end{flushleft}
\vspace*{\stretch{2}}
\cleardoublepage
(我假设包emptypage
已加载或类允许指定自动插入的空白页确实是空白的)而不是定义dedication
仅使用一次的环境。
在文档正文中\medskip
也\bigskip
可以使用,但对于它们来说,最好定义使用它们的个人间距命令,以便我们可以依赖外观的统一。
换行和分页命令
应该避免使用明确的换行和分页命令,但\cleardoublepage
处理手动插入的超链接时有时可能需要这样做。
在里面最终修订在文档中,可能需要插入一些\linebreak
、\pagebreak
或\clearpage
命令。选择是定义一个个人命令,以便在准备新版本时可以禁用,或者插入它们并附带一个清晰且明确的注释行。在这两种情况下,最终的 TeX 文档都不应该有这些在新版本中显示为过时的命令的痕迹,因此无论如何都必须搜索它们。
同样的考虑也适用于\enlargethispage
。
数学模式命令
虽然\limits
内联数学公式应该不是被使用时,它在之后就会显现出来\int
;如果你有一个域上的积分而不是有边界的积分,并且域符号是“大”,那么说\int\limits_{\partial A\int B}
肯定比将域设置在侧面更好。
我不同意以下断言:不应在文档正文中使用\dfrac
和\displaystyle
。这是错误的,它们在许多情况下很有用:复杂的公式必须由较小的部分组成,其中一些可能需要特殊处理。
\tag
和\eqno
虽然\eqno
不是 LaTeX 命令,不应使用,\tag
但一定可以使用的东西。在许多数学领域,论文中没有编号的方程式,只有其中一些需要参考。许多作者不喜欢难以找到的数字,而喜欢可以更好地识别公式的符号或单词。
(AJ Roberts 教授从事数学分析,其中编号方程式是常态。分析师通常认为,他们所在领域所做的事情在其他地方也是以同样的方式进行的。但事实并非如此。)
答案2
通常不建议使用这些命令,因为它们不符合“LaTeX 方式”:WYSIWYM(所见即所得)。
鼓励作者使用特定于内容含义的宏,而不是其方面的宏。
一个简单的(经典的)例子:假设你正在写一篇数学论文,你决定用\mathbf
罗马字体写你的向量,以及你的运算符(det、ker 等)。现在你意识到你更喜欢使用箭头而不是向量,并将运算符简单地放在罗马字体中。你将不得不经历一个漫长的搜索/替换过程来修复它。
相反,你应该使用如下定义:
\newcommand{\vector}[1]{\mathbf{#1}}
\newcommand{\operator}[1]{\mathbf{#1}}
因此,当您需要分别更改向量和运算符的方面时,您只需更改相应的命令定义。
与此问题相关的另一个点是代码的可读性,但这实际上取决于其他人是否会阅读您的代码,以及您/他们的习惯。
还要注意,总会有一些情况,你别无选择,只能使用低级显示黑客,其中一些黑客比简单的要肮脏得多\textbf
。因此,此建议仅应视为此类建议,而不应视为强制执行的规则。