Espaciado francés con xelatex y Minion Pro

Espaciado francés con xelatex y Minion Pro

Acabo de instalar la versión completa de MacTex 2014 en mi MacBookpro con OSX 10.8.5 y estoy sorprendido por el resultado de este documento mínimo compilado con 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}

ingrese la descripción de la imagen aquí

Me parece que el espaciado es incorrecto (la "l" y la siguiente palabra están demasiado cerca), ¿o es así como se supone que debe verse con Minion Pro? ¿Hay alguna opción que haya pasado por alto?

Respuesta1

Este problema afecta a la mayoría de las fuentes de Adobe (Adobe, ¿estás escuchando?). No uso xetexlo suficiente para saber qué se puede hacer al respecto xetex, pero luatexpuedes escribir un archivo de características para ajustar el interletraje sin editar la fuente en sí. Es mucho más fácil de lo que parece. P.ej,

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

salida de código de muestra

Solo tienes que seguir agregando líneas pos \quoteright \e 10;hasta que hayas enumerado todo lo que pueda venir después del apóstrofe. Puedes jugar con el valor hasta que lo tengas tan ajustado o tan suelto como quieras: 1, 10, 20…

Si está escribiendo un documento bilingüe y el otro idioma requiere un kerning más estricto (por cierto, no conozco ninguno), puede especificar a qué idioma se deben aplicar las características que defina. Eso es más trabajo, pero la técnica se explica entex.stackexchange.com/a/142664/7883.

ACTUALIZACIÓN: Desde la versión 2.7 de luaotfload, los archivos de funciones ya no son compatibles. Vertex.stackexchange.com/a/312160/7883buscando una nueva forma de resolver este problema.

Respuesta2

Actualmente estoy deshabilitando el interletraje entre un apóstrofe y una letra siguiente mediante el mecanismo de interchartoken de 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@}

Estoy insertando pegamento en lugar de un kern, para evitar desactivar la separación de palabras. La penalización está ahí para inhibir un salto de línea en la posición del pegamento.

información relacionada