既不是问题也不是抱怨,但我发现我无法xeCJK
在多语言文档(目前是法语+英语+中文)中使用,因为它会弄乱非中文部分的标点符号。例如,它会将“这个…那个”改为“这个…那个”,将“这个,那个”改为“这个,那个”,这很不方便。太糟糕了,因为这个包的其他方面都很好。
这是一个显示该问题的最小示例:
\documentclass {memoir}
\usepackage{polyglossia}
\usepackage{xeCJK}
\setmainlanguage{french}
\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella}
\setCJKmainfont {STSong}
\begin{document}
This… that This, that
\end{document}
输出如下:
“这个,那个”问题仅在我将主要语言设置为法语时出现,而不是设置为英语时出现。无论主要语言是法语还是英语,都会出现“这个…那个”问题。
顺便说一句,如果这不是引起人们注意的不恰当的地方,请原谅我,但是软件包作者的电子邮件地址没有出现在文档中,我只是偶然发现了这个网站
答案1
这不是一个错误。
xeCJK
将有歧义的标点符号视为 CJK 标点符号。省略号被视为 CJK 标点符号,因此它使用 STSong 字体(华文宋体),并且忽略后面的空格。
您可以使用\ldots
或\dots
来\textellipsis
获得适合西方语言的省略号。(实际上,xeCJK
特别使用 来修补这些宏\makexeCJKinactive
。)其中任何一个都应该可以很好地与 配合使用xeCJK
:
This\dots that This, that
This\ldots that This, that
This\textellipsis that This, that
如果您只使用少量的 CJK 材料,Alan 的解决方案也是可取的。它有效,但缺点是您必须在chinese
使用中文的每个地方手动指定环境。而且它还会禁用 的一些功能polyglossia
。
如果只使用几个中文单词而没有长句子,则不需要xeCJK
此包。对 CJK 标点和空格的特殊处理有点过头了。xeCJK
主要针对包含少量其他语言的 CJK 文档而设计。
类似的标点符号包括引号“ ”
和‘ ’
,您应该使用传统的 TeX 格式`foo'
和``foo''
。
警告:xeCJK
不应该与 一起使用polyglossia
。xeCJK
与之冲突polyglossia
,因为它们都使用\XeTeXinterchartoks
频繁,而且我找不到让它们一起工作的好方法。
xeCJK
有一个\makexeCJKinactive
,但在这里它没有帮助。\makexeCJKinactive
只需设置\XeTeXinterchartokenstate=0
然后的许多功能polyglossia
也被禁用。您应该选择xeCJK
和中的一个polyglossia
。
如果您决定不使用xeCJK
,您可以设置:
\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt
每次用中文都要手动设置中文字体,很适合临时排版几个中文单词,而且很安全,例如:
\documentclass{memoir}
\usepackage{polyglossia}
\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt
\newfontfamily\stsong{STSong}
\newcommand\chinese[1]{{\stsong #1}}
\setmainlanguage{french}
\setmainfont{TeX Gyre Pagella}
\begin{document}
This… that This,
that «Chinese» % automatic spacing after « and before » obtained by polyglossia
\chinese{汉字}. % Chinese as normal text
\end{document}
但是,如果你有一些较长的中文文本,你应该使用xeCJK
以便于字体切换和更好的标点符号。如果你使用来处理法语,如果你不小心,polyglossia
标点符号的进度就会被打断。如果你坚持一起使用和,请使用\french@punctuation
xeCJK
polyglossia
xeCJK
前 polyglossia
。这可能会产生较少的错误,但我没有做足够的测试,请自行承担风险。
\documentclass{memoir}
\usepackage{xeCJK}
\setCJKmainfont{STSong}
\usepackage{polyglossia} % It works fine only for simple text, but still dangerous
\setmainlanguage{french}
\setmainfont{TeX Gyre Pagella}
\begin{document}
This\ldots that This,
that «Chinese» % automatic spacing after « and before » obtained by polyglossia
文字. % Chinese handled by xeCJK
%%% Never use special puctuations handled by polyglossia together with CJK symbols!
%%% This shows a WRONG result, "文" is missing because of the « before it:
«文字»
\end{document}
目前我是 的活跃维护者xeCJK
。如有任何关于 的问题xeCJK
,您可以直接给我发电子邮件(leoliu.pku at gmail dot com)。
很抱歉xeCJK
和不兼容。也许我会在将来的版本中polyglossia
添加一些命令来安全禁用。xeCJK
答案2
这里至少有一个可能的解决方法,但根据您使用的特定语言,它可能不是最佳解决方案,因为xeCJK
和polyglossia
彼此并不真正兼容。在决定采用我的答案作为可能的解决方案之前,请先阅读 Leo 的答案。 xeCJK
提供两个命令来打开和关闭其间距/标点符号代码。如果您决定这样做,您应该加载polyglossia
后 xeCJK
。如果您的主要语言不是中文,那么只需使用文档开头的命令并创建一个chinese
有选择地打开它的环境。
但是,正如 Leo 的回答中指出的那样,这也会关闭任何特殊的标点符号处理(可能还有其他东西)polyglossia
,因此它可能并不在所有情况下都起作用。
% !TEX TS-program = XeLaTeX
\documentclass {memoir}
\usepackage{xeCJK}
\usepackage{polyglossia} % use it AFTER xeCJK. But still dangerous. (comment by Leo)
\setmainlanguage{french}
\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella} %
\setCJKmainfont {STSong}
\newenvironment{chinese}
{\makexeCJKactive} % punctuation functions from polyglossia are also
% disabled if you use this (by Leo)
{\par}
\begin{document}
\makexeCJKinactive
This… that This, that This. That. This; that.
\begin{chinese}
This… that This, that This. That. This; that.
\end{chinese}
This… that This, that This. That. This; that.
\end{document}