使用 xelatex 和 Minion Pro 的法语间距

使用 xelatex 和 Minion Pro 的法语间距

我刚刚在运行 OSX 10.8.5 的 MacBookpro 上安装了完整版的 MacTex 2014,我对用 xelatex 编译的这个最小文档的输出感到惊讶,

\documentclass[]{article}
\usepackage[frenchb]{babel}
\usepackage{fontspec}
\usepackage{xltxtra,xunicode}
\setmainfont{Minion Pro}
\setromanfont[Mapping=tex-text]{Minion Pro}
\setsansfont{Myriad Pro}
\setmonofont{Source Code Pro}
\frenchspacing
\begin{document}
l'étranger, l'équipe
\end{document}

在此处输入图片描述

我觉得间距不对(“l”和后面的单词太近了),还是 Minion Pro 应该这样显示?我是不是忽略了某个选项?

答案1

这个问题影响大多数 Adob​​e 字体(Adobe,你听到了吗?)。我使用的还不够xetex多,不知道在 中可以做些什么来解决它xetex,但在 中luatex你可以编写一个功能文件来调整字距,而无需编辑字体本身。这比听起来容易得多。例如,

\documentclass[12pt]{article}
\usepackage[french]{babel}
\usepackage{filecontents,fontspec,microtype}
\begin{filecontents*}{minion.fea}
languagesystem DFLT dflt;
languagesystem latn dflt;

feature kern {
  pos \quoteright \a 10;
  pos \quoteright \eacute 10;
  pos \quoteright \o 10;
} kern;
\end{filecontents*}
\setmainfont{Minion Pro}[
  FeatureFile={minion.fea}]
\frenchspacing
\begin{document}
l’étranger

d’accord

d’ores et déjà
\end{document}

示例代码的输出

您只需继续添加行,pos \quoteright \e 10;直到列出撇号后面可能出现的任何内容。您可以随意调整值,直到您得到您想要的紧密或宽松的值:1、10、20……

如果您正在编写双语文档,而另一种语言需要更严格的字距调整(我暂时不知道有这种语言),您可以指定您定义的功能应应用于哪种语言。这需要做更多工作,但该技术已在tex.stackexchange.com/a/142664/7883

更新:自 2.7 版起luaotfload,功能文件不再受支持。请参阅tex.stackexchange.com/a/312160/7883寻找解决这个问题的新方法。

答案2

我目前正在使用 XeTeX 的 interchartoken 机制禁用撇号和后续字母之间的字距调整:

\XeTeXinterchartokenstate=1
\newXeTeXintercharclass\ApostropheClass
\XeTeXcharclass`'\ApostropheClass
\newXeTeXintercharclass\AfterApostropheClass
\XeTeXcharclass`a\AfterApostropheClass
\XeTeXcharclass`A\AfterApostropheClass
\XeTeXcharclass`à\AfterApostropheClass
\XeTeXcharclass`â\AfterApostropheClass
\XeTeXcharclass`e\AfterApostropheClass
\XeTeXcharclass`E\AfterApostropheClass
\XeTeXcharclass`é\AfterApostropheClass
\XeTeXcharclass`è\AfterApostropheClass
\XeTeXcharclass`ê\AfterApostropheClass
\XeTeXcharclass`i\AfterApostropheClass
\XeTeXcharclass`o\AfterApostropheClass
\XeTeXcharclass`ò\AfterApostropheClass
\XeTeXcharclass`U\AfterApostropheClass
\XeTeXcharclass`u\AfterApostropheClass
\XeTeXcharclass`ù\AfterApostropheClass
\XeTeXcharclass`y\AfterApostropheClass
\XeTeXinterchartoks\ApostropheClass\AfterApostropheClass={\penalty\@M\hskip\z@}

我插入的是粘连线,而不是字距调整,以避免禁用连字。惩罚是为了禁止在粘连位置换行。

相关内容