我需要将字母转换为其在字母表中的索引,并将其转换为 ASCII / Unicode 索引。如果可能的话,我希望有多种方法来实现每种情况(因为我记得有多种方法)。
首先,我想将一个字母转换为它的字母索引(我记得这里的一些用户不久前向我展示了如何进行转换[在聊天中或在其中一个问题的评论部分],但我没有复制示例并且忘记了如何去做[我似乎无法在档案中找到任何东西]),但后来我决定在混合中添加与 ASCII / Unicode 相关的字母索引,因为这必须是一个非常相似的过程。
我记得有一些东西'\a
引用了角色A但似乎无法让它工作或记不住它到底是用来做什么的。我很快就会阅读手册,但与此同时,问这个问题是有意义的,因为这样可能会更快。
谢谢。
答案1
TeXBook说:
TeX 语言中的数字可以以 开头
'
,此时数字被视为八进制,以 开头"
则被视为十六进制。因此,\char'142
和\char"62
等同于\char98
。
和
标记
`
12(左引号)后面跟有任意字符标记或名称为单个字符的控制序列标记时,表示 TeX 对相关字符的内部代码。例如,\char`b
和\char`\b
也等同于\char98
。
这些内部代码是(来自附录 C)TeXBook):
(八进制数用斜体表示,十六进制数用打字机字体表示)与 ASCII 表相同。
因此对于TeX来说98
,、、和都是有效的,且代表相同的数字。'142
"62
`b
TeXBook还会告诉您\number
原语的作用:
\number
。当 TeX 扩展 时\number
,它会读取后面的数字(随即扩展标记);最后的扩展由该数字的十进制表示形式组成,-
如果为负数,则前面加上 ' '。
因此,您可以将两者相加,得到您想要的结果!在 中\number`b
,\number
读取数字`b
并将其扩展为其十进制表示形式,98
即 的 ASCII 码b
。
如果您想要该字母的字母索引,您可以按照 siracusa 的建议进行操作,并从索引中减去a
(或者A
,如果处理大写字母):
\the\numexpr`z-`a+1\relax % prints 26
(您需要加 1,因为`a-`a
结果会是零)。这里您不需要数字,因为\numexpr
已经知道`z
和`a
是数字;您只需要\the
扩展\numexpr
。
Unicode 字符也是如此。\number`₢
(随机选择)打印 8354,这是 Unicode 点 U+20A2 的十进制表示。当然,您需要 XeTeX 或 LuaTeX 才能使用这些。