Das caption2 Paket

Axel Sommerfeldt E-Mail: caption@sommerfeldt.net

letzte Änderung: 3. August 2002

Zusammenfassung

Das caption2 Paket bietet einem viele Wege das Erscheinungsbild der Bildunterschriften und Tabellenüberschriften den eigenen Wünschen bzw. bestimmten Vorgaben anzupassen. Hierbei wurde viel Wert auf die reibungslose Zusammenarbeit und in die Integration anderer Dokumentenklassen bzw. Pakete gelegt.

1 Hallo Welt!

Leider ist diese Anleitung (immer) noch alles andere als fertig, dennoch habe ich mich dazu entschlossen, den Kram trotzdem jetzt schon zu veröffentlichen, denn:

1. Die in der letzten Version angegebene E-Mail-Adresse funktioniert leider nicht mehr.

2. Die letzte Version hatte keine Lizenz, so daß hier Klärungsbedarf bestand. (caption2 ist jetzt unter der LPPL, wie die meisten anderen L^{A}TEX 2ε-Pakete auch.)

3. Die aktuelle Version von subfigure (2.1) machte Anpassungen an caption2 notwendig.

4. Die letzte Version von caption2 hatte auch keine brauchbare Anleitung.

5. Und überhaupt wurde es endlich mal Zeit für eine Releaseversion.

Zusammenfassend läßt sich also sagen, daß diese Version trotz seiner Defizite immer noch besser ist als die letzte Version auf CTAN.

Ich werde mich bemühen, die Anleitung in den nächsten Wochen fertigzubekommen. Der aktuelle Zwischenstand kann solange über

     http://www.sommerfeldt.net/latex/

bezogen werden.

Sobald die Anleitung fertig ist, werde ich auch beginnen, Verbesserungen und Erweiterungen in caption2 einzupflegen.

2 Einleitung

Bildunterschriften bzw. Tabellenüberschriften werden von den Standard-Doku-mentenklassen eher stiefmütterlich behandelt – sie werden einfach als ganz normaler Absatz gesetzt. Dies hat aber diverse Nachteile:

• Es passiert leicht, daß man beim Weiterlesen eines Absatzes auf der nächsten Seite zunächst versehentlich in eine Bildunterschrift anstelle des normalen Textes gerät. Dies stört den Lesefluß.

• Sie passen sich u.U. nicht in das Layout des restlichen Dokumentes ein. Sind z.B. die Überschriften des Dokumentes serifenlos, so wäre es schon aus optischen Gründen wünschenswert, die Bildunterschriften und Tabellenüberschriften ebenfalls serifenlos zu erhalten.

• Es ist nicht ohne Kenntnisse von L^{A}TEX 2ε-Internata möglich, diese Unterbzw. Überschriften eigenen Wünschen oder gegebenen Vorlagen anzupassen.

All diese Nachteile versucht caption2 zu beheben. Hierzu werden die unterschiedlichsten Gestaltungsmerkmale berücksichtigt: Ränder, Abstände zum Text, Schriftarten und -größen etc.

3 Verwendung des Paketes

Das Paket wird mittels

  \usepackage[⟨options⟩]{caption2}[2002/08/03]

eingebunden. Bitte verwenden Sie immer die neuere Version caption2 und nicht mehr die ältere Version caption, diese steht nur noch aus Kompatibilitätsgründen zur Verfügung.

Folgende Optionen stehen zur Verfügung:

Option  entsprechendes Kommando  Abschnitt

