![修复 xetex 中的 CJK 标点符号字距调整?](https://linux22.com/image/257421/%E4%BF%AE%E5%A4%8D%20xetex%20%E4%B8%AD%E7%9A%84%20CJK%20%E6%A0%87%E7%82%B9%E7%AC%A6%E5%8F%B7%E5%AD%97%E8%B7%9D%E8%B0%83%E6%95%B4%EF%BC%9F.png)
当使用 xelatex 和 xeCJK 排版包含日语引文的英文文档时,我发现日语标点的字距非常难看。通常,标点会向左移动,因此左括号「
非常靠近前一个字符,而右括号则」
非常远离下一个字符。另一个示例是,・
在以下示例中应该看到它非常明显没有居中。
\documentclass{article}
\usepackage{fontspec,xeCJK}
\setmainfont{Garamond Premier Pro}
\setCJKmainfont[Scale=0.9,ItalicFont=*]{Hiragino Mincho Pro}
\begin{document}
Some text in English and あ・あ and again English;
now we write あ「あ」あ then end.
すべての人間は、生れながらにして自由であり、かつ、尊厳と権利とについて平等である。
人間は、理性と良心とを授けられており、互いに同胞の精神をもって行動しなければならない。
\end{document}
删除\XeTeXlinebreaklocale "en"
可以解决问题(尽管如果有全角标点符号的选项就更好了),但这显然需要在日文文本中强制换行。
这是我很久以前就遇到的问题,但我认为我从未真正找到过解决方案。有趣的是,使用日文字体作为文档的主要字体(不使用 xeCJK)不会导致这种情况,但这并不理想。
至少在我的系统(Mac 10.8 和 TexLive 2012 64 位)上,似乎不仅限于 Adobe 字体。这是字体相关的问题,还是系统实现的问题?
答案1
我还建议使用我们的xeCJK
XeTeX 包,或者如果您需要,也可以使用luatexja
LuaLaTeX 包。luatexja
是由日本团队开发的。除了我们的xeCJK
,还有日本本土人提供的解决方案。例如,ZXjatype
包裹由八登崇之 (Takayuki YATO) 编写,基于xeCJK
。如果您是日本人,您可能会对这些解决方案感兴趣。
进一步解释一下没有 的字距调整效果不好的xeCJK
原因:这是因为排版规则、CJK 字体设计和字体支持不同。对于西文排版,每个单词后面都有一个空格(包括标点符号),但中文和日文不使用空格。然而,TeX 的换行和字距调整算法(\sfcode
例如)是针对西文排版的,这就是问题所在。
为了解决这个问题,人们可以通过LuaTeX的回调来改变底层TeX的算法(一些韩国项目这样做了);或者可以使用像CJK
和doCJKpunct
这样的宏xeCJK
。
答案2
我会用xeCJK
:
\documentclass{article}
\usepackage{fontspec,xeCJK}
\setmainfont{Linux Libertine O}
\setCJKmainfont[Scale=0.9,ItalicFont=*]{Hiragino Mincho Pro}
\begin{document}
Some text in English and あ・あ and again English;
now we write あ「あ」あ then end.
すべての人間は、生れながらにして自由であり、かつ、尊厳と権利とについて平等である。
人間は、理性と良心とを授けられており、互いに同胞の精神をもって行動しなければならない。
\end{document}
似乎没有必要使用\XeTeXlinebreaklocale
。