LuaTeX:将 \mathrm\mathring 映射到主字体字形

LuaTeX:将 \mathrm\mathring 映射到主字体字形

我通过 LyX 将 LuaTeX 与 OpenType 字体结合使用,在数学模式下设置 Ångström 单位时遇到了一些麻烦。

使用此顺序可以工作,但是会组合字符而不是使用字体的字形:

$\mathring{\mathrm{A}}$

使用该顺序(实际上是使用该包生成的顺序units)会失败:

$\mathrm{\mathring{A}}$

错误信息是:

缺少字符:字体 DejaVuSerif:mode=node 中没有 (U+0017);...

从技术上来说这并没有错,但我们已经离开了 TeX 数学字体,应该会从主字体中生成字形。“带上环的拉丁大写字母 A”是 U+00C5,字体包含该字符,并且在文本模式下渲染得很好。

我该怎么做才能实现这一点?LyX 总是将字符分解Å\mathring{A}数学块,所以我不能只输入它(这会起作用,我已经测试过了)。我不需要一个通用的解决方案,这是唯一需要工作的字符。这也是 的唯一用途\mathring,所以我会毫不犹豫地将重音重新定义为其他东西……

谢谢!

答案1

使用\textnormal{Å}

\documentclass{article}
\usepackage{amsmath}
\usepackage{units}
\usepackage{unicode-math}

\setmainfont{DejaVu Serif}
\setmathfont{TeX Gyre DejaVu Math}

\newcommand{\angstrom}{\textnormal{Å}}

\begin{document}

$a=\unit[1.4]{\angstrom}$

\end{document}

当然,现在siunitx应该优先考虑一个已经好几年没有维护的软件包。

\documentclass{article}
\usepackage{amsmath}
\usepackage{siunitx}
\usepackage{unicode-math}

\setmainfont{DejaVu Serif}
\setmathfont{TeX Gyre DejaVu Math}

\DeclareSIUnit\angstrom{\text{Å}} % angstrom is deprecated

\begin{document}

$a=\qty{1.4}{\angstrom}$

\end{document}

在此处输入图片描述

答案2

回答我自己的问题。我在提问之前就一直在思考这个问题,但是错过了 fontspec 在 AtBeginDocument 中发挥的魔力...

只需将其硬连线\mathring{A}到角色即可。

\AtBeginDocument{
 \let\@oldmathring\mathring
 \renewcommand{\mathring}[1]{%
  \if\detokenize{A}\detokenize{#1} Å \else \@oldmathring{#1} \fi%
 }
}

输出比较

当它未在操作员字体中使用时,就会中断(cmmi 没有也不需要字形),但我永远不会遇到这种情况。U+C5 始终是单位,无论如何都不应在可变字体中打印。

相关内容