如何将重音置于字母下方的中心?

如何将重音置于字母下方的中心?

这是 M(not)WE:

\documentclass{article}

\usepackage{mathtools} % for "\mathclap" macro
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{accents}

\renewcommand{\vec}[1]{\ensuremath{\mathbf{#1}}}
\newcommand{\undernum}[2]{\ensuremath{\underaccent{\mathclap{#2}}{#1}}}
\newcommand{\mvec}[2][n]{\ensuremath{\undernum{\vec{#2}}{#1}}}

\begin{document}

\begin{equation}
    \mvec{a}
\end{equation}

\end{document}

输出如下:

在此处输入图片描述

可以看到 n 不在字母下方居中。因此,mathclap 不在这里 - 我该如何将 n 居中?

答案1

遗漏的是,下标在数量上带有一些额外的空间\scriptspace

\documentclass{article}

\makeatletter
\newcommand{\undernum}[2]{\mathpalette\under@num{{#1}{#2}}}
\newcommand{\under@num}[2]{\under@@num{#1}#2}
\newcommand{\under@@num}[3]{%
  \oalign{$\m@th#1#2$\cr\hidewidth$\m@th#1{}_{#3}\kern-\scriptspace$\hidewidth}%
}
\makeatother

\renewcommand{\vec}[1]{\mathbf{#1}}
\newcommand{\mvec}[2][n]{\undernum{\vec{#2}}{#1}}

\begin{document}

\begin{equation}
\mvec{a}+\mvec[\mathrm{x}]{x}
\end{equation}

\end{document}

在此处输入图片描述

您可能使用经过适当修改的代码(并\ensuremath删除不好的代码),但效率会低得多。

\usepackage{mathtools,accents}

\renewcommand{\vec}[1]{\mathbf{#1}}
\newcommand{\undernum}[2]{\underaccent{\mathclap{#2}\kern-scriptspace}{#1}}
\newcommand{\mvec}[2][n]{\undernum{\vec{#2}}{#1}}

答案2

我猜这种偏移是由于斜体校正造成的,否则在数学模式下可能会出现这种情况。但在这种情况下,上标不是斜体。因此,简单的堆叠将使下标居中。

第一个 MWE 显示了前后情况:

\documentclass{article}

\usepackage{mathtools} % for "\mathclap" macro
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{accents}
\usepackage{stackengine}
\stackMath

\renewcommand{\vec}[1]{\ensuremath{\mathbf{#1}}}
\newcommand{\undernum}[2]{\ensuremath{\underaccent{\mathclap{#2}}{#1}}}
\newcommand{\mvec}[2][n]{\ensuremath{\undernum{\vec{#2}}{#1}}}

\begin{document}

\begin{equation}
    \mvec{a}
\quad    
   \stackunder[1pt]{\mathbf{a}}{\scriptscriptstyle n}
\end{equation}

\end{document}

在此处输入图片描述

修订后的公式的宏观实施如下:

\documentclass{article}

%\usepackage{mathtools} % for "\mathclap" macro
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{accents}
\usepackage{stackengine}

\renewcommand{\vec}[1]{\ensuremath{\mathbf{#1}}}
\newcommand{\mvec}[2][n]{%
  \ensurestackMath{\stackunder[1pt]{\vec{#2}}{\scriptscriptstyle #1}}}

\begin{document}

\begin{equation}
   \mvec{a}
\quad    
   \mvec[xx]{\vec{Z}}
\end{equation}

\end{document}

答案3

您可以添加适当数量的数学字距调整 -2.5mu看起来是正确的 - 以便将“重音”置于相关字母的下方。

在此处输入图片描述

\documentclass{article}
\usepackage{mathtools,accents}

\renewcommand{\vec}[1]{\mathbf{#1}}
\newcommand{\undernum}[2]{%
     \underaccent{\mkern2.5mu\mathclap{#2}}{#1}}
\newcommand{\mvec}[2][n]{\undernum{\vec{#2}}{#1}}

\begin{document}
$\mvec{a}$ $\mvec[xx]{Z}$
\end{document}

相关内容