Esta pergunta é inspirada emJake responderparaessa questão. O problema é ilustrado por 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}
Isso produz a seguinte saída:
Mas não é isso que eu quero, que a faixa vermelha fique entre os dois círculos pretos. Eu esperava conseguir isso substituindo o primeiro \draw
comando por
\draw[red,line width=\dr] (0:\rm) arc (0:360:\rm);
mas então obtenho um resultado sem sentido em que a faixa vermelha é muito grande:
Isto não é surpreendente, dadas as observações na Seção 94.1.2 "Considerações sobre unidades" no manual pgf (v3.1.2). O que me surpreende é que simplesmente adicionando cm
assim
\draw[red,line width=\dr] (0:\rm cm) arc (0:360:\rm cm);
não funciona - no sentido de que não há alteração na saída. No entanto, na resposta de Jake, ele acrescenta pt
o que parece funcionar (como testemunhado por seu comentário Somehow, the [...] units got lost, so we add 'pt' at the end. Not nice...
).
Então minhas perguntas são:
- Por que adicionar
pt
funciona na resposta de Jake, mas não quando eu adicionocm
? - Não consigo entender a Seção 94.1.2. Parece haver comandos para verificar se as unidades estão "declaradas", mas não parece haver nenhum comando para "adicioná-las de volta" a um resultado. De que adianta poder verificar unidades, mas não "adicioná-las de volta"?
Responder1
\pgfmathsetmacro
calcula um comprimento e retorna o resultado em pt, mas sem a unidade pt anexada - a macro contém simplesmente um número. Então, se você quiser usar esse número de maneira sensata, você deve reanexar o 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}
Em vez de \pdfmathsetmacro
você pode 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}
Responder2
Muito simples: divida ou multiplique por 1cm
. Dessa forma você pode trabalhar em qualquer unidade que desejar, como cm. (No entanto, não recomendo usar \rm
um nome 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}