normal             \captionstyle{normal}  4
center             \captionstyle{center}  4
flushleft          \captionstyle{flushleft}  4
flushright         \captionstyle{flushright}  4
centerlast         \captionstyle{centerlast}  4
hang               \captionstyle{hang}  4
indent             \captionstyle{indent}  4
scriptsize         \setcaptionfont{\scriptsize}  4.1.1
footnotesize       \renewcommand\captionfont{\footnotesize} 4.1.1
small              \renewcommand\captionfont{\small}  4.1.1
normalsize         \renewcommand\captionfont{\normalsize}  4.1.1
large              \renewcommand\captionfont{\large}  4.1.1
Large              \renewcommand\captionfont{\Large}  4.1.1
up                 \renewcommand\captionlabelfont{\upshape} 4.1.1
it                 \renewcommand\captionlabelfont{\itshape} 4.1.1
sl                 \renewcommand\captionlabelfont{\slshape} 4.1.1
sc                 \renewcommand\captionlabelfont{\scshape} 4.1.1
md                 \renewcommand\captionlabelfont{\mdseries} 4.1.1
bf                 \renewcommand\captionlabelfont{\bfseries} 4.1.1
rm                 \renewcommand\captionlabelfont{\rmfamily} 4.1.1
sf                 \renewcommand\captionlabelfont{\sffamily} 4.1.1
tt                 \renewcommand\captionlabelfont{\ttfamily} 4.1.1
oneline            \onelinecaptionstrue  4.1.3
nooneline          \onelinecaptionsfalse  4.1.3
float  —  7.1
longtable  —  7.2
ignoreLTcapwidth —  7.2
subfigure  —  7.3
all  —  ??
none  —  ??

4 Vordefinierte Stile

\captionstyle Neben der Möglichkeit neue Stile zu definieren bietet caption2 die vordefinierten

Typen normal, center, flushleft, flushright, centerlast, hang sowie indent.

Zwischen diesen kann man im Dokument mittels des Kommandos \captionsstyle umschalten, z.B. wird mittels des Kommandos

  \captionstyle{center}

auf den Stil center umgeschaltet. Geschieht dies außerhalb einer Abbildung, so geschieht dies global für alle nachfolgenden Abbildungen, geschieht dies hingegen innerhalb einer Abbildung, so geschieht dies nur lokal für die aktuelle Abbildung.

Der Stil normal

Dies ist der Stil, den wir von den Standard L^{A}TEX 2ε-Klassen article, report und book gewohnt sind. caption2 setzt diesen Typ daher als Standardtyp.

Beispiel 1: Dies ist eine Unterschrift des Stils normal. Dies ist eine Unterschrift des Stils normal. Dies ist eine Unterschrift des Stils normal.

Der Stil center

Hier wird die Unterschrift innerhalb der L^{A}TEX 2ε-Umgebung center gesetzt, jede Zeile wird also zentriert gesetzt.

Beispiel 2: Dies ist eine Unterschrift des Stils center. Dies ist eine Unterschrift des Stils center. Dies ist eine Unterschrift des Stils center.

Der Stil flushleft

Hier wird die Unterschrift innerhalb der L^{A}TEX 2ε-Umgebung flushleft gesetzt, jede Zeile wird also linksbündig gesetzt.

Beispiel 3: Dies ist eine Unterschrift des Stils flushleft. Dies ist eine Unterschrift des Stils flushleft. Dies ist eine Unterschrift des Stils flushleft.

Der Stil flushright

Hier wird die Unterschrift innerhalb der L^{A}TEX 2ε-Umgebung flushright gesetzt, jede Zeile wird also rechtsbündig gesetzt.

Beispiel 4: Dies ist eine Unterschrift des Stils flushright. Dies ist eine Unterschrift des Stils flushright. Dies ist eine Unterschrift des Stils

                                                         flushright.

Der Stil centerlast

Hier wird die Unterschrift bis auf die letzte Zeile normal, also als Blocksatz gesetzt, die letzte Zeile erscheint hingegen zentriert.

Beispiel 5: Dies ist eine Unterschrift des Stils centerlast. Dies ist eine Unterschrift des Stils centerlast. Dies ist eine Unterschrift des Stils centerlast.

Der Stil hang

Hier wird die Unterschrift so gesetzt, daß jede Zeile unterhalb der anderen ”hängt“.

Beispiel 6: Dies ist eine Unterschrift des Stils hang. Dies ist eine Unterschrift des Stils hang. Dies ist eine Unterschrift des Stils hang.

Der Stil indent

