Diese Frage ist inspiriert vonJakes AntwortZudiese Frage. Das Problem wird durch dieses MWE veranschaulicht:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\def\ri{1.0cm} % define inner diameter
\def\ro{2.0cm} % define outer diameter
\begin{tikzpicture}
\pgfmathsetmacro{\dr}{\ro-\ri} % compute width
\pgfmathsetmacro{\rm}{(\ri+\ro)/2} % compute mean diameter
\draw[red,line width=\dr] (0:\ro) arc (0:360:\ro);
\draw[black] (0,0) circle (\ro) circle (\ri);
\end{tikzpicture}
\end{document}
Dies erzeugt die folgende Ausgabe:
Aber das ist nicht das, was ich will, nämlich dass der rote Streifen zwischen den beiden schwarzen Kreisen sein soll. Ich hatte erwartet, dass ich das erreichen könnte, indem ich den ersten \draw
Befehl durch
\draw[red,line width=\dr] (0:\rm) arc (0:360:\rm);
aber dann bekomme ich ein unsinniges Ergebnis, bei dem der rote Streifen viel zu groß ist:
Dies ist nicht überraschend, wenn man die Anmerkungen in Abschnitt 94.1.2 „Überlegungen zu Einheiten“ im pgf-Handbuch (v3.1.2) betrachtet. Was mich überrascht, ist, dass ein einfaches Hinzufügen cm
wie dieses
\draw[red,line width=\dr] (0:\rm cm) arc (0:360:\rm cm);
funktioniert nicht – in dem Sinne, dass sich die Ausgabe nicht ändert. In Jakes Antwort fügt er jedoch hinzu, pt
dass dies zu funktionieren scheint (wie sein Kommentar zeigt Somehow, the [...] units got lost, so we add 'pt' at the end. Not nice...
).
Meine Fragen sind also:
- Warum funktioniert das Hinzufügen
pt
in Jakes Antwort, aber nicht, wenn ich hinzufügecm
? - Ich verstehe Abschnitt 94.1.2 nicht. Es scheint Befehle zu geben, mit denen man prüfen kann, ob Einheiten „deklariert“ sind, aber es scheint keine Befehle zu geben, mit denen man sie einem Ergebnis „wieder hinzufügen“ kann. Was nützt es, nach Einheiten suchen zu können, sie aber nicht „wieder hinzufügen“ zu können?
Antwort1
\pgfmathsetmacro
berechnet eine Länge und gibt das Ergebnis in pt zurück, allerdings ohne die Einheit pt angehängt zu haben - das Makro enthält einfach eine Zahl. Wenn man diese Zahl also sinnvoll nutzen möchte, sollte man das pt wieder anhängen:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\def\ri{1.0cm} % define inner diameter
\def\ro{2.0cm} % define outer diameter
\begin{tikzpicture}
\pgfmathsetmacro{\dr}{\ro-\ri} % compute width
\pgfmathsetmacro{\rm}{(\ri+\ro)/2} % compute mean diameter
\show\rm %<--- shows > \rm=macro: ->42.67912.
\draw[red,line width=\dr] (0:\rm pt) arc (0:360:\rm pt);
\draw[black] (0,0) circle (\ro) circle (\ri);
\end{tikzpicture}
\end{document}
Stattdessen \pdfmathsetmacro
können Sie verwenden\pgfmathsetlengthmacro
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\def\ri{1.0cm} % define inner diameter
\def\ro{2.0cm} % define outer diameter
\begin{tikzpicture}
\pgfmathsetlengthmacro{\dr}{\ro-\ri} % compute width
\pgfmathsetlengthmacro{\rm}{(\ri+\ro)/2} % compute mean diameter
\show\rm % > \rm=macro: ->42.67912pt.
\draw[red,line width=\dr] (0:\rm) arc (0:360:\rm);
\draw[black] (0,0) circle (\ro) circle (\ri);
\end{tikzpicture}
\end{document}
Antwort2
Ganz einfach: Dividieren oder multiplizieren mit 1cm
. Auf diese Weise können Sie mit beliebigen Einheiten arbeiten, z. B. cm. (Ich empfehle \rm
jedoch nicht, für einen Makronamen zu verwenden.)
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\def\ri{1.0cm} % define inner diameter
\def\ro{2.0cm} % define outer diameter
\begin{tikzpicture}
\pgfmathsetmacro{\dr}{\ro-\ri} % compute width
\pgfmathsetmacro{\rm}{(\ri+\ro)/2cm} % compute mean diameter
\typeout{\rm}
\draw[red,line width=\dr] (0:\rm*1cm) arc (0:360:\rm*1cm);
\draw[black] (0,0) circle (\ro) circle (\ri);
\end{tikzpicture}
\end{document}