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, 06:31

cis's gravatar image

cis
9.5k95459491
Akzeptiert-Rate: 29%


\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, 10:11

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 17 Dez '18, 08:29

Ich stimme mit Ijon Tichy überein, dass man da auf LaTeX Mittel zurückgreifen kann. Hier ist noch eine Alternative.

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

\usepackage{mwe} 
\begin{document}
% Namen reservieren: Wozu soll das gut sein?
\pgfmathsetmacro\Flaggenfaktor{0}

\begin{tikzpicture}[declare function={hoehe(\x)=3*\x;
breite(\x)=5*\x;}]
\pgfmathsetmacro\Flaggenfaktor{2.75}
\node[draw, ultra thick, help lines,
regular polygon, regular polygon sides=16, minimum size=0.4\textwidth] (brd) {
\scalebox{\Flaggenfaktor}{\includegraphics[width=5em,height=3em]{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) {\scalebox{\Flaggenfaktor}{\includegraphics[width=5em,height=3em]{example-image}}};
}
\end{tikzpicture}

\end{document}

alt text

Permanenter link

beantwortet 16 Dez '18, 19:10

Community's gravatar image

Community
21
Akzeptiert-Rate: 56%

Aha... declare function mmhh, vielleicht kann man scalebox auch vermeiden; dann ist es mehr pgfmath-mäßig. Muss ich mal testen.

(16 Dez '18, 22:42) cis
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×731
×13

gestellte Frage: 16 Dez '18, 06:31

Frage wurde gesehen: 5,872 Mal

zuletzt geändert: 17 Dez '18, 08:29