LuaLaTeX 中的单词间距问题

LuaLaTeX 中的单词间距问题

我在使用 LuaLaTeX 和使用 fontspec 的单词间距方面遇到了问题。这是我的 MWE:

\documentclass{article}
\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX, Scale=MatchLowercase}
\setmainfont[Ligatures=Common,
  SmallCapsFeatures={Renderer=Basic},
  ]{Times New Roman}
\usepackage{microtype}
\begin{document}

\LARGE\addfontfeatures{LetterSpace=30.0}
THIS IS A TEST

\end{document}

这是输出:

在此处输入图片描述

如您所见,单词间距保持不变,因为字符间距(字母间距)已经增大(实际上,它甚至比它还要小)。我曾假设后者会相对于前者按比例变化,就像使用 XeLaTeX 编译时实际发生的那样。查看使用 XeLaTeX 编译的相同代码的输出

在此处输入图片描述

我怎样才能自动修复这个问题(即不需要摆弄 fontspec 的WordSpace参数)?

(我在 Xubuntu Linux 15.10 中运行 TeXLive 2015,并安装了最新更新。(LuaLaTeX 版本 beta-0.80.0(TeX Live 2015)(rev 5238)。))

答案1

让我们尝试简化这个例子。

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Latin Modern Roman}
\begin{document}

\addfontfeatures{LetterSpace=30.0}

AB CD EF

\showoutput

\end{document}

这是使用 LuaLaTeX 编译时日志文件中的相关部分:

....\hbox(0.0+0.0)x15.0, direction TLT
....\EU2/LatinModernRoman(1)/m/n/10 A
....\kern 3.0
....\EU2/LatinModernRoman(1)/m/n/10 B
....\glue 3.33 plus 1.66331 minus 1.1111
....\EU2/LatinModernRoman(1)/m/n/10 C
....\kern 3.0
....\EU2/LatinModernRoman(1)/m/n/10 D
....\glue 3.33 plus 1.66331 minus 1.1111
....\EU2/LatinModernRoman(1)/m/n/10 E
....\kern 3.0
....\EU2/LatinModernRoman(1)/m/n/10 F

使用 XeLaTeX 时的情况也一样:

....\hbox(0.0+0.0)x15.0
....\EU1/LatinModernRoman(1)/m/n/10 AB
....\glue 6.33 plus 3.16182 minus 2.1121
....\EU1/LatinModernRoman(1)/m/n/10 CD
....\glue 6.33 plus 3.16182 minus 2.1121
....\EU1/LatinModernRoman(1)/m/n/10 EF

用于表示字母间距的模型不同,因此 XeTeX 不显示字母间的字距。然而,这表明 LuaLaTeX(或更可能luaotfload)出了问题:在 XeTeX 中,单词间间距也乘以间距因子,而在 LuaTeX 中则不是这样。

在这两个字母组之间,我们有

....\glue 3.33 plus 1.66331 minus 1.1111

在 LuaTeX 中,

....\glue 6.33 plus 3.16182 minus 2.1121

如果我去掉这\addfontfeatures条线,两个发动机里的胶水就是一样的。

如果我将字体改为 Times New Roman,我会得到

....\glue 2.5 plus 1.24875 minus 0.83415

在 LuaTeX 中(就像LetterSpace没有添加时一样),但是

....\glue 5.5 plus 2.74724 minus 1.83516

在 XeTeX 中。

为了使错误清晰化:在 XeTeX 中,字母间距量也会添加到单词间空间,但在 LuaTeX 中却不会这样做。

我的建议是在 LuaLaTeX 中使用microtype字母间距:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Times New Roman}
\usepackage{microtype}

\begin{document}

\textls[400]{AB CD EF}

\showoutput

\end{document}

生产

....\EU2/TimesNewRoman(0)/m/n/10/400ls A
....\EU2/TimesNewRoman(0)/m/n/10/400ls B
....\glue 3.5 plus 1.24875 minus 0.83415
....\EU2/TimesNewRoman(0)/m/n/10/400ls C
....\EU2/TimesNewRoman(0)/m/n/10/400ls D
....\glue 3.5 plus 1.24875 minus 0.83415
....\EU2/TimesNewRoman(0)/m/n/10/400ls E
....\EU2/TimesNewRoman(0)/m/n/10/400ls F

与 XeTeX 输出相当,结果是

在此处输入图片描述

这是一个简单的 TeX 示例:

\input ifluatex.sty

\ifluatex
  \input luaotfload.sty
  \font\test=LatinModernRoman:mode=node;script=latn;language=DFLT;+tlig;+trep;letterspace=30
\else
  \font\test="Latin Modern Roman/OT:script=latn;language=DFLT;mapping=tex-text;letterspace=30"
\fi
\test

AB CD EF

\tracingoutput=1
\tracingonline=1
\showboxbreadth=\maxdimen
\showboxdepth=\maxdimen

\bye

如果使用 LuaTeX 运行,输出显示

...\test A
...\kern 2.7
...\test B
...\glue 3.087 plus 1.54195 minus 1.03003
...\test C
...\kern 2.7
...\test D
...\glue 3.087 plus 1.54195 minus 1.03003
...\test E
...\kern 2.7
...\test F

如果使用 XeTeX 运行,它会显示

...\test AB
...\glue 6.33 plus 3.16182 minus 2.1121
...\test CD
...\glue 6.33 plus 3.16182 minus 2.1121
...\test EF

所以问题不是由于与 LaTeX 的交互。如果letterspace删除该位,单词间粘合结果就是3.087pt与 LuaTeX 和3.33ptXeTeX 的。

相关内容