如何让文本在 ConTeXt 中围绕不规则形状的图形流动?

如何让文本在 ConTeXt 中围绕不规则形状的图形流动?

我有一些插图需要扫描并放在文档中。这些插图形状各异,没有直边,并且被大量空白包围,例如:

 __________________
|                  |
|    *  *          |
|   ******         |
|   ******     *   |
|    ****     *    |
|     *********    |
|      ********    |
|      * *  * *    | 
|     *  *  * *    |
|__________________|

我希望能够让文档的文本更贴近形状,例如:

|           This is the story |
|    *  *     of a cat named  |
|   ******        Cat who li- |
|   ******     *  ked to eat  |
|    ****     *  mice. One d- |
|     *********  ay while wa- |
|      ********  lking throu- |
|      * *  * *  gh the fore- |
|     *  *  * *  st, Cat fou- |
|                nd a family  |
| of mice who lived in a hol- |
| llow tree.                  |

我怎样才能在文档中放置这种不规则形状的图形?

答案1

你所需要的是build_parshape宏和shapetext 环境。build_parshape以 MetaPost 路径作为参数并将文本与路径对齐。shapetext,嗯……名称已经揭示了它在做什么。这在 MetaPost 手册第 10 章中有详细说明在 MetaPost 中排版

我不知道有什么简单的方法可以将任意图形的形状提取到 MetaPost 路径中。在此示例中,我手动完成了此操作。拍摄一张图片,覆盖一个网格并记下有趣点的坐标。这些就是f, b, d示例中的点。

%% provides the shapetext environment
\useMPlibrary [txt]

%% locate sample images in texmf tree
\setupexternalfigures [location=default]

\startuseMPgraphic{parshape}
  path fin;

  h := 12cm; % height
  w := 14cm; % width
  pair f; f := (8cm, h-3cm);  % feet corner
  pair b; b := (6cm, h-6cm);  % belly corner
  pair d; d := (2cm, 1cm);    % head corner

  pair p[];
  p0  := origin;
  p1  := (w, 0);
  p2  := (w, h);
  p3  := (xpart f, h);
  p4  := f;
  p5  := (xpart b, ypart f);
  p6  := b;
  p7  := (xpart f, ypart b);
  p8  := (xpart f, (ypart b)-2cm);
  p9  := d;
  p10 := (0, ypart d);

  fin := p0--p1--p2--p3--p4--p5--p6--p7--p8--p9--p10--cycle;

  build_parshape(fin,0,0,0,\baselinedistance, \strutheight,\strutdepth,\strutheight) ;
\stopuseMPgraphic

\defineoverlay [parshape] [\useMPgraphic{parshape}]
\definelayer   [image]
\setlayer      [image]    {\externalfigure[cow][height=8cm, orientation=90]}

\starttext
  \startshapetext [parshape]
    \input zapf
    \input zapf
  \stopshapetext

  \framed [background=image,frame=off] {\getshapetext}
\stoptext

结果

答案2

这个答案分为两部分,我担心你可能不喜欢其中的任何一个。

第一部分是:避免使用这样的文本流,即使你找到了一种方便的方法。我想说,这种单独调整的文本流可能有助于说明特定的效果。但总的来说,这是一种不好的做法,应该尽可能避免。如果你需要有关并排文本/图形块(没有单独对齐)的帮助,你可以就此问题单独发帖。

第二部分是:即使你决定忽略我的建议,你也面临两个挑战。第一个是告诉 TeX 你图形中的空白。这很可能是你必须通过反复试验手动完成的事情。第二个挑战是告诉 TeX 如何对齐相关段落。这是我可能能够帮助你的地方。

我知道 TeX 原语\parshape。它允许您以高度自由的方式塑造下一段落的所有后续行。这是一个例子(我前段时间创建它,因为我觉得它很有趣)。这是统计学家 Youden 的一句话:

在此处输入图片描述

\documentclass{standalone}

\begin{document}

\begin{minipage}{12cm}%
{\let\unit=\linewidth
\parshape 15 %  means: # pairs of (LEFT MARGIN, LENGTH) follow
0.440\unit      0.119\unit
0.413\unit      0.172\unit
0.392\unit      0.214\unit
0.373\unit      0.252\unit
0.355\unit      0.288\unit
0.338\unit      0.323\unit
0.321\unit      0.357\unit
0.303\unit      0.392\unit
0.285\unit      0.428\unit
0.266\unit      0.466\unit
0.245\unit      0.508\unit
0.222\unit      0.555\unit
0.195\unit      0.609\unit
0.160\unit      0.679\unit
0.107\unit      0.784\unit
%0.05\unit      0.95\unit% these numbers fill the LAST line.
%\noindent\hbox to0.119\unit{\hfil The\hfil} 
The
Normal Law of Error Stands out in the Experience of mankind as  one  of  the  broadest Generalizations  of  natural Philosophy and it serves as the Guiding instrument in researches in the Physical and social sciences and in medicine agriculture and engineering and it is an indispensable tool for the analysis and the interpretation of the basic data obtained by observation and experiment.
%\dotfill

}
\end{minipage}

\end{document}

诀窍是写出以下对的数量\parshape <N>。每对定义一条线来形成形状。我使用一个简单的工具计算了这些线。<N><left margin> <length>

请注意,该段落本身完全未格式化。

相关内容