使用词汇表包将字符作为数学模式中的重音符号

使用词汇表包将字符作为数学模式中的重音符号

我想在数学模式下提供一个上面带有字符的符号 - 例如\tilde{...}\hat{...}。我有时会将该符号与下标索引以及上标索引一起使用。使用上面字符的想法是它们不会与索引发生光学干扰。

我的第一个解决方案\overset{\omega}{\phi}没有奏效,因为上标的垂直对齐包括整个结构,而它应该只考虑下部大字符。经过一番互联网搜索,我发现 accent 包是一个解决方案\accentset{\omega}{\phi},它确实提供了正确的对齐方式。但当我想将它打包到 glossaries 包中的 glossaryentry 中时,

\newglossaryentry{foo} {
    name={\ensuremath{\accentset{\omega}{\phi}}},
    description={foo}
}

它无法编译——“未定义的控制序列”错误。

我如何才能使两个包兼容或者如何模拟命令的行为\accentset

这里显示了两种行为,以“2”为索引:

两种对齐的示例

这是一个最小的不是工作示例

\documentclass{scrartcl}
\usepackage{amsmath}
\usepackage{accents}
\usepackage{glossaries}
\newglossaryentry{foo} {
    name={\ensuremath{\accentset{\omega}{\phi}}},
    description={foo}
}
\makeglossaries
\begin{document}
$\overset{\omega}{\phi}^2$ wrong alignment \\
$\accentset{\omega}{\phi}^2$ correct alignment \\
$\gls{foo}$ not possible
\end{document}

答案1

\accentset是一个脆弱的命令,因此用于\protect\accentset将过程写入外部文件。

\documentclass{scrartcl}
\usepackage{amsmath}
\usepackage{accents}
\usepackage{glossaries}
\newglossaryentry{foo} {
    name={\ensuremath{\protect\accentset{\omega}{\phi}}},
    description={foo}
}
\makeglossaries
\begin{document}
$\overset{\omega}{\phi}^2$ wrong alignment \\
$\accentset{\omega}{\phi}^2$ correct alignment \\
$\gls{foo}^2$ is possible now. 
\end{document}

如果需要更多出现\accentset,可能值得考虑强化,即

\usepackage{etoolbox}
\robustify{\accentset}

这意味着,\protect\accentset不再需要了。

相关内容