Sie sind hier

Vertikales Spacing in der Figure Umgebung für Registerhaltigkeit

Hallo zusammen,

ich habe folgendes Problem: Ich möchte gerne registerhaltig setzen, d.h. Zeilen auf jeder Seite sollen den selben vertikalen Abstand von der Oberkante haben. Alle Zwischenüberschriften und ähnliche Elemente konnte ich bereits dahingehend konfigurieren und \raggedbottom kommt natürlich auch zum Einsatz. Allerdings gibt es auch eine Abbildung und hier stoße ich an ein Problem. Und zwar muss man bei der Abbildung natürlich so viel Weißraum hinzugeben, dass diese ein ganzzeiliges Vielfaches von \baselineskip in der Höhe ausmacht. Mit KOMA-Script erreiche ich allerdings so keine Registerhaltigkeit und ich verstehe nicht, warum nicht. So wie ich es sehe, wird irgendwie von KOMA noch Weißraum ergänzt, den ich nicht selber beeinflussen kann. Hier mein MWE:

\documentclass[a4paper,10pt]{scrbook}
\usepackage[left=20mm,right=20mm]{geometry}
 
\usepackage{lipsum,graphicx}
 
\renewcommand{\normalsize}{\fontsize{10bp}{12bp}\selectfont}
\setkomafont{caption}{\normalsize}
\setkomafont{captionlabel}{\normalsize}
 
\setlength{\textfloatsep}{0bp}
\setlength{\intextsep}{0bp}
\setlength{\abovecaptionskip}{10.61bp}
\setlength{\belowcaptionskip}{0bp}
 
\raggedbottom
\begin{document}
	\lipsum[1-3]
	\begin{figure}[h]
		\includegraphics[width=170mm,height=63.99mm]{example-image-A}
		\caption{Just a test}
	\end{figure}
	\lipsum
	\lipsum
\end{document}

Meine Abbildung hat im Original W267.0mm x H100.5mm, d.h. skaliert ergeben sich die hier verwendeten W170.0mm x H63.99mm und in Adobe Punkte umgerechnet eben W481.89p x H 181.39bp. Ganzzahliges Vielfaches von 12bp sind 192bp, d.h. ich muss 192bp - 181.39bp = 10.61bp Weißraum zum Ausgleichen hinzugeben, welches ich hier mit \abovecaptionskip versuche.

Wenn ich aber mit Hilfe des folgenden Codes die Ausgabe von oben nebeneinander platziere:

\documentclass[a4paper]{scrartcl}
 
\usepackage[absolute]{textpos}
\usepackage{graphicx,pgffor}
 
\pagestyle{empty}
\begin{document}
\foreach \x [evaluate=\x as \y using int(\x+1)] in {1}{
\newpage
\begin{textblock*}{105mm}[0,0](0mm,0mm)%
	\noindent%
	\includegraphics[page=\x,trim=0mm 0mm 105mm 0mm,width=105mm,clip]{Registerhaltigkeit.pdf}%
\end{textblock*}%
\begin{textblock*}{105mm}[0,0](105mm,0mm)%
	\noindent%
	\includegraphics[page=\y,trim=105mm 0mm 0mm 0mm,width=105mm,clip]{Registerhaltigkeit.pdf}%
\end{textblock*}%
~
}
\end{document}

dann sehe ich, dass folgende Ergebnis: https://i.stack.imgur.com/cLLFl.png

Die Zeilen unterhalb der Abbildung sind also zueinander verschoben

Wenn ich testweise mal

\setkomafont{caption}{\fontsize{10bp}{0bp}\selectfont}
\setkomafont{captionlabel}{\fontsize{10bp}{0bp}\selectfont}

oder andere Werte für baselineskip setze, habe ich das Gefühl, dass hier das Problem liegen könnte, ich verstehe aber nicht genau, was KOMA hier macht, jedenfalls passt der Baselineskip nicht, wenn man 12bp einsetzt.

Hat jemand eine Idee für mich, wo mein Denkfehler liegt, bzw. was ich übersehe?

