文字环绕真正浮动的内容

文字环绕真正浮动的内容

我已经阅读了很多关于该wrapfig包的文章(以及一些其他包,例如picinparpicins),但我想知道是否有可能让文本环绕浮动内容,并使用通常的指定器(例如[t]或)自动定位[b]

下面是我想要实现的目标的一个例子:

+-------------------+-------------------+
|                   |                   |
|     ------------  |  -----  +-------+ |
|     ------------  |  ---    | [t]   | |
|     -----         |  -----  |       | |
|     ------------  |  -----  +-------+ |
|            -----  |  -----   ---      |
| +-------+  -----  |  -----            |
| | [b]   |  -----  |  ------------     |
| |       |  -----  |  ------------     |
| |       |  ---    |  ------------     |
| |       |  -----  |  ---------        |
| +-------+  -----  |  ------------     |
|  ------    -----  |  ------------     |
|                   |                   |
+-------------------+-------------------+

正如您所见,我还喜欢将包装的内容(可选)延伸到边缘。

我使用 OpenOffice Writer 甚至(请不要打败我!)MS Word 制作了许多具有这种页面布局的书,但到目前为止,我还没有在 LaTeX 中找到任何解决方案。

下面是一个最小(非)工作示例,包含两个常规浮动图形(图 1 和 2),它们表现良好,以及两个wrapfigure延伸到边缘但不以任何方式浮动的 s(图 3 和 4):

\documentclass[twoside]{article}

\usepackage{calc}
\usepackage{mwe}
\usepackage{wrapfig}

\begin{document}

\section{Some Section}

\blindtext

\begin{figure}[!b]
\includegraphics[width=\linewidth]{example-image.png}
\caption{This floats nicely to the bottom of the page}
\end{figure}

\blindtext

\begin{figure}[!t]
\includegraphics[width=\linewidth]{example-image.png}
\caption{And this floats nicely to the top of the page}
\end{figure}

\blindtext
\blindtext

\begin{wrapfigure}{O}[\marginparsep+\marginparwidth]{\linewidth}
    \includegraphics[width=\linewidth]{example-image.png}
    \caption{This {\em should} float to the bottom of the page}
\end{wrapfigure}

\blindtext

\begin{wrapfigure}{O}[\marginparsep+\marginparwidth]{\linewidth}
    \includegraphics[width=\linewidth]{example-image.png}
    \caption{This {\em should} float to the top of the page}
\end{wrapfigure}

\lipsum

\end{document}

任务是让两个包装好的图形(图 3 和 4)分别浮到顶部或底部——可以使用包装wrapfig,也可以使用其他方式。

答案1

关于这个问题的消息说

我很想看到我所追求的布局类型的通用方案,或者为什么这在 (La)TeX 中是不可能的明确解释。

因此,这里有一个(绝对非权威的)解释,说明为什么/如何这在(La)TeX 中(不)可能实现,以及这种布局的潜在方案。

大致来说,TeX 的工作原理如下:

  • 当 TeX 读取您的输入时,每个段落都会变成一系列的框(每个单词中的单个字符)、粘合点(单词之间、句子之间)和惩罚点(潜在的连字点等)。
  • 此序列被分成指定宽度的行:每行变成一个水平框。(默认情况下,每个这样的框的宽度相等,即文本区域的宽度,但 TeX 指定“段落形状”:每行的宽度。)
  • 垂直列表会累积起来,由这些水平框组成。在某个时候,这个垂直列表会被拆分并作为一页发送出去,连同页眉和页脚之类的内容。

浮点数(传统意义上的,而不是这个问题的意义)在 LaTeX 中以某种复杂的方式进入最后一步。

在您的例子中,假设我们已经根据规范决定了浮动内容(我称之为插图)的放置位置。(这可能需要两次传递,以包括需要放置在提及它们的段落之前的浮动插图。)将某些内容扩展到边距没有问题;将某些内容放置在页面上绝对指定的位置并不困难;有标准方法可以做到这一点。唯一剩下的就是,对于每个段落,当我们向下移动页面时,我们需要确定适当的“形状”:它的宽度应该是多少,在左侧和右侧,以便它不会超出插图。(顺便说一下,类似这样的操作也是wrapfig:查找parshape中的提及wrapfig.sty。)

正如@DavidCarlisle 在评论中所说,据我所知,这“尚未实现”,因此您必须自己实现它。

这种事情用 Lua(La)TeX 编程起来更容易。一个可行的概念验证(例如,对于只有纯文本和插图而没有其他内容的文档)最多只需要几个小时的工作量。例如,在排版每个段落(将其分成几行)之前,您可以跟踪您在页面上走了多远,您相对于插图的位置,因此哪些行和多少行需要以何种方式更改宽度。然后您指定该“形状”并让 TeX 排版该段落。然后从下一个段落开始,等等。

但是将其转变为具有生产质量的东西(例如处理规格可能重叠的多个插图,处理段落之间的拉伸或收缩,以及最重要的是以“标准”方式执行操作以便与现有的 LaTeX 包一起工作)可能需要不确定的时间。

相关内容