我需要 xdef 一些数据。在极少数情况下,它会包含如下变格符:
\xdef\xxx{spam\c{e}eggs}
\bye
不幸的是,这个失败了。有机会让它工作吗?
(我的代码中使用了 LaTeX,使用了 etoolbox,但据我了解,上面的纯文本示例是相同的。而且是最小的。)
答案1
在普通的 TeX 中你可以使用
\xdef\xxx{spam\noexpand\c{e}eggs}
\bye
在 LaTex 中你也可以这样做,但更好的方法是使用
\protected@xdef\xxx{spam\c{e}eggs}
假设@
该点处有一封信(在包文件中)。
请注意,在 plain tex 和 latex 中的定义\c
完全不同。\c
在 plain 中是一个简单的宏,它总是使用 align 结构将 cedilla 放置在其参数下。在 latex 中它是一个字体编码特定的命令,可以使用对齐或字体中预先构建的字形来包含此类字符的编码。