Fontspec/unicode-math 混合字体:数学重音

Fontspec/unicode-math 混合字体:数学重音

在一个项目中,我们使用商业文本字体。该项目不是数学相关的项目,但其中有一些数学。文本字体当然没有直接的数学字体。但 XITS Math 字体(它是标准 LaTeX 的一部分,至少是 TeX Live)似乎足够匹配。

我决定尝试一下,unicode-math看看能否更接近,方法是将数学字体中的拉丁字母字体更改为斜体文本字体,数字取自直立文本字体。效果出奇地好。

但问题在于:由于我们混合了数学中使用的字体,数学重音的位置并不是特别好。

我准备了一个与我们的设置类似的 MWE,但使用 TeXLive 中已有的文本字体,因此大多数人都应该能够测试它。

\documentclass[a4paper]{article}
\usepackage{amsmath,unicode-math}
\setmathfont[Scale=MatchUppercase]{XITS Math}
\setmathfont[range=\mathup/{num},Numbers=Lining]{Cochineal-Roman}
\setmathfont[range=it/{latin,Latin},Ligatures={NoCommon, NoDiscretionary, NoHistoric, NoRequired, NoContextual}]{Cochineal-Italic}

\setmainfont{Cochineal}[
UprightFont = *-Roman ,
BoldFont= *-Bold ,
ItalicFont = *-Italic,
BoldItalicFont = *-BoldItalic,
Numbers=Lining,
]

\begin{document}

$  p^{\ast}=c\vert \hat{\jmath}\vert ^{1/2}e^{l-\hat{l}} $

\end{document}

导致

在此处输入图片描述

我们可以看到帽子放错了位置

如果我们仅使用 XITS Math,我们会得到

在此处输入图片描述

这是更加合理的。

所以我的问题是,考虑到重音符号可能是使用top_accentXITS Math 字体中的数据放置的,我们如何在 Lua 中修补此字体设置,以便我们可以修复需要重音符号的字符上的重音符号位置?我看过一些应该能够做到这一点的代码示例,但当我们缺少这样的字体时,它无法正常工作。

顺便说一句:是的,我也可以在宏观层面上解决这个问题(改编自 egregs 的一个答案):

\usepackage{xparse}
\NewDocumentCommand{\myhat}{ m }{\myinnerhat{#1}}
% we are assuming \myhat is only being used in single chars
\ExplSyntaxOn
\NewDocumentCommand{\myinnerhat}{m}
 {
   \str_case_x:nnF { \tl_item:nn { #1 } { -1 } }
   {
     {\jmath}{\skew{5}{\hat}{\jmath}\mkern1mu}
     {l}{\skew{5}{\hat}{l}}
   }{
     \hat{#1}
   }
 }
\ExplSyntaxOff

相关内容