Dieser Typ ähnelt dem Typ hang, allerdings ist hier der Einzug der unteren Zeilen nicht durch die Länge der Bezeichnung bestimmt, sondern wird durch die Länge \captionindent festgelegt. Wünscht man also einen Einzug von 1 cm, so wird dies mittels

  \setlength{\captionindent}{1cm}

bewerkstelligt. Der Einzug ist auf null voreingestellt, ohne explizite Angabe unterscheidet sich dieser Stil also nicht vom Stil normal.

Beispiel 7: Dies ist eine Unterschrift des Stils indent. Dies ist eine Unterschrift des Stils indent. Dies ist eine Unterschrift des Stils indent.

4.1 Anpassungsmöglichkeiten der vordefinierten Typen

Die vordefinierten Typen lassen sich anpassen, viele Parameter lassen sich verändern, wie etwa der Rand, die Breite, die Schrifttypen.

4.1.1 Anpassung der Schrifttypen

Die Unterschriften werden bei den vordefinierten Typen immer wie folgt gesetzt:

  {\captionfont
    {\captionlabelfont ⟨Bezeichnung⟩\captionlabeldelim}%
    \captionlabelsep ⟨Unterschrift⟩}
\captionfont, \captionlabelfont, \captionlabeldelim und \captionlabelsep

sind dabei wie folgt vorbelegt:

Parameter  Vorbelegung

 \captionfont        {}
 \captionlabelfont   {}
 \captionlabeldelim  {:}
 \captionlabelsep    { }

Möchte man also z.B. die Unterschriften generell etwas kleiner als den normalen Text und ferner die Bezeichnung in Italics gesetzt, so läßt sich dies durch

  \usepackage[small,it]{caption2}

in der Preambel des Dokuments oder innerhalb des Dokuments durch

  \renewcommand\captionfont{\small}
  \renewcommand\captionlabelfont{\itshape}

bewerkstelligen.

Beispiel 8: Dies ist eine Unterschrift

Möchte man hingegen den Text selber, aber nicht die Bezeichnung in Italics gesetzt haben, so geht dies (etwas umständlicher) wie folgt:

  \renewcommand*\captionfont{\small\itshape}
  \renewcommand*\captionlabelfont{\upshape}

Beispiel 9: Dies ist eine Unterschrift

4.1.2 Anpassung der Breite bzw. des Randes

Die Breite der gesammten Unterschrift kann explizit per \setcaptionwidth gesetzt werden, um etwa zu erreichen, daß die Breite der Unterschrift mit der Breite der Abbildung identisch ist. Die Unterschrift selber wird hierbei zentriert.

  \setcaptionwidth{.5\textwidth}
  \caption{Diese Unterschrift ist lediglich
           die halbe Textbreite breit.}

Beispiel 10: Diese Unterschrift ist lediglich die halbe Textbreite breit.

Alternativ kann auch der Rand explizit mit \setcaptionmargin gesetzt werden, das obenstehende Beispiel ließe sich also auch so realisieren:

  \setcaptionmargin{.25\textwidth}
  \caption{Diese Unterschrift ist lediglich
           die halbe Textbreite breit.}

Beispiel 11: Diese Unterschrift ist lediglich die halbe Textbreite breit.

4.1.3 Sonstige Anpassungen

L^{A}TEX mißt vor dem Setzen der Unterschrift die Breite dieser – ist sie kleiner oder gleich der Textbreite, so gehen alle manuell gesetzten Umbrüche etc. verloren und die Unterschrift wird einzeilig zentriert gesetzt. Ist sie jedoch länger, wird sie normal als Absatz gesetzt. Das caption2 bildet diesen Mechanismus nach, er kann jedoch mit \onelinecaptionsfalse (oder der Paketoption nooneline) ab- bzw. mit \onelinecaptionstrue (oder der Paketoption oneline) angeschaltet werden.

  \onelinecaptionstrue
  \caption{Zeile 1\\Zeile 2}

Beispiel 12: Zeile 1Zeile 2

  \onelinecaptionsfalse
  \caption{Zeile 1\\Zeile 2}

