
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:
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 FigureText
definiert, der den Bildinhalt und den zusätzlichen Randtext setzt. Für die Beschriftung ist er nicht zuständig. Der Befehl FigureText
nimmt als Argument den Bildinhalt an. Der dowithnextbox
Trick 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
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