考虑以下的 m(non-)we:
\documentclass{standalone}
\begin{document}
Foo & Bar
\end{document}
构建将失败,并显示
! Misplaced alignment tab character &.
&
而从代码中删除字符后,它将生成完美的 PDF 。
即使是普通的 TeX 也会有这样的表现,
Foo & Bar
\bye
产生同样的错误。
我只见过&
它在表格和数组环境中使用,从未在其之外使用过。这是为什么?
难道不能定义例如\tabular
,\endtabular
这只&
在环境内部是特殊的,而在环境之外只是一个普通字符吗?
为什么&
表格和数组环境之外必须破坏文档?
重新表述这个问题:对齐制表符是什么?我们通常把它放在哪里?
答案1
我们假设格式或用户没有将 &(或任何其他符号)的 catcode 全局设置为 4。
\nc
假设您仍然希望在本地拥有这样的字符(而不是一直使用“新列”之类的命令),会有什么后果?
- 每一个类似 tabular 的环境必须确保将一个字符设置为对齐制表符 - 并且它们必须同意使用哪一个。这将涉及大量修补。这自然不是为什么在编写格式时没有这样做的理由。
- 如果某个命令的参数中使用了 tabular,则无法使用此字符。例如,在页脚和页眉、信件地址、作者列表、投影仪框架中使用 tabular 时会遇到问题。可以自然地定义一个命令作为替代,但用户必须了解何时需要此命令。
在本地禁用对齐选项卡会相当困难。例如,目前您可以轻松键入包含大量 & 的表格,如下所示:
\documentclass{article} \begin{document} \begingroup \catcode`\&=12 \catcode`!=4 \begin{tabular}{ll} a & b ! c & d \end{tabular} \endgroup \end{document}
但是如果 tabular 重置了 & 的 catcode,它将不再起作用。因此,您需要一些钩子来允许此类操作 —— 并且在每个类似 tabular 的环境中再次进行。
总体而言,对于软件包编写者和用户来说,很多事情都会变得更加困难。学习打字会更容易\&
。
答案2
你问:
为什么 & 在表格环境之外是特殊的?
我认为这个问题提得不太好。我想说的&
是到处而不仅仅是外部tabular
环境。角色&
有类别代码 4--“对齐制表符” -- 在我遇到过的所有 TeX 和 LaTeX 格式中都是如此。此 catcode 设置允许它不仅在tabular
-like 环境(例如,tabular*
,tabularx
,longtable
等)中用作对齐制表符,而且在array
环境、弃用eqnarray
环境、包的一些显示数学环境amsmath
、包IEEEeqnarray
的环境IEEEtrantools
以及可能相当多的其他环境中也用作对齐制表符。
&
默认分配 catcode 4 的优点是,所有包编写者都可以(坦率地说,应该) 编写代码时假设&
catcode 为 4。如果没有此默认值,一些软件包编写者会选择&
对齐制表符,而其他人可能会选择@
或不知道其他什么。这样的结果对于大多数用户来说显然是劣等的,因为他们必须记住哪个字符或字符在哪些环境中用作对齐制表符功能。
相反,如果不想&
显得特殊——也不想修改其 catcode——则必须将其输入为\&
。