Я только что установил полную версию 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@}
Я вставляю клей вместо керна, чтобы избежать отключения переносов. Штраф здесь для того, чтобы запретить перенос строки в позиции склеивания.