Wie kann ich Zeilenumbrüche/mehrere Zeilen in der Überschrift meiner Anfängertabelle aktivieren?
\caption{this is my first table's captive caption}
Ich möchte, dass die Überschrift ungefähr so aussieht:
das ist mein Erster
Captive-Beschriftung der Tabelle
Wie?
\documentclass{article}
\usepackage{tabulary}
\usepackage{threeparttable}
\usepackage{array}
\usepackage{siunitx}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{pbox}
\usepackage{lipsum}
\usepackage[utf8]{inputenc}\usepackage{textcomp}
\renewcommand{\arraystretch}{1.2}
\sisetup{round-mode=places,round-precision=1, add-decimal-zero=true, add-integer-zero=true, round-integer-to-decimal}
\begin{document}
\lipsum[1]
\begin{table}
\begin{threeparttable}
\caption{this is my first table's captive caption}
\begin{tabulary}{\textwidth}{@{}*{2}{L}*{6}{S[table-format=3.2]}@{}} \toprule
× & TOTALLY bla percentage of bla & {1000} & {2000} & {3000} &
\multicolumn{1}{c}{\begin{tabular}{@{}c@{}}Bonjour\tabularnewline monde!\end{tabular}} &
{5000} & {6000\tnote{1}}\\ \midrule
% × & TOTALLY bla percentage of bla & {1000} & {2000} & {3000} & \multirow{2}*{4000 apples and pears \\ and whatnot} & {5000} & {6000\tnote{1}}\\ \midrule
DDD 1 & 47.6 & 29.1 & 1.0 & 0.2 & 1.9 & 15.2 & 0.0\\
UUU & 24.8 & 10.8 & 6.4 & 0.0 & 3.2 & 4.5 & 0.0\\
× & × & × & × & × & × & × & ×\\
Unweighted average: & × & × & × & × & × & × & ×\\
BBB & 33.8 & 11.3 & 9.1 & 0.4 & 1.8 & 11.0 & 0.2\\
GGG & 32.9904 & 8.60325 & 9.3845 & 0.0495 & 1.43225 & 10.79525 & 0.119\\
DDD & 39.4545 & 9.8695 & 15.3365 & 0.6915 & 2.246 & 10.6705 & 0.5105\\ \bottomrule
\end{tabulary}
\begin{tablenotes}
\item [1] the first note ...
\end{tablenotes}
\end{threeparttable}
\end{table}
\lipsum[2]
\end{document}
Bearbeiten
versuchenCenterdie zweizeiligen Überschriften:
\usepackage{caption}
(...)
\begin{table}
\captionsetup{singlelinecheck=false, justification=centering}
\begin{threeparttable}
\caption{this is my first\newline table's very captive caption}
... das Ergebnis dieses Versuchs sieht nicht ganz richtig aus ... wie macht man es richtig?
Bearbeiten 2
- Wie kann ich den Zeilenumbruch zwischen zwei bestimmten Wörtern (oder sogar Zeichen) bewirken?aber nur wenndie Überschrift würde in jedem Fall umgebrochen werden?
Das heißt, der Zeilenumbruch wäre "inaktiv", solange die Überschrift kurz genug ist, um vollständig in eine Zeile zu passen; sobald ermüssenZeilenumbruch, der Umbruch erfolgt an der vorgegebenen Stelle.
Antwort1
LaTeX verwendet für die Überschrift zwei Durchläufe. Im ersten Durchlauf wird die Überschrift gesetzt. \hbox
Wenn das Ergebnis in eine Zeile passt, wird die Überschrift einzeilig gesetzt, andernfalls mehrzeilig. In deinem Fall ist die Überschrift zu kurz und passt in eine Zeile.
Ein Trick: Es wird ein Zeilenumbruch gesetzt und der Überschrift viel horizontalen Abstand hinzugefügt. Im ersten Durchgang wird der Zeilenumbruch ignoriert, aber der horizontale Abstand sorgt dafür, dass die Überschrift nicht in eine Zeile passt. Anschließend wird die Überschrift mehrzeilig gesetzt und der Zeilenumbruch ausgeführt, aber der horizontale Abstand am Anfang der nächsten Zeile wird verworfen (\hspace
ohneStern):
\documentclass{article}
\begin{document}
\begin{table}
\caption{this is my first\newline
\hspace{\linewidth}table's captive caption}
\end{table}
\end{document}
Als Alternative caption
bietet das Paket eine Option singlelinecheck
, mit der der erste Durchgang zur Überprüfung der Untertitellänge deaktiviert werden kann:
\documentclass{article}
\usepackage{caption}
\begin{document}
\begin{table}
\captionsetup{singlelinecheck=false}
\caption{this is my first\newline
table's captive caption}
\end{table}
\end{document}
(Die Option kann auch global in der Präambel gesetzt werden.)
Zentrierung
Im Folgenden wird ein innerer tabular
(und der Standard singlelinecheck=true
) verwendet. Die Breite der Tabellenbeschriftung Table 1:
wird berechnet ( \settowidth
) und berücksichtigt.
Wenn das optionale Argument von \caption
nicht verwendet wird, wird im folgenden Beispiel auch lokal neu definiert, \centeredmultilineincaption
um tabular
und den Zeilenumbruch für das Abbildungsverzeichnis zu entfernen.
\documentclass{article}
\makeatletter
\newlength{\@captionlabelwidth}
\DeclareRobustCommand*{\centeredmultilineincaption}[1]{%
\settowidth{\@captionlabelwidth}{%
\@nameuse{fnum@\@captype}: %
}%
\begin{tabular}[t]{@{\hspace{-\@captionlabelwidth}}c@{}}%
\hspace{\@captionlabelwidth}\ignorespaces
#1%
\end{tabular}%
}
\begin{document}
\begingroup
\renewcommand*{\centeredmultilineincaption}[1]{%
\begingroup
\let\tabularnewline\space
#1%
\endgroup
}%
\listoftables
\endgroup
\begin{table}
\caption{%
\centeredmultilineincaption{%
this is my first\tabularnewline
table's captive caption
}%
}
\end{table}
\end{document}
Aktualisieren:Diese Methode funktioniert nur, wenn die erste Zeile länger ist.
"Bedingter" Zeilenumbruch
- Es können sowohl
\\
als auch\linebreak
verwendet werden. Im einzeiligen Modus verschwinden sie, daher sollte vor ein Leerzeichen gesetzt werden:first line \linebreak second line
, nichtfirst line\linebreak second line
. Letzteres würdefirst linesecond line
im einzeiligen Modus erscheinen. Beide Makros sind fragil. Soll der gleiche Zeilenumbruch auch in der Tabellenliste vorkommen, dann
\protect
ist folgendes notwendig:\caption{First line \protect\\second line}
\caption
Für die Liste der Tabellen kann das optionale Argument verwendet werden:\caption[Short version]{First line \\second line}
oder ein anderer Zeilenumbruch in der Tabellenliste:
\caption[Short\protect\\version]{First line \\second line}
Das folgende Beispiel definiert, \captionlinebreak
dass
- kümmert sich um den Raum davor,
- ist robust und
- kann für die Tabellenliste neu definiert werden.
Wenn die mehrzeilige Überschrift auch zentriert sein soll, wird es noch hässlicher, weil sie \@makecaption
neu definiert werden muss und ihre Definition von Klasse und Paketen abhängt. Das Beispiel definiert sie für die Klasse article
ohne Paket neu caption
:
\documentclass[a5paper]{article}
\usepackage{varwidth}
\DeclareRobustCommand*{\captionlinebreak}{%
\leavevmode\unskip\space % one space before
\\%
}
\makeatletter
\long\def\@makecaption#1#2{%
\vskip\abovecaptionskip
\sbox\@tempboxa{#1: #2}%
\ifdim \wd\@tempboxa >\hsize
\centerline{%
\begin{varwidth}{\hsize}%
#1: #2%
\end{varwidth}%
}%
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\vskip\belowcaptionskip
}
\makeatother
\begin{document}
\begingroup
\let\captionlinebreak\relax
\listoftables
\endgroup
\begin{table}
\centering
\caption{Lorem ipsum\protect\captionlinebreak
dolor sit amet, consetetur sadipscing elitr, \dots}
\end{table}
\begin{table}
\centering
\caption{Lorem ipsum\captionlinebreak
dolor sit amet, \dots}
\end{table}
\end{document}
Antwort2
\centering
definiert neu \\
, damit es richtig funktioniert, definiert aber leider nicht neu \newline
. Daher führt die Kombination \centering
von \newline
zu merkwürdigen Ergebnissen:
\documentclass{article}
\begin{document}
\parbox{\linewidth}{\centering
This is some text\newline And this is some text, too.}
\par\bigskip
\parbox{\linewidth}{\centering
This is some text\\And this is some text, too.}
\end{document}
(Warum? Fehler in LaTeX? Vielleicht könnte David Carlisle hier das Licht anmachen?)
Verwenden Sie es also besser \\
in Überschriften oder anderen Dingen, die zentriert gesetzt werden sollen. Übrigens: Wenn Sie das caption
Paket verwenden, wird ein mit gesetzter Zeilenumbruch \\
in Listeneinträgen automatisch durch ein Leerzeichen ersetzt, sodass es normalerweise nicht nötig ist, einen alternativen Listeneintragstext zu verwenden:
\documentclass{article}
\usepackage[justification=centering]{caption}
\begin{document}
\listoftables
\begin{table}
\caption{This is my first\\table's captive caption}
\end{table}
\end{document}
Nachtrag „Bedingter Zeilenumbruch“
Mit \DeclareCaptionStyle
können Sie unterschiedliche Optionen für "einzeilige" und "lange" Untertitel festlegen. Mit \DeclareCaptionOption
können Sie eigene Optionen für die Verwendung mit dem caption
Paket definieren.
Als Beispiel definiere ich eine neue Bedingung namens \ifcaptionlinebreak
und eine entsprechende Option zur Verwendung mit dem Paket, die mit und caption
umgeschaltet werden kann :linebreak=false
linebreak=true
\documentclass{article}
\usepackage{caption}
% New conditional \ifcaptionlinebreak
\newif\ifcaptionlinebreak
% New caption package option "linebreak" for toggeling \ifcaptionlinebreak
\DeclareCaptionOption{linebreak}{\csname captionlinebreak#1\endcsname}
% New command \captionlinebreak which either typesets a line break or a space,
% depending on \ifcaptionlinebreak
\newcommand\captionlinebreak{\ifcaptionlinebreak\\\else\space\fi}
% Own caption style which turns the linebreak into a space for short captions
% and into a line break for long captions
\DeclareCaptionStyle{mystyle}[linebreak=false]{linebreak=true}
\captionsetup{style=mystyle,justification=centering}
\begin{document}
\listoftables
\begin{table}[!hb]
\caption{This is my first\\table's captive caption}
\end{table}
\begin{table}[!hb]
\caption{This is my first\captionlinebreak table's captive caption}
\end{table}
\begin{table}[!hb]
\caption{This is my first\captionlinebreak table's captive caption.
This is my first table's captive caption}
\end{table}
\end{document}
Nachtrag zum Nachtrag „Bedingter Zeilenumbruch“
Ich habe \ifsinglelinecaption
das caption
Paket gerade erst vorgestellt. Ab der nächsten auf CTAN veröffentlichten Version könnte das obige Beispieldokument also wie folgt reduziert werden:
\documentclass{article}
\usepackage[justification=centering]{caption}
\newcommand\captionlinebreak{\ifsinglelinecaption\space\else\\\fi}
\begin{document}
\listoftables
\begin{table}[!hb]
\caption{This is my first\\table's captive caption}
\end{table}
\begin{table}[!hb]
\caption{This is my first\captionlinebreak table's captive caption}
\end{table}
\begin{table}[!hb]
\caption{This is my first\captionlinebreak table's captive caption.
This is my first table's captive caption}
\end{table}
\end{document}
(Die aktuelle Version erhalten Sie beihttp://sourceforge.net/p/latex-caption/code/HEAD/tree/trunk/tex/)