如何让文字环绕图形?(修订版)

如何让文字环绕图形?(修订版)

这个问题已经之前问过(事实上​​,我从该问题中偷了下面的图表)但答案不足以满足我的需要(至少据我所知)。

我想要的是以下内容:

Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Aenean quis mi ut elit interdum imperdiet quis non ante.
Sed imperdiet, sapien quis    +------------------------+
viverra rhoncus, tellus dui   |                        |
dictum nisl, at porta purus   |                        |
ipsum ac turpis. Fusce auctor |         FIGURE         |
ullamcorper adipiscing. Nunc  |          HERE          |
non quam ac orci egestas con- |                        |
sequat ut eget quam. Cras     |                        |
blandit condimentum ornare.   +------------------------+
Curabitur aliquam, nulla sit amet iaculis tristique, mi
nulla auctor magna, sit amet imperdiet ante arcu a libero.

然而,我确实不是希望“此处显示图片”部分从段落顶部开始。我尝试过和,wrapfigpicins查看了的文档floatflt,但并没有真正找到任何东西。(wrapfig似乎总是将其放在顶部,floatflt没有任何此类放置选项,并且picins似乎开始了一个新段落。)

除了渲染没有图形的文档、查看换行符的位置、在该点强制换行、开始新段落等之外,还有其他方法吗\noindent?尽管我喜欢做这样的事情,并且认为它完全符合 TeX 的“不要担心布局细节”的理念,但理想情况下这不适用于这里。同样理想的是,如果它能算出图形有多大,而不是我告诉它。

答案1

我建议你看一下卡特温包。下面是一个 MWE(最小工作示例),演示了如何在实践中使用它:

\documentclass{article}
\usepackage{cutwin,lipsum}
\usepackage[demo]{graphicx}
\opencutright
\begin{document}

% Define contents of "cutout window" before starting
%   the cutout environment. For this MWE, use a
%   "dummy" image (a black rectangle).
\def\windowpagestuff{\flushright 
   \includegraphics[width=2in,height=1in]{DummyFileName}}

% Set the cutout to start after 3 lines of text
%   and to have a height of 8 lines; width of
%   this cutout: 0.5\textwidth .
\begin{cutout}{3}{0.5\textwidth}{0pt}{8}
     \noindent
     \lipsum[1]
\end{cutout}
\end{document}

在此处输入图片描述

请注意,我已使用选项加载graphicx了软件包demo,该选项允许我加载“虚拟”图形文件。实际上,人们会忽略该demo选项并加载“真实”图形文件。

附录如果所讨论的段落位于分页符附近,情况可能会变得有点难以预测。如有疑问,您可以将环境“包裹”cutout在一对\begin{minipage}{\textwidth}and\end{minipage}语句中。

答案2

TeX 的原语\parshape允许您使用一对逐行指定段落形状<indent> <width>。既然 Mico 已经通过以下方式实现了如此简洁明了的方法,为什么还要采用这种方法呢?cutwin? 好吧,使用\parshape也允许您排版任意(非直线)形状,这使得了解其工作原理很有用。

以下示例是cutwin使用的粗略复制\parshape,需要一些手动干预。它在分页符附近效果不佳,但对于wrapfig和 朋友也是如此。

在此处输入图片描述

\documentclass{article}
\usepackage[demo]{graphicx}% http://ctan.org/pkg/graphicx
% The 'demo' option creates a 150pt x 100pt black rectangle by default
\begin{document}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam et nunc id sem dictum ullamcorper 
ut vitae augue. Etiam vehicula, dolor sit amet eleifend imperdiet, tortor neque mollis dui, ut 
laoreet neque lectus a metus. Vivamus fermentum, tellus eget cursus mollis, mi orci facilisis lacus, 
vitae aliquet arcu est nec tortor. Integer ut nunc vulputate velit dapibus sodales eget eu nulla. 
Duis mattis tristique justo semper condimentum. Phasellus eu libero odio. Integer interdum turpis in 
metus rhoncus ac tempus tortor fermentum.

