Französischer Zeilenabstand mit xelatex und Minion Pro

Französischer Zeilenabstand mit xelatex und Minion Pro

Ich habe gerade die Vollversion von MacTex 2014 auf meinem MacBookpro mit OSX 10.8.5 installiert und bin überrascht von der Ausgabe dieses mit xelatex kompilierten Minimaldokuments.

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

Bildbeschreibung hier eingeben

Mir scheint, dass die Abstände falsch sind (das „l“ und das folgende Wort stehen zu nah beieinander), oder ist das so, wie es bei Minion Pro aussehen soll? Habe ich da eine Option übersehen?

Antwort1

Dieses Problem betrifft die meisten Adobe-Schriftarten (Adobe, hören Sie zu?). Ich verwende nicht xetexgenug, um zu wissen, was man in dagegen tun kann xetex, aber in luatexkönnen Sie eine Feature-Datei schreiben, um den Kerning anzupassen, ohne die Schriftart selbst zu bearbeiten. Das ist viel einfacher, als es klingt. Beispiel:

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

Ausgabe des Beispielcodes

Sie müssen einfach so lange Zeilen hinzufügen, pos \quoteright \e 10;bis Sie alles aufgelistet haben, was nach dem Apostroph kommen könnte. Sie können mit dem Wert spielen, bis er so eng oder locker ist, wie Sie möchten: 1, 10, 20…

Wenn Sie ein zweisprachiges Dokument schreiben und die andere Sprache ein engeres Kerning erfordert (ich kenne spontan keines), können Sie angeben, für welche Sprache die von Ihnen definierten Funktionen gelten sollen. Das ist mehr Arbeit, aber die Technik wird untertex.stackexchange.com/a/142664/7883.

UPDATE: Seit Version 2.7 luaotfloadwerden Feature-Dateien nicht mehr unterstützt. Siehetex.stackexchange.com/a/312160/7883für eine neue Möglichkeit, dieses Problem zu lösen.

Antwort2

Ich deaktiviere derzeit das Kerning zwischen einem Apostroph und einem nachfolgenden Buchstaben, indem ich den Interchartoken-Mechanismus von XeTeX verwende:

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

Ich füge einen Kleber anstelle eines Unterstrichs ein, um die Silbentrennung nicht zu deaktivieren. Die Strafe dient dazu, einen Zeilenumbruch an der Kleberposition zu verhindern.

verwandte Informationen