\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. ptJake의 답변에서는 추가 작업이 수행되지만 추가할 때는 작업이 수행되지 않는 이유는 무엇입니까 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. 이렇게 하면 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}

여기에 이미지 설명을 입력하세요

관련 정보