
Я пытаюсь разместить несколько рисунков с дополнительным текстом сбоку с помощью 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
Предостережения
Высота текстов полей не учитывается. Если float размещаются последовательно, тексты полей могут перекрываться. Пример:
\starttext
\dorecurse{2}{%%
\startplacefigure
[title=Some figure]
[text=\input ward\par]
\externalfigure
\stopplacefigure}
\stoptext