\documentclass{article}
\usepackage[symbols]{glossaries-extra}
\usepackage{unicode-math}
\makeglossaries
\glsxtrnewsymbol[description={tilde}]{tilde}{\ensuremath{\tilde{D}}}
\glsxtrnewsymbol[description={hat}]{hat}{\ensuremath{\hat{D}}}
\begin{document}
\printglossary[type=symbols, style=long]
\begin{itemize}
\item gls: $\gls{tilde}$, $\gls{hat}$
\item ensuremath: $\ensuremath{\tilde{D}}$, $\ensuremath{\hat{D}}$
\item normal: $\tilde{D}$, $\hat{D}$
\end{itemize}
\end{document}
输出如下所示。
我该如何修复这个移位的波浪号?
答案1
unicode-math
边:
\setmathfont
重新定义\tilde
,这会将 的单步扩展\tilde
从更改\protect\tilde␣
为\tilde
。如果\setmathfont
未在前言中使用,则unicode-math
在环境的开头使用它document
。
glossaries-extra
边:
第一个用法使用option\gls{tilde}
对应的内部宏的值。如果未使用,则继承 option 的值,后一个则继承 option 的值。而你的例子相当于设置。glossaries
first
first
text
name
name={\ensuremath{\tilde{D}}}
默认情况下,选项first
和text
通过受保护的扩展(使用\protected@xdef
)存储它们的值。因此相应的内部宏都存储\protect\ensuremath␣{\protect\tilde␣{D}}
。
结合:
在OP的例子中,
- 在 中
\glsxtrnewsymbol
, 的一步展开式\tilde
,即\protect\tilde␣
,被存储以\gls
供使用。 - 在文档的开头,
\setmathfont
重新定义了\tilde
,但没有\tilde␣
。 - 因此
\gls{tilde}
或多或少相当于\ensuremath{\tilde␣{D}}
,这会产生错误的数学重音波浪号位置。
解决方法:
一般来说,防止\tilde
单步扩展或关闭选项的扩展都first
可以text
解决问题。
% solution 1, protect \tilde
\glsxtrnewsymbol[description={tilde}]{tilde}{\ensuremath{\protect\tilde{D}}}
% solution 2, switch off the expansion of options `first` and `text`
\glssetnoexpandfield{text}
\glssetnoexpandfield{first}
\glsxtrnewsymbol[description={tilde}]{tilde}{\ensuremath{\tilde{D}}}
特别是,\setmathfont
在定义任何词汇表条目之前明确使用 也是可行的。这就是 @cicada 的答案有效的原因。
这知乎上有答案,我自己发的,但是用中文,针对几乎相同的问题提供了更多细节,并使用了不同的解释方式。希望有帮助。
答案2
在之前加载unicode-math
包glossaries-extra
,并设置要使用的数学字体unicode-math
似乎可以解决问题:
平均能量损失
\documentclass{article}
\usepackage{unicode-math}
\usepackage[symbols,automake]{glossaries-extra}
\setmathfont{XITS Math}
\setmainfont{Noto Serif}
\makeglossaries
\glsxtrnewsymbol[description={tilde}]{tilde}{\ensuremath{\tilde{D}}}
\glsxtrnewsymbol[description={hat}]{hat}{\ensuremath{\hat{D}}}
\begin{document}
\printglossary[type=symbols, style=long]
\begin{itemize}
\item gls: $\gls{tilde}$, $\gls{hat}$
\item ensuremath: $\ensuremath{\tilde{D}}$, $\ensuremath{\hat{D}}$
\item normal: $\tilde{D}$, $\hat{D}$
\end{itemize}
\end{document}