Xelatex、Minion Pro 和意大利语撇号字距调整

Xelatex、Minion Pro 和意大利语撇号字距调整

我知道有很多关于它的问题,但经过太多搜索,我找不到可行的解决方案。有些只适用于lualatex,有些适用于\usepackage{MinionPro},有些甚至无法编译...

有没有办法用 Minion Pro 和 xelatex 修复难看的撇号字距?它太紧了,完全不符合意大利印刷风格。Minion 被广泛使用,我确信我在几份看起来像乳胶的意大利文档中见过它,所以一定有解决办法。我打算放弃它,回到值得信赖的 Computer Modern,在那里我不需要处理这些东西。

这是一个带有撇号丰富的段落的 mwe,用它进行编译xelatex

\documentclass[12pt]{article}
\usepackage{fontspec}
\usepackage{polyglossia}
\setmainlanguage{italian}
\usepackage{csquotes}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont{Minion Pro}

\begin{document}
C'era un'oca con l'ala sinistra fratturata. L'altra ala era anch'essa
malmessa dopo l'estrema fatica del viaggio
d'oltreoceano. Per un po' poteva resistere ma un'operazione era
senz'altro consigliata.
\end{document}

与 Computer Modern 相同

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[italian]{babel}
\usepackage[babel]{csquotes}

\begin{document}
C'era un'oca con l'ala sinistra fratturata. L'altra ala era anch'essa
malmessa dopo l'estrema fatica del viaggio
d'oltreoceano. Per un po' poteva resistere ma un'operazione era
senz'altro consigliata.
\end{document}

结果是,xelatex + Minion(参见例如没有任何间距) xelatex+minion 专业版

更好的是,pdflatex + CM pdflatex+cm

答案1

其实这并不那么 hacky。尝试以下操作(使用 XeLaTeX 排版):

\documentclass{minimal}

\usepackage{fontspec}

\setmainfont[Ligatures=TeX]{Minion Pro}

\makeatletter
\XeTeXinterchartokenstate=1

\newXeTeXintercharclass\LetterClass
\@tempcnta=`\A
\loop\unless\ifnum\@tempcnta>`\Z
  \XeTeXcharclass \@tempcnta \LetterClass
  \advance \@tempcnta by 1
\repeat
\@tempcnta=`\a
\loop\unless\ifnum\@tempcnta>`\z
  \XeTeXcharclass \@tempcnta \LetterClass
  \advance \@tempcnta by 1
\repeat

\newXeTeXintercharclass\ApostropheClass 
\XeTeXcharclass `’ \ApostropheClass
\XeTeXcharclass `' \ApostropheClass
\XeTeXinterchartoks \LetterClass \ApostropheClass = {\kern.1ex }
\XeTeXinterchartoks \ApostropheClass \LetterClass = {\kern.1ex }

\makeatother

\begin{document}

\begingroup\XeTeXinterchartokenstate=0 % Typeset without manual kerning
C'era un'oca con l'ala sinistra fratturata. L'altra ala era anch'essa
malmessa dopo l'estrema fatica del viaggio
d'oltreoceano. Per un po' poteva resistere ma un'operazione era
senz'altro consigliata.
\endgroup

C'era un'oca con l'ala sinistra fratturata. L'altra ala era anch'essa
malmessa dopo l'estrema fatica del viaggio
d'oltreoceano. Per un po' poteva resistere ma un'operazione era
senz'altro consigliata.

\end{document}

Minion Pro 以其非常小的撇号字距调整而闻名。LaTeX 当然允许手动调整字距,但您希望每次出现某些字形对时都调整字距。此外,您还希望调整像 [每个字母] [撇号] 这样的字距。

因此,我们必须告诉 LaTeX [每个字母] 应该是什么。这是通过将从 a 到 z 和从 A 到 Z 的每个字母分配给某个 来完成的charclass。撇号被分配给另一个charclass。然后,我们告诉 LaTeX 在这两个类之间添加一些字距。

上面的代码实际上就是这样的。据我所知,您只能告诉fontspec一般增加或减少字距,但不能告诉某些字形。如果我阅读该平台上类似问题的其他答案,我认为这是最直接的解决方案。也许其他人可以提供更简单的解决方案。

相关内容