這個問題的靈感來自於傑克的 回答到這個問題。這個 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}
這會產生以下輸出:
但這不是我想要的,即紅色條應該位於兩個黑色圓圈之間。我希望我可以通過將第一個\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);
不起作用 - 從某種意義上說,輸出沒有變化。然而,在傑克的回答中,他補充說pt
這似乎有效(正如他的評論所證明的那樣Somehow, the [...] units got lost, so we add 'pt' at the end. Not nice...
)。
所以我的問題是:
- 為什麼
pt
在傑克的答案中添加有效,但在我添加時無效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
。這樣您就可以使用任何您喜歡的單位,例如公分。 (不過,我不建議使用\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}