Beispiel 13: Zeile 1 Zeile 2

4.1.4 Sonstige Features

Ansonsten kann \caption* auch nachgebildet werden:

  \captionlabelfalse
  \caption[⟨xxx⟩]{⟨xxx⟩}

4.1.5 Obsolete Parameter

Der Parameter \captionsize ist obsolete. Er wird zwar noch – soweit möglich – emuliert, sollte aber nicht mehr verwendet werden.

5 Selbstdefinierte Stile

Wem die Möglichkeiten bis jetzt nicht ausreichten, der kann auch selber eigene Unterschriftentypen definieren. Innerhalb dieser kann man bei Bedarf auch die Möglichkeiten, die die vordefinierten Stile bieten, einbetten.

5.1 Deklaration von eigenen Stilen

Analog zu dem TEX-Kommando \def bzw. den L^{A}TEX-Kommandos \newcommand

und \renewcommand werden die Kommandos \defcaptionstyle, \newcaptionstyle

und \renewcaptionstyle zur Verfügung gestellt. Die Syntax ist bei allen 3 Kommandos die gleiche:

     \defcaptionstyle{⟨Name⟩}{⟨Kommandos⟩}
     \newcaptionstyle{⟨Name⟩}{⟨Kommandos⟩}
     \renewcaptionstyle{⟨Name⟩}{⟨Kommandos⟩}

Innerhalb des eigenen Stils stehen die Bezeichnung als \captionlabel sowie der eigentliche Unterschriftentext als \captiontext zur Verfügung. Wollte man also z.B. die Unterschrift als ganz normalen Absatz setzen, so ließe sich dies so realisieren:

  \newcaptionstyle{absatz}{\captionlabel: \captiontext\par}

...

  \captionstyle{absatz}
  \caption{Dies ist eine Unterschrift.}

Beispiel 14: Dies ist eine Unterschrift.

Dem Spieltrieb sind hierbei keine Grenzen gesetzt:

  \newcaptionstyle{fancy}{\textsf{\captionlabel}\\\captiontext\par}

...

  \captionstyle{fancy}
  \caption{Dies ist eine Unterschrift.}

Beispiel 15 Dies ist eine Unterschrift.

...oder...

  \newcaptionstyle{fancy2}{\captiontext\hfill\textit{(\captionlabel)}}

...

  \captionstyle{fancy2}
  \caption{Dies ist eine Unterschrift.}

Dies ist eine Unterschrift. (Beispiel 16)

5.2 Einbindung vorhandener Hilfsmittel

     \usecaptionstyle{⟨Name des Stils⟩}
     \normalcaptionparams

Bei der Definition von eigenen Stilen kann ggf. aus dem Fundus von caption2 zurückgegriffen werden. Möchte man z.B. auf einem vorhandenen Stil aufsetzen, diesen also lediglich modifiziert anbieten, so kann dies innerhalb der Definition mittels \usecaptionstyle geschehen. Weiterhin wird das Kommando \normalcaptionparams bereitgestellt, mit dem alle Einstellungen der vordefinierten Stile lokal(!) zurückgesetzt werden, so daß man auf einen wohldefinierten Zustand aufsetzen kann. Möchte man z.B. einen Stil definieren, der dem Stil centerlast entspricht, allerdings immer als Absatz ohne Ränder gesetzt wird und mit einem Punkt anstelle des Doppelpunktes und einer fetten Beschriftung, so lässt sich dies so realisieren:

  \newcaptionstyle{mystyle}{%
    \normalcaptionparams
    \renewcommand\captionlabelfont{\bfseries}%
    \renewcommand\captionlabeldelim{.}%
    \onelinecaptionsfalse
    \usecaptionstyle{centerlast}}

...

  \captionstyle{mystyle}
  \caption{Dies ist eine sehr sehr sehr sehr sehr sehr
           sehr sehr sehr sehr sehr sehr lange Unterschrift.}

Beispiel 17. Dies ist eine sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr lange Unterschrift.

