自 2015 年以来,\(
\)
等\begin{math}
都已变得强大。除了未使用创建的用户生成的命令外\DeclareRobustCommand
和过时的软件包创建的用户生成的命令之外,如今 LaTeX 中脆弱的命令是否仍然存在?换句话说,我可以从我的书中为 LaTeX 用户(不是程序员)删除该部分吗?(将在以后的书中为人们讨论这个问题编程LaTeX 是完全不同的东西。)
答案1
嗯,不是完全消失,但你必须更加努力地寻找案例,如果它是一个非常合理的案例,我们很可能会接受增强请求以使命令变得强大。
例如\begin
,一直很强劲(仅从 2019 年开始,而不是 2015 年),因此也\begin{tabular}
很强劲,同样如此\\
(从 2015 年开始)但\cline
不是,比较这两个\typeout
\documentclass{article}
\begin{document}
\typeout{
\begin{tabular}{cc}
a&b\\
\cline{1-1}
c&d
\end{tabular}}
\typeout{
\begin{tabular}{cc}
a&b\\
\protect\cline{1-1}
c&d
\end{tabular}}
\end{document}
生产
\begin {tabular}{cc} a&b\\ \omit \@multicnt 1\advance \@multicnt \m@ne \relax
\def \iterate {}\iterate \let \iterate \relax \@multicnt 1\advance \@multicnt -
1\advance \@multicnt \@ne \relax \def \iterate {}\iterate \let \iterate \relax
\leaders \hrule height\arrayrulewidth \hfill \cr \noalign {\vskip -\arrayrulewi
dth } c&d \end {tabular}
和
\begin {tabular}{cc} a&b\\ \cline{1-1} c&d \end {tabular}
当然\typeout
这里可以用任何带有移动参数的命令来代替,比如标题或章节标题。
答案2
仍有许多内核命令由于这样或那样的原因尚未被触及,但正如 David 所说,对于大多数内核命令而言,很难构建有意义的用例,因为在现实生活中稳健性至关重要。
但对于主要软件包(例如 amsmath)来说,情况有所不同,其中许多命令仍然很脆弱,但实际上不应该如此。但清理这些命令相当困难,而未完成的任务最终成为一项优先级相当低的任务。
当前状态可以在 github 问题 123 的测试文件中找到,例如
amsmath 稳健性状态和
基础 LaTeX 稳健性状态对于那些对细节感兴趣的人。(您可能还必须阅读相应的输入文件(.lvt
)才能理解一些输出)。