我正在尝试使用 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
注意事项
不考虑边距文本的高度。如果浮动元素连续放置,边距文本可能会重叠。示例:
\starttext
\dorecurse{2}{%%
\startplacefigure
[title=Some figure]
[text=\input ward\par]
\externalfigure
\stopplacefigure}
\stoptext