如何在 ConTeXt 中将图形相对于其他图形放置?

如何在 ConTeXt 中将图形相对于其他图形放置?

我有两个图形。我需要放置第一个图形width=10cm,然后放置第二个图形,宽度相同,但其中心必须相对于第一张图片的中心向右移动 9 厘米,向下移动 5 厘米。

我还需要文本不要与图片交叉,即我需要这种构造的行为就像一张通常的图片一样。

有没有办法做到这一点?

答案1

您可以使用叠加环境将两幅图像叠加在一起。然后使用命令调整第二幅图的相对位置 \offset

\useMPlibrary
  [dum]

\setupexternalfigures
  [width=10cm]

\starttext
  \startoverlay
    {\externalfigure}
    {\offset[x=9cm, y=5cm]{\externalfigure}}
  \stopoverlay
\stoptext

结果

编辑:后续文本覆盖第二幅图像的原因是该\offset命令没有调整边界框,而这恰恰是我们所希望的。您可以使用该\showboxes命令直观地跟踪该边界框。

为了解决这个问题,我提出了两个解决方案。第一个\vbox使用更高级别的命令创建一个\frame高度为图像高度 + 垂直位移宽度 / 2 = 12.5cm这会创建一个正确高度的框,因此后续文本不会覆盖图像。

\setuppapersize
  [A3]

\useMPlibrary
  [dum]

\setupexternalfigures
  [width=10cm]

\defineframed
  [overlayframe]
  [frame=off,
   offset=overlay,
   height=12.5cm,
   align=top]

\starttext
  \overlayframe{%%
    \startoverlay
      {\externalfigure}
      {\offset[x=9cm, y=5cm]{\externalfigure}}
  \stopoverlay}
  \input knuth
\stoptext

结果修复

第二种解决方案是使用 插入垂直空间\vskip

\setuppapersize
  [A3]

\useMPlibrary
  [dum]

\setupexternalfigures
  [width=10cm]

\starttext
  \startoverlay
    {\externalfigure}
    {\offset[x=9cm, y=5cm]{\externalfigure}}
  \stopoverlay

  \godown [\dimexpr 5cm+\lineheight\relax]
  \input knuth
\stoptext

结果和上面一样。

相关内容