为什么不可能(或:如何可能)设置size
相对于坐标系的minimum width
等node
。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 set
为0pt
。fill
表示使用的坐标是预期的坐标。
结果:
答案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}