Probleme mit mehreren \starthanging \stophanging in ConTeXT

Probleme mit mehreren \starthanging \stophanging in ConTeXT

Ich versuche mehrere Abbildungen mit zusätzlichem Seitentext mittels ConTeXT hintereinander zu platzieren.

Wenn zwei Figuren in einer Reihe stehen, überlappen sie sich. Wie sollen sie voneinander getrennt werden?

Der folgende Code erstellt überlappende Abbildungen, wenn ich ConTeXT ausführe.

\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

Ich versuche Folgendes:

Bildbeschreibung hier eingeben

Antwort1

Wie Aditya erwähnte, ist Hängen hier der falsche Ansatz. In dem Thread, auf den er verlinkt hat, bieten Hans und Wolfgang bereits zwei Lösungen an. Ich werde eine dritte vorstellen, die auf Wolfgangs Lösung basiert und die folgenden Funktionen bietet:

  • Der zusätzliche Text wird am Rand gesetzt, nicht nur in der Nähe der Abbildung.
  • Es verwendet die margindata-Schnittstelle. Dies ermöglicht die Bearbeitung des Randtexts mit den üblichenConTeXt-Schnittstelle.
  • Ich habe versucht, Low-Level-Befehle so weit wie möglich zu vermeiden.
  • Der zusätzliche Abbildungstext ist optional.
  • Zusätzliche Randtexte werden standardmäßig zentriert. Übersteigt ihre Höhe die Bildhöhe, werden sie oben ausgerichtet.

Der Code

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

Zunächst wird ein individueller Randdatensatz definiert. Um den Randtext korrekt auszurichten, verwendet dieser einen Rahmen mit demalle Einstellungen, die Frames normalerweise akzeptieren.

Anschließend wird der Befehl FigureTextdefiniert, der den Bildinhalt und den zusätzlichen Randtext setzt. Für die Beschriftung ist er nicht zuständig. Der Befehl FigureTextnimmt als Argument den Bildinhalt an. Der dowithnextboxTrick ermöglicht einen einfachen Zugriff auf die Abmessungen der Box, die zur korrekten Ausrichtung des Randtexts verwendet wird. Dies ermöglicht die Definition des Makros ohne Parameter.

Der Randtext wird als zweites Argument an \startplacefigure und mit abgeholt \floatuserdataparameter.

Beispiel

Hier ist ein Anwendungsbeispiel:

\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

Screenshot1

Vorbehalte

Die Höhe der Randtexte wird nicht berücksichtigt. Werden Floats hintereinander platziert, kann es zu Überlappungen der Randtexte kommen. Beispiel:

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

Screenshot2

verwandte Informationen