如何将英文字母转换为其字母索引,以及其 ASCII/Unicode 索引?

如何将英文字母转换为其字母索引,以及其 ASCII/Unicode 索引?

我需要将字母转换为其在字母表中的索引,并将其转换为 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 才能使用这些。

相关内容