![使用 \smash{\bm{...}} 后跟下标的额外水平空间](https://linux22.com/image/356695/%E4%BD%BF%E7%94%A8%20%5Csmash%7B%5Cbm%7B...%7D%7D%20%E5%90%8E%E8%B7%9F%E4%B8%8B%E6%A0%87%E7%9A%84%E9%A2%9D%E5%A4%96%E6%B0%B4%E5%B9%B3%E7%A9%BA%E9%97%B4.png)
我正在尝试排版\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{...}}
完全破坏了边界框。