
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:
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 FigureText
que compõe o conteúdo da figura e o texto da margem adicional. Não é responsável pela legenda. O comando FigureText
leva um argumento, que é o conteúdo da figura. A dowithnextbox
artimanha 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
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