使用坐标系设置节点的大小

使用坐标系设置节点的大小

为什么不可能(或:如何可能)设置size相对于坐标系的minimum widthnode。ID 想要输入minimum width=2并获取当前坐标系中宽度为两个步骤的节点。但如果它获取的值没有维度,则该选项将被忽略。

我可以使用fit图书馆来解决这个问题,但这会导致很多额外的问题coordinates并且不方便……

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{fit}

\begin{document}
\begin{tikzpicture}[thick,x=1.765cm,y=0.567cm]
   \draw [help lines] (0,0) grid (6,4);
   \draw [help lines,orange,xstep=1.765cm,ystep=0.567cm] (0,0) grid (6,4);
   \node at (1,1) [draw=red, anchor=south west, minimum width=4,
      minimum height=2] {};
   % inconvient way
   \path (1,1) coordinate (LL) ++(4,2) coordinate (UR);
   \node [draw=blue, fit=(LL) (UR), inner sep=0pt] {};
\end{tikzpicture}
\end{document}

结果

我希望找到一种简单快捷的方法,让红色节点和蓝色节点一样大。即使特别的像上面这样的坐标系

答案1

这是不可能的,也不符合 TikZ 的精神。节点通常用于包含文本,如果您阅读 pgfmanual,您会发现一些值证实了我所写的内容:inner sep 最初为 .3333em。更改单位时,节点的尺寸无法转换(除非使用节点的变换形状或比例),因为节点的尺寸通常由内部的文本决定。有一些解决方法,例如 fit 库或 percusse 的答案,但我认为这些解决方案非常广泛。

一个潜在可能

\documentclass{article}
\usepackage{tikz}

\begin{document} 
  \def\ux{1.765cm}\def\uy{0.567cm} 
\begin{tikzpicture}[thick,
                    x=\ux,
                    y=\uy]
   \draw [help lines] (0,0) grid (6,4);
   \draw [help lines,orange,xstep=\ux,
                            ystep=\uy] (0,0) grid (6,4);
   \node at (1,1) [draw=red, 
                   anchor=south west, 
                   minimum width = 4*\ux,
                   minimum height= 2*\uy] {};
\end{tikzpicture}
\end{document}  

答案2

您可以在fit机制中使用裸坐标:它们不必是协调坐标。唯一的问题是,如果您想相对于位置指定它们,at那么您必须使用语法\path (1,1) node [fit = ...而不是\node at (1,1) [fit = ...。这是因为at坐标在中被忽略,并且因为坐标是在不同时间处理的,因此在解析fit时不可用。fit

这是使用此机制的示例:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fit}

\begin{document}
\begin{tikzpicture}[thick,x=1.765cm,y=0.567cm]
   \draw [help lines] (0,0) grid (6,4);
   \draw [help lines,orange,xstep=1.765cm,ystep=0.567cm] (0,0) grid (6,4);
   \path (1,1) node [draw=red, anchor=south west, fit={+(0,0) +(4,2)}] {};
   \fill (1,1) circle[radius=2pt] +(4,2) circle[radius=2pt];
\end{tikzpicture}
\end{document}

为了获得紧密贴合,设置inner set0ptfill表示使用的坐标是预期的坐标。

结果:

与原始坐标相符

答案3

您可以通过确定缩放后的图纸的范围并应用一般变换来实现这一点,但根据手册,minimum height/width需要尺寸。如果这不是问题,那么可以使用 TikZ 版本cm或详细 PGF 选项来实现\pgftransformcm 这一点。但是,节点选项仍然以绝对值测量,因此声明后单位不会缩放。要将它们转换为新的坐标系,您必须使用键transform shape。但这也会缩放文本大小,因此如此简单的操作没有免费的午餐。

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[cm={1.765,0,0,0.567,(0,0)}]
\draw [help lines,orange] (0,0) grid (6,4);
\node at (1,1) [draw=red, anchor=south west, minimum width=4cm,minimum height=2cm,transform shape] {};
\end{tikzpicture}
\end{document}

以下是另一个具有范围和 PGF 版本转换的示例

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\pgftransformcm{1.765}{0}{0}{0.567}{\pgfpointorigin}
\draw [help lines,thick,red] (0,0) grid (6,4);
\node at (1,1) [draw=yellow, anchor=south west, minimum width=4cm,minimum height=2cm,transform shape] {};
\end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容