我通过 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 始终是单位,无论如何都不应在可变字体中打印。