如何將單位「加入」到 \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);

不起作用 - 從某種意義上說,輸出沒有變化。然而,在傑克的回答中,他補充說pt這似乎有效(正如他的評論所證明的那樣Somehow, the [...] units got lost, so we add 'pt' at the end. Not nice...)。

所以我的問題是:

  1. 為什麼pt在傑克的答案中添加有效,但在我添加時無效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}

在此輸入影像描述

相關內容