我不明白为什么这会产生错误消息......
\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
\catcode`ẟ=\active
\end{document}
正如所inputenc
建议的,我正在使用pdflatex
。*导入不应该inputenc
导致ẟ表现得像任何其他字母一样吗?
*我需要的功能xelatex
不支持。
答案1
TeX 不了解 unicode。对于 TeX 来说,一个字符在输入中只是 1 个字节。但 unicode 是多字节的。\usepackage[utf8]{inputenc}
是一种巧妙的技巧,可以欺骗 TeX 接受这些多字节字符。
当您使用编码编写文件时utf8
,文件中的每个字符都可以编码为 1、2 或 3 个字节(对于非常奇特的字母表,甚至可以编码为 4 个字节)。如果字符符合 ASCII 标准,则仅占用 1 个字节,对于 TeX 来说一切都没问题。这些字符具有形式为 的二进制代码0xxxxxxx
,即第一位为零(因为 ASCII 标准仅包含最多 127 个代码)。
您在输入中使用的 unicode 字符 ẟ 在 utf8 中编码为三个字节,二进制值为:11100001
、10111010
和10011111
。请注意,所有这些都以位值 开头1
,这是 utf8 用来表示它们不是 ASCII 而是多字节字符的“标记”。
然而,对于 TeX 来说,这三个字节只是三个字符,其代码分别为"E1
、"BA
和"9F
("
这是 TeX 的十六进制前缀)。它inputenc
的作用基本上是使带有代码的字符成为"E1
活动字符,并定义与该字符关联的命令,这样,如果该字符后面跟着字符,"BA
就会发出"9F
TeX 命令。\delta
我想你现在可以理解为什么不能改变 Unicode 字符的 catcode 了。
另一方面,XeTeX 或 LuaTeX 使用能够接受 32 位宽“字符”的 TeX 引擎,输入阶段将 utf8“翻译”为适当的 unicode 点,这就是 TeX“眼睛”看到的。