查看角色的 catcode,并列出具有给定 catcode 的所有角色

查看角色的 catcode,并列出具有给定 catcode 的所有角色
  1. 如何通过 ASCII 码查看字符的 catcode?

  2. 有没有办法列出与给定 catcode 关联的所有字符(用其 ASCII 数字表示)?例如,如何列出所有行尾字符,即 catcode 为 5 的所有字符?

答案1

  1. 您可以使用\showthe\catcode32,TeX 会在该点停止并向您显示空格的类别代码(10)。您也可以使用\the\catcode32扩展到类别代码。请注意,在这两种情况下,我在数字后都加了一个空格。空格导致 TeX 停止读取数字。

  2. 您可以遍历所有 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}

相关内容