修复 xetex 中的 CJK 标点符号字距调整?

修复 xetex 中的 CJK 标点符号字距调整?

当使用 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 位)上,似乎不仅限于 Adob​​e 字体。这是字体相关的问题,还是系统实现的问题?

来自上述代码的图像

答案1

我还建议使用我们的xeCJKXeTeX 包,或者如果您需要,也可以使用luatexjaLuaLaTeX 包。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

相关内容