关于移动参数的澄清

关于移动参数的澄清

我正在阅读latex2e有关 的使用\protect。第 13.8 节提到“tabulararray环境中的表达式”作为移动参数的示例。我对此感到有点惊讶。有人能解释一下这里的意思吗?或者,为什么会这样?

我尝试过,例如

\documentclass{article}
\usepackage{etoolbox}

\makeatletter

\newcommand\ae@suchthat{\mid}
\newcommand\set[1]{%%
  \begingroup
    \let\suchthat\ae@suchthat
      \{\,#1\,\}%%
  \endgroup
}

\makeatother

\begin{document}

\begin{tabular}{lc}
This & $\set{x\in X \suchthat x>42}$
\end{tabular}

\end{document}

但这里似乎没有问题。我对脆弱与坚固有什么误解?

答案1

手册中应该提到“ @-expressions in tabularand array”,以与 Leslie Lamport 的官方手册保持一致。以下是示例:

\documentclass{article}
\usepackage{graphicx}
\begin{document}

\begin{tabular}{l@{ \resizebox{2mm}{!}{$x$} }l}
A & B \\
C & D
\end{tabular}
\end{document}

由于移动参数中的命令很脆弱,最终会出现典型的错误消息:

! Use of \@array doesn't match its definition.
\@ifnextchar ... \reserved@d =#1\def \reserved@a {
                                                  #2}\def \reserved@b {#3}\f...
l.5 ...in{tabular}{l@{ \resizebox{2mm}{!}{$x$} }l}

如果我们使用,\protect\resizebox就不会出现错误。

摘自《LaTeX,一种文档准备系统》,第 168 页:

C.1.3 脆弱命令

命令分为强壮的脆弱的. [...] 以下是所有带有移动参数的命令和环境:

  • [...]

  • 在或环境@中。(尽管不是命令,但-expression 中的脆弱命令必须像在移动参数中一样进行 'ed。)arraytabular@@\protect

相关内容