Ich würde in einem Dokument die Beschriftungen für Abbildungen, Tabellen und Listings gern in der Randspalte setzen, und zwar auf linken Seiten in rechtsbündingem Falttersatz, auf rechten Seiten in linksbündigem. Dies würde ich gern durch Umdefinieren der Standard-Gleitumgebungen erreichen, da die einzelnen "Code-Schnipsel" auf viele Dateien verteilt in einer wohl geordneten Struktur bereits vorliegen und per \input{}
eingebunden werden sollen. Am liebsten wäre mir dies mit KOMA-Script-Bordmitteln, ohne auf Pakete wie sidecap
zurückzugreifen.
Mein erster "brachialer" Ansatz funktioniert überhaupt nicht.
\documentclass[fontsize=11pt, paper=a4, DIV=classic]{scrbook} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage{microtype} \usepackage[ngerman]{babel} \KOMAoption{headinclude}{false} \KOMAoption{footinclude}{false} \KOMAoption{mpinclude}{true} \recalctypearea \setlength{\marginparsep}{2em} \setlength{\marginparwidth}{11em} \usepackage{marginnote} \usepackage{ragged2e} \usepackage{blindtext} \addtokomafont{caption}{\small} \setkomafont{captionlabel}{\sffamily\bfseries} \setcapindent*{0pt} \DeclareNewTOC[type=Listing, types=Listings, float, floattype=4, counterwithin=chapter,% name=Quelltext, listname={Verzeichnis der Quelltexte}]{ListOfListings} \setuptoc{ListOfListings}{chapteratlist} \renewenvironment{Listing}[1][]{\renewcommand\caption[1]{\marginnote% [\RaggedLeft\captionof{Listing}{##1}]{\RaggedRight\captionof{Listing}{##1}}}}{} \renewenvironment{figure}[1][]{\renewcommand\caption[1]{\marginnote% [\RaggedLeft\captionof{figure}{##1}]{\RaggedRight\captionof{figure}{##1}}}}{} \renewenvironment{table}[1][]{\renewcommand\caption[1]{\marginnote% [\RaggedLeft\captionof{table}{##1}]{\RaggedRight\captionof{table}{##1}}}}{} \begin{document} \chapter{Captions in der Randspalte} \blindtext \begin{Listing} \caption{Bedingte Wiederholung mit Prüfung der Bedingung am Anfang} \makebox(170, 180)[c]{Listing} \end{Listing} \blindtext \begin{figure} \caption{Programmablaufplan für die bedingte Wiederholung mit Prüfung am Anfang} \makebox(170, 170)[c]{Programmablaufplan} \end{figure} \blindtext \begin{table} \caption{Überblick über die Kontrollstrukturen} \centering\small \begin{tabular}{lll} Test & Test & Test \\ Test & Test & Test \end{tabular} \end{table} \blindtext \end{document}
Bei dieser Version wird \RaggedLeft
einfach ignoriert. Zudem werden Abbildungsbeschriftung und Abbildung durch einen Seitenumbruch getrennt, und die Beschriftung hängt viel zu weit unten auf der Seite.
Wahrscheinlich bin ich völlig auf dem Holzweg. In der KOMA-Script-Dokumentation habe ich aber auch noch keinen Ansatz dafür gefunden, was ich erreichen möchte. Die captionbeside
-Umgebung ist ja nicht dafür gedacht, nur die Beschriftung in die Randspalte zu verbannen.
Eine weitere Frage: Welches Vorgehen ist angemessen, um den Satzspiegel zu optimieren? Ist die nachträgliche Änderung von \marginparsep
und \marginparwidth
in diesem Fall der richtige Weg?
Noch keine Antwort
Bei Deiner Umdefinierung sind die Umgebungen ja keine Gleitumgebungen mehr. Soll das so sein oder sollen sie wieder gleiten dürfen?
Dass
\RaggedLeft
an der Stelle ignoriert wird, ist eigentlich klar. Das sollte es jedenfalls spätestens dann werden, wenn Du einmal ein\captionof
im normalen Text ausprobierst. Das\RaggedLeft
müsste schon in das Argument von\captionof
. Allerdings bleibt dann das Problem, dass das Label natürlich weiterhin links bleibt. Das entspricht ja auch der Vorgabe\setcapindent*{0pt}
. Das nach rechts zu bekommen wäre dann auch gar nicht so einfach.Wie sollen die Beschriftungen denn vertikal ausgerichtet sein? Sollen die oben mit dem Inhalt ausgerichtet werden, zentriert (was als einziges der Angabe
[c]
bei derpicture-
Anweisung\makebox
entsprechen würde, mir aber ziemlich ungewöhnlich erscheint), oder unten ausgerichtet?Prinzipiell wäre
captionbeside
übrigens durchaus ein korrekter Ansatz. Man müsste natürlich eineminipage
mit hinein packen, damit der Inhalt der Umgebung Textbreite bekommt. Problematisch wäre aber auch hier ggf. die Linksbündigkeit des Labels.Was das ganze mit
\input
zu tun haben soll, ist mir nicht klar. Falls das ein Hinweis der Art: »Ich will aber an meinem existierenden Code nichts ändern müssen.« sein soll, sag es gleich, dann bemühe ich mich gar nicht erst weiter, weil ich das vorab schlicht nicht versprechen kann.Versuch einer präziseren Zielbeschreibung
Dass bei der Neudefinition die Umgebungen ihre "Gleiteigenschaft" verloren haben, war mir zwar bewusst, aber eigentlich nicht gewünscht. Es war halt ein erster, völlig rudimentärer Versuch, bei dem ich bemerkt habe, dass alles gar nicht so einfach ist ...
Eigentlich sollen die Beschriftungen vertikal immer oben ausgerichtet sein, bei Abbildungen ganz oben, bei Tabellen in Bezug auf die Kopfzeile (ich arbeite normalerweise mit
\toprule
,\midrule
und\bottomrule
ausbooktabs
, und bei Listings mit Hilfe vonlistings
(ggf. mit einem grauen Kasten hinterlegt) in Bezug auf die erste Zeile des Quelltextes. Bezeichnung und Nummer (z.B. "Abbildung 1.1.") sollen immer eine eigene Zeile bekommen, darunter dann der eigentliche Beschriftungstext im Flattersatz folgen, auf ungeraden Seiten eben linksbündig, auf geraden hingegen rechtsbündig. Scheint ganz schön schwierig zu sein ...Ich scheue mich nicht davor, alle Code-Teile anzupassen, wenn das nötig ist, würde aber gern erreichen, dass alle Umgebungen in der Präambel einfach "umgeschaltet" werden können, idealerweise zwischen (1) "konventioneller" Beschriftung unterhalb des Gleitobjektes, (2) Beschriftung in der Randspalte und (3) komplettem Unterdrücken der Beschriftung. Ich verwende nämlich die gleichen Tabellen, Abbildungen und Listings in vielen verschiedenen Dokumenten.
Das Ziel hinter dem Ziel: Ich würde gern nach und nach ein Informatik-Skript für die Oberstufe schreiben, das, sollte es jemals fertig werden, sicher einige hundert Seiten umfassen wird. Dabei soll sich der Text lesen wie ein Roman. Aus diesem Grund würde ich bei "kleinen" Abbildungen sehr oft
[h]
verwenden, bei größeren Abbildungen und Tabellen natürlich nicht. Ebenso würde ich Definitionen und Sätze "elegant" in den Text einbauen, am Rand aber entsprechend kennzeichnen. Das wäre dann m.E. ein guter Kompromiss zwischen "Schulbuch" und "Fachbuch". Ich könnte gern mal ein sechsseitiges Beispiel als PDF zur Verfügung stellen, aber das Hochladen von Dateien scheint hier nicht vorgesehen zu sein.Tests mit mcaption
Ich habe noch ein wenig mit
mcaption
herumexperimentiert, in der Hoffnung, vielleicht etwas besser zu verstehen, was hinter den Kulissen passiert.Das Ergebnis geht durchaus in die Richtung, die ich mir vorstelle. Offen bleibt die exakte vertikale Ausrichtung der Beschriftung bezüglich der Kopfzeile der Tabelle und die Beseitigung der durch
\checkOddPage
hervorgerufenen Underfull-HBox-Warnung.Ich scheue mich immer ein wenig, KOMA-Script mit Paketen wie
mcaption
zu mischen, die doch recht tief ins Geschehen eingreifen. Was scheint vielversprechender? Die Optimierung dermcaption
-Lösung oder die Suche nach einer nativen?Keine Ahnung von mcaption
Vom Paket mcaption habe ich in der Tat keine Ahnung. Da müsste ich mich erst einmal reinknien. Um eine
listings
-Umgebung mit automatisch\begin{margincap}…\end{magrincap}
zu definieren würde ich aber bei\DeclareNewTOC
schlicht:als Optionen ausprobieren.
Bezüglich der vertikalen Ausrichtung von Abbildungen sei darauf hingewiesen, dass man ggf. die Abbildung entweder mit Hilfe des Pakets alignbox oder mit einem schlichten
\raisebox
in seiner vertikalen Ausrichtung ändern kann. Bei tabular gibt es außerdem die Möglichkeit mit dem optionalen Argument, beispielsweise\begin{tabular}[t]{…}
die vertikale Ausrichtung zu ändern. Ob das im konkreten Fall hilfreich ist, habe ich nicht geprüft.Teilproblem gelöst
Vielen Dank für den Tipp, den ich auf jeden Fall ausprobieren werde! Mittlerweile klappt auch bei Listings die Neudefinition analog zu Abbildungen und Tabellen. Grund für den Fehler war, wie so oft, ein blödes Copy-Paste-Missgeschick, das ich trotz intensiver Überprüfung einfach nicht entdeckt hatte.
atbegin und atend funktionieren
Die o.g. Haken funktionieren genauso wie die Neudefinition der Umgebung.
Wieder einen Schritt weiter
Durch eine hervorragende Antwort auf meine Frage bei StackExchange durfte ich lernen, dass die Underfull-\hbox-Warnung ein inhärentes Problem von
\RaggedLeft
innerhalb von\caption{}
ist und dass man diese am besten temporär unterdrückt, um nicht in weitere Schwierigkeiten zu geraten ...Bei Verwendung von
mcaption
bleibt also nur noch die Frage der exakten vertikalen Ausrichtung, möglichst ohne Herumprobieren, offen.Ich gehe mal davon aus, dass ich für den hier beschriebenen Anwendungsfall auf das Paket
mcaption
setzen werde, da das gleiche Ergebnis mit KOMA-Script-Bordmitteln wohl schwer zu erreichen sein dürfte.Vertikale Ausrichtung bei Tabellen
Das Paket mcaption setzt
\abovecaptionskip
auf 0pt. Um caption und Tabellenkopf auf einer Linie auszurichten, müsste man hier stattdessen einen anderen Wert hinein patchen:Ich patche in diesem Beispiel zunächst statt der 0pt einfach die Verwendung einer neuen Länge
\abovemcaptionskip
hinein. Diese wird dann innerhalb vontable
(lokal) so gesetzt, dass es für Tabellen mit\toprule
aus booktabs passen dürfte. Ggf. kann man den Wert auch noch anpassen. Das Schöne daran ist, dass man ggf. auch noch per\setlength{\abovemcaptionskip}{…}
nach\begin{table}
eingreifen kann, falls der Wert einmal nicht passt.Für
figure
,listing
u. a. Gleitumgebungen würde hier die Voreinstellung von\abovemcaptionskip
, also 0pt, verwendet. Damit ergibt sich für diese Umgebungen keine Änderung bezüglich des ungepatchten mcaption. Bei Bedarf kann man aber natürlich für diese Umgebungen ebenfalls einen neuen Defaultwert setzen.Hervorragend
Das ist eine ganz hevorragende und vor allem sehr flexible Lösung, auf die ich so nie gekommen wäre. Vielen Dank, Markus.
Theoreme
Mühsam nährt sich das Eichhörnchen. Dank kompetenter Hilfe habe ich nun aber auch eine Lösung für Theoreme, so dass ich Name, Nummer und Zusatzbeschreibung in die Randspalte "verbannen" kann.
Satzspiegel
Eine wesentliche Frage ist nicht technischer Natur, nämlich die nach der Gestaltung des Satzspiegels. Der Füllungsgrad der Randspalte dürfte auf den einzelnen Seiten sehr unterschiedlich ausfallen. Insofern ist es wirklich schwer zu entscheiden, ob die Beschriftungen in der Randspalte zum Satzspiegel gehören oder nicht. Darüber werde ich in den nächsten Tagen mal ein wenig sinnieren ...
Andere Frage
Optisch, also bezüglich der Aufteilung der Ränder, gehört sie schon eher zum Satzspiegel. Bezüglich der Zeilenlänge ist sie dagegen eher nicht zu berücksichtigen, da ja nur Konsultationstexte in den Rand geschoben werden.
Das ist so ein typischer Fall, bei dem klassische Satzspiegelkonstruktionen erst einmal versagen. Ein Konstruktionsraster ist jedoch durchaus sinnvoll. Man muss nur mit etwas Fingerspitzengefühl entscheiden, welche Streifen des Rasters reiner Rand, genutzte Marginalienspalte oder Textspalte sind.
Immer dann, wenn man von klassischen Formen abweicht, braucht man eben auch ein gutes Auge und etwas Mut. ;-)
Worauf habe ich mich eingelassen?
Ich habe mal versucht, eine typische Doppelseite zu gestalten. Dabei habe ich mit einer Bindekorrektur von 10 mm gerechnet. Und genau da liegt schon ein großes Problem. Ich kann noch nicht einmal ansatzweise abschätzen, wie viele Seiten das Gesamtwerk umfassen wird. Andererseits komme ich v.a. in der Randspalte nicht umhin, sehr viel manuell einzugreifen, um ein halbwegs passables Ergebnis zu erhalten. Jede nachträgliche Änderung irgendwelcher Maße wäre katastrophal. Mir bliebe also nur noch die von Markus an anderer Stelle schon mal beschriebene Verkleinerung um ein paar Prozent, falls die Bindekorrektur nicht ausreicht. Ein vom Standard abweichendes Format birgt also ganz schön viele Herausforderungen ...
(Diese Ergänzung wäre ggf. im Typografie-Forum besser aufgehoben.)
Frage der Bindung
Wenn bei der Bindung ordentlich mit Signaturen gearbeitet wird, wird die benötigte Bindekorrektur mit der Seitenzahl nur sehr wenig größer. Bei dünnen Büchlein (> 400 Seiten) sollten 10–12mm genügen. Außerdem wird außen auch noch etwas abgeschnitten, um gerade Kanten zu bekommen. Das liegt meist so bei 3mm.
Und ja: Anspruchsvolle Typografie geht nicht ohne Handarbeit und Aufwand. Beim KOMA-Script-Buch sitze ich für jede neue Auflage mehrere Tage am Satz. Alles automatisch geht nur mit 0815-Layout und Augen zu.
Gleitumgebungen?
Wenn ich das soweit richtig verfolgt habe, sollen Abbildungen in Gleitumgebungen sitzen. Bei dieser Beispieldoppelseite sieht es aber nicht danach aus, als wäre das überhaupt gewünscht. Die Abbildungen sehen für mich ehrlich gesagt noch nicht mal wie Abbildungen aus sondern wie abgesetzte Formeln. Oder ist das ein unerwünschter und vielleicht nur vorläufiger Nebeneffekt des Experiments?
Solche und solche Abbildungen
Auf dieser Doppelseite sollen die Abbildungen tatsächlich eher wie abgesetzte Formeln erscheinen, da sie nahtlos in den Text integriert wurden. Bei anderen Abbildungen ist dies anders, diese würde ich, so wie es meist üblich ist, eher oben oder unten auf einer Seite anordnen und bei Bedarf über die Nummer darauf verweisen. Grundsätzlich soll man den Text "wie einen Roman" lesen können, während die Randspalte v.a. dazu dienen soll, bestimmte Teile, z.B. aus dem Index kommend, schnell aufzufinden. Hin und wieder werde ich in der Randspalte auch weniger wichtige, kurze Zusatzinformationen unterbringen, wie es die Doppelseite auch zeigt.
Rein aus Neugier: Wie hast Du
Rein aus Neugier: Wie hast Du bei dieser Doppelseite die Fußnote so formatiert?
Fußnoten
Für die Fußnoten verwende ich folgende Einstellungen:
Die Idee dafür stammt aus Lesetypograhie von Willberg und Forssmann. Im Text sollen die hochgestellten Ziffern in der Grundschriftart nicht weiter stören. Unten sollen sie durch die fette und serifenlose Schrift, die auch für Überschriften und Beschriftungen verwendet wird, aber sofort ins Auge fallen.
Vorsicht
Vorsicht mit dem Umdefinieren von
\footnoterule
. Ich empfehle, die Verwendung von\setfootnoterule{0pt}
.Korrigierte Version
Vielen Dank für den Hinweis, Markus.
Ich hoffe mal, meine verbesserte Version, die auch die von dila zitierte und von Dir vorgeschlagene Umsetzung aufgreift, ist so in Ordnung.
Für den Befehl
\libertineOsF
setze ich natürlich voraus, dass zuvor das Paketlibertine
geladen wurde.Wußt ich’s doch …
… Willberg und Forssmann: https://komascript.de/node/2064 ;-)
Deine Variante ist aber noch mal ein wenig anders, glaube ich.