この質問はジェイクの 答えにこの質問この問題は次の 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}
これにより、次の出力が生成されます。
しかし、これは私が望んでいることではありません。つまり、赤い帯は2つの黒い円の間にあるべきなのです。最初の\draw
コマンド を次のように置き換えることで、これを達成できると予想しました。
\draw[red,line width=\dr] (0:\rm) arc (0:360:\rm);
しかし、赤い帯が大きすぎるという意味不明な結果になります。
これは、pgfマニュアル(v3.1.2)のセクション94.1.2「単位に関する考慮事項」の記述を考慮すると、驚くべきことではありません。私が驚いたのは、単にcm
次のように追加したことです。
\draw[red,line width=\dr] (0:\rm cm) arc (0:360:\rm cm);
出力に変化がないという意味では、動作しません。ただし、Jake の回答では、pt
(コメント で証明されているようにSomehow, the [...] units got lost, so we add 'pt' at the end. Not nice...
) 動作すると思われる が追加されています。
私の質問は次のとおりです:
pt
Jake の回答では追加が機能するのに、私が追加すると機能しないのはなぜですかcm
?- セクション 94.1.2 の意味がわかりません。ユニットが「宣言されている」かどうかを確認するコマンドはあるようですが、結果に「ユニットを戻す」コマンドはないようです。ユニットをチェックできても「ユニットを戻す」ことができないのは、一体どういうことでしょうか。
答え1
\pgfmathsetmacro
長さを計算し、結果を pt で返しますが、単位 pt は付加されません。マクロには単なる数値が含まれます。したがって、この数値を適切な方法で使用したい場合は、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}
\pdfmathsetmacro
代わりに、\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}
答え2
非常に簡単です。 で割るか掛けます1cm
。 こうすることで、cm などの任意の単位で作業できます。 (\rm
ただし、マクロ名に を使用することはお勧めしません。)
\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}