2021 年的脆弱指令

2021 年的脆弱指令

自 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)才能理解一些输出)。

相关内容