编辑。我意识到我的回答并不完整。事实上,我忘了说我需要一个可以与正常对齐的东西一起使用的解决方案(即没有命令\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}
或者,如果您没有其他对齐点,您可以使用简单的gather
with \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}