XeLaTeX 斜体/引号字距调整问题

XeLaTeX 斜体/引号字距调整问题

我正在使用 xelatex。我想改变某些斜体/数学字符以及撇号和引号之间的字距。这是我的问题:

\documentclass[a4paper,12pt]{minimal}
\usepackage{mathspec}
\setallmainfonts[Ligatures=TeX]{Adobe Garamond Pro}
\begin{document}
$F$' $F$''
\end{document}

使用 xelatex 后,我得到了:

字距混乱?

这显然是错误的。

我的问题是,是否可以告诉 xelatex 自动更改此处的字距,而无需在文档主体本身中插入额外的命令。我尝试更改给出的代码这里,但无济于事。以下不起作用:

\documentclass[a4paper,12pt]{minimal}
\usepackage{mathspec}
\setallmainfonts[Ligatures=TeX]{Adobe Garamond Pro}

\makeatletter
\XeTeXinterchartokenstate=1
\newXeTeXintercharclass\LetterClass
\newXeTeXintercharclass\QuoteClass
\@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
\XeTeXcharclass `\'=\QuoteClass
\XeTeXinterchartoks\LetterClass\QuoteClass={\kern 2pt} % deliberately big
\makeatother

\begin{document}
$F$' $F$'' $F'$ F'
\end{document}

我知道哪里出了问题,但我不确定我应该怎么做才能解决它,或者这种方法是否从一开始就是错误的。

该解决方案应该让我自动对整个斜体/数学字母类别执行此操作。

提前致谢。

答案1

以下是解决您问题的两个方法。

使用适当的斜体

第一个问题是,为什么你会想要在数学元素后面加上一个文本引号。要么数学元素包含引号(在这种情况下,它应该在数学模式下实现为素数),要么数学元素不是真正的数学,而你用它$...$来创建文本斜体,这是不正确的。如果后者是问题所在,那么只需使用\textit\emph来创建斜体,字距调整就会正确显示:

\documentclass[a4paper,12pt]{minimal}
\usepackage{mathspec}
\setallmainfonts[Ligatures=TeX]{Adobe Garamond Pro}
\begin{document}
$F$' $F$''

\textit{F}'
\textit{F}''
\end{document}

代码输出

使用\XeTeXinterchartoks

如果您确实需要做您正在做的事情,那么可以这样做,但会有一些注意事项,我并不推荐这样做。我们可以使用\XeTeXinterchartoks在组的末尾和引号之间插入空格。由于在这种情况下无法区分数学组的末尾和任何其他组的末尾,因此此解决方案可能会在您不想要的地方添加额外的空间。这是一个完整的示例:

% !TEX TS-program = XeLaTeX
\documentclass{article}
\makeatletter
\chardef\CharBound=\e@alloc@intercharclass@top
\makeatother
\XeTeXinterchartokenstate=1 % enable character classes
\newXeTeXintercharclass\mathquote % create a new class
\XeTeXcharclass `’ \mathquote
\XeTeXcharclass `' \mathquote
\XeTeXcharclass `” \mathquote
% between any character of class 0 and \mathquote
\XeTeXinterchartoks \CharBound \mathquote = {\hspace{3pt}} % purposefully large for testing
\begin{document}
$F$’
$A$’
$F$”
F’   % this is ok because no end of group.
{F}’ % fails here because you can't distinguish end-of-math from end-of-group
$F'$ % this is still ok.

\XeTeXinterchartoks \CharBound \mathquote = {\hspace{.2pt}} % Now make it more reasonable
$F$’
$A$’
$F$”
F’   % this is ok because no end of group.

\end{document}

代码输出

相关内容