Seite 1 von 1

Parameter ohne {}-Klammern

Verfasst: Fr 6. Nov 2009, 17:26
von sLy
Hallo allezusammen,

ich würde gerne wissen, ob es (möglichst einfach) realisierbar ist, dass man die parameter eines befehls nur mit trennzeichen voneinander trennt.

Schematisches Beispiel:
Dieser Befehl:
\befehl {Parameter1}{Parameter2}{Parameter3}
soll so aussehen:
\befehl {Parameter1,Parameter2,Parameter3}


Die Parameter werden also nur durch ein Komma getrennt.

mfg
sLy

Verfasst: Fr 6. Nov 2009, 21:06
von phi
beispielsweise mit dem etoolbox-Paket:
\newcommand*{\befehl}[1]{%
  \def\do##1{%
    % hier jetzt etwas mit ##1 machen
  }%
  \docsvlist{#1}%
}

Verfasst: Sa 7. Nov 2009, 13:15
von sLy
Danke für deine schnelle antwort phi.
Leider hab ich deinen code nicht ganz verstanden.
Ich hab mir die docu von etoolbox durchgelesen, konnte aber nicht herausfinden, was die befehle \do und \docsvlist machen.
Mir ist auch noch nicht ganz klar, was ##1 bedeutet.
Außerdem wüsste ich gerne, wo der "Komma-Parameter" in die einzelnen zerlegt wird.

Hoffe du kannst mir das genauer erklären.

P.S.
Wenn du willst, kannst dus am beispiel von
\lamp (#1)(#2){#3}%entspricht Originalbefehl
erklären.
Der neue Befehl soll
\Lampe {#1,#2,#3}%entspricht neuem, eigenen Befehl

lauten, wobei die 3 Parameter in den Orginalbefehl eingesetzt werden.

mfg
sLy

Verfasst: So 8. Nov 2009, 00:02
von phi
\docsvlist ist im etoolbox-Handbuch umfassend erklärt. Für dein Problem ist es jedoch nicht geeignet, da musst du wohl selber parsen:
\makeatletter
\newcommand*{\Lampe}[1]{\L@mpe#1\@nil}
\newcommand*{\L@mpe}{}
\def\L@mpe#1,#2,#3\@nil{%
  \lamp(#1)(#2){#3}%
}
\makeatother

Verfasst: Do 12. Nov 2009, 15:53
von sLy
Hi,
danke, deine Lösung funktioniert so, wie sie soll.

Meine Fragen:
1. Was bedeutet \@nil ?
2. Lässt sich das auch so machen, dass man bestimmte parameter in klammern stellt? also z.b.
 \Lampe {#1{#2,#3}}
mfg
sLy

Verfasst: Mo 30. Nov 2009, 10:33
von flying sheep
versuchs mal mit dem keysystem von pgf.

Verfasst: Mo 30. Nov 2009, 19:15
von phi
müsste so gehen:
\newcommand*{\Lampe}[1]{\L@mpe#1}
\newcommand*{\L@mpe}{}
\def\L@mpe#1#{%
  \L@@pe{#1}%
}
\newcommand*{\L@@pe}[2]{%
  \L@@@e{#1}#2\@nil
}
\newcommand*{\L@@@e}{}
\def\L@@@e#1#2,#3\@nil{%
  \lamp(#1)(#2){#3}%
}