PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Merkwürdiges Problem mit \ifthenelse und \cline ?!



Meta
28-03-2009, 11:20
Hallo zusammen,

ich habe folgenden Befehl definiert:


\newcommand{\signatures}[2]{%
\\\\%
\cline{1-1}\cline{3-3}%
Unterschrift (#1)&&Unterschrift (#2)\\%
}


Was gemacht werden soll, ist naheliegend, denke/hoffe ich.
Der Befehl soll in einer tabular-Umgebung genutzt werden können, um zwei nebeneinander liegende Unterschriftsfelder zu generieren.

Hier ein lauffähiges Minimalbeispiel:


\documentclass{scrartcl}
\usepackage{ifthen}

\newcommand{\signatures}[2]{%
\\\\\cline{1-1}\cline{3-3}%
Unterschrift (#1)&&Unterschrift (#2)\\%
}

\begin{document}
\begin{center}
\begin{tabular}{p{6cm}p{2cm}p{6cm}}
\signatures{Person A}{Person B}
\end{tabular}
\end{center}
\end{document}


Was ich jetzt gerne hätte, wäre eine minimale Abwandlung, sodass ich den Befehl für nur eine (weitere) Unterschrift verwenden kann.

Dieser (naive?) Ansatz funktioniert leider nicht:


\documentclass{scrartcl}
\usepackage{ifthen}

\newcommand{\signatures}[2]{%
\\\\\cline{1-1}\ifthenelse{\equal{#2}{}}{}{\cline{3-3}}%
Unterschrift (#1)\ifthenelse{\equal{#2}{}}{}{&&Unterschrift (#2)}\\%
}

\begin{document}
\begin{center}
\begin{tabular}{p{6cm}p{2cm}p{6cm}}
\signatures{Person A}{Person B}
\signatures{Person C}{}
\end{tabular}
\end{center}
\end{document}

Ich habe also einfach abgefragt, ob das zweite Argument leer ist.

Merkwürdigerweise funktioniert es aber zumindest, wenn ich das erste \ifthenelse weglasse.
D.h. dieser Befehl funktioniert:


\newcommand{\signatures}[2]{%
\\\\\cline{1-1}\cline{3-3}%
Unterschrift (#1)\ifthenelse{\equal{#2}{}}{}{&&Unterschrift (#2)}\\%
}

Demnach heißt das für mich, dass es am \cline liegen muss.
Korrekt?

Kann mir jemand helfen?
Egal, ob durch Geradebiegen meines Ansatzes oder eines anderen (z.B. durch optionale Parameter oder so?)... :)

Vielen Dank schon mal im Voraus!

rais
29-03-2009, 10:22
Moin moin,
ich würde mir einfach den Befehl für eine Unterschrift bauen und diesen dann entsprechend oft (und angeordnet) aufrufen, etwa


\documentclass[ngerman]{scrartcl}
\usepackage{babel,blindtext}

\newcommand*\signature[1]{%
\noindent\parbox{6cm}{%
\rule{0pt}{2\baselineskip}%
\hrulefill\par
#1}}

\begin{document}
\blindtext

\signature{Person A}\hfill\signature{Person B}

\signature{Person C}
\end{document}

MfG

Meta
29-03-2009, 16:28
Hi Rainer,

an sowas hatte ich auch schon gedacht; wird wohl darauf hinauslaufen. ;)
Vielen Dank für deine Mühe!

Meta

mechanicus
30-03-2009, 07:00
Hallo,

ein alternativer Ansatz:

\documentclass{scrartcl}
\usepackage{ifthen}

\newcommand{\signatures}[2]{%
\ifthenelse{\equal{#2}{}}{%
Unterschrift (#1) &&\\[1em]\cline{1-1}%
}
{Unterschrift (#1)&&Unterschrift (#2)\\[1em]\cline{1-1}\cline{3-3}%
}
}

\begin{document}
\begin{center}
\begin{tabular}{p{6cm}p{2cm}p{6cm}}
\signatures{Person A}{Person B}
\signatures{Person C}{}
\end{tabular}
\end{center}
\end{document}

Gruß
Marco

Meta
07-04-2009, 18:12
Hallo,

ein alternativer Ansatz:

...

Gruß
Marco

Etwas spät, aber dennoch: vielen Dank auch dir! :)

Interessant jedoch, dass dieser Ansatz funktioniert...
Es befinden sich ja nach wie vor cline-Befehle im then- und else-Teil - nur halt nicht alleine und/oder als erstes Argument.

Na ja, peinlich, dass ich selbst nicht etwas mit den Argumenten rumexperimentiert habe.
Ich hatte wahrscheinlich einfach nur im Kopf, das "Unterschrift (#1)" nicht doppelt schreiben zu wollen. Dafür hab ich jedoch zwei ifthenelse-Befehle drin. :D

Gruß,
Meta