序言中的多语和 \selectlanguage 导致汉字消失

序言中的多语和 \selectlanguage 导致汉字消失

考虑以下示例(使用 进行编译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不起作用)。

相关内容