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

17 Dez '18, 08:29

gast3's gravatar image

gast3
(ausgesetzt)

`\pgfmathsetmacro` ist in diesem Fall nicht so gut geeignet, weil es die Berechnung unmittelbar ausführt und das Ergebnis dann dem Makro zuweist (siehe dazu auch die Dokumentation in Abschnitt 89.1 der `pgf`-Anleitung). Man könnte beispielsweise ganz ohne `pgfmath` hier auf die eingebauten Möglichkeiten von LaTeX zurückgreifen: \documentclass[border=3mm]{standalone} \usepackage{tikz} \usetikzlibrary{shapes.geometric} % Namen reservieren: \newcommand*\Flaggenfaktor{0} \newcommand*\Flaggenhoehe{\Flaggenfaktor\dimexpr 3em\relax} \newcommand*\Flaggenbreite{\Flaggenfaktor\dimexpr 5em\relax} \usepackage{mwe} \begin{document} \begin{tikzpicture}[] \renewcommand*\Flaggenfaktor{2.75} \node[draw, ultra thick, help lines, regular polygon, regular polygon sides=16, minimum size=0.4\textwidth] (brd) { \includegraphics[width=\Flaggenbreite, height=\Flaggenhoehe]{example-image}}; \node[font=\Huge\bfseries\sffamily, text=white] at (brd.center) {}; \renewcommand\Flaggenfaktor{0.75} \foreach[count=\n] \Bundesland in {BB, BE, BW, BY, HB, HE, HH, MV, NI, NW, RP, SH, SL, SN, ST, TH}{ \node[] at (brd.side \n) {\includegraphics[width=\Flaggenbreite, height=\Flaggenhoehe]{example-image}}; } \end{tikzpicture} \end{document} Hier werden die Berechnungen in `\Flaggenhoehe` und `\Flaggenbreite` erst bei der Expansion der beiden Makros ausgeführt. Damit wirken sich Änderungen in `\Flaggenfaktor` unmittelbar aus. Wer stattdessen auf die Idee kommt, `\pgfmathparse` oder `\pgfmathqparse` in der Definition von `\Flaggenbreite` oder `\Flaggenhoehe` zu verwenden, wird Schiffbruch erleiden. Das liegt daran, dass die optionalen Argumente `width` und `height` von `\includegraphics` direkt zu einer Länge (oder einem Ausdruck, der unmittelbar als Länge interpretierbar ist) expandieren müssen. Das ist bei `\pgfmathparse` und `\pgfmathqparse` nicht der Fall, da die beiden Anweisungen u. a. mit einer Gruppe arbeiten.arbeiten. Ist man auf Berechnungen mit `\pgfmathparse`, wie sie auch `\pgfmathsetmacro` verwendet, angewiesen, so kann man sich aber natürlich eine eigene Anweisung zum Einlesen der Flaggen definieren: \documentclass[border=3mm]{standalone} \usepackage{tikz} \usetikzlibrary{shapes.geometric} % Namen reservieren: \pgfmathsetmacro{\Flaggenfaktor}{0} \pgfmathsetmacro{\Flaggenhoehe}{3} \pgfmathsetmacro{\Flaggenbreite}{5} % Befehl zum Einlesen der Flaggen: \newcommand*{\includeFlagge}[2][]{% \begingroup \pgfmathsetmacro{\FlaggenBreite}{\Flaggenfaktor*\Flaggenbreite}% \pgfmathsetmacro{\FlaggenHoehe}{\Flaggenfaktor*\Flaggenhoehe}% \includegraphics[width=\FlaggenBreite em,height=\FlaggenHoehe em,#1]{#2}% \endgroup } \usepackage{mwe} \begin{document} \begin{tikzpicture}[] \pgfmathsetmacro{\Flaggenfaktor}{2.75} \node[draw, ultra thick, help lines, regular polygon, regular polygon sides=16, minimum size=0.4\textwidth] (brd) { \includeFlagge{example-image}}; \node[font=\Huge\bfseries\sffamily, text=white] at (brd.center) {}; \pgfmathsetmacro{\Flaggenfaktor}{0.75} \foreach[count=\n] \Bundesland in {BB, BE, BW, BY, HB, HE, HH, MV, NI, NW, RP, SH, SL, SN, ST, TH}{ \node[] at (brd.side \n) {\includeFlagge{example-image}}; } \end{tikzpicture} \end{document} Die Anweisung `\includeFlagge` reicht dabei ihr optionales Argument an `\includegraphics` weiter, so dass man dieselben optionalen Argumente verwenden kann, die auch bei `\includegraphics` möglich sind.
Klicke auf Einblenden/Ausblenden von Überarbeitungen 2
Unverständlichen letzten Absatz korrigiert

16 Dez '18, 13:19

gast3's gravatar image

gast3
(ausgesetzt)

`\pgfmathsetmacro` ist in diesem Fall nicht so gut geeignet, weil es die Berechnung unmittelbar ausführt und das Ergebnis dann dem Makro zuweist (siehe dazu auch die Dokumentation in Abschnitt 89.1 der `pgf`-Anleitung). Man könnte beispielsweise ganz ohne `pgfmath` hier auf die eingebauten Möglichkeiten von LaTeX zurückgreifen: \documentclass[border=3mm]{standalone} \usepackage{tikz} \usetikzlibrary{shapes.geometric} % Namen reservieren: \newcommand*\Flaggenfaktor{0} \newcommand*\Flaggenhoehe{\Flaggenfaktor\dimexpr 3em\relax} \newcommand*\Flaggenbreite{\Flaggenfaktor\dimexpr 5em\relax} \usepackage{mwe} \begin{document} \begin{tikzpicture}[] \renewcommand*\Flaggenfaktor{2.75} \node[draw, ultra thick, help lines, regular polygon, regular polygon sides=16, minimum size=0.4\textwidth] (brd) { \includegraphics[width=\Flaggenbreite, height=\Flaggenhoehe]{example-image}}; \node[font=\Huge\bfseries\sffamily, text=white] at (brd.center) {}; \renewcommand\Flaggenfaktor{0.75} \foreach[count=\n] \Bundesland in {BB, BE, BW, BY, HB, HE, HH, MV, NI, NW, RP, SH, SL, SN, ST, TH}{ \node[] at (brd.side \n) {\includegraphics[width=\Flaggenbreite, height=\Flaggenhoehe]{example-image}}; } \end{tikzpicture} \end{document} Hier werden die Berechnungen in `\Flaggenhoehe` und `\Flaggenbreite` erst bei der Expansion der beiden Makros ausgeführt. Damit wirken sich Änderungen in `\Flaggenfaktor` unmittelbar aus. Wer stattdessen auf die Idee kommt, `\pgfmathparse` oder `\pgfmathqparse` in der Definition von `\Flaggenbreite` oder `\Flaggenhoehe` zu verwenden, wird Schiffbruch erleiden. Das liegt daran, dass die optionalen Argumente von `\includegraphics` vollständig expandierbar sein müssen und zu die Argumente von `width` und `height` von `\includegraphics` direkt zu einer Länge (oder einem Ausdruck, der unmittelbar als Länge interpretierbar ist) expandieren müssen. Das ist bei `\pgfmathparse` und `\pgfmathqparse` nicht der Fall, da die beiden Anweisungen u. a. u. a. mit einer Gruppe arbeiten.
Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

16 Dez '18, 10:11

gast3's gravatar image

gast3
(ausgesetzt)