XeTeX 输入和输出编码问题

XeTeX 输入和输出编码问题

众所周知,TeX 引擎XeTeX默认的输入输出编码格式为 UTF-8,但它提供了两个新的原始控制序列来定义输入的编码:

  • \XeTeXinputencoding定义以下文本的输入编码。
  • \XeTeXdefaultencoding定义要读取的后续文件的输入编码。

因此,你可以输入这两个命令之一来指定 XeTeX 将读取的编码,这使得 XeTeX 可以处理以其他格式编码的文件。但不幸的是,XeTeX 没有提供指定输出编码格式的接口,因此它在任何情况下都会以 UTF-8 写入文件,即使我们在主文件的开头输入\XeTeXinputencoding或。\XeTeXdefaultencoding.tex

显示此问题的 MWE:

\XeTeXdefaultencoding "GBK"
\documentclass{article}
\begin{document}
\tableofcontents
\section{测试一}
这里是中文测试。
\clearpage
\section{测试二}
这里是中文测试。
\clearpage
\section{测试三}
这里是中文测试。
\clearpage
\section{测试四}
这里是中文测试。
\clearpage
\end{document}

(请注意,这里没有选择 CJK 字体。)

如果你将这段代码保存为GBK(M$ 称之为cp936),然后用 进行编译XeLaTeX,则不会报告任何错误。然而,你不会惊讶于.toc.aux文件被写为UTF-8

上述解释的事实将导致另一个令人尴尬的事实。这些临时文件是由 编写的UTF-8,而主文件则保存为GBK。因此,如果我们\XeTeXinputencoding "GBK"在主文件的开头放置 ,则临时文件将被读取为UTF-8;如果我们使用\XeTeXdefaultencoding "GBK",则临时文件将被读取为GBK(但它们本身是UTF-8)。

错误悄无声息地发生了,但令人悲伤。

有什么线索或提示吗?

答案1

如果您不能转换为 utf8(这自然是最好的,因为它将使生活变得更轻松),在我看来最好的是 \XeTeXinputencoding "GBK"在每个使用此编码的文件(主文件 + 输入文件)的开头添加。

\XeTeXdefaultencoding只是名字错误:它不能用于声明整个项目的默认编码。(但你可以用它来声明一组文件的编码 - 如果你确定辅助文件不会干扰的话)。

相关内容