Tux
25-07-2011, 20:19
Hallo Forum,
ich tüftel gerade an einem command, das "Methodenaufrufe" deligieren soll. Dabei habe ich ein Problem bei dem "Return" eines counter \values und komme nicht weiter. Es wäre super, wenn mir jemand von euch helfen könnte!
EDIT: Ich setze in dem Beispiel auf Currying (http://de.wikipedia.org/wiki/Currying). Hier (http://www.tex.ac.uk/cgi-bin/texfaq2html?label=moren9) ist das auch im LaTeX Universum erklärt.
Hier ist ein Minimalbeispiel:
\documentclass{article}
\newcounter{test}
\newcommand{\test}[1][]{\csname testA#1\endcsname}
\def\testAadd#1{\addtocounter{test}{#1}\test}
\def\testAprint{\the\value{test}\test}
\def\testAvalue{\value{test}} % hier liegt irgendwo das Problem
\begin{document}
\test[add]{1}[print][add]{2}[print][print][add]{4}[print]
\newcounter{tmp}
\setcounter{tmp}{\test[value]} % Zeile auskommentieren und es klappt
\end{document}
Wird die oben gekennzeichnete Zeile auskommentiert, kompiliert der Code und das Dokument wird erzeugt:
1337
Tut man das nicht, ist die Fehlermeldung:
Latex Error: ./MB.tex:15 Missing number, treated as zero.
Der (hoffentlich) relevante Ausschnitt des (sehr kurzen) .log-Files:
\c@tmp=\count88
./MB.tex:15: Missing number, treated as zero.
<to be read again>
\let
l.15 \setcounter{tmp}{\test[value]}
A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)
Wird die fehlerhafte ("auszukommentierende") Zeile oben durch diese zwei Zeilen ersetzt, läuft das Programm:
\setcounter{tmp}{\value{test}}
\the\value{tmp}
Das ist für mich aber keine Lösung des Problems, da ich gerne die ursprüngliche Notation beibehalten würde.
Hat irgendjemand einen Lösungsvorschlag oder eine Idee, wo ich weiterforschen könnte? Ich bin für jede Hilfe dankbar! :)
ich tüftel gerade an einem command, das "Methodenaufrufe" deligieren soll. Dabei habe ich ein Problem bei dem "Return" eines counter \values und komme nicht weiter. Es wäre super, wenn mir jemand von euch helfen könnte!
EDIT: Ich setze in dem Beispiel auf Currying (http://de.wikipedia.org/wiki/Currying). Hier (http://www.tex.ac.uk/cgi-bin/texfaq2html?label=moren9) ist das auch im LaTeX Universum erklärt.
Hier ist ein Minimalbeispiel:
\documentclass{article}
\newcounter{test}
\newcommand{\test}[1][]{\csname testA#1\endcsname}
\def\testAadd#1{\addtocounter{test}{#1}\test}
\def\testAprint{\the\value{test}\test}
\def\testAvalue{\value{test}} % hier liegt irgendwo das Problem
\begin{document}
\test[add]{1}[print][add]{2}[print][print][add]{4}[print]
\newcounter{tmp}
\setcounter{tmp}{\test[value]} % Zeile auskommentieren und es klappt
\end{document}
Wird die oben gekennzeichnete Zeile auskommentiert, kompiliert der Code und das Dokument wird erzeugt:
1337
Tut man das nicht, ist die Fehlermeldung:
Latex Error: ./MB.tex:15 Missing number, treated as zero.
Der (hoffentlich) relevante Ausschnitt des (sehr kurzen) .log-Files:
\c@tmp=\count88
./MB.tex:15: Missing number, treated as zero.
<to be read again>
\let
l.15 \setcounter{tmp}{\test[value]}
A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)
Wird die fehlerhafte ("auszukommentierende") Zeile oben durch diese zwei Zeilen ersetzt, läuft das Programm:
\setcounter{tmp}{\value{test}}
\the\value{tmp}
Das ist für mich aber keine Lösung des Problems, da ich gerne die ursprüngliche Notation beibehalten würde.
Hat irgendjemand einen Lösungsvorschlag oder eine Idee, wo ich weiterforschen könnte? Ich bin für jede Hilfe dankbar! :)