Проблемы с множественными \starthanging \stophanging в ConTeXT

Проблемы с множественными \starthanging \stophanging в ConTeXT

Я пытаюсь разместить несколько рисунков с дополнительным текстом сбоку с помощью 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

Как сказал Адитья, использование подвешивания здесь неверный подход. В теме, на которую он ссылается, Ганс и Вольфганг уже предлагают два решения. Я представлю третье, основанное на решении Вольфганга, со следующими характеристиками:

  • Дополнительный текст печатается на полях, а не только рядом с рисунком.
  • Он использует интерфейс 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

Предостережения

Высота текстов полей не учитывается. Если float размещаются последовательно, тексты полей могут перекрываться. Пример:

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

скриншот2

Связанный контент