在下面的示例文件中,使用 amsart 并使用 pdflatex 进行编译,公式会占用为 wrapfigure 保留的空间。如果我使用 article 而不是 amsart,则问题消失(公式位于文本列的中心,而不是页面的中心)。但是,我想使用 amsart...有什么建议吗?
\documentclass[12pt]{amsart}
\usepackage[top=30mm, bottom=30mm, left=30mm, right=30mm]{geometry}
\usepackage{wrapfig}
\begin{document}
\title{Test File}
\author{Dr Foo Bar}
\date{\today}
\begin{abstract}
A test file.
\end{abstract}
\maketitle
\section{Lorem ipsum}
\subsection{Dolor sit amet}
\begin{wrapfigure}[16]{r}{0.5\textwidth}
\vspace{1.5in}
\caption{Fusce tempor, diam nec hendrerit luctus, purus quam...}
\end{wrapfigure}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus
congue eros a purus vestibulum condimentum. Curabitur pretium lacinia
tempus. Quisque auctor ornare ipsum, ac aliquet nulla tincidunt
eu. Vivamus sit amet metus in erat placerat commodo. Duis blandit
dignissim tempus.
\[
i^2 = j^2 = k^2 = ijk = -1.
%%% Why isn't the centering aware of the wrapfigure?
\]
Proin varius vel eros nec mollis. Vivamus sit amet
ligula a nunc malesuada malesuada mollis eu tellus. Vestibulum
lobortis sapien sit amet lacus tristique, ut facilisis sapien
mollis. Suspendisse placerat ante tortor, molestie blandit arcu
sodales sed. Aliquam vitae ligula nisi. Donec tempor, ante a vehicula
hendrerit, ligula lacus elementum dolor, vitae hendrerit magna justo
in neque.
\end{document}
答案1
该类amsart
希望所有显示在任何情况下都相对于整体边距居中。因此,对于每个显示,它都会执行\fullwidthdisplay
,但不幸的是,在本例中这是错误的。
您可以做一个特别指定针对此案的更正:
\documentclass[12pt]{amsart}
\usepackage[top=30mm, bottom=30mm, left=30mm, right=30mm]{geometry}
\usepackage{wrapfig}
\begin{document}
\title{Test File}
\author{Dr Foo Bar}
\date{\today}
\begin{abstract}
A test file.
\end{abstract}
\maketitle
\section{Lorem ipsum}
\subsection{Dolor sit amet}
\begin{wrapfigure}[16]{r}{0.5\textwidth}
\vspace{1.5in}
\caption{Fusce tempor, diam nec hendrerit luctus, purus quam...}
\end{wrapfigure}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus
congue eros a purus vestibulum condimentum. Curabitur pretium lacinia
tempus. Quisque auctor ornare ipsum, ac aliquet nulla tincidunt
eu. Vivamus sit amet metus in erat placerat commodo. Duis blandit
dignissim tempus.
\[\displaywidth=\parshapelength\numexpr\prevgraf+2\relax
i^2 = j^2 = k^2 = ijk = -1.
\]
Proin varius vel eros nec mollis. Vivamus sit amet
ligula a nunc malesuada malesuada mollis eu tellus. Vestibulum
lobortis sapien sit amet lacus tristique, ut facilisis sapien
mollis. Suspendisse placerat ante tortor, molestie blandit arcu
sodales sed. Aliquam vitae ligula nisi. Donec tempor, ante a vehicula
hendrerit, ligula lacus elementum dolor, vitae hendrerit magna justo
in neque.
\end{document}
告诉 LaTeX 显示应出现的行有多宽;\prevgraf
返回显示前的行数(在本例中为 8),我们加 2,因为通常显示占用三行;使用\parshapelength 10
我们可以访问由 确定的段落中第十行的长度wrapfig
,但我们不需要知道这个数字,因为 TeX 可以使用 来计算它\numexpr\prevgraf+2\relax
。
对于多行对齐环境,技巧有所不同,因为我们无法\displaywidth
在其中设置。这里有一个建议:
\newenvironment{wrapped}[1]
{\def\wrappedcurrent{#1}%
\setlength{\columnwidth}{\parshapelength\numexpr\prevgraf+2\relax}%
\csname #1\endcsname}
{\csname end\wrappedcurrent\endcsname}
因此,在 a 的范围内wrapfig
,你可以说,例如,
\begin{wrapped}{align}
a&=b\\
c&=d
\end{wrapped}
参数可以是align
、align*
、gather
、gather*
或multline
中的任意一个multline*
。你甚至可以说\begin{wrapped}{alignat}{2}
或\begin{wrapped}{alignat*}{2}
。
不要wrapped
在范围之外的其他地方使用wrapfig
:你已经被警告了。并且不要使用wrapfig
。;-)