如何使用 wrapfigure 环境换行文本和表格

如何使用 wrapfigure 环境换行文本和表格

我遇到了与 wrapfigure 环境有关的问题。我以前用过它,并设法让它按照我想要的方式运行。目前我面临的一个问题,我将其归结为一个最小工作示例来说明问题(见下文)。我发现了关于该主题的多个问题(即如何将文本框浮动在右侧而不在文档的其余部分留下空白?),但无法找到解决方案。我以前使用过这种常规设置(右上角的图片,旁边是标题和表格),但现在的不同之处在于,我希望图片更大,表格下方的文本浮动在图片周围。有什么方法可以实现吗?

示例输出

%-*- coding: utf-8 -*-
\documentclass[twoside]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[draft]{graphicx}
\usepackage[paper=a4paper,inner=1.5cm,outer=2.5cm,top=2cm,bottom=2cm]{geometry}
\usepackage{wrapfig}

\begin{document}
\begin{wrapfigure}{r}{0.3\textwidth}
  \vspace{-10pt}
   \centering
   \includegraphics[width=0.29\textwidth, resolution=72]{test.png}
   % \vspace{-20pt}
\end{wrapfigure}
\section*{Maintitle\\{\small \emph{Subtitle}}}
\label{section_0526}
\begin{tabular}{l|l}
test: & Lorem ipsum dolor sit amet\\
\hline
test: & Lorem ipsum dolor sit amet\\
\hline
test: & Lorem ipsum dolor sit amet\\
\hline
test: & Lorem ipsum dolor sit amet\\
\hline
\end{tabular}\\

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.   

Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.   

Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.   

Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.   

Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.   

Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.   

Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.   

Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.   

Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.   

Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer
\end{document}

答案1

有两个问题需要解决:为图表保留了太多空间,并且图表完成后很长时间内段落形状仍然不正确。

您可以通过将可选参数传递给 来手动指定要缩小多少行文本\wrapfigure。在这种情况下,初始运行会在表格后显示两行文本,因此您可以编写

\begin{wrapfigure}[2]{r}{0.3\textwidth}
....
\end{wrapfigure}

避免在图形周围插入手动垂直间距。

现在您还遇到的问题是段落形状被应用于后续段落,远远超出了图形。 阻止tabular调用wrapfigure其结束代码。 您可以通过编写以下代码手动调用它

\makeatletter
\WF@finale
\makeatother

在第一段之后。为了方便起见,你可以把

\makeatletter
\newcommand{\wrapfigcleanup}{\WF@finale}
\makeatother

在你的序言中,然后直接调用\wrapfigcleanup

示例输出

\documentclass[twoside]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{graphicx}
\usepackage[paper=a4paper,inner=1.5cm,outer=2.5cm,top=2cm,bottom=2cm]{geometry}
\usepackage{wrapfig}

\makeatletter
\newcommand{\wrapfigcleanup}{\WF@finale}
\makeatother

\begin{document}

\begin{wrapfigure}[2]{r}{0.3\textwidth}
  \centering
  \includegraphics[width=0.29\textwidth]{example-image-a}
\end{wrapfigure}

\section*{Maintitle\\{\small \emph{Subtitle}}}
\label{section_0526}

\begin{tabular}{l|l}
  \hline
  test: & Lorem ipsum dolor sit amet\\
  \hline
  test: & Lorem ipsum dolor sit amet\\
  \hline
  test: & Lorem ipsum dolor sit amet\\
  \hline
  test: & Lorem ipsum dolor sit amet\\
  \hline
\end{tabular}

\smallskip

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem
ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur
sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et
dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam
et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea
takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
invidunt ut labore et dolore magna aliquyam erat, sed diam
voluptua. At vero eos et accusam et justo duo dolores et ea
rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem
ipsum dolor sit amet.

\wrapfigcleanup

Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
molestie consequat, vel illum dolore eu feugiat nulla facilisis at
vero eros et accumsan et iusto odio dignissim qui blandit praesent
luptatum zzril delenit augue duis dolore te feugait nulla
facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna
aliquam erat volutpat.

Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper
suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem
vel eum iriure dolor in hendrerit in vulputate velit esse molestie
consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et
accumsan et iusto odio dignissim qui blandit praesent luptatum zzril
delenit augue duis dolore te feugait nulla facilisi.

