如何通过 ASCII 码查看字符的 catcode?
有没有办法列出与给定 catcode 关联的所有字符(用其 ASCII 数字表示)?例如,如何列出所有行尾字符,即 catcode 为 5 的所有字符?
答案1
您可以使用
\showthe\catcode32
,TeX 会在该点停止并向您显示空格的类别代码(10)。您也可以使用\the\catcode32
扩展到类别代码。请注意,在这两种情况下,我在数字后都加了一个空格。空格导致 TeX 停止读取数字。您可以遍历所有 256 个字符并输出与您想要的类别代码匹配的字符。
以下是一些将排版所有当前类别代码的代码。
\documentclass{article}
\newcount\charcount
\begin{document}
\charcount=0
\loop\ifnum\charcount<256
Character \number\charcount \space has category code
\number\catcode\charcount .\endgraf
\advance\charcount by 1
\repeat
\end{document}
答案2
关于 XeTeX/LuaTeX 方面还有一点需要注意:与 TeX/pdfTeX 引擎中“字符”的值范围为 0 到 255(含)不同,在 XeTeX 和 LuaTeX 中,字符的值范围为 0 到 1114111(含)。后一个数字(10FFFF
十六进制)是 Unicode 中的代码点数(尽管实际上只有十分之一的代码点被使用)。指定的含义迄今为止)。
如果您只想列出类别代码为 5 的所有字符(比如说),您可以按照 TH 的建议使用循环来执行此操作:
\documentclass{article}
\begin{document}
\newcount\charcount
\charcount=0
\loop\ifnum\charcount<1114112 % Change to 256 if not using XeTeX/LuaTeX
\ifnum\catcode\charcount=5
Character \number\charcount \ has category code \number\catcode\charcount .
\fi
\advance\charcount by 1
\repeat
\end{document}
(默认情况下,唯一的行尾字符是 ASCII 13(又名U+000D 回车符(CR)在 Unicode 中),甚至在 XeTeX/LuaTeX 中也是如此。
使用 LuaTeX,还可以选择在 Lua 代码中执行所有循环和检查,而不是使用 TeX 宏:
\documentclass{article}
\begin{document}
\directlua{
for i = 0, 1114111 do
if tex.getcatcode(i) == 5 then
tex.print("Character " .. i .. " has category code " .. tex.getcatcode(i) .. ".")
end
end
}
\end{document}