Problemas com múltiplos \starthanging \stophanging no ConTeXT

Problemas com múltiplos \starthanging \stophanging no ConTeXT

Estou tentando colocar várias figuras com texto lateral adicional usando ConTeXT, uma após a outra.

Quando há duas figuras seguidas, elas se sobrepõem. Como eles deveriam ser separados?

O código a seguir cria figuras sobrepostas quando executo o 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

O que estou tentando fazer é o seguinte:

insira a descrição da imagem aqui

Responder1

Como Aditya mencionou, usar o enforcamento é a abordagem errada aqui. No tópico que ele ligou para Hans e Wolfgang já fornecem duas soluções. Apresentarei uma terceira, baseada na solução de Wolfgang, com as seguintes funcionalidades:

  • O texto adicional é escrito na margem, e não apenas próximo à figura.
  • Ele usa a interface margindata. Isto permite que o texto da margem seja manipulado usando o procedimento usualInterface ConTeXt.
  • Tentei evitar comandos de baixo nível tanto quanto possível.
  • O texto da figura adicional é opcional.
  • Os textos de margem adicionais são centralizados por padrão. Se a altura exceder a altura da figura, eles serão alinhados pelo topo.

O código

\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]

Primeiro, um conjunto de dados de margem individual é definido. Para alinhar corretamente o texto da margem, utiliza-se uma moldura com otodas as configurações que os frames geralmente aceitam.

Em seguida, é definido o comando FigureTextque compõe o conteúdo da figura e o texto da margem adicional. Não é responsável pela legenda. O comando FigureTextleva um argumento, que é o conteúdo da figura. A dowithnextboxartimanha permite fácil acesso às dimensões da caixa, que é utilizada para alinhar corretamente o texto da margem. Isto permite a definição da macro sem parâmetro.

O texto da margem é passado como um segundo argumento para \startplacefigure e peguei usando \floatuserdataparameter.

Exemplo

Aqui está um exemplo de como usá-lo:

\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

captura de tela1

Ressalvas

A altura dos textos das margens não é levada em consideração. Se os pontos flutuantes forem colocados consecutivamente, os textos das margens poderão se sobrepor. Exemplo:

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

captura de tela2

informação relacionada