假设我的文档文本宽度较窄,且有大量空白。如果我有一个特别长的公式,无法放入给定的宽度,那么一般的解决方案是将公式拆分为多行。
但是,如果某个方程式不太适合该方法,是否有一种方便的方法来临时更改给定方程式的边距?我在下面提供了一种临时方法,但它需要手动插入\vspace
一个经验得出的量级。似乎应该有更好的方法。它还需要指定加宽的文本宽度,但这是可以的,因为如果该技术必须在文档中多次使用,我更喜欢某种扩展的一致性。
\documentclass{article}
\usepackage[nopar]{lipsum}
\begin{document}
\lipsum[1]
\begin{equation}
y = mx + b
\end{equation}
\lipsum[2]
% HERE IS THE KLUDGE
\par\vspace{-.5\topskip}\noindent\makebox[\textwidth]{\begin{minipage}{7in}
\begin{equation}
E = mc^2 + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x +
x + x + x + x + x + x + x + x + x
\end{equation}
\end{minipage}}\vspace{\topskip}\par
% END KLUDGE
\lipsum[2]
\begin{equation}
\nu = c / \lambda
\end{equation}
\end{document}
事后我想到的是,这些\leftskip
方法\rightskip
似乎并没有改变发生的事情里面该等式。
答案1
我会尽量避免这样做。但是……
\documentclass{article}
\usepackage{amsmath,environ}
\usepackage[nopar]{lipsum}
\makeatletter
\NewEnviron{widerequation}{%
\begin{equation*}
\sbox\z@{\let\label\@gobble$\displaystyle\BODY$}
\makebox[\textwidth]{%
\begin{minipage}{\dimexpr\wd\z@+3em}
\vspace{-\baselineskip}
\begin{equation}
\BODY
\end{equation}
\end{minipage}%
}
\end{equation*}
}
\begin{document}
\lipsum[2]
\begin{equation}
y = mx + b
\end{equation}
\lipsum[2]
\begin{widerequation}\label{test}
E = mc^2 + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x +
x + x + x + x + x + x + x + x + x
\end{widerequation}
\lipsum[2]
\begin{equation}
\nu = c / \lambda
\end{equation}
See \eqref{test}
\end{document}
答案2
看来您也可以使用包adjustwidth
中的环境changepage
:
\newenvironment{widerequation}{%
\begin{adjustwidth}{-2cm}{-2cm}\begin{equation}}
{\end{equation}\end{adjustwidth}}
以下是完整的 MWE:
% arara: pdflatex
\documentclass{article}
\usepackage{amsmath}
\usepackage{changepage}
\usepackage[nopar]{lipsum}
\newenvironment{widerequation}{%
\begin{adjustwidth}{-2cm}{-2cm}\begin{equation}}
{\end{equation}\end{adjustwidth}}
\begin{document}
\lipsum[2]
\begin{equation}
y = mx + b
\end{equation}
\lipsum[2]
\begin{widerequation}\label{test}
E = mc^2 + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x +
x + x + x + x + x + x + x + x + x
\end{widerequation}
\lipsum[2]
\begin{equation}
\nu = c / \lambda
\end{equation}
See \eqref{test}
\end{document}
答案3
这是带有软件包的解决方案eqparbox
,可以测量带标签的盒子。它需要两次编译:
\documentclass{article}
\usepackage[nopar]{lipsum}
\usepackage{mathtools}
\usepackage{eqparbox}
\begin{document}
\lipsum[1]
\noindent\makebox[\textwidth]{\begin{minipage}{\dimexpr\eqboxwidth{Eq}+1Acm\relax}
\medskip
\begin{equation}\eqmakebox[Eq]{\ensuremath{E = mc^2 + x + x + x + x + x + x + x + x + x + x + x + x + x + x + x +
x + x + x + x + x + x + x + x + x}}
\end{equation}
\end{minipage}}\vspace{\belowdisplayskip}
\lipsum[2]
\begin{equation}
\nu = c / \lambda
\end{equation}
\end{document}