根据样式参数计算最小宽度

根据样式参数计算最小宽度

我已成功定义了一个“块”,可以将其实例化为各种大小,并在其侧面添加注释。但是,我想将设置minimum widthsqrt(#2),同时将标签保留为#2。不知何故,\pgfmathresult始终为 0.4,结果宽度太小(块变成垂直线):

\documentclass[tikz,border=10pt]{standalone}
\begin{document}
\begin{tikzpicture}[
  block/.code args={#1/#2}{
    \pgfmathparse{#2}
    \pgfkeysalso{/tikz/.cd,
      draw,
      inner sep=0pt, % make failing minimum width more obvious
      minimum height=#1,minimum width=\pgfmathresult, % minimum width=#2 works, but is too wide
      label={[rotate=90,anchor=south]west:#1},
      label={90:#2}}}
]

\node[block=36/1024] {};

\end{tikzpicture}
\end{document}

我怎样才能计算minimum widthsqrt(#2)以 pt 为单位)?

显然,最小宽度计算与我的问题非常相似,但我还不明白如何将马克的方法应用到我的风格定义中。

答案1

根据经验,您应该\pgfmathresult在设置后立即使用:其他 PGF 例程可能会使用相同的功能。事实上,在 的末尾tikzpicture, 的值\pgfmathresult是 0.4,无论您做了什么设置。使用特定的宏:

\documentclass[tikz,border=10pt]{standalone}

\begin{document}

\begin{tikzpicture}[
  block/.code args={#1/#2}{
    \pgfmathsetmacro\SQRTTWO{sqrt(#2)}
    \pgfkeysalso{/tikz/.cd,
      draw,
      inner sep=0pt, % make failing minimum width more obvious
      minimum height=#1,
      minimum width=\SQRTTWO, % minimum width=#2 works, but is too wide
      label={[rotate=90,anchor=south]west:#1},
      label={90:#2},
    },
  }
]
\node[block=36/1024] {};                    
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容