![unicode-math:字体“Inconsolata”没有 \mathhyphen 字形。如何重新映射到正常连字符字形?](https://linux22.com/image/408206/unicode-math%EF%BC%9A%E5%AD%97%E4%BD%93%E2%80%9CInconsolata%E2%80%9D%E6%B2%A1%E6%9C%89%20%5Cmathhyphen%20%E5%AD%97%E5%BD%A2%E3%80%82%E5%A6%82%E4%BD%95%E9%87%8D%E6%96%B0%E6%98%A0%E5%B0%84%E5%88%B0%E6%AD%A3%E5%B8%B8%E8%BF%9E%E5%AD%97%E7%AC%A6%E5%AD%97%E5%BD%A2%EF%BC%9F.png)
使用 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}