unicode-math:字体“Inconsolata”没有 \mathhyphen 字形。如何重新映射到正常连字符字形?

unicode-math:字体“Inconsolata”没有 \mathhyphen 字形。如何重新映射到正常连字符字形?

使用 LuaLaTeX 编译以下 MWE

\documentclass{article}

\usepackage{libertinus}
% Set the same teletype font for text, \mathtt and \symtt
\setmonofont{Inconsolatazi4-Regular.otf}[Scale=MatchLowercase]
\setmathtt{Inconsolatazi4-Regular.otf}[Scale=MatchLowercase]
\setmathfont{Inconsolatazi4-Regular.otf}[range={tt/{latin,Latin}->up},Scale=MatchLowercase]

% I hoped the following line would do the trick, but it only triggers a compilation error
% \setmathfont{Inconsolatazi4-Regular.otf}[range={tt/{latin,Latin}->up,"2010->"002D},Scale=MatchLowercase]

\begin{document}
\begin{tabular}{lcc}\hline
                                & \texttt{\textbackslash mathhyphen}  &  normal \texttt{-} \\\hline
\texttt{\textbackslash mathrm}  &  $\mathrm{init\mathhyphen cmd}$  &  $\mathrm{init-cmd}$ \\
\texttt{\textbackslash mathsf}  &  $\mathsf{init\mathhyphen cmd}$  &  $\mathsf{init-cmd}$ \\
\texttt{\textbackslash mathit}  &  $\mathit{init\mathhyphen cmd}$  &  $\mathit{init-cmd}$ \\
\texttt{\textbackslash mathtt}  &  $\mathtt{init\mathhyphen cmd}$  &  $\mathtt{init-cmd}$ \\\hline
\end{tabular}
\end{document}

结果是

结果

请注意电传打字机数学字体缺少连字符。

日志说

Missing character: There is no ‐ (U+2010) in font [Inconsolatazi4-Regular.otf]:mode=base;script=latn;language=DFLT;+tlig;!

这是可以理解的,因为 unicode-math 将拉丁电传符号从 1D4xxx 范围映射到 ASCII 范围,并从 Inconsolata 中获取字形。(请注意 选项range=tt->up\setmathfont此重新映射似乎对连字符失败。

但是,Inconsolata 字体在位置 002D 处包含一个连字符字形。如果输入的是普通连字符,则将使用此字形,但带有二元运算符的间距。

我希望

\setmathfont{Inconsolatazi4-Regular.otf}[range={tt/{latin,Latin}->up,"2010->"002D},Scale=MatchLowercase]

可以解决问题,但是事实并非如此。

我如何知道fontspec使用与数学连字符相同的字形并应用正确的间距?

答案1

您可以在本地重置 Umathcode。或者,您可以使用(非常新且实验性的)回退方法从其他字体中提取字形。这不适用于数学字母表,因此您必须使用文本命令,这有点作弊。

\documentclass{article}
\usepackage{unicode-math}
\directlua
{luaotfload.add_fallback
  ("myfallback",
   {
     "file:LibertinusMath-Regular.otf:mode=node;color=FF0000;" %red color for better view ...
   }
  )
}

\setmonofont{Inconsolatazi4-Regular.otf}[Scale=MatchLowercase,RawFeature={fallback=myfallback}]

\begin{document}
\let\orimathtt\mathtt
\renewcommand\mathtt[1]{\orimathtt{\Umathcode `\^^^^2010="7"0"2D #1}}

$\mathtt{init\mathhyphen cmd}$ 

$\texttt{init\mathhyphen cmd}$
\end{document}

在此处输入图片描述

相关内容