在 TikZ 中,如何获取相对于任意维度的维度对象的数值?

在 TikZ 中,如何获取相对于任意维度的维度对象的数值?

TikZ 是否提供了一种获取维度对象相​​对于任意维度的数值的方法?如果是,那太好了。如果没有,您能否帮助我调试以下尝试,以编写一个\stripdim实现上述目标的命令?

\documentclass{standalone}

\ExplSyntaxOn
\NewDocumentCommand{\stripdim}{mm}{ \dim_to_decimal_in_unit:nn{#1}{1#2} }
\ExplSyntaxOff

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}
\edef\num{\stripdim{3cm}{cm}}
\draw node{\num};
\end{tikzpicture}

\end{document}

上面的代码3按预期打印。但是,如果\draw将命令替换为以下内容:

\draw let \n1=\num in node{\n1};

编译失败,在日志中发现如下信息:

! Illegal unit of measure (pt inserted).
<to be read again> 
)
l.13 \draw let \n1=\num
                      in node{\n1};
? 
! Emergency stop.
<to be read again> 
)
l.13 \draw let \n1=\num
                      in node{\n1};
End of file on the terminal!

答案1

你的 edef 没有扩展任何东西,如果你添加,\show\num你会看到:

> \num=macro:
->\stripdim {3cm}{cm}.
l.14 \show\num
              
? 

使用可扩展命令:

> \num=macro:
->3.
l.14 \show\num
              
?

\documentclass{standalone}

\ExplSyntaxOn
\NewExpandableDocumentCommand{\stripdim}{mm}{\dim_to_decimal_in_unit:nn{#1}{1#2} }
\ExplSyntaxOff

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}
\edef\num{\stripdim{3cm}{cm}}
\show\num
\draw node{\num};
\end{tikzpicture}

\end{document}

相关内容