Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

01 Sep '13, 13:56

Qrrbrbirlbel's gravatar image

Qrrbrbirlbel
2.9k3815

## Dein Beispiel Wenn du `\addall` so definierst: \def\addall{\def\@tmpc{0}\@addall} \def\@addall#1#2{% \edef\@tmpb{#1}% \popleft\@tmpb\currentvalueA \FPadd\@tmpc\@tmpc{\csuse{\currentvalueA}}% \ifdefempty\@tmpb{\cslet{#2}\@tmpc}{\@addall\@tmpb{#2}}} und mit \addall{A|B|C|D}{summe} verwendest, enthält `\summe` dann `50.000000000000000000` und kann natürlich wieder verwendet in Funktionen wie \addall{summe|B}{summe} wobei dann `\summe` jetzt `60.…` enthalten sollte. ### Verbesserung Anstatt Macro-Sequenzen wie `\A`, `\B` oder `\summe` zu verwenden, würde ich wenigstens einen eigenen „Namespace“ (das gibt es in TeX zwar nicht, aber ich nenne es mal so) verwenden, in dem du \def\@assignvalues#1#2{% \protected@edef\@tmpb{#1}\protected@edef\@tmpc{#2}% \popleft\@tmpb\currentvalueA \popleft\@tmpc\currentvalueB \protected@csedef{goldnas@\currentvalueA}{\currentvalueB}% <- hier \ifdefempty\@tmpb{}{\assignvalues\@tmpb\@tmpc}% } \def\addall{\def\@tmpc{0}\@addall} \def\@addall#1#2{% \edef\@tmpb{#1}% \popleft\@tmpb\currentvalueA \FPadd\@tmpc\@tmpc{\csuse{goldnas@\currentvalueA}}% <- hier \ifdefempty\@tmpb{\cslet{#2}\@tmpc}{\@addall\@tmpb{#2}}} wobei an den mit `<- hier` gekennzeichneten Stellen der Text `goldnas@` eingefügt wurde. Der Code definiert also jetzt `\goldnas@A`, `goldnas@B` sowie `\goldnas@summe`. Das ist etwas sicherer; stell dir vor jemand definiere `\sum` neu! Benutzen kannst du den Wert dann mit \def\benutze#1{\csuse{goldnas@#1}} <!--## ## vielleicht PGFmath? Aber warum denn die Mathematik neu definieren? Das Paket `pgfmath` enthält bereits einen wunderbaren Mathematik-Parser und bietet sich sogar als Frontend für `fp` an (ansonsten würde es alle Berechnungen mit eigenen Funktionen und TeX’s Präzision machen).-->machen). Ein kleiner Anfang: \documentclass{article} \usepackage{pgf,fp} \usepgflibrary{fixedpointarithmetic} \pgfset{fixed point arithmetic} \newcommand*{\declareFunctions}[1]{\pgfset{declare function={#1}}} \begin{document} \declareFunctions{A=5; B=10; C=15; D=20;} \pgfmathprint{A+B+C+D} \pgfmathsetmacro\summe{A+B+C+D}\summe \declareFunctions{summe=A+B+C+D;}\pgfmathprint{summe} \declareFunctions{foo(\x,\a,\b,\c)=\a*\x*\x+\b*\x+\c;} \pgfmathprint{foo(2, -1, 3, sqrt(2))} \end{document}
Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

01 Sep '13, 13:47

Qrrbrbirlbel's gravatar image

Qrrbrbirlbel
2.9k3815

## Dein Beispiel Wenn du `\addall` so definierst: \def\addall{\def\@tmpc{0}\@addall} \def\@addall#1#2{% \edef\@tmpb{#1}% \popleft\@tmpb\currentvalueA \FPadd\@tmpc\@tmpc{\csuse{\currentvalueA}}% \ifdefempty\@tmpb{\let#2\@tmpc}{\@addall\@tmpb#2}} \ifdefempty\@tmpb{\cslet{#2}\@tmpc}{\@addall\@tmpb{#2}}} und mit \addall{A|B|C|D}\summe \addall{A|B|C|D}{summe} verwendest, enthält `\summe` dann `50.000000000000000000`.`50.000000000000000000` und kann natürlich wieder verwendet in Funktionen wie \addall{summe|B}{summe} wobei dann `\summe` jetzt `60.…` enthalten sollte. ### Verbesserung Anstatt Macro-Sequenzen wie `\A`, `\B` oder `\summe` zu verwenden, würde ich wenigstens einen eigenen „Namespace“ (das gibt es in TeX zwar nicht, aber ich nenne es mal so) verwenden, in dem du \def\@assignvalues#1#2{% \protected@edef\@tmpb{#1}\protected@edef\@tmpc{#2}% \popleft\@tmpb\currentvalueA \popleft\@tmpc\currentvalueB \protected@csedef{goldnas@\currentvalueA}{\currentvalueB}% <- hier \ifdefempty\@tmpb{}{\assignvalues\@tmpb\@tmpc}% } \def\addall{\def\@tmpc{0}\@addall} \def\@addall#1#2{% \edef\@tmpb{#1}% \popleft\@tmpb\currentvalueA \FPadd\@tmpc\@tmpc{\csuse{goldnas@\currentvalueA}}% <- hier \ifdefempty\@tmpb{\cslet{#2}\@tmpc}{\@addall\@tmpb{#2}}} wobei an den mit `<- hier` gekennzeichneten Stellen der Text `goldnas@` eingefügt wurde. Der Code definiert also jetzt `\goldnas@A`, `goldnas@B` sowie `\goldnas@summe`. Das ist etwas sicherer; stell dir vor jemand definiere `\sum` neu! Benutzen kannst du den Wert dann mit \def\benutze#1{\csuse{goldnas@#1}} <!--## vielleicht PGFmath? Aber warum denn die Mathematik neu definieren? Das Paket `pgfmath` enthält bereits einen wunderbaren Mathematik-Parser und bietet sich sogar als Frontend für `fp` an (ansonsten würde es alle Berechnungen mit eigenen Funktionen und TeX’s Präzision machen).-->
Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

01 Sep '13, 13:01

Qrrbrbirlbel's gravatar image

Qrrbrbirlbel
2.9k3815