tikz 键值接口中数字和维度的区别

tikz 键值接口中数字和维度的区别

声明形状时,我通常使用以下方式定义所需的形状宽度:

minimum width = <number> <measure units>

但是,有时我会单独计算形状的宽度。在这种情况下,应该使用

minimum width = <length>

我的问题是:在中,是否可以预设形状参数,以便无论将其指定为数字还是长度,都tikz可以自动分配?minimum width

我希望以下 MWE 能够澄清我的问题。

\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{calc,positioning}

\begin{document}
    \begin{tikzpicture}[node distance=7mm and 0mm,
N/.style 2 args = {name=n#1,
                   minimum width=#2 mm,%<-- how to change this declaration in a wex
                                       %    when #2 contain length, the following
                                       %    units  (mm) are omitted?
                   shape=rectangle, draw},
                        ]
    \node[N={1}{22}]                    {node 1};
\dimendef\nodewidth=0
\pgfmathsetlength{\nodewidth}{22 mm}
%    \node[N={2}{\nodewidth},% <-- this gives expected error!
    \node[N={2}{},minimum width=\nodewidth,% <--- this is little bit inconvenient
          below right=of n1.south west] {node 2};
%-------
    \end{tikzpicture}
\end{document}

#2我想象在预设时应该执行一些测试minimum width,但我不知道如何做到这一点。

答案1

我会用它\ifpgfmathunitsdeclared来测试是否#2有任何单位。

如果有单位,则直接使用结果(pt不包括在内\pgfmathresult)。否则附加mm

代码

\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{positioning}
\newdimen\nodewidth
\begin{document}
\begin{tikzpicture}[node distance=7mm and 0mm,
  N/.style 2 args = {
    name=n#1, draw,
    /utils/exec={%
      \pgfmathparse{#2}\ifpgfmathunitsdeclared
        \pgfkeysalso{/pgf/minimum width/.expanded={\pgfmathresult pt}}%
      \else
        \pgfkeysalso{/pgf/minimum width/.expanded={\pgfmathresult mm}}%
      \fi},
    shape=rectangle
  }]
\node[N={1}{22}] {node 1};

\pgfmathsetlength{\nodewidth}{22 mm}
\node[N={2}{\nodewidth}, below=of n1] {node 2};
\end{tikzpicture}
\end{document}

相关内容