% Image inclusion
\newlength{\figwidth}%
\setlength{\figwidth}{\dimexpr\linewidth-150pt-2ex\relax}
\null\hfill\smash{\raisebox{-\dimexpr 9.5\baselineskip+\parskip\relax}%
  {\includegraphics{image}}}\strut \\[-\dimexpr 3\baselineskip+2\parskip\relax]

% Paragraph formatting
\parshape=13 % 13 lines will be adjusted
0pt \linewidth 0pt \linewidth % 2 lines are regular
0pt \figwidth 0pt \figwidth 0pt \figwidth 0pt \figwidth 0pt \figwidth
0pt \figwidth 0pt \figwidth 0pt \figwidth 0pt \figwidth 0pt \figwidth % 10 lines are indented on right
0pt \linewidth % last line resets the paragraph alignment to regular
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam et nunc id sem dictum ullamcorper 
ut vitae augue. Etiam vehicula, dolor sit amet eleifend imperdiet, tortor neque mollis dui, ut 
laoreet neque lectus a metus. Vivamus fermentum, tellus eget cursus mollis, mi orci facilisis lacus, 
vitae aliquet arcu est nec tortor. Integer ut nunc vulputate velit dapibus sodales eget eu nulla. 
Duis mattis tristique justo semper condimentum. Phasellus eu libero odio. Integer interdum turpis in 
metus rhoncus ac tempus tortor fermentum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam et nunc id sem dictum ullamcorper 
ut vitae augue. Etiam vehicula, dolor sit amet eleifend imperdiet, tortor neque mollis dui, ut 
laoreet neque lectus a metus. Vivamus fermentum, tellus eget cursus mollis, mi orci facilisis lacus, 
vitae aliquet arcu est nec tortor. Integer ut nunc vulputate velit dapibus sodales eget eu nulla. 
Duis mattis tristique justo semper condimentum. Phasellus eu libero odio. Integer interdum turpis in 
metus rhoncus ac tempus tortor fermentum.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam et nunc id sem dictum ullamcorper 
ut vitae augue. Etiam vehicula, dolor sit amet eleifend imperdiet, tortor neque mollis dui, ut 
laoreet neque lectus a metus. Vivamus fermentum, tellus eget cursus mollis, mi orci facilisis lacus, 
vitae aliquet arcu est nec tortor. Integer ut nunc vulputate velit dapibus sodales eget eu nulla. 
Duis mattis tristique justo semper condimentum. Phasellus eu libero odio. Integer interdum turpis in 
metus rhoncus ac tempus tortor fermentum.

\end{document}​

\parshape=<n> <i1> <l1> <i2> <l2> ...设置段落中后续行的行i缩进和行宽。如果段落继续超过行,则使用最后设置的行缩进和行宽。l<n><n><i> <l>

因此,在上面的 MWE 中,首先设置图像,然后设置段落:

  • 图像:image排版为右对齐\smash,然后放置(通过\raisebox)到位。行数的手动计算取决于图像高度。在我的示例中,图像被放置9.5\baselineskip+\parskip。设置图像后需要进行垂直回跳/校正,以便使前面的段落对齐。
  • 段落:前两行(共13)缩进0pt,宽度为\linewidth。接下来的 10 行宽度为\figwidth,设置为,段落文本和图像之间\linewidth-150pt-2ex留有2ex间隙。最后一行(第 13 行)将段落样式重置为无缩进(0pt)和自然宽度(\linewidth),就像前两行一样。

如上所述,现在可以修改这种方法以适应不规则的图像或形状。

答案3

picinpar另请参阅LaTeX 2.09 版中较旧但仍然有用的软件包:

\documentclass{article}
\usepackage{picinpar}
\usepackage{lipsum}

\begin{document}

\begin{window}[2,r,\rule{4cm}{3cm},]
\lipsum[1]
\end{window}

\end{document}

在此处输入图片描述

相关内容