
考慮以下 m(非)we:
\documentclass{standalone}
\begin{document}
Foo & Bar
\end{document}
建置將失敗
! Misplaced alignment tab character &.
&
而當從程式碼中刪除字元時,它將產生完美的 PDF 。
即使是普通的 TeX 也有這樣的行為
Foo & Bar
\bye
產生相同的錯誤。
我只見過&
在表格和數組環境中使用過,從未在其之外使用過。這是為什麼?
難道不能定義eg \tabular
and \endtabular
so 這&
僅在環境內部是特殊的,而在這些環境之外只是一個正常的字元嗎?
為什麼&
表格和陣列環境之外必須破壞文件?
重新表達這個問題:WTF 是一個對齊製表符,我們通常會把它放在哪裡?
答案1
假設格式或使用者沒有將 &(或任何其他符號)的 catcode 全域設定為 4。
假設您仍然希望在本地擁有這樣的角色(並且不總是使用\nc
“新列”之類的命令),會產生什麼後果?
- 每一個類似表格的環境必須確保將一個字元設定為對齊選項卡——並且他們必須同意使用哪一個。這將涉及大量修補工作。這自然不能成為格式寫出來的時候為什麼沒有做的理由。
- 如果在某些指令的參數中使用表格,則無法使用此字元。例如,在頁腳和頁首、信件地址、作者清單、投影機框架中使用表格時,您會遇到問題。人們自然可以定義一個命令作為替代命令,但使用者必須了解何時需要該命令。
在本地禁用對齊選項卡將相當困難。例如,目前您可以輕鬆鍵入包含大量 & 的表格,如下所示:
\documentclass{article} \begin{document} \begingroup \catcode`\&=12 \catcode`!=4 \begin{tabular}{ll} a & b ! c & d \end{tabular} \endgroup \end{document}
但如果 tabular 重置了 & 的catcode,它將不再起作用。因此,您需要一些鉤子來允許此類操作——並且在每個類似表格的環境中也是如此。
總的來說,對於軟體包編寫者和使用者來說,很多事情都會變得更加困難。學習打字更容易\&
。
答案2
你問:
為什麼 & 在表格環境之外很特別?
我覺得這個問題問得不好。我想說那&
很特別到處,不僅僅是外在tabular
環境。該角色&
有類別代碼 4-- “對齊選項卡” -- 在我遇到的所有 TeX 和 LaTeX 格式中。此 catcode 設定允許它不僅在tabular
類似環境(例如,tabular*
、tabularx
、longtable
等)中用作對齊製表符,而且還可以array
在環境、已棄用的eqnarray
環境、包的一些顯示數學環境amsmath
、IEEEeqnarray
包的環境中用作對齊製表IEEEtrantools
符。
預設分配 catcode 4 的優點&
是所有包編寫者都可以(坦白說,應該)假設具有catcode 4來編寫他們的程式碼&
。對於大多數用戶來說,這樣的結果明顯較差,因為他們必須記住哪個或哪些字元在哪個環境中充當對齊選項卡功能。&
@
相反,如果不想&
變得特殊——並且不想修改其catcode——則必須將其輸入為\&
.