使用 \smash{\bm{...}} 后跟下标的额外水平空间

使用 \smash{\bm{...}} 后跟下标的额外水平空间

我正在尝试排版\smash{\bm{U}}_\rho;但是间距与不同\bm{U}_\rho。我尝试\!恢复间距,但间距太小。如何在使用的情况下恢复原始间距\smash

请参阅此 MWE:

\documentclass{article}
\usepackage{bm}
\newcommand{\mat}[1]{\smash{\bm{#1}}}
\newcommand{\matfix}[1]{\smash{\bm{#1}}\!}
\begin{document}
    $\bm{U}_\rho$

    $\mat{U}_\rho$

    $\matfix{U}_\rho$
\end{document}

输出结果如下:

在此处输入图片描述

答案1

我不确定的目的\smash是什么(我相信你会遇到麻烦)。

无论如何,这是一个解决方案。

\documentclass{article}
\usepackage{amsmath,bm,xparse}

\NewDocumentCommand{\mat}{m e{_^}}{%
  \smash{\bm{#1}}%
  \IfValueT{#2}{\tuckin{#1}{#2}}%
  \IfValueT{#3}{^{#3}}%
}

\newcommand{\tuckin}[2]{%
  \mathpalette\tuckinauxA{{#1}{#2}}%
}
\newcommand{\tuckinauxA}[2]{\tuckinauxB#1#2}
\newcommand{\tuckinauxB}[3]{%
  \sbox0{$#1\bm{#2}_{#3}$}%
  \sbox2{$#1{{}\bm{#2}}_{#3}$}%
  \dimen0=\dimexpr\wd0-\wd2\relax
  _{\kern\dimen0 #3}%
}

\begin{document}

$\bm{U}_\rho$ \sbox0{$\bm{U}_\rho$}\the\wd0\ \the\ht0

$\mat{U}_\rho$ \sbox0{$\mat{U}_\rho$}\the\wd0\ \the\ht0

\end{document}

在此处输入图片描述

答案2

公认的答案是通用的,但相当棘手。正如评论中提到的,目的是确保 的\mat{\tilde{U}}大小与 的大小相同\mat{U}。可以使用以下方法轻松实现

\usepackage{mathtools}   % for \mathrlap
\newcommand{\tmat}[1]{\mathrlap{\smash{\bm{\tilde{#1}}}}\bm{#1}}

并替换\mat{\tilde{U}}_\rho\tmat{U}_\rho。请注意,U符号被打印两次,并\mathrlap{\smash{...}}完全破坏了边界框。

相关内容