PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Parameterübergabe



gabber
05-09-2009, 19:55
Hallo!

Man lernt bekanntlich immer dazu; gerade habe ich festgestellt, dass eine Kommandodefinition per \newcommand höchstens 9 übergebene Parameter zulässt.

Ich möchte eine Anzahl von Zahlen (> 9) an einen Befehl übergeben. Welche Möglichkeiten gibt es da? "Kennt" LaTeX Datenstrukturen wie Vektoren, Listen etc.?

Am liebsten wäre mir ein Aufruf in der Form


\meinBefehl{1 18 27 2 -5 ...},

da man extrem viele geschweifte Klammern brauchen würde, wenn man

jede Zahl einzeln übergibt:


\meinBefehl{1}{18}{27}{2}{-5}...

Kennt sich damit jemand aus?

sommerfee
06-09-2009, 08:02
\meinBefehl{1 18 27 2 -5 ...}

Da gibt es bestimmt 100 verschiedene Methoden, wie man sowas unter TeX parsen kann, z.B.:



\documentclass{article}

\makeatletter
\newcommand*\meinBefehl[1]{%
\@meinBefehl #1 \@nil}
\def\@meinBefehl#1 #2\@nil{%
\ifx#1\relax\else
\emph{Argument:}~#1\newline
\@meinBefehl #2 \@nil
\fi
}
\newcommand*\MeinBefehl[1]{%
\@for\@tempa:=#1\do{%
\emph{Argument:}~\@tempa\newline}}
\makeatother

\begin{document}

\noindent
\meinBefehl{}%
\meinBefehl{3}
\meinBefehl{4 5}
\meinBefehl{1 18 27 2 -5}

\MeinBefehl{1,18,27,2,-5}

\end{document}


Wie man sieht, geht es bei durch Kommata getrennten Listen recht einfach, weil LaTeX einem für diesen Fall das Hilfsmakro \@for bereitstellt.

Liebe Grüße,
Axel

gabber
07-09-2009, 00:35
Okay, sehr schön. Mit der Abtrennung durch Kommata kann ich leben, daher werde ich wohl die zweite Methode benutzen.

Wo sind diese Befehle/Makros wie z. B. \@for eigentlich dokumentiert?

Ich hatte ein bisschen herumgesucht mit Suchbegriffen wie "latex programming", aber nichts brauchbares gefunden. Für Literaturhinweise wäre ich sehr dankbar.

sommerfee
07-09-2009, 05:13
Wo sind diese Befehle/Makros wie z. B. \@for eigentlich dokumentiert?

In der Dokumentation zu den LaTeX-Quelltexten. Die komplette Codedokumentation erhält man, indem man source2e.tex übersetzt, welches Bestandteil von LaTeX2e ist.

Irgendwo in den Weiten des Netz findet man vielleicht auch ein vorübersetztes source2e.pdf...

Liebe Grüße,
Axel

gabber
07-09-2009, 17:36
Okay, danke für den Hinweis. Die source2e.pdf sieht nicht nach leichter Lektüre aus, aber wenn ich mich da durchgearbeitet habe, weiß ich wenigstens Bescheid (hoffentlich).

sommerfee
07-09-2009, 17:48
Die source2e.pdf sieht nicht nach leichter Lektüre aus

Nein, leider wahrlich nicht. Dies liegt IMHO im wesentlichen daran, daß LaTeX historisch bedingt extrem auf niedrigen Speicherverbrauch und Geschwindigkeit getrimmt worden ist. Deswegen auch die vielen Abkürzungen wie \@ne (statt 1), \p@ (statt 1pt) etc.

Liebe Grüße,
Axel