wrapfig 内部如何工作?

wrapfig 内部如何工作?

包裹图是一个 LaTeX 软件包,旨在使文本能够围绕图像流动。我熟悉文档,它是根据最终用户的需求编写的。但是 wrapfig 内部是如何工作的呢?

基本过程(为图像留出空白,使用驱动程序放置它)在概念上是清除对我来说。但我很好奇:

  1. wrapfig 的底层操作方法的“大概情况”是怎样的?
  2. (如何)wrapfig 以某种方式确定浮动文本应断开的连字点?
  3. 目前,wrapfig 无法在两边都显示文字,以致于文字只能在另一边继续显示,这样对吗?(想象一下放置在一列中间的图像。)

遗憾的是,我的 TeX 水平太差,无法使用 wrapfig 的源代码和文档中的“随机实现说明”自己回答我的问题。

答案1

TeX 有一个\parshape基元,它指定段落前的一些特殊行,然后为每一行指定一对(左边距,行宽)。最后一对用于所有后续行,因此

\documentclass{article}

\setlength\textwidth{6cm}
\begin{document}
\newlength\shortline
\shortline=\dimexpr\textwidth-2cm

\parshape 4
0pt  \shortline
0pt  \shortline
0pt  \shortline
0pt  \textwidth
One two three four five six seven.
Red blue green yellow white black.
One two three four five six seven.
Red blue green yellow white black.
One two three four five six seven.
Red blue green yellow white black.

\end{document}

生产

在此处输入图片描述

因此,基本上wrapfig将图形设置在一个框中以找到要剪切的默认长度和要剪切的线数以产生上述内容,然后将图形放在空间中:

\documentclass{article}

\setlength\textwidth{6cm}
\newlength\shortline

\begin{document}

\shortline=\dimexpr\textwidth-2cm

\parshape 4
0pt  \shortline
0pt  \shortline
0pt  \shortline
0pt  \textwidth
\noindent\smash{\rlap{\hspace{\textwidth}\llap{%
\hspace{2mm}%
\rule[-.8cm]{1.8cm}{1cm}}}}%
\indent
One two three four five six seven.
Red blue green yellow white black.
One two three four five six seven.
Red blue green yellow white black.
One two three four five six seven.
Red blue green yellow white black.

\end{document}

制作

在此处输入图片描述

这个软件包的巧妙之处在于它可以检测您是否需要多个段落,如果需要,则为\parshape后面的段落构建一个新的较短的段落。

\documentclass{article}

\setlength\textwidth{6cm}
\newlength\shortline

\begin{document}
\sloppy

\shortline=\dimexpr\textwidth-2cm

\parshape 4
0pt  \shortline
0pt  \shortline
0pt  \shortline
0pt  \textwidth
\noindent\smash{\rlap{\hspace{\textwidth}\llap{%
\hspace{2mm}%
\rule[-.8cm]{1.8cm}{1cm}}}}%
\indent
One two three four five six seven.
Red blue green


\parshape 2
0pt  \shortline
0pt  \textwidth
Yellow white black.
One two three four five six seven.
Red blue green yellow white black.
One two three four five six seven.
Red blue green yellow white black.

\end{document}

在此处输入图片描述

相关内容