Parameter ohne {}-Klammern

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


sLy
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 30. Sep 2009, 17:41

Parameter ohne {}-Klammern

Beitrag 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

phi
Moderator
Moderator
Beiträge: 420
Registriert: Fr 6. Feb 2009, 21:28

Beitrag von phi »

beispielsweise mit dem etoolbox-Paket:
\newcommand*{\befehl}[1]{%
  \def\do##1{%
    % hier jetzt etwas mit ##1 machen
  }%
  \docsvlist{#1}%
}

sLy
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 30. Sep 2009, 17:41

Beitrag 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

phi
Moderator
Moderator
Beiträge: 420
Registriert: Fr 6. Feb 2009, 21:28

Beitrag 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

sLy
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 30. Sep 2009, 17:41

Beitrag 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

flying sheep
Forum-Anfänger
Forum-Anfänger
Beiträge: 40
Registriert: So 27. Jul 2008, 14:34
Wohnort: München, By
Kontaktdaten:

Beitrag von flying sheep »

versuchs mal mit dem keysystem von pgf.

phi
Moderator
Moderator
Beiträge: 420
Registriert: Fr 6. Feb 2009, 21:28

Beitrag 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}%
}

Antworten