Seite 1 von 1

Captionbreite an Tabellenbreite anpassen

Verfasst: Di 14. Apr 2009, 13:00
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!

Caption- und Tabellenbreite

Verfasst: Di 14. Apr 2009, 17:29
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

Verfasst: Di 14. Apr 2009, 18:42
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. ;-)

Automatische Breitenanpassung für Tabellenüberschriften

Verfasst: Di 14. Apr 2009, 21:20
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

Verfasst: Mi 15. Apr 2009, 00:56
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!