使用 stackrel 时按等号对齐(通过定义单个命令)

使用 stackrel 时按等号对齐(通过定义单个命令)

编辑。我意识到我的回答并不完整。事实上,我忘了说我需要一个可以与正常对齐的东西一起使用的解决方案(即没有命令\stackrel)。

例子的第一个等式不能被修改。

我有这个MWE:

\documentclass[11pt]{article}
\usepackage{amsmath}

\begin{document}

\begin{align}
  x   &=   x \\
  x   &\stackrel{\text{I'd like}}{=}  x\\
  x   &\stackrel{\text{to align}}{=}  x\\
  x   &\stackrel{\text{these equations}}{=}  x\\
  x   &\stackrel{\text{on equal signs}}{=}  x
\end{align}

\end{document}

在此处输入图片描述

通过定义单个命令。我想出了类似这样的方法(如果您觉得很糟糕,请仁慈一点!!!):

\documentclass[11pt]{article}

\usepackage{amsmath}
\usepackage{mathtools}

\newcommand{\StackRel}[2]{\phantom{\stackrel{#1}{#2}}%
&\stackrel{\mathclap{#1}}{#2}%
\phantom{\stackrel{#1}{#2}}}

\begin{document}

\begin{align}
  x   &=  x
  x   \StackRel{\text{I'd like}}{=}  x\\
  x   \StackRel{\text{to align}}{=}  x\\
  x   \StackRel{\text{these equations}}{=}  x\\
  x   \StackRel{\text{on equal signs}}{=}  x
\end{align}

\end{document}

在此处输入图片描述

但是我需要将宽度值减半(并添加额外的正确空间)\phantom(或者,可能是其他命令)。

我想要实现的布局是这样的:

在此处输入图片描述

笔记。我需要一个快速的“单一命令”解决方案,因此我将在序言中定义它,然后使用查询替换正则表达式修复对齐的方程式。

答案1

\documentclass[11pt]{article}
\usepackage{mathtools,stackengine}
\stackMath
\newcommand{\stackEq}[1]{%
  \setbox0=\hbox{${}\mathrel{\stackon[-1pt]{=}{\scriptstyle\text{#1\strut}}}{}$}
  \xdef\tmpwd{\dimexpr\the\wd0\relax}
  \kern.5\tmpwd\mathclap{\box0}&\kern.5\tmpwd
}

\begin{document}

\begin{align}
  x   \stackEq{I'd like}  x\\
  x   \stackEq{to align}  x\\
  x   \stackEq{these equations}  x\\
  x   \stackEq{on equal signs}  x
\end{align}

\end{document}

在此处输入图片描述

答案2

您不能使用“快速单一命令”。对于这种丑陋的排版,您可以使用IEEEtrantools

\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage{IEEEtrantools}

\begin{document}

\begin{IEEEeqnarray}{r;c;l}
  x   &=&   x \\
  x   &\overset{\text{I'd like}}{=}&  x\\
  x   &\overset{\text{to align}}{=}&  x\\
  x   &\overset{\text{these equations}}{=}&  x\\
  x   &\overset{\text{on equal signs}}{=}&  x
\end{IEEEeqnarray}

\end{document}

在此处输入图片描述

当然,更好的设置是附带解释;我知道你为什么问,但我忍不住建议一个更好的设置。;-)

\documentclass[11pt]{article}
\usepackage{amsmath}

\begin{document}

\begin{align}
x &= x \\
x &= x && \text{because foo} \\
x &= x && \text{because bar} \\
x &= x && \text{easy} \\
x &= x && \text{obvious}
\end{align}

\end{document}

在此处输入图片描述

答案3

像这样吗?请注意,它必须编译两次。此外,如果您必须对齐几个独立的此类组,则必须使用可选参数(一个简单的标签,默认设置为R)来区分它们:

\documentclass[11pt]{article}
\usepackage{mathtools, eqparbox}

\newcommand{\mystackrel}[3][T]{\stackrel{\eqmakebox[#1]{\scriptsize#2}}{#3}}

\begin{document}

\begin{align}
  x \mystackrel{I'd like}{=} x\\
  x \mystackrel{to align}{=} x\\
  x \mystackrel{these equations}{=} x\\
  x \mystackrel{on equal signs}{=} x
\end{align}

\end{document} 

在此处输入图片描述

或者像这样:

\documentclass[11pt]{article}
\usepackage{mathtools, eqparbox}

\newcommand{\varstackrel}[3][T]{\stackrel{\raisebox{0.5ex}{\clap{\scriptsize#2}}}{#3}}

\begin{document}

\begin{align}
  x \varstackrel{I'd like}{=} x\\
  x \varstackrel{to align}{=} x\\
  x \varstackrel{these equations}{=} x\\
  x \varstackrel{on equal signs}{=} x
\end{align}

\end{document} 

在此处输入图片描述

或者,如果您没有其他对齐点,您可以使用简单的gatherwith \mathllap\mathrlap

\documentclass[11pt]{article}
\usepackage{mathtools}

\newcommand{\varstackrel}[3][T]{\stackrel{\raisebox{0.5ex}{\scriptsize#2}}{#3}}


\begin{document}

\begin{gather}
  \mathllap{x} \varstackrel{I'd like}{=} \mathrlap{x}\\
  \mathllap{x} \varstackrel{to align}{=} \mathrlap{x}\\
  \mathllap{x} \varstackrel{these equations}{=} \mathrlap{x}\\
  \mathllap{x} \varstackrel{on equal signs}{=} \mathrlap{x}
\end{gather}

\end{document}

在此处输入图片描述

相关内容