这是 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}