\char9(应该是水平制表符)显示为 Ψ(希腊字母 psi)

\char9(应该是水平制表符)显示为 Ψ(希腊字母 psi)

ASCII 代码点 9 编码水平制表符。那么,为什么编写以下手稿

x\char9y\bye

使用 TeX 版本 3.14159265(TeX Live 2017)生成一个 dvi 文件,其正文由三个字母组成

y

x,,Greek Capital Letter Psiy而不是三个字母

x y

x,,spacey

答案1

没什么奇怪的:\char<8 bit number> 印刷当前字体中的字符槽<8 bit number>。它不会生成字符标记,正如您所认为的那样。

如果您想要一个制表符标记及其当前类别代码,请键入^^I^^09,其中^必须具有类别代码 7。

使用 XeTeX 和 LuaTeX,您可以使用\Uchar可以可扩展生成一个字符标记,因此\Uchar 9将满足您的需要。XeTeX 还提供了\Ucharcat使用给定数字和给定类别代码生成字符标记的功能:例如

\Ucharcat 9 10

与标准类别代码相同\Uchar 9。并非所有类别代码都可用,特别是 13(活动)不可用。LuaTeX\Ucharcat中未定义该原语,但可以对其进行模拟(请参阅ucharcat.styLaTeX 包)。

答案2

这是关于字体编码的:Knuth 开发的标准 OT1 字体编码使用全部字体中的插槽,而不仅仅是您通常认为可打印的插槽。最著名的是,\char0在此编码中使用,并用于导致某些 PDF 查看器出现问题。

随着 Unicode 的采用,人们开始认为存在一种“通用”编码,但这根本不适用于旧材料。字体有很多种编码,既有“标准”的,也有完全非标准的(比如 pifonts)。

你必须记住的是,输入代码点不必与输出代码点匹配:关键是它节目正确的信息。也许最容易理解的是\alpha:显然输出(单个字形)与输入不同,并且在 Latin-1 等“经典”编码中没有 alpha。

查看(8 位)字体的完整字体表的最简单方法可能是使用 LaTeX 包fonttable

\documentclass{article}
\usepackage{fonttable}
\begin{document}

\fonttable{cmr10}

\end{document}

答案3

其他(优秀)答案解决了\char如何使用输入文字水平制表符的问题^^问题,但没有提到为什么TeX 将制表符视为空格。诚然,这与您的问题没有直接关系,但它可能有助于解释 TeX 的行为。

默认情况下,制表符的类别代码为 10(空格)。类别代码为 10 的字符有一个有趣的方面,即当 TeX 在输入中遇到这些字符(而它没有忽略空格)时,它会生成一个空格标记,该标记的类别代码为 10,字符代码为 32(ASCII 空格)。实际上,TeX 对制表符一无所知。就它而言,由于字符 9 的类别代码为 10,因此它只是一个空格。

相关内容