Ein weiteres Beispiel, welches einen neuen Stil hangandleft definiert. Dieser unterscheidet sich vom Stil hang derart, daß der eigentliche Text linksbündig gesetzt wird:

  \newcaptionstyle{hangandleft}{%
    \let\oldcaptiontext\captiontext
    \def\captiontext{\raggedright\oldcaptiontext}%
    \usecaptionstyle{hang}}
  \captionstyle{hangandleft}
  \caption{Dies ist eine sehr sehr sehr sehr sehr sehr
           sehr sehr sehr sehr sehr sehr sehr sehr sehr
           sehr sehr sehr sehr sehr sehr sehr sehr sehr
           sehr sehr sehr sehr sehr sehr lange Unterschrift.}

Beispiel 18: Dies ist eine sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr lange Unterschrift.

Aber auch für Stile, die nicht auf anderen Stilen aufsetzen, gibt es Hilfsmittel:

\onelinecaption{⟨Einzeilige Unterschrift⟩}{⟨Mehrzeilige Unterschrift⟩}

\onelinecaption bildet den L^{A}TEX-Mechanismus nach, einzeilige Unterschriften zentriert zu setzen. Ist die Unterschrift ⟨Einzeilige Unterschrift⟩, also der erste Parameter, kleiner oder gleich der Textbreite, so wird diese zentriert gesetzt. Anderenfalls wird die ⟨Mehrzeilige Unterschrift⟩ verwendet. Die Standarddefinition von L^{A}TEX für eine Unterschrift ließe sich also wie folgt nachbilden:

  \newcaptionstyle{latex}{%
    \onelinecaption

    {\captionlabel: \captiontext}%
    {\captionlabel: \captiontext\par}}

...

\captionstyle{latex}
\caption{Dies ist eine kurze Unterschrift.}
% bzw.
\caption{Dies ist eine sehr sehr sehr sehr sehr sehr
         sehr sehr sehr sehr sehr sehr lange Unterschrift.}

Beispiel 19: Dies ist eine kurze Unterschrift.

Beispiel 20: Dies ist eine sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr lange Unterschrift.

\onelinecaption beachtet hierbei das boolische Flag \onelinecaptions, möchte man dies nicht, so muß man dies (logischerweise) durch ein \onelinecaptionstrue unmittelbar vor der Verwendung von \onelinecaption ausschalten, also etwa so:

\newcaptionstyle{strictlatex}{%
  \onelinecaptionstrue
  \onelinecaption
    {\captionlabel: \captiontext}%
    {\captionlabel: \captiontext\par}}
\usecaptionmargin setzt den zuvor mittels \setcaptionmargin oder \setcaptionwidth

gesetzten Rand. Hierzu ein komplexeres Beispiel, welches neben dem gesetzten Rand auch \onelinecaption verwendet sowie die gesetzten Schrifttypen beachtet:

\newcommand*\centerlast{%
  \addtolength{\leftskip}{0pt plus 1fil}%
  \addtolength{\rightskip}{0pt plus -1fil}%
  \setlength{\parfillskip}{0pt plus 2fil}}
\newcaptionstyle{fancy}{%
  \usecaptionmargin\captionfont
  \onelinecaption
    {{\captionlabelfont\captionlabel\captionlabeldelim}%
     \captionlabelsep\captiontext}%
    {{\centering\captionlabelfont\captionlabel\par}%
      \centerlast\captiontext\par}}

...

\captionstyle{fancy}
\caption{Dies ist eine kurze Unterschrift.}
\caption{Dies ist eine sehr sehr sehr sehr sehr sehr
         sehr sehr sehr sehr sehr sehr lange Unterschrift.}

Beispiel 21: Dies ist eine kurze Unterschrift.

Beispiel 22

Dies ist eine sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr lange Unterschrift.

6 Sonstiges

\captionof{⟨Floattyp⟩}[⟨Kurzform⟩]{⟨Langform⟩}

