如何将单位“添加”到 \pgfmathsetmacro 的结果中?

如何将单位“添加”到 \pgfmathsetmacro 的结果中?

这个问题的灵感来自于杰克的 回答这个问题。该问题由以下 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...)。

我的问题是:

  1. 为什么pt在 Jake 的回答中添加有效,而我添加时却无效cm
  2. 我无法理解第 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}

在此处输入图片描述

相关内容