TeX 具有惊人的可定制性。我永远不会这样做,但我很好奇 TeX 是否具有以下功能:
据我了解,TeX 读取字节流,并为每个字节分配一个类别代码。如果字母或其他字符字节不是控制序列的一部分,则按字面方式处理,方法是在当前字体表中查找字节(在水平或垂直模式下),然后在数学模式下查找字节的数学代码。
因此,如果字节0x61
(ASCII a
)当前具有 catcode 11,则在水平或垂直模式下,0x61
字体表中位置处的字形将被放置在当前列表中(只要该字节不是控制序列名称的一部分或宏的一部分)。
我想知道是否可以改变此功能——例如,0x62
在输入 byte 时将字形放置在 position 处0x61
。我认为这在数学模式下是可能的,使用\mathcode
原始函数,但是有没有办法在水平或垂直模式下做这样的事情?再说一次,并不是我想这样做,但我正在尝试 TeX 功能的极限,我很好奇这是否可行。
答案1
在经典 tex(或 xetex)中执行您所要求的操作的方法是使用虚拟字体,这通常用于数学字体。对于 tex,虚拟字体与真实字体相同(它看到的 tfm 结构完全相同),但真实字体中的每个“字形定义”本质上都是 dvi 代码的一个片段,可以使用其他包含的字体中的任何字符(或规则)。
答案2
对于 UTF-8(LaTeX 中的默认编码)中的大多数字符,您可以使用\DeclareUnicodeCharacter
或newunicodechar
包执行此操作。这些允许您激活字符并将其映射到任意命令。
但是,如果您尝试使 ASCII 字符处于活动状态,则这将会失败(并破坏任何包含字母 a 的命令的解析)。
在 XeTeX 中,你可以选择声明文本映射。