众所周知,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
只是名字错误:它不能用于声明整个项目的默认编码。(但你可以用它来声明一组文件的编码 - 如果你确定辅助文件不会干扰的话)。