使用 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@}

我插入的是膠水而不是緊排,以避免禁用連字符。懲罰是為了抑制膠水位置的斷線。

相關內容