[Admin-Edit:] Beitrag verschoben, weil ein allgemeines LaTeX-Problem und kein spezifisches KOMA-Script-Problem.

forum: 
Bild von Markus Kohm

Dein erster Fehler ist, dass Dein Beispiel so nicht lauffähig ist, weil mwe zwar example-image-a-Abbildungsdateien in verschiedenen Formaten bereit stellt, aber kein example-image-A.

Dein zweiter Fehler besteht darin zu glauben, dass man mit der Platzierungsoption [h] die Platzierung an der Stelle festschreiben kann. Das kann man nicht. LaTeX erweitert das ggf. automatisch zu [ht].

Dein dritter Fehler ist, dass bei Dir \textheight-\topskip kein ganzzahliges Vielfaches von \baselineskip ist. Das gleichst Du mit \raggedbottom nur notdürftig aus.

Dein vierter und größter Fehler ist, dass Du Höhe mit Höhe+Tiefe verwechselst. Eine mit \includegraphics geladene Abbildung sitzt komplett oberhalb der Grundlinie. Daraus dürfte eine Abweichung um \dp\strutbox resultieren.

Damit führt dann vermutlich:

\documentclass[a4paper,10pt]{scrbook}
\usepackage[left=20mm,right=20mm]{geometry}
 
\usepackage{lipsum,graphicx,color,eso-pic,picture}
 
\renewcommand{\normalsize}{\fontsize{10bp}{12bp}\selectfont}
\setkomafont{caption}{\normalsize}% überflüssig und für das Problem unerheblich
\setkomafont{captionlabel}{\normalsize}% überflüssig und für das Problem unerheblich
 
\setlength{\textfloatsep}{0bp}
\setlength{\intextsep}{0bp}
\setlength{\abovecaptionskip}{\baselineskip}
\setlength{\belowcaptionskip}{0bp}
 
\AddToShipoutPicture{%
  \AtTextUpperLeft{%
    \color{red}%
    \multiput(0,-\topskip)(0,-\baselineskip){49}{\line(1,0){\textwidth}}%
  }%
}
 
\newcount\zeilenzahl
 
\raggedbottom
\begin{document}
	\lipsum[1-3]
	\begin{figure}[h]
          \includegraphics[width=170mm,height=63.99mm]{example-image-a}
          % \rule{170mm}{63.99mm}% vergleiche vs. \rule[-\dp\strutbox]{170mm}{63.99mm}
		\caption{Just a test}
               % Achtung: Bei der nachfolgenden Berechnung kann es zu Rechenfehler kommen,
               % weil TeX nicht gut mit Werten wie 63.99mm umgehen und auch nicht gut rechnen kann
                \zeilenzahl=\numexpr
                \dimexpr 63.99mm+\dp\strutbox\relax/\baselineskip+1\relax
                \vskip \dimexpr (\zeilenzahl\baselineskip)-(63.99mm+\dp\strutbox)\relax
	\end{figure}
	\lipsum
	\lipsum
 
\end{document}

eher zu Registerhaltigkeit. Wenn die Abbildung nicht gleiten soll, würde ich allerdings eher empfehlen, sie unter Zuhilfenahme von \captionof und der lrbox-Umgebung in eine Box zu packen. Dann kann man diese Box ausmessen und den zusätzlich benötigten Abstand anteilig sowohl vor als auch nach der Box ausgeben. Der Inhalt der Box selbst muss ja sicher nicht registerhaltig werden. Anderenfalls wird der Satz durch die Registerhaltigkeit nämlich nicht besser, sondern durch eigenwillige Abstände eher schlechter.

Übrigens hat das Problem rein gar nichts mit KOMA-Script zu tun, wie man durch einen Test mit einer Standardklasse leicht feststellen kann. Das war dann sozusagen der fünfte Fehler.

