TeX 中 `^^` 后面是什么?十六进制、十进制还是符号?

TeX 中 `^^` 后面是什么?十六进制、十进制还是符号?

^^6\bye会产生v。我能理解这一点。6是ASCII表的符号,6符号的DEC是54。由于54小于64,所以54+64=128。ASCII表的第128个符号是v

^^61结果是a。但是从ASCII表中,没有 这样的符号61。其实61是一个Hex代码。它的Dec代码是97,ASCII的第97个符号是a。很奇怪。1. 61不需要加64。2.61是Hex代码,不是ASCII表的符号。

ASCII 表的第 90 个符号是Z。要得到Z,90-64=26,而 ASCII 表的第 26 个符号是SUB。因此,^^SUB应该得到Z,但实际上没有得到 。为什么?

如何理解 TeX 中后面的部分^^

答案1

有两种相互竞争的^^约定。原始约定适用于 TeX 版本 2,即 TeX 查找下一个字符代码并添加或减去 64:

  1. 如果下一个字符代码大于或等于 64,TeX 将减去;

  2. 如果下一个字符代码小于 64,TeX 将添加。

无论哪种情况,都会获得 0-127 范围内的字符代码。

然而,在 TeX 版本 3 中还引入了另一个约定,在某些情况下它可能与之前的约定相冲突,但是优先超过它。

当下一个字符,比如说x在 之中时0123456789abcdef,TeX 还会查看下一个字符,比如说y和 ,如果再次位于同一集合之中,则该字符对将被视为十六进制数,并以十六进制^^xy表示法表示具有字符代码的字符。xy

让我们举几个例子:

^^1q

将使用原始约定;由于的字符代码为149,我们最终得到字符编号 113,并且您得到的结果与输入

qq

相反,输入

^^11

将遵循版本 3 的约定,您将获得十六进制代码的字符"11,即十进制的 17,您也可以输入为

^^Q

在您的情况下^^61,符合版本 3 约定,它优先于原始约定,因此您会得到十进制代码为 97 的字符,正如您所发现的。

不要被第 367 页的表格误导,其中非打印 ASCII 字符以其传统名称提及,但这些名称不能像您认为的那样使用。因此,^^SUB仅生成十六进制 ASCII 码字符"13,即十进制的 19,后跟字符UB

答案2

TeXBook 对此进行了解释

\danger \TeX\ has a standard way to refer to the invisible characters of ASCII:
Code~0 can be typed as the sequence of three characters |^^@|, code~1 can
be typed |^^A|, and so on up to code~31, which is |^^_| (see Appendix~C\null).
If the character following |^^| has an internal code between 64 and 127, \TeX\
subtracts 64 from the code; if the code is between 0 and 63, \TeX\
adds~64. Hence code 127 can be typed |^^?|, and
the dangerous bend sign can be obtained by saying
|{\manual^^?}|. However, you must change the category code of character
127 before using it, since this character ordinarily has category~15
(^{invalid}); say, e.g., |\catcode`\^^?=12|.
^^{double hat} ^^{hat hat}
The |^^| notation is different from |\char|, because |^^| combinations are
like single characters; for example, it would not be permissible to say
|\catcode`\char127|, but |^^| symbols can even be used as letters within
control words.

...

\danger There's also a special convention in which |^^| is
followed by {\sl two\/} ``lowercase hexadecimal digits,'' |0|--|9| or |a|--|f|.
With this convention, all 256 characters are obtainable in a uniform
way, from |^^00| to |^^ff|. Character 127 is |^^7f|.

所以

^^6 相当于输入字符 54+64 = 118 v

^^61是两个十六进制数字,因此就像输入字符十六进制 61 一样a

^^S相当于输入字符 83-64=19,相当于键盘上的 ctrl-s。cmr 字体编码中的字符 19(在 latex 中称为 OT1)是重音符号。


1 ^^6

2 ^^61

3 ^^S

\bye

在此处输入图片描述

相关内容