newcommand und optionaler Parameter

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: newcommand und optionaler Parameter

Puhhh! Geschafft!

von Gewitterbukk » Do 16. Apr 2009, 19:31

So Freunde der Nacht. Hier meine Umgebungen zur Anpassung von Beschriftungen an die Tabellen- bzw. Abbildungsbreite.
\newcommand*{\CaptionText}{}
\newcommand*{\CaptionTextOpt}{}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% für Tabellen                                    %
% Syntax:                                         %
% \begin{TabelleSetztCaptionBreite}[...]{...}     %
% ...                                             %
% \end{TabelleSetztCaptionBreite}                 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newlength{\Tabellenbreite}
\newcommand{\Tabelle}[1]{%
	\settowidth{\Tabellenbreite}{#1}%
	\setcapwidth[c]{\Tabellenbreite}%
	\caption[\CaptionTextOpt]\CaptionText
 	#1%
}
\newsavebox{\Tabellenbox}
\newenvironment{TabelleSetztCaptionBreite}[2][\CaptionText]{%
	\gdef\CaptionText{#2}%
	\gdef\CaptionTextOpt{#1}%
	\begin{lrbox}{\Tabellenbox}%
}{%
	\end{lrbox}%
	\SetzeTabellenbox%
}
\newcommand{\SetzeTabellenbox}{%
	\Tabelle{\usebox{\Tabellenbox}}} 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% für Abbildungen                                 %
% Syntax:                                         %
% \begin{AbbildungSetztCaptionBreite}[...]{...}   %
% ...                                             %
% \end{AbbildungSetztCaptionBreite}               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newlength{\Abbildungsbreite}
\newcommand{\Abbildung}[1]{%
	\settowidth{\Abbildungsbreite}{#1}%
	\setcapwidth[c]{\Abbildungsbreite}%
	#1%
	\caption[\CaptionTextOpt]\CaptionText
}
\newsavebox{\Abbildungsbox}
\newenvironment{AbbildungSetztCaptionBreite}[2][\CaptionText]{%
	\gdef\CaptionText{#2}%
	\gdef\CaptionTextOpt{#1}%
	\begin{lrbox}{\Abbildungsbox}%
}{%
	\end{lrbox}%
	\global\setbox\Abbildungsbox=\box\Abbildungsbox%
	\aftergroup\SetzeAbbildungsbox%
}
\newcommand{\SetzeAbbildungsbox}{%
	\Abbildung{\usebox{\Abbildungsbox}}}
Viel Spaß damit und Danke für die vielen Anregungen.

Optionalen Parameter testen

von Stefan Kottwitz » Do 16. Apr 2009, 18:17

Hallo,

das geht beispielsweise mit diesem Makro:
\makeatletter
\def\ifEmpty#1{\def\@temp{#1}\ifx\@temp\@empty}
\makeatother
und dann
\ifEmpty{#1}\caption{#2}\else\caption[#1]{#2}\fi
Stefan

newcommand und optionaler Parameter

von Gewitterbukk » Do 16. Apr 2009, 14:19

Hallo zusammen!

Ich möchte eine Funktion "Tabelle" erstellen, die mir die Tabellenbeschriftung an die Tabellenbreite anpasst und diese dann über der Tabelle ausgibt. Hier mein Code:
\documentclass[captions=tableheading]{scrreprt}

\usepackage{ngerman}

\setcapindent{0mm}

\newlength{\Tabellenbreite}
\newcommand{\Tabelle}[3][]{%
	\settowidth{\Tabellenbreite}{#3}%
	\setcapwidth[c]{\Tabellenbreite}%
	\caption[#1]{#2}%
	#3%
}

\begin{document}
 	
\listoftables

\begin{table} 
	\centering
	\Tabelle[LOT-Eintrag]{Diese Überschrift soll an die Tabellenbreite angepasst sein.}{
		\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{table}

\end{document}
Das Ganze läuft auch ohne Probleme und funktioniert auch soweit. Allerdings habe ich einen kleinen Schönheitsfehler, was das optionale Argument von "Tabelle" betrifft. Wenn ich das optionale Argument wegglasse, also
\begin{table} 
	\centering
	\Tabelle{Diese Überschrift soll an die Tabellenbreite angepasst sein.}{
		\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{table}
beibt der LOT-Eintrag einfach leer und im Tabellenverzeichnis stehen die Punkte und die Seite aber eben keine Tabellenbeschriftung. Ich möchte allerdings, dass das ganze wie "caption" funktioniert, in diesem Fall also das "normale" Argument von "Tabelle" eingetragen wird. Aber wie realisiere ich das in der Funktionsdefinition von "Tabelle" bzw. was gebe ich als optionales Argument an? Wenn ich so etwas wie
\newcommand{\Tabelle}[3][#2]{% ...
schreibe, funktioniert es leider nicht.

Danke für Anregungen!

Nach oben