BTW: Auch, wenn ich dessen Verwendung eher nicht empfehle und auch keinen Support dafür biete, sei auf das Paket gridset und ähnliche Pakete hingewiesen. Das eher zwecks Vollständigkeit. Dein Ansatz, eher die Abbildung samt Bildunterschrift auf die richtige Höhe (aber eben auch Tiefe) zu bringen, halte ich dagegen für den absolut richtigen. Allerdings gibt es dabei eine Menge zu beachten und daher auch einiges an Fehlerpotential. Selbst ein alter Hase wie ich, muss da manchmal sehr genau hinschauen. Der Vollständigkeit halbe sei auch noch das Paket adjustbox erwähnt, mit dem man beispielsweise die vertikale Ausrichtung einer Abbildung oder allgemein von Boxen leicht ändern kann.

Hallo Markus,
vielen Dank für deine schnelle und ausführliche Antwort. Bevor ich zum Inhalt komme möchte ich gerne fragen, ob ich dir mit meiner Frage, oder einer bestimmten Formulierung auf den Schlips getreten bin? Das war nämlich ganz und gar nicht meine Absicht und auch nach nochmaligem Lesen meiner Frage finde ich keinen Sarkasmus, Ironie oder andere missverständliche Elemente, vielmehr offen gestellte Fragen, die man am Ende mit: "Du hast vergessen \dp\strutbox, bzw. die Texttiefe zu berücksichtigen." beantworten kann. Ich war ehrlich gesagt am Anfang etwas erschrocken ob der Antwort. Nachdem ich nun aber nicht nur inhaltlich am Ende bin, sondern auch versucht habe alles technisch nachzuvollziehen, sehe ich, dass du dir sehr viel Mühe gemacht hast, eine vollständige Antwort auf mein Problem zu liefern weshalb ich davon ausgehe es ist das typische Problem schriftlicher Kommunikation und ich habe es nur missverstanden. Trotzdem würde ich gerne auch auf die Punkte antworten, die du als Fehler anführst.

Lauffähigkeit
Ich verwende MikTeX unter Windows und hier berichtet PDFlatex sogar im Logfile <use example-image-A.pdf>, es erzeugt also noch nicht einmal eine Warnung (anders als bei z.B. Klassen) und deshalb war ich mir des ersten "Fehlers" nicht bewusst, habe das wohl schlicht aus einer schlechten Quelle kopiert.
Ich gehe davon aus, du arbeitest unter Linux oder einem anderen Betriebssystem mit Unterscheidung Groß-/ und Kleinschreibung?

Platzierung
Ich weiß nicht, wo du aus meinem Posting herausliest, dass ich mit [h] eine zwingende Platzierung erreichen möchte. Ich wollte für ein MWE das nötigste bereitstellen, dafür hielt ich eine float-Umgebung in der Mitte der Seite für gut geeignet, weil man sehen kann, dass der Text oberhalb im Register ist, unterhalb nicht.
Findest du diesen Hinweis wichtig, um frischgebackene LaTeX-Anwender nicht auf dumme Ideen zu kriegen?

Satzspiegel
Vielen Dank für diesen Hinweis, auch hier war meine Interpretation, dass ein MWE so wenig wie möglich unnötige Details enthalten soll. Der tatsächliche Satzspiegel war dafür meiner Ansicht nach unerheblich, es kam lediglich auf die \textwidth an, deshalb habe ich mich darauf beschränkt.
Was mich hier technisch interessieren würde: Verhält sich LaTeX denn bei \raggedbottom wirklich anders, wenn die Texthöhe kein ganzzeiliger Baselineskip ist? In meinem konkreten Dokument kommen Fußnoten mit einem anderen Baselineskip auf jeder Seite, d.h. man erreicht ohnehin nie eine "volle" Seite ohne Glue zwischen Textkörper und Fußnotenapparat.

