Lässt sich \caption nicht umdefinieren

Tabellen und Grafiken erstellen und anordnen


Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Lässt sich \caption nicht umdefinieren

Beitrag von iTob »

Hallo Forum,

ich versuche gerade eine Nicht-Gleitumgebung für Tabellen und Abbildungen zu basteln. Die Beschriftung kann ich mit \captionof erzeugen, aber ich würde gerne das \caption innerhalb der neuen Umgebung zu \captionof umdefiniert wird, was nicht zu gehen scheint und bei mir nur dazu führt, dass pdfLaTeX ewig läuft ohne Ergebnis. Definiere ich stattdessen einen eigenen Befehl \Caption (mit großem C) geht es. Woran liegt das?

Hier das Beispiel
\documentclass[ngerman]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{blindtext}

\usepackage{caption}% das KOMA-Klassen \captionof auch
% bereitstellen weiß ich, aber im Original brauche ich
% die normale article-Klasse

% neue Umgebungen für nichtgleitende Tabellen und
% Abbildungen
\makeatletter
\def\ifEmpty#1{\def\@temp{#1}\ifx\@temp\@empty} 
\newenvironment{svtable}{%
	\par\small%
	\@setnobreak% Wozu?
	\@setminipage% Wozu?
	\setlength{\parindent}{0pt}%
	\newcommand\Caption[2][]{%
	% mit
%	\renewcommand\caption[2][]{%
	% stattdessen geht es nicht
		\ifEmpty{##1}%
		\captionof{table}{##2}%
		\else
		\captionof{table}[##1]{##2}%
		\fi%
	}%
}{\endgraf\medskip}% ?
\makeatother

\begin{document}
\blindtext
%
\begin{svtable}
	\centering
	\Caption{Eine Tabelle}\label{test}
	\begin{tabular}{lll}
		A & B & C\\
		1 & 2 & 3\\
	\end{tabular}
\end{svtable}
%
\blindtext% Dieser Text sollte eigenlich ohne Einzug gesetzt werden

Verweis: \ref{test}
\end{document}
Und ich hab noch zwei weitere Fragen:
2. Wie kann ich erreichen, dass der Einzug nach der Umgebung wirklich nur gemacht wird, wenn eine Leerzeile dazwischen steht. Ohne Leerzeile bzw auskommentierte Leerzeile hätte ich gerne, dass der Absatz ohne Einzug fortgesetzt wird.
3. Wozu dienen die Befehle \@setnobreak und \@setminipage? Ich habe sie aus der Vorlage übernommen, die verwendet werden muss.

Vielen Dank!
Tobi

sommerfee
Forum-Century
Forum-Century
Beiträge: 219
Registriert: Sa 12. Jul 2008, 08:02

Re: Lässt sich \caption nicht umdefinieren

Beitrag von sommerfee »

iTob hat geschrieben:aber ich würde gerne das \caption innerhalb der neuen Umgebung zu \captionof umdefiniert wird, was nicht zu gehen scheint und bei mir nur dazu führt, dass pdfLaTeX ewig läuft ohne Ergebnis. Definiere ich stattdessen einen eigenen Befehl \Caption (mit großem C) geht es. Woran liegt das?
\captionof besteht (im caption-Paket) aus \captionsetup{type=...} und \caption. Wenn du jetzt \caption so umdefinierst, daß es \captionof verwendest, dann dreht sich das im Kreis, eben weil \captionof \caption verwendet, was wiederum \captionof verwendet, was wiederum \caption verwendet...

Abhilfe: Vergiss das Umdefinieren von \caption und packe stattdessen \captionsetup{type=table} in die Definition deiner Umgebung.
\documentclass[ngerman]{article} 
\usepackage[latin1]{inputenc} 
\usepackage[T1]{fontenc} 
\usepackage{babel} 
\usepackage{blindtext} 

\usepackage{caption}% das KOMA-Klassen \captionof auch 
% bereitstellen weiß ich, aber im Original brauche ich 
% die normale article-Klasse 

% neue Umgebungen für nichtgleitende Tabellen und 
% Abbildungen 
\makeatletter 
\def\ifEmpty#1{\def\@temp{#1}\ifx\@temp\@empty} 
\newenvironment{svtable}{% 
   \par\small% 
   \@setnobreak% Wozu? 
   \@setminipage% Wozu? 
   \setlength{\parindent}{0pt}%
   \captionsetup{type=table}%
}{\endgraf\medskip}% ? 
\makeatother 

\begin{document} 
\blindtext 
% 
\begin{svtable} 
   \centering 
   \caption{Eine Tabelle}\label{test} 
   \begin{tabular}{lll} 
      A & B & C\\ 
      1 & 2 & 3\\ 
   \end{tabular} 
\end{svtable} 
% 
\blindtext% Dieser Text sollte eigenlich ohne Einzug gesetzt werden 

Verweis: \ref{test} 
\end{document}

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Danke, da muss man erstmal drauf kommen. Mir kam gar nicht der Gedanke mal zu schauen, wie \captionof arbeitet. :)

Bleiben noch Frage 2 und 3 offen …

Liebe Grüße
Tobi

Antworten