Nam liber tempor cum soluta nobis eleifend option congue nihil
imperdiet doming id quod mazim placerat facer

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem
ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur
sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et
dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam
et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea
takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
invidunt ut labore et dolore magna aliquyam erat, sed diam
voluptua. At vero eos et accusam et justo duo dolores et ea
rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem
ipsum dolor sit amet.

Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
molestie consequat, vel illum dolore eu feugiat nulla facilisis at
vero eros et accumsan et iusto odio dignissim qui blandit praesent
luptatum zzril delenit augue duis dolore te feugait nulla
facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna
aliquam erat volutpat.

Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper
suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem
vel eum iriure dolor in hendrerit in vulputate velit esse molestie
consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et
accumsan et iusto odio dignissim qui blandit praesent luptatum zzril
delenit augue duis dolore te feugait nulla facilisi.

Nam liber tempor cum soluta nobis eleifend option congue nihil
imperdiet doming id quod mazim placerat facer

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem
ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur
sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et
dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam
et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea
takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
invidunt ut labore et dolore magna aliquyam erat, sed diam
voluptua. At vero eos et accusam et justo duo dolores et ea
rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem
ipsum dolor sit amet.

Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
molestie consequat, vel illum dolore eu feugiat nulla facilisis at
vero eros et accumsan et iusto odio dignissim qui blandit praesent
luptatum zzril delenit augue duis dolore te feugait nulla
facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna
aliquam erat volutpat.

Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper
suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem
vel eum iriure dolor in hendrerit in vulputate velit esse molestie
consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et
accumsan et iusto odio dignissim qui blandit praesent luptatum zzril
delenit augue duis dolore te feugait nulla facilisi.

Nam liber tempor cum soluta nobis eleifend option congue nihil
imperdiet doming id quod mazim placerat facer

\end{document}

\\我已经将表格后的换行符替换为\smallskip,您可能需要更大的空间,可以使用\medskip\bigskip。另外我希望您知道不建议在表格中使用垂直线,请参阅包裹booktabs进行一般性讨论。

通常wrapfig与列表环境结合使用效果不佳。tabular环境会出现类似的问题。在这两种情况下,都是因为环境和 wrapfigure 都试图通过重新定义标准命令来操纵段落构建命令。当列表或结束时,错误的值会恢复到宏中。似乎没有一种简单的方法可以自动解决这个问题,但文档中提到了tabular可能需要调用,尽管不是在用户级别提出的建议。\WF@finalewrapfig

答案2

当我面临同样的问题时,我了解到的一切:

出现这种间隙的原因是,图片所需的垂直空间大于浮动在其周围的段落的垂直空间。当下一个段落开始时,wrapfigure 保留了图片的全部垂直空间再次,导致间隙过大。此问题“在分页符下仍然存在”。

这是 wrapfigure 的一个常见问题。如果要解决这个问题,核心问题是 *TeX 在框之间使用/可能使用的粘合。在这个特定情况下,最重要的是段落之间的粘合,它不是固定长度,而是取决于页面的内容。很多内容都会将粘合引入页面,例如标题、类似 itemize 的环境和(当然)浮动,仅举几例。

因此,几乎不可能计算出需要从下一段保留多少垂直空间才能使图片很好地适应。图片的整个高度 + 填充当然是上限。

为了得到你想要的结果,你需要告诉 LaTeX 你的页面布局,以便它在右上角保留适当的高度和宽度,然后将所有内容放在它周围。

我一直设想一个解决方案,涉及动态改变 \hsize以及其他相关尺寸,达到一定程度时触发距页面顶部的距离 ( \pagetotal)

有人曾经告诉我,这应该是一件相当简单的事情,即使是在纯 TeX 中,但我一直没能搞清楚。我想人们可以说服自己\par在适当的时候改变的定义来做一些计算,但\par直觉地触碰这样的东西感觉很愚蠢,而且像是一种打破排版的绝佳方法。

编辑:我知道这不是一个直接的答案。但我认为这是一个重要的问题,因此我会尽我所能做出贡献。

相关内容