Esta pregunta está inspirada enjake respuestaaesta pregunta. El problema se ilustra con este MWE:
\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}
Esto produce el siguiente resultado:
Pero esto no es lo que quiero, que es que la franja roja esté entre los dos círculos negros. Esperaba poder lograr esto reemplazando el primer \draw
comando por
\draw[red,line width=\dr] (0:\rm) arc (0:360:\rm);
pero luego obtengo un resultado sin sentido en el que la franja roja es demasiado grande:
Esto no es sorprendente dadas las observaciones de la Sección 94.1.2 "Consideraciones relativas a las unidades" del manual pgf (v3.1.2). Lo que si me sorprende es que simplemente añadiendo cm
así
\draw[red,line width=\dr] (0:\rm cm) arc (0:360:\rm cm);
no funciona, en el sentido de que no hay cambios en la salida. Sin embargo, en la respuesta de Jake, agrega pt
lo que parece funcionar (como lo demuestra su comentario Somehow, the [...] units got lost, so we add 'pt' at the end. Not nice...
).
Entonces mis preguntas son:
- ¿Por qué sumar
pt
funciona en la respuesta de Jake pero no cuando agregocm
? - No puedo entender la Sección 94.1.2. Parece haber comandos para verificar si las unidades están "declaradas", pero no parece haber ningún comando para "agregarlas nuevamente" a un resultado. ¿De qué sirve poder comprobar las unidades pero no "volverlas a agregar"?
Respuesta1
\pgfmathsetmacro
calcula una longitud y devuelve el resultado en pt pero sin la unidad pt adjunta: la macro contiene simplemente un número. Entonces, si desea utilizar este número de manera sensata, debe volver a adjuntar el pt:
\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}
En lugar de \pdfmathsetmacro
puedes usar\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}
Respuesta2
Muy sencillo: divide o multiplica por 1cm
. De esa manera puedes trabajar en las unidades que quieras, como cm. (Sin embargo, no recomiendo usarlo \rm
como nombre de macro).
\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}