PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : caption in verschiedenen Umgebungen



LivToole
01-06-2008, 14:41
Hallo,

ich verwende in meiner Arbeit mehrer Umgebungen für Tabellen sowohl gleitende als auch nichtgleitende und daher auch caption und captionof{table}

wollte mir nun ein einheitliches layout für alle tabellenüberschriften mit captionsetup erstellen, allerdings wirken sich nur einige sachen auf alle überschriften aus z.B. tablename ander wie der abstand von der tabelle und der einzug der ersten zeile werden nur bei captionof{table} geändert. in den umgebungen table, longtable und ltxtable erhalte ich ein falsches ergebniss, allerdings hab ich keine ahnung warum das so ist. richtig ist nur captionof in der minipage umgebung.

wäre super wenn mir da jemand helfe könnte. Danke schon mal im vorraus.



\documentclass[
12pt,
bigheadings,
ngerman,
a4paper,
pagesize,
oneside,
onecolumn,
openany,
titlepage,
parskip,
headsepline,
footsepline,
fleqn,
]{scrbook}

\makeatletter
\setlength{\@fptop}{0pt}
\makeatother

\usepackage{calc}
\usepackage[ngerman]{babel}
\usepackage{xcolor}
\usepackage{graphicx}
\usepackage{epstopdf}
\usepackage[reqno,fleqn]{amsmath}
\usepackage{marginnote}
\usepackage{relsize}
\usepackage{ragged2e}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{lmodern}
\usepackage[fixamsmath,disallowspaces]{mathtools}
\usepackage{fixmath}
\usepackage[all,warning]{onlyamsmath}
\usepackage{icomma}
\usepackage[nice]{nicefrac}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{multicol}
\usepackage[normalem]{ulem}
\usepackage{soul}
\usepackage{url}
\usepackage[bottom,stable,perpage,ragged,multiple]{footmisc}
\usepackage[ngerman]{varioref}
\usepackage{enumitem}
\usepackage[babel,german=quotes,english=british,french=guillem ets]{csquotes}
\usepackage[square,comma,numbers,sort,sort&compress]{natbib}
\bibliographystyle{bib/bst/dinat}
\usepackage[expansion=true,protrusion=true]{microtype}
\usepackage[raiselinks=true,breaklinks,backref=page,pagebackre f=true,verbose,hyperindex=true,linktocpage=true,bo okmarks=true,bookmarksopenlevel=0,bookmarksnumbere d=true,bookmarkstype=toc,pageanchor=true]{hyperref}
\usepackage[figure]{hypcap}
\usepackage{pdfpages}
\usepackage{tabularx}
\usepackage{ltxtable}
\usepackage{longtable}
\usepackage{setspace}
\usepackage{float}
\usepackage[section]{placeins}
\usepackage{subfig}
\usepackage{wrapfig}
\usepackage{makeidx}
\usepackage[intoc]{nomencl}
\usepackage{acronym}
\usepackage{units}
\usepackage{scrpage2}
\usepackage{caption}
\captionsetup{
format = plain,
indention = .5cm,
justification = justified,
singlelinecheck = false,
font = {rm},
labelfont = {normalsize,bf},
textfont = {small},
tableposition = top,
figureposition = bottom,
skip = 0.3cm,
figurename = Abbildung,
tablename = Tabelle,
}
\usepackage{hhline}


\newcommand{\wcaption}[3]{
\begin{minipage}{#1}
\caption[#2]{#3}
\end{minipage}
}

\newcommand{\PreserveBackslash}[1]{\let\temp=\\#1\let\\=\temp}
\newcolumntype{C}{>{\PreserveBackslash\RaggedRight\hspace{0pt}}X}

\begin{document}

\begin{minipage}{0.63\textwidth}
\captionof{table}[Eintrag im Verzeichnis]{Minipage - captionof\{table\} - tabularX --- so richtig: DDies soll eine zweizeilige Tabellenüberschrift sein.}
\label{tab:tab1}
\begin{tabularx}{\textwidth}{CCC} \hline\hline
Parameter & Grö"se & Einheit \\\hline
$\alpha $ & 0,44096 & [1] \\
$\beta $ & 0,04101 & [1] \\
$\gamma $ & 0,60597 & [1] \\
$\delta $ & -0,00874 & [1] \\
$\epsilon $ & 0,02320 & [1] \\
$\vartheta $& 0,31350 & [1] \\\hline \hline
\end{tabularx}
\end{minipage}


\begin{minipage}{0.63\textwidth}
\captionof{table}[Eintrag im Verzeichnis]{Minipage - captionof\{table\} - tabular --- so richtig: Dies soll eine zweizeilige Tabellenüberschrift sein.}
\label{tab:tab2}
\begin{tabular}{ccc} \hline\hline
Parameter & Grö"se & Einheit \\\hline
$\alpha $ & 0,44096 & [1] \\
$\beta $ & 0,04101 & [1] \\
$\gamma $ & 0,60597 & [1] \\
$\delta $ & -0,00874 & [1] \\
$\epsilon $ & 0,02320 & [1] \\
$\vartheta $& 0,31350 & [1] \\\hline \hline
\end{tabular}
\end{minipage}

\begin{table}
\caption[Eintrag im Verzeichnis]{table - caption - tabular --- so falsch: Dies soll eine zweizeilige Tabellenüberschrift sein.}
\label{tab:tab3}
\begin{tabular}{ccc} \hline\hline
Parameter & Grö"se & Einheit \\\hline
$\alpha $ & 0,44096 & [1] \\
$\beta $ & 0,04101 & [1] \\
$\gamma $ & 0,60597 & [1] \\
$\delta $ & -0,00874 & [1] \\
$\epsilon $ & 0,02320 & [1] \\
$\vartheta $& 0,31350 & [1] \\\hline \hline
\end{tabular}
\end{table}


\LTXtable{1.1\textwidth}{Linienparameter}


\begin{longtable}{ccccccc}
\caption[Linienparameter]{longtable - caption --- so falsch: Dies soll eine zweizeilige Tabellenüberschrift sein.}
\label{tab:tab4} \\\hline\hline
Parameter & Grö"se & Einheit \\\hline
$\alpha $ & 0,44096 & [1] \\
$\beta $ & 0,04101 & [1] \\
$\gamma $ & 0,60597 & [1] \\
$\delta $ & -0,00874 & [1] \\
$\epsilon $ & 0,02320 & [1] \\
$\vartheta $& 0,31350 & [1] \\\hline \hline
\end{longtable}

\end{document}




\begin{longtable}{CCC}
\caption[Linienparameter]{LTXtable - longtable - caption --- so falsch: Dies soll eine zweizeilige Tabellenüberschrift sein.}
\label{tab:tab5} \\\hline\hline
Parameter & Grö"se & Einheit \\\hline
$\alpha $ & 0,44096 & [1] \\
$\beta $ & 0,04101 & [1] \\
$\gamma $ & 0,60597 & [1] \\
$\delta $ & -0,00874 & [1] \\
$\epsilon $ & 0,02320 & [1] \\
$\vartheta $& 0,31350 & [1] \\\hline \hline
\end{longtable}

sommerfee
01-06-2008, 16:37
Ich habe mal die Preamble auf


\documentclass{scrbook}
\usepackage[ngerman]{babel}
\usepackage{ltxtable}
\usepackage{ragged2e}
\usepackage{caption}
\captionsetup{
format = plain,
indention = .5cm,
justification = justified,
singlelinecheck = false,
font = {rm},
labelfont = {normalsize,bf},
textfont = {small},
tableposition = top,
figureposition = bottom,
skip = 0.3cm,
figurename = Abbildung,
tablename = Tabelle
}

\newcommand{\PreserveBackslash}[1]{\let\temp=\\#1\let\\=\temp}
\newcolumntype{C}{>{\PreserveBackslash\RaggedRight\hspace{0pt}}X}

gekürzt, damit sieht es für mich wie erwartet aus.

Mir ist auch nicht ganz klar, wozu die Optionen "figurename = Abbildung, tablename = Tabelle" gut sind, denn dies sind sowieso die Standardnamen, die das Babel-Paket vorgibt. Wo stimmt bei dir die Benamung nicht?

Weiterhin ist mir nicht ganz klar, was du mit "zweizeilig" meinst. Eine \caption wird immer bis zur Breite der Umgebung gesetzt, innerhalb einer Minipage mit der Breite 0.63\textwidth ist also auch die \caption nur maximal so breit, und innerhalb einer normalen "table" eben bis zu \textwidth, solange man keine feste Breite der \caption mit der Option "width=xxx" angibt.

Willst du die captions generell weniger breit haben, so wie in deinen Minipages? Soll die Breite der caption immer an die Breite der Tabelle angepasst werden?

Liebe Grüße,
Axel

LivToole
02-06-2008, 07:34
Hallo,

hab mein problem wohl nicht richtig beschrieben. Also der Umbruch der Tabellenüberschrift ist schon richtig. Das ist einfach nur ein text damit ich sehe wie der einzug der zweiten Zeile aussieht. Die option "figurename" und "tablename" hab ich sonst auf "Abb." und "Tab.", das nur jetzt so damit die überschrift noch etwas länger ist. also gar nicth beachten.

Mein Problem ist der Abstand der Überschriften von der Tabelle sowie der einzug der ersten zeile. bei den Tabellen in der Minipage-Umgebung mit captionof und tabular bzw tabularX habe ich einen abstand sowie keinen einzug der ersten zeile und einen einzug der zweiten zeile. (format = plain; skip = 0.3cm; indention = .5cm)
bei table - caption - tabular ist der abstand zur tabelle nicht da, dh. die option skip greift hier nicht. format und indention sind richtig. das selbe ist es bei longtable - caption.
bei LTXtable gibt es sowohl einen einzug der ersten zeile, trozt format=plain, und keinen abstand zur tabelle.

was ich jetzt eben nicth versteh ist, warum einige optionen für wenige umgebungne gelten, manche gar nicht und andere wieder für alle.

sommerfee
02-06-2008, 08:46
Mein Problem ist der Abstand der Überschriften von der Tabelle

Bei KOMA-Script regelt den KOMA-Script und nicht das caption-Paket die Position des Abstandes. (Siehe auch caption-Doku, Abschnitt über KOMA-Script.) Also die Dokumentenoption "tablecaptionabove" hinzufügen, dann sollte es für Tabellenüberschriften stimmen.



bei table - caption - tabular ist der abstand zur tabelle nicht da, dh. die option skip greift hier nicht.
Die Option "skip" schon, aber nicht die Optionen "figureposition" und "tableposition".



bei LTXtable gibt es sowohl einen einzug der ersten zeile, trozt format=plain, und keinen abstand zur tabelle.

Den Einzug der ersten Zeile habe ich hier auch. Der hängt vermutlich damit zusammen, daß die Tabelle breiter als die Seite ist, für die Breite der \caption aber nur die Seitenbreite genommen wird und LTXtable diese dann letztendlich zentriert. Ich werde mir das am Wochenende mal anschauen.



was ich jetzt eben nicth versteh ist, warum einige optionen für wenige umgebungne gelten, manche gar nicht und andere wieder für alle.

Das Problem ist, daß sehr viele Dokumentenklassen und Pakete eigenen Code für \caption bereitstellen. Hinter \caption steckt bei KOMA-Script anderer Code als wenn man eine andere Dokumentenklasse verwendet. Und das longtable-Paket definiert auch \caption um, innerhalb von longtables wird wiederum ganz anderer Code ausgeführt, auch wenn der Befehl gleich heißt. Usw. Es gibt halt nunmal (leider) nicht eine einzige Schnittstelle bzgl. \caption, die alle Dokumentenklassen und Pakete verwenden.

LivToole
02-06-2008, 10:40
Also die Dokumentenoption "tablecaptionabove" hinzufügen, dann sollte es für Tabellenüberschriften stimmen

klappt für die longtable



Den Einzug der ersten Zeile habe ich hier auch. Der hängt vermutlich damit zusammen, daß die Tabelle breiter als die Seite ist, für die Breite der \caption aber nur die Seitenbreite genommen wird und LTXtable diese dann letztendlich zentriert. Ich werde mir das am Wochenende mal anschauen.

da hast du recht, das hängt damit zusammen das die tabelle breite ist als die seite und dann zentriert er das auf die breite der tabelle mit der textbreite als zeilenlänge. ich hab das nun so gelöst


\setlength\LTleft\parindent
\setlength\LTright\fill

das hat auch den vorteil das die longtable nicht mehr zentriert wird.

also besten dank für die hilfe.

hab da noch zwei zusatzfrage. undzwar gibts ne möglichkeit die breite der tabellen auszelesen um sie dann bei tabular die überschriften auf die selbe breite zu setzen oder muss man das mit der hand machen?
und normalerweise würde ich das mit einer minipage umgebung machen, also quasi so


\begin{longtable}{cccc}
\begin{minipage}{.5\textwidth}
\caption{text}
\end{minipage}
...
...
\end{longtable}

allerdings klappt das nicht.
Fehlermeldung


! Misplaced \noalign.
\caption ->\noalign

sommerfee
02-06-2008, 11:17
Das floatrow-Paket bietet Möglichkeiten, die Breite der caption automatisiert an den Inhalt anzupassen, auch für longtables.

Ansonsten kann man die Breite auch individuell + manuell setzen, mit \captionsetup{width=...}, also z.B.:



\begin{longtable}{cccc}
\captionsetup{width=.5\textwidth}
\caption{text}\\
...
\end{longtable}


(In longtables geht dies allerdings erst seit der Version 3.1 des caption-Paketes.)

LivToole
02-06-2008, 13:00
ok, da werde ich dann wohl etwas rumprobieren müssen, da das bei longtable noch nicht gut aussieht.

aber das hilft mir glaube ich schon viel weiter. danke!