Espaçamento francês com xelatex e Minion Pro

Espaçamento francês com xelatex e Minion Pro

Acabei de instalar a versão completa do MacTex 2014 no meu MacBookpro rodando OSX 10.8.5 e estou surpreso com o resultado deste documento mínimo compilado com 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}

insira a descrição da imagem aqui

Parece-me que o espaçamento está errado (o "l" e a palavra seguinte estão muito próximos), ou é como deveria ser no Minion Pro? Existe uma opção que esqueci?

Responder1

Esse problema afeta a maioria das fontes da Adobe (Adobe, você está ouvindo?). Eu não uso xetexo suficiente para saber o que pode ser feito sobre isso xetex, mas luatexvocê pode escrever um arquivo de recurso para ajustar o kerning sem editar a fonte em si. É muito mais fácil do que parece. Por exemplo,

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

saída do código de exemplo

Você apenas precisa continuar adicionando linhas pos \quoteright \e 10;até listar qualquer coisa que possa vir depois do apóstrofo. Você pode brincar com o valor até tê-lo tão tight ou loose quanto desejar: 1, 10, 20…

Se você estiver escrevendo um documento bilíngue e o outro idioma exigir um kerning mais rígido (de improviso, não conheço nenhum), você poderá especificar a qual idioma os recursos definidos devem ser aplicados. Isso dá mais trabalho, mas a técnica é explicada emtex.stackexchange.com/a/142664/7883.

ATUALIZAÇÃO: Desde a versão 2.7 do luaotfload, os arquivos de recursos não são mais suportados. Vertex.stackexchange.com/a/312160/7883para uma nova maneira de resolver este problema.

Responder2

Atualmente estou desabilitando o kerning entre um apóstrofo e uma letra seguinte usando o mecanismo interchartoken do 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@}

Estou inserindo cola em vez de kern, para evitar desabilitar a hifenização. A penalidade existe para inibir uma quebra de linha na posição da cola.

informação relacionada