Mittels des Kommandos \captionof lassen sich Unterschriften innerhalb des normalen Textes, also außerhalb von gleitenden Umgebungen, setzen. Ein Beispiel:

  \captionof{table}{Dies ist keine Tabelle}

Tabelle 1: Dies ist keine Tabelle

     \setlength{\abovecaptionskip}{⟨Wert⟩}
     \setlength{\belowcaptionskip}{⟨Wert⟩}
Die Längen \abovecaptionskip und \belowcaptionskip beeinhalten den Ab-

stand über bzw. unter der eigentlichen Unterschrift. In den L^{A}TEX-Dokumentenklassen article, report und book wird \abovecaptionskip auf 10pt voreingestellt, \belowcaptionskip auf 0pt.

7 Interaktion mit anderen Paketen

caption2 erkennt ggf. geladene Pakete und modifiziert diese so, daß sich die Stiländerungen auch automatisch auf diese Pakete auswirken. Dies wird meist durch sog. Pseudo-Stile realisiert, diese Stile werden zwar definiert, verwenden jedoch – ggf. nach der Modifikation einiger Parameter – den aktuell eingestellten Stil.

Diese Pseudo-Stile können daher nicht mittels \captionstyle ausgewählt werden, denn ansonsten wären sie selbst ja der aktuell eingestellte Stil. Diese Pseudo-Stile können bei Bedarf umdefiniert werden, möchte man z.B. unabhängig von der akt. Stilauswahl in Verbindung mit dem Paket longtable immer den Stil normal angewendet wissen, so ließe sich das mit

  \renewcaptionstyle{longtable}{\usecaptionstyle{normal}}

7.1 Das float Paket

7.2 Das longtable Paket

Wird longtable 3.15 oder neuerer verwendet, wird automatisch ein Pseudo-Stil longtable angelegt, welcher innerhalb der longtable-Umgebung verwendet wird.

7.3 subfigure

Inkompatibel bei ‘kurzen’ Bildunterschriften:

1. hang,centerlast,nooneline 2. hang,center,nooneline

8 Bekannte Probleme

ucthesis: 1. Korrektur \abovecaptionskip bzw. \belowcaptionskip klappt hier

nicht (Per Hand: Bei topcaptions \abovecaptionskip auf 0pt setzen) 2. In die Definition von \captionfont muß ein \ssp eingebaut werden, also im einfachsten

Falle: \renewcommand\captionfont{\ssp}

9 Andere nützliche Pakete

float rotating sidecap subfigure

10 Literaturhinweise

Folgende Dokumente möechte ich an dieser Stelle jedem ans Herz legen:

• Die DANTE-FAQ:

         http://www.dante.de/faq/de-tex-faq/

• epslatex von Keith Reckdahl enthält viele nützliche Tips im Zusammenhang mit der Einbindung von Graphiken in L^{A}TEX 2ε. Das Dokument ist unter

         ftp://ftp.dante.de/pub/tex/info/
     als epslatex.ps bzw. epslatex.pdf zu finden.

11 FAQ - oft gestellte Fragen

Ich möechte eine leere Unterschrift erzeugen, wie bekomme ich den störenden Doppelpunkt weg?

Indem man sowohl \captionlabeldelim als auch \captionlabelsep auf nichts

definiert:

  \renewcommand\captionlabeldelim{}
  \renewcommand\captionlabelsep{}
  \caption{}

wird zu:

Beispiel 23

12 Was tun bei Problemen?

Steht man vor einem Problem bei der Verwendung des caption2 Paketes, so bitte ich um eine kurze Nachricht mit einer präzisen Angabe des Problems. Dieser Nachricht sollte unbedingt ein möglichst kurzes, übersetzbares(!) L^{A}TEX 2ε-Dokument sowie die dazugeh“orige log-Datei beiliegen, wo der Fehler bzw. das Problem auftritt, damit ich es nachstellen und beheben kann.

Auch Anregungen bzw. Fragen zu dieser Anleitung sind herzlich willkommen, ich kann nur dann etwas verbessern, wenn ich weiß, daß es etwas verbesserungswürdiges gibt. Danke!