alt text

In folgendem Bsp. brauche ich einmal \pgfmathsetmacro\Flaggenfaktor{0.75} und einmal \pgfmathsetmacro\Flaggenfaktor{2.75}

Gibt es eine Möglichkeit zu vermeiden, dass ich den ganzen Kram

\pgfmathsetmacro\Flaggenfaktor{2.75} \pgfmathsetmacro\Flaggenhoehe{3*\Flaggenfaktor} \pgfmathsetmacro\Flaggenbreite{5*\Flaggenfaktor}

zweimal wiederholen muss?

Ich möchte nur die oberste Zeile angeben müssen.

Öffne in Overleaf
\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\usepackage{mwe} 
\begin{document}
% Namen reservieren:
\pgfmathsetmacro\Flaggenfaktor{0}
\pgfmathsetmacro\Flaggenhoehe{3*\Flaggenfaktor}
\pgfmathsetmacro\Flaggenbreite{5*\Flaggenfaktor}

\begin{tikzpicture}[]
\pgfmathsetmacro\Flaggenfaktor{2.75}
\pgfmathsetmacro\Flaggenhoehe{3*\Flaggenfaktor}
\pgfmathsetmacro\Flaggenbreite{5*\Flaggenfaktor}
\node[draw, ultra thick, help lines,
regular polygon, regular polygon sides=16, minimum size=0.4\textwidth] (brd) {
\includegraphics[width=\Flaggenbreite em, height=\Flaggenhoehe em]{example-image}};
\node[font=\Huge\bfseries\sffamily, text=white] at (brd.center) {};

\pgfmathsetmacro\Flaggenfaktor{0.75}
\pgfmathsetmacro\Flaggenhoehe{3*\Flaggenfaktor}
\pgfmathsetmacro\Flaggenbreite{5*\Flaggenfaktor}
\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 em, height=\Flaggenhoehe em]{example-image}};
}
\end{tikzpicture}

\end{document}

gefragt 16 Dez '18, 00:31

cis's gravatar image

cis
9.3k21204336
Akzeptiert: 62%


\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:

Öffne in Overleaf
\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. 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:

Öffne in Overleaf
\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.

Permanenter link

beantwortet 16 Dez '18, 04:11

Ijon%20Tichy's gravatar image

Ijon Tichy
8.7k31022

bearbeitet 17 Dez '18, 02:29

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×660
×12

Frage gestellt: 16 Dez '18, 00:31

Frage wurde angeschaut: 585 Mal

Zuletzt aktualisiert: 17 Dez '18, 02:29