ConTeXT 中多个 \starthanging \stophanging 的问题

ConTeXT 中多个 \starthanging \stophanging 的问题

我正在尝试使用 ConTeXT 依次放置多个带有附加侧面文本的图形。

当一行中有两个图形重叠时,应如何将它们分开?

当我运行 ConTeXT 时,以下代码会创建重叠的图形。

\starthanging{
\placefigure[force][fig:first]{Caption 1} {\externalfigure[first-figure][width=\textwidth]}}
\inother[width=5cm]{Some text for the other bit}
\stophanging

\starthanging{
\placefigure[force][fig:second]{Caption 2} {\externalfigure[second-figure][width=\textwidth]}}
 \inother[width=5cm]{Some text for the other bit 2}
\stophanging

我想要做的是这样的:

在此处输入图片描述

答案1

正如 Aditya 提到的,使用悬挂在这里是错误的方法。在他链接到的线程中,Hans 和 Wolfgang 已经提供了两种解决方案。我将基于 Wolfgang 的解决方案介绍第三种解决方案,其特点如下:

  • 附加文字排版在页边空白处,而不仅仅是靠近图形处。
  • 它使用 margindata 接口。这允许使用通常的ConTeXt 接口
  • 我尝试尽可能地避免使用低级命令。
  • 附加的图形文本是可选的。
  • 附加边距文本默认居中。如果其高度超出图形高度,则它们顶部对齐。

代码

\useMPlibrary [dum]  %% only for the screenshot

\setuppagenumbering
  [alternative=doublesided]

\definemargindata
  [FigureMargin]
  [inouter]
  [voffset=-\dimexpr\nextboxht-\strutheight\relax]

\definemarginframed
  [FigureMargin]
  [height=\nextboxht,
   align={flushleft, lohi}]

\starttexdefinition FigureText
  \dowithnextbox{
    \startlinealignment[middle]
      \copy\nextbox
      \doifsomething{\floatuserdataparameter{text}}
        {\FigureMargin{\floatuserdataparameter{text}}}
    \stoplinealignment
    }
    \hbox
\stoptexdefinition

\setupfloat
  [figure]
  [command=\FigureText]

首先,定义一个单独的页边距数据集。为了正确对齐页边距文本,它使用带有框架通常接受的所有设置

然后定义命令FigureText,排版图形内容和附加边距文本。它不负责标题。该命令FigureText接受一个参数,即图形内容。这个dowithnextbox技巧可以轻松访问框的尺寸,用于正确对齐边距文本。这允许定义没有参数的宏。

边距文本作为第二个参数传递给 \startplacefigure 并拿起使用\floatuserdataparameter

例子

下面是一个如何使用它的示例:

\showframe
\starttext
\dorecurse{2}{%%
  \startplacefigure
    [title=Some figure]
    [text=Some additional text for the margin.]
    \externalfigure
  \stopplacefigure

  \startplacefigure
    [title=Another figure]
    [text=Some more margin text for the other figure.]
    \externalfigure [dum] [width=\textwidth]
  \stopplacefigure
}
\stoptext

截图1

注意事项

不考虑边距文本的高度。如果浮动元素连续放置,边距文本可能会重叠。示例:

\starttext
\dorecurse{2}{%%
  \startplacefigure
    [title=Some figure]
    [text=\input ward\par]
    \externalfigure
  \stopplacefigure}
\stoptext

截图2

相关内容