Übergabe mehrer Argumente in einer Klammer

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


rais
Forum-Guru
Forum-Guru
Beiträge: 413
Registriert: Di 21. Sep 2010, 00:37

Re: Zurück zum eigentlichen Problem

Beitrag von rais »

Boiza hat geschrieben:wenn ich da einhacken darf: mich würde die Antwort auf die grundlegende Frage interessieren. So ein übergebener Parameter in der Klammer an z.B. dem Punkt in 3 Teile zu trennen. Kriegt man das in der Schnelle hin?
meinst Du sowas?
\documentclass{article}
\makeatletter
  \newcommand*\foo[1]{\foo@i#1...\@nil}
  \def\foo@i#1.#2.#3.#4\@nil{%
    1: `#1', 2: `#2', 3: `#3'\par
  }
\makeatother
\begin{document}
\foo{abc}
\foo{a.bc}
\foo{a.b.c}
\foo{a.{b.c}.d}
\foo{a.b.c.d}
\end{document}
beachte bei diesem Ansatz, einen Parameter `zu viel' zu verwenden (da drin landen dann die überflüssigen Punkte, die ich hier nur vorgebe, um Fehler zu vermeiden, so man nicht genügend Punkte übergibt).

Frohe Ostern
Rainer
One of the joys of travel is visiting new towns and meeting new people---G.Khan (Robert Asprin, Another Fine Myth)

Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag von cgnieder »

Hier wäre eine Lösung mit xparse:
\documentclass{article}
\usepackage{xparse}

\makeatletter
\NewDocumentCommand\test{>{\SplitArgument{2}{.}}m}{\test@i #1}
\def\test@i#1#2#3{eins: #1, zwei: \IfNoValueF{#2}{#2}, drei: \IfNoValueF{#3}{#3}\par}
\makeatother

\begin{document}
\test{abc}
\test{a.bc}
\test{a.b.c}
\test{a.{b.c}.d}
% \test{a.b.c.d} % verursacht Fehler!
\end{document}
Grüße
Clemens
Paketauthor

Antworten