声明形状时,我通常使用以下方式定义所需的形状宽度:
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}