Tiefe und Höhe
Das ist der Denkfehler, nach dem ich gesucht habe. D.h. also die Abbildung sitzt immer nur oberhalb der Grundlinie und die Tiefe wird trotzdem als Leerraum weiß gelassen und muss deshalb vom zusätzlichen Weißraum abgezogen werden, richtig? Das bedeutet im konkreten Fall wenn die Tiefe 30% von Baselineskip beträgt, dass man auch 10.61bp um 3.61bp (30% von 12bp) reduzieren kann und tatsächlich, auch mit 7.01bp Zusatzweißraum erhalte ich das von dir gezeigte Ergebnis der Berechnung durch TeX.

Natürlich habe ich auch mit den Standardklassen gespielt um das Problem einzukreisen. Um sicherzugehen, dass die korrekte Schrift für Bildunterschriften genommen wird, habe ich dort aber das caption-Paket eingesetzt:

\usepackage{caption}
\DeclareCaptionFont{MyFont}{\fontsize{10bp}{12bp}\selectfont}
\captionsetup[figure]{font=MyFont,labelfont=MyFont}

Und das scheint das Problem zu maskieren, denn mit dieser Definition erhalte ich mit 10.61bp wieder Registerhaltigkeit und deshalb ging ich davon aus, KOMA-Script definiert hier etwas anders. Tatsächlich definiert caption aber irgendetwas, was nicht LaTeX-Standard ist. Vielen Dank auch für diese Erkenntnis, werde ich beim nächsten Debuggen noch mehr berücksichtigen und dann auch alles Schreiben, was ich bereits getan habe, auch wenn es ein Roman wird. ;-)

Vielen Dank auch für deine Warnung, in dem konkreten Dokument gibt es aber nur genau eine Abbildung, deshalb mache ich den Aufwand gerne und händisch, mit anschließender Prüfung. Damit behält man es hoffentlich im Griff.

Anschlussfrage
Was ich aber auch in deinem Beispiel noch nicht verstehe: Warum wird die caption ca. 1.7bp höher gesetzt, als die Grundlinie der selben Zeile auf der nächsten Seite?

Mein vollständiges und nun hoffentlich auf das Wesentliche reduzierte MWE sieht wie folgt aus:

\documentclass[a4paper,10pt]{scrbook}
\usepackage[left=20mm,right=20mm]{geometry}
 
\usepackage{lipsum,graphicx,color,eso-pic,picture}
 
\renewcommand{\normalsize}{\fontsize{10bp}{12bp}\selectfont}
 
\setlength{\textfloatsep}{0bp}
\setlength{\intextsep}{0bp}
\setlength{\abovecaptionskip}{0bp}
\setlength{\belowcaptionskip}{0bp}
 
\AddToShipoutPicture{%
	\AtTextUpperLeft{%
		\color{red}%
		\multiput(0,-\topskip)(0,-\baselineskip){49}{\line(1,0){\textwidth}}%
	}%
}
 
\raggedbottom
\begin{document}
	\lipsum[1-3]
	\begin{figure}[h]
		\includegraphics[width=170mm,height=63.99mm]{example-image-a}%
		\vspace{7.01bp}%
		\vspace{1.7bp}%
		\caption{Just a test}%
		\vspace{-1.7bp}%
	\end{figure}
	\lipsum[1-9]	
\end{document}

Und liefert mit dem nebeneinandersetzen der beiden ersten Seiten: https://i.stack.imgur.com/ABvvQ.png

D.h. nur durch das Verschieben um 1.7bp wird die Caption ungefähr auf der nächsten Grundlinie platziert. Woran liegt das?

[Admin-Edit:] Beitrag sinngerecht im Diskussionsstrang verschoben.

Bild von Markus Kohm

Ich hatte schon wieder den Fehler gemacht, ausführlich auf die IMHO unbegründete Verletztheit zu antworten. Da das aber vermutlich ohnehin nichts bringt, sei nur auf meinen Blog und insbesondere https://komascript.de/node/2245 und https://komascript.de/node/2080 und https://komascript.de/node/2056 hingewiesen. Mehr Beteiligung sollte man in dieser Diskussion von mir nicht erwarten.

Comments for "Vertikales Spacing in der Figure Umgebung für Registerhaltigkeit" abonnieren