如何使文本出现在数学模式中的幻影中间?

如何使文本出现在数学模式中的幻影中间?

我想让方程的一部分出现在(水平)幻影的中心。例如,这对于制作支架宽度相同,看起来仍然很自然。这就是我想要的结果:

在此处输入图片描述

我知道如何在幻像内写右对齐和左对齐的文本:

\usepackage{mathtools}
\begin{gather*}
    1 + \mathrlap{B}\phantom{ABC} + 2 \\
    1 + \phantom{ABC}\mathllap{B} + 2 \\
    1 + ABC + 2
\end{gather*}

我尝试使用这个宏来制作居中文本,但是没有效果:

\usepackage{mathtools}
\usepackage{calc}

\newcommand{\hmask}[2]{
    \parbox{\widthof{#1}/2}{}
    \mathclap{#2}
    \parbox{\widthof{#1}/2}{}
}

\newcommand{\mask}[2]{\vphantom{#1}\hmask{#1}{#2}}

答案1

您实际上并不需要使用\mathclap,只需将您想要居中的内容放置在适当宽度的框中即可。

\documentclass{article}
\usepackage{amsmath}
\usepackage{calc}
\newcommand*{\mask}[2]{%
    \mathord{\makebox[\widthof{\(#1\)}]{\(#2\)}}%
}
\begin{document}
\begin{gather*}
    1 + \mask{ABC}{B} + 2 \\
    1 + ABC + 2
\end{gather*}
\end{document}

答案2

适用于所有风格的版本。

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\newcommand{\mask}[2]{{\mathpalette\mask@{{#1}{#2}}}}
\newcommand{\mask@}[2]{\mask@@{#1}#2}
\newcommand{\mask@@}[3]{%
  \settowidth{\dimen@}{$\m@th#1#2$}%
  \makebox[\dimen@]{$\m@th#1#3$}%
}
\makeatother

\begin{document}

\begin{gather*}
1 + \mask{ABC}{B} + 2 \\
1 + ABC + 2 \\
1 + \mask{\int_0^1 f(x)\,dx}{y}+2 \\
1 + \int_0^1 f(x)\,dx+2
\end{gather*}

\[
\begin{array}{c}
1 + \mask{\int_0^1 f(x)\,dx}{y}+2 \\
1 + \int_0^1 f(x)\,dx+2
\end{array}
\]

\[
\sum_{\substack{1\le \mask{w}{i}\le n \\ 1\le w\le n}} a_{iw}
\]

\end{document}

在此处输入图片描述

相关内容