这个问题的灵感来自于杰克的 回答到这个问题。该问题由以下 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);
不起作用 - 即输出没有变化。然而,在 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
。这样,您就可以使用任何您喜欢的单位,例如厘米。(不过,我不建议将其用作\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}