Captionbreite an Tabellenbreite anpassen

Klassen und Pakete zur einfachen Umsetzung individueller Vorstellungen


Gewitterbukk
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 55
Registriert: Mi 11. Mär 2009, 17:19

Captionbreite an Tabellenbreite anpassen

Beitrag von Gewitterbukk »

Hallo zusammen!

Ich möchte gerne die Breite der Tabellenüberschriften an die Breite der Tabellen anpassen. In dem KOMA-Script Buch habe ich eine Funktion bzw. Umgebung gefunden mit der sich das zumindest für die figure-Umgebung realisieren lässt.
\newlength{\Abbildungsbreite}
\newcommand{\Abbildung}[1]{%
	\settowidth{\Abbildungsbreite}{#1}%
	\setcapwidth[c]{\Abbildungsbreite}%
	#1%
}
\newsavebox{\Abbildungsbox}
\newenvironment{AbbildungSetztCaptionBreite}{%
	\begin{lrbox}{\Abbildungsbox}%
}{%
	\end{lrbox}%
	\global\setbox\Abbildungsbox=\box\Abbildungsbox%
	\aftergroup\SetzeAbbildungsbox%
}
\newcommand{\SetzeAbbildungsbox}{%
	\Abbildung{\usebox{\Abbildungsbox}}}
Ausgeführt sieht das Ganze dann so aus.
\begin{figure}
	\centering
	\begin{AbbildungSetztCaptionBreite}	
		\includegraphics{bild.pdf}
	\end{AbbildungSetztCaptionBreite}
	\caption{Beschriftung}
\end{figure}
Es klappt auch wunderbar, aber eben wie gesagt nur bei der figure-Umgebung. Darum meine Frage: Wie kann ich so ein Verhalten bei Tabellen realisieren?

Danke!

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2533
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Caption- und Tabellenbreite

Beitrag von Stefan Kottwitz »

Hallo,

das kannst Du doch in einer table-Umgebung analog tun, wie in Deinem letzten Codestück. Oder was klappt da bei Dir genau nicht?

Stefan

Gewitterbukk
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 55
Registriert: Mi 11. Mär 2009, 17:19

Beitrag von Gewitterbukk »

Also, das Problem ist folgendes. Wenn ich den caption-Aufruf unter die Tabelle setze, also
\begin{table} 
	\centering
	\begin{AbbildungSetztCaptionBreite}
		\begin{tabular}{*{10}{l}}
			1 & 2 & 3 & 4 & 6 & 7 & 8 & 9 & 10\\
			1 & 2 & 3 & 4 & 6 & 7 & 8 & 9 & 10\\
		\end{tabular}
	\end{AbbildungSetztCaptionBreite}
	\caption{Lange Beschriftung und so weiter und so weiter \dots}
\end{table}
wird die captionbreite wie bei der figure-Umgebung angepasst. Wenn ich den caption-Aufruf aber über die Tabelle setze (was ich gerne möchte), funktioniert das ganze nicht. Also das hier:
\begin{table} 
	\centering
	\caption{Lange Beschriftung und so weiter und so weiter \dots}
	\begin{AbbildungSetztCaptionBreite}
		\begin{tabular}{*{10}{l}}
			1 & 2 & 3 & 4 & 6 & 7 & 8 & 9 & 10\\
			1 & 2 & 3 & 4 & 6 & 7 & 8 & 9 & 10\\
		\end{tabular}
	\end{AbbildungSetztCaptionBreite}
\end{table}
Wie genau die Umgebung "AbbildungSetztCaptionBreite" funktioniert, verstehe ich leider nicht. Ich muss gestehen, dass ich den Code einfach abgeschrieben habe. ;-)

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2533
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Automatische Breitenanpassung für Tabellenüberschriften

Beitrag von Stefan Kottwitz »

Hallo,

hier eine Modifikation des obigen Codes, mit dem es klappen könnte. Dabei habe ich einen optionalen Parameter eingeführt, mit dem man wahlweise eine caption angeben kann. Das kann man natürlich noch verfeinern oder überhaupt anders tun.
\makeatletter
\newcommand*\ifempty[1]{
  \ifx#1\@empty
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi}%
\makeatother

\newlength{\Abbildungsbreite}
\newcommand{\Abbildung}[1]{%
   \settowidth{\Abbildungsbreite}{#1}%
   \setcapwidth[c]{\Abbildungsbreite}%
   \ifempty\Tabellencaption{}{\caption{\Tabellencaption}}%
   #1%
}
\newsavebox{\Abbildungsbox}
\newcommand\Tabellencaption{}
\newenvironment{AbbildungSetztCaptionBreite}[1][]{%
   \gdef\Tabellencaption{#1}
   \begin{lrbox}{\Abbildungsbox}%
}{%
   \end{lrbox}%
   \global\setbox\Abbildungsbox=\box\Abbildungsbox%
   \aftergroup\SetzeAbbildungsbox%
}
\newcommand{\SetzeAbbildungsbox}{%
   \Abbildung{\usebox{\Abbildungsbox}}}
Stefan

Gewitterbukk
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 55
Registriert: Mi 11. Mär 2009, 17:19

Beitrag von Gewitterbukk »

Hallo Stefan!

Hab deinen Eintrag gerade erst gelesen. Danke erst mal für deine Antwort. Ich hab mich heute mal selbst an die Umgebungsprogrammierung gewagt. Offenbar scheint es aber noch irgendwo zu haken. Ich bekomme die Fehlermeldung:

! Incomplete \iffalse; all text was ignored after line 107.

Könntest du dir meinen Code vielleicht noch mal anschauen.
\begin{document}

\newlength{\Tabellenbreite}
\newcommand{\Tabelle}[3]{%
	\settowidth{\Tabellenbreite}{#3}%
	\setcapwidth[c]{\Tabellenbreite}%
	\caption[#1]{#2}%
	#3%
}
\newsavebox{\Tabellenbox}
\newsavebox{\ParA}
\newsavebox{\ParB}
\newenvironment{TabelleSetztCaptionBreite}[2]{%
	\sbox{\ParA}{#1}%
	\sbox{\ParB}{#2}%
	\begin{lrbox}{\Tabellenbox}%
}{%
	\end{lrbox}%
	\global\setbox\Tabellenbox=\box\Tabellenbox%
	\aftergroup\SetzeTabellenbox{\usebox{\ParA}}{\usebox{\ParB}}%
}
\newcommand{\SetzeTabellenbox}[2]{%
	\Tabelle{#1}{#2}{\usebox{\Tabellenbox}}}


\begin{table} 
	\centering
	\begin{TabelleSetztCaptionBreite}{Caption-Eintrag}{Dies ist eine Tabelle und so weiter und so weiter und so weiter \dots}
		\begin{tabular}{*{10}{l}}
			1 & 2 & 3 & 4 & 6 & 7 & 8 & 9 & 10\\
			1 & 2 & 3 & 4 & 6 & 7 & 8 & 9 & 10\\
			1 & 2 & 3 & 4 & 6 & 7 & 8 & 9 & 10\\
		\end{tabular}
	\end{TabelleSetztCaptionBreite}
\end{table}


\end{document}
Ich habe mich dabei sehr stark an dem Beispiel im Buch orientiert. Die Funktion "\Tabelle" funktioniert auch tadellos, allerdings macht die Umgebung noch Probleme. Offenbar darf man im einschließenden Teil der Umgebung keine Parameter verwenden. Das bin ich mit den beiden saveboxen ParA und ParB umgangen. Ich hoffe, dass kann man so machen.

Vielen vielen DANK!

Antworten