我正在编写一些函数来操作字符串。生成具有给定字符代码的字符的典型方法是原\lowercase
语。以下代码生成一个代码为 234 的字符,并将其显示到终端。
\lccode`*=234
\lowercase{\message{*}}
如果我用上面234
的替换345
,那么 pdfTeX 会引发错误:Invalid code (345), should be in the range 0..255.
另一方面,LuaTeX 和 XeTeX 最多可以达到1114111
,正如 Unicode 兼容引擎所预期的那样。
现在,我希望我的宏尽可能强大。总是pdfTeX 中的最大 lccode 是 255,LuaTeX 和 XeTeX 中的最大 lccode 是 1114111,这是真的吗?或者用户能否以任何方式阻止引擎使用全部范围,从而混淆我的宏?
答案1
LuaTeX 手册明确指出,\char
现在接受 0 到 1114111 之间的值,并将此语句扩展到其他类似命令,如\lccode
。据我所知,在 XeTeX 中也是如此。在我看来,使用命令行来更改这一点似乎毫无意义。
但是 eTeX 扩展可以在两个引擎中禁用。或者更准确地说:XeTeX 有一个命令行选项来使能够eTeX 扩展(所有 TeX 系统默认使用)和 LuaTeX 具有类似的功能。因此可以手动构建不使用它们的格式。但这只会影响 eTeX 相关命令。
答案2
我有很多“旧”文档,我不想更改为 utf-8。
我在序言中使用了以下代码来使用“旧”编码:
\ifxetex
\XeTeXinputencoding "cp1252" % actual document
\XeTeXdefaultencoding "cp1252" % sequent documents (\input)
\fi
\usepackage[latin1]{luainputenc}
我不知道这是否会给你的代码带来问题 - 但你可以尝试一下。