PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Befehl überladen bzw. variable Anzahl Parameter



Homeboyli
03-08-2007, 13:25
Hallo,

ich suche einen Möglichkeit um die folgenden Befehle durch einen zu ersetzen:

\newcommand{\cdEins}[3]{\cda{#1}\cdp{#3}\cde{#2}}
\newcommand{\cdZwei}[4]{\cda{#1}\cdp{#3}\cdp{#4}\cde{#2}}
\newcommand{\cdDrei}[5]{\cda{#1}\cdp{#3}\cdp{#4}\cdp{#5}\cde{#2}}
usw.

Leider lässt Latex es nicht zu den gleichen Namen zu verwenden, da es einen Befehl scheinbar nur am Namen erkennt und somit unabhängig von der Parameteranzahl.

Daher wollte ich fragen ob es denn eine Möglichkeit gibt die Parameteranzahl variabel zu halten. Allerdings meine ich damit nicht einfach {} als Paramter anzugeben, denn dies führt dann zum Ausführen der Funktion \cdp{}, was nicht erwünscht ist. Vielmehr soll für jeden Parameter ab dem Dritten \cdp ausgeführt werden.

Vielleicht kann ja jemand helfen.

Im voraus herzlichen Dank.

sommerfee
03-08-2007, 13:43
Daher wollte ich fragen ob es denn eine Möglichkeit gibt die Parameteranzahl variabel zu halten.

Mir fällt da spontan ein:

1. Optionale Argumente nehmen. Davon kann man ja beliebig viele erkennen, bis eine wohl definierte Anzahl von nicht-optionalen Argument folgt. Also z.B.:

\cd{...}
\cd[...]{...}
\cd[...][...]{...}
\cd[...][...][...]{...}
...

So hat z.B. \parbox bis zu 3 optionale Argumente.

2. key-value-Interface nehmen, wie z.B. bei \hypersetup. Zur Realisierung könnte man z.B. das kvoptions-Paket nehmen.

Liebe Grüße,
Axel

Homeboyli
03-08-2007, 20:19
Hallo,

zunächst mal vielen Dank für die Hilfe.

Allerdings muss ich sagen, dass ich es nicht hinbekommen habe.

Zu 2. muss ich zugeben das ich gar nichts verstehe. Bin halt noch kein Profi.

Zu 1. das klingt ja ganz vielversprechend habe auch ein wenig herumgespielt, habe es aber nicht geschafft. Wäre nett wenn du mir ein Beispiel zeigen könntest. Am besten eines wo Definition des Befehls und Benutzung zeigt.

sommerfee
03-08-2007, 20:53
Zu 2. muss ich zugeben das ich gar nichts verstehe. Bin halt noch kein Profi.

\hypersetup hat als Syntax \hypersetup{parameter1=wert, parameter2=wert, ...}, d.h. man kann beliebig viele Parameter in beliebiger Reihenfolge über den Namen angeben. Ähnlich wie auch \includegraphics könnte man ein Kommando \cd[...]{...} realisieren, wo man in den eckigen Klammern die Optionsliste angeben kann. Schaue dir einfach mal \hypersetup vom hyperref Paket bzw. \includegraphics vom graphicx-Paket an.

Realisieren kann man das als User wohl am einfachsten über das kvoptions-Paket oder das xkeyval-Paket, wobei ich ersteres bevorzuge.



Zu 1. das klingt ja ganz vielversprechend habe auch ein wenig herumgespielt, habe es aber nicht geschafft. Wäre nett wenn du mir ein Beispiel zeigen könntest. Am besten eines wo Definition des Befehls und Benutzung zeigt.

Bei mehr als einem optionalen Parameter muß man auf die LaTeX-Kernel-Befehle \@ifnextchar bzw. \@testopt zurückgreifen, den Mechanismus quasi selber "zu Fuß" implementieren. Am besten schaut man sich das am Beispiel des Quelltextes von \parbox oder so an, da sieht man sehr schön, wie sich \parbox von optionalen Parameter zu Parameter "hangelt".

Als Anfänger ist aber Möglichkeit 2 sicherlich einfacher zu realisieren.

Liebe Grüße,
Axel

Homeboyli
06-08-2007, 08:00
Hallo, auch dies hilft mir ehrlich gesagt nicht weiter, da ich hieraus nicht erkennen kann wie ich einen Befehl mit Variabler PArameteranzahl definiere oder benutze.

Wo kann ich denn den Wualltext von \parbox mir anschauen, habe leider nichts gefunden.

sommerfee
06-08-2007, 08:20
Wo kann ich denn den Wualltext von \parbox mir anschauen, habe leider nichts gefunden.

Z.B. hier: ftp://ftp.dante.de/tex-archive/macros/latex/base/ltboxes.dtx

Gruß,
Axel