Французский интервал с помощью xelatex и Minion Pro

Французский интервал с помощью xelatex и Minion Pro

Я только что установил полную версию MacTex 2014 на свой MacBookpro под управлением OSX 10.8.5 и был удивлен выводом этого минимального документа, скомпилированного с помощью 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

Эта проблема касается большинства шрифтов Adobe (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

В настоящее время я отключаю кернинг между апострофом и последующей буквой с помощью механизма interchartoken XeTeX:

\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@}

Я вставляю клей вместо керна, чтобы избежать отключения переносов. Штраф здесь для того, чтобы запретить перенос строки в позиции склеивания.

Связанный контент