這些年來我寫過很多「奇怪」的TeX,但從未遇過TeX 的程式設計環境完全不夠用的情況。然而,我常常希望一點
編寫複雜的巨集時有更多幫助。發現花括號、條件句和
\string
以及\romannumeral-1...
雜耍的技巧很有趣,但感覺有點太特殊了。現在(如果有人相信的話,就在一個月前!我已經使用 TeX 二十多年了!),我已經查看了 LaTeX3 代碼(expl3
更準確地說,我仍然無法讓自己使用 LaTeX),我發現了一個我幾乎羞於使用許多相同的技巧(我甚至選擇了一些稍微較短的方法來實現某些效果)。
那麼,在這麼長的介紹之後,您希望有一個 TeX 擴充功能來解決原始 TeX 程式設計效率低下的問題,如果可能的話,為什麼?
理想情況下,這將是一個短名單(5 項或更少)。只有程式設計應該解決環境問題(即不涉及 TeX 處理字體、其他印刷問題等。Frank Mittelbach 關於該主題的論文很好地處理了該領域)。請注意,我總體上喜歡TeX 的極簡主義哲學和巨集程式設計(儘管當我轉而用C 編寫嵌入式程式碼時感覺就像長了翅膀),所以我正在尋找更多符合TeX 精神的答案,而不是「只使用LuaTeX」 (我對 LuaTeX 沒有什麼異議本身只是感覺有點特別指定;我也覺得做程式設計太容易了這不是一個好主意)。如果答案是'e-TeX(或其他一些擴展)已經完成了所有這些,這就是為什麼 e-TeX 的選擇更好', 請詳細說明。
我將從我自己的願望清單開始:
\xxpandafter{tokens}
-- 擴充組後面的標記
\iftoks{token list}{token list}
-- 比較兩個標記清單(相同
\def\listone{...}\def\listtwo{...}\ifx\listone\listtwo ...
但可擴展)
\unlet token
-- 擴展為類別代碼、字元代碼令牌,如果令牌不是活動字元/控制序列,則擴展為此類字符
\numexpr
-- 與 e-TeX 相同(只希望它與 配對\endnumexpr
而不是\relax
)
\batchxmode{...}
允許自動從大括號內擴展的程式碼的錯誤中恢復,其本身擴展為空(即與擴展相同\batchmode ... \errorstopmode
但擴展為空)