数学重音符号放在括号内,括号内为重音符号 (amsmath)

数学重音符号放在括号内,括号内为重音符号 (amsmath)

我正在尝试编写一个表达式,其中用括号括起来的重音表达式在括号上方有重音。例如,

\vec{(\dot{x})}

当没有加载 amsmath 时,排版很好,但是当存在 amsmath 时,x 被排版到点的右侧,就好像内部表达式被视为

\dot{}x

仅当右括号(或方括号或大括号)是外部重音参数的一部分时,才会发生此行为。

我能找到的最佳解决方法是使用覆盖作为外部重音,而不是实际的重音命令(或重音集)。

这种行为在任何地方都有预期或记录吗?


我相信这个问题之前曾被问过 amsmath 可能存在的错误:\dot 超过括号 \dot{x},但被错误地标记为\dot over \vec over :amsmath 错误/功能?后面这个问题是关于点下标和点下标在排版上的区别。

答案1

这与一个长期存在的问题有关amsmath,请参阅为什么使用 amsmath 时嵌套 \tilde 或 \breve 命令的参数会重新出现?

我可以提供一个解决方法。

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\newcommand{\dblacc}[2]{\mathpalette\dblacc@{{#1}{#2}}}
\newcommand{\dblacc@}[2]{\dblacc@@#1#2}
\newcommand{\dblacc@@}[3]{%
  \begingroup
  \sbox\z@{$\m@th#1#3$}%
  #2{\box\z@}%
  \endgroup
}
\makeatother

\begin{document}

\begin{gather*}
\dblacc\vec{(\dot{x})}
\\
\dblacc\dot{\begin{bmatrix} x \\ \dot{x} \end{bmatrix}}
\\
\dblacc\vec{(\exp \dot{x})}
\end{gather*}

\end{document}

在此处输入图片描述

还适用于以下版本accents

\documentclass{article}
\usepackage{amsmath}
\usepackage{accents}

\makeatletter
\newsavebox{\dblacc@boxa}
\newsavebox{\dblacc@boxb}
\DeclareRobustCommand{\dblacc}[2]{\mathpalette\dblacc@{{#1}{#2}}}
\newcommand{\dblacc@}[2]{\dblacc@@#1#2}
\newcommand{\dblacc@@}[3]{%
  \begingroup
  \sbox\dblacc@boxa{$\m@th#1#3$}%
  \sbox\dblacc@boxb{$\m@th#1#2{\copy\dblacc@boxa}$}%
  \box\dblacc@boxb
  \endgroup
}
\makeatother

\begin{document}

\begin{gather*}
\dblacc\vec{(\dot{x})}\quad\scriptscriptstyle\dblacc\vec{(\dot{x})}
\\
\dblacc\dot{\begin{bmatrix} x \\ \dot{x} \end{bmatrix}}
\\
\dblacc\vec{(\exp \dot{x})}
\end{gather*}

\end{document}

答案2

以下重新定义了 的内部amsmath。此后,示例的输出看起来不错。我不知道这是否有可能破坏其他内容。我添加了 egreg 在他的答案中使用的每个测试用例,输出看起来不错。accents但它不适用于该包。

\documentclass[]{article}

\usepackage[]{amsmath}

\makeatletter
\protected\def\mathaccentV#1#2#3#4#5%
  {%
    \ifmmode
      \mathaccentV@do{#2}{#3}{#4}{#5}%
    \else
      \@xp\nonmatherr@\csname #1\endcsname
    \fi
  }
\def\mathaccentV@do#1#2#3#4%
  {%
    \global\let\macc@nucleus\@empty
    \mathaccent"\accentclass@#1#2#3{#4}\macc@nucleus
  }
\makeatother

\begin{document}
\begin{gather*}
\vec{(\dot{x})}
\\
\dot{\begin{bmatrix} x \\ \dot{x} \end{bmatrix}}
\\
\vec{(\exp \dot{x})}
\end{gather*}
\end{document}

在此处输入图片描述

相关内容