考虑以下示例(使用 进行编译xelatex
):
%! TEX program = xelatex
\documentclass{article}
\usepackage{ctex}
\RequirePackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage[frenchpart=false]{french}
\selectlanguage{french} % Doesn't work
% \AtBeginDocument{\selectlanguage{french}} % Doesn't work
\begin{document}
% \selectlanguage{french} % Works
你好
\end{document}
在\selectlanguage{french}
序言部分,中文字符你好
消失了。即使我添加\AtBeginDocument
,字符仍然丢失。但是如果我\selectlanguage{french}
在文档中使用,它就可以正常工作。
这仅发生在polyglossia
.上babel
,不存在此问题。
这里发生了什么?
答案1
polyglossia 在 \begin{document} (在钩子中)之后选择默认语言begindocument/end
。
在您的语言中,此语言为英语。如果您在此点之前选择french
,则选择英语语言也会执行\noextras@french
,除其他语言外,还包含英语, \nofrench@punctuation
并且此更改\XeTeXinterchartokenstate
为 0。
你会在文档中遇到类似的问题
\selectlanguage{french}
\selectlanguage{english}
你好
我想说这是一个多语种错误,它不应该假设放弃法语意味着你不再想使用\XeTeXintercharclasses
。
您可以使用以下方式禁用此功能
\makeatletter
\gappto\noextras@french{\XeTeXinterchartokenstate=1\relax}
\makeatother
(可能有不带的方法,@
但是\noextrasfrench
不起作用)。