考虑以下 MWE:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\tikzset{
x = 1cm,
y = 1cm,
node distance = 2,
auto,
on grid,
test/.style =
{
draw,
circle,
inner sep = 0pt,
semithick,
minimum width = 0.5,
},
box/.style =
{
draw,
rectangle,
minimum width = 1,
minimum height = 1,
inner sep = 0pt,
},
}
\begin{tikzpicture}
\node (node1) at (0,0) [label=right:test, test] {};
\node (node2) [below=of node1, label=right:box, box] {};
\node (node3) [right=of node1, label=right:test, test, minimum width = 0.5cm] {};
\node (node4) [below=of node3, label=right:box, box, minimum width = 1cm, minimum height = 1cm] {};
\end{tikzpicture}
\end{document}
在语句的前两行中tikzset
,我想将测量单位设置为 1cm,因此,根据我的意见,test
节点的宽度应该是 0.5cm(高度也是,因为它是一个圆),box
节点的边长应该是 1cm。但是,如果我们查看上述代码的结果
我们可以清楚地看到:a)节点似乎定位正确,它们之间似乎有 2 厘米的距离,正如预期的那样;b)左边两个节点的大小是错误的 - 我希望左边两个节点与右边两个节点的大小相同,但事实并非如此。
我该如何修改tikzset
代码才能使左边两个节点的大小正确?我不想使用类似
test/.style =
{
draw,
circle,
inner sep = 0pt,
semithick,
minimum width = 0.5cm,
},
因为我希望节点大小与节点距离相关,并且彼此相关。如果我在节点的样式定义中使用绝对宽度和高度,这将相当不灵活,所以我想知道是否可以设置“1 个单位”的长度。
答案1
您可以定义一个样式来设置稍后在绘图中使用的unit length
自定义长度。我在以下代码中将默认长度设置为。\unitlen
1cm
\documentclass[tikz,border=7pt]{standalone}
\usetikzlibrary{positioning}
\newlength\unitlen
\tikzset{
unit length/.code={\setlength{\unitlen}{#1}},
unit length = 1cm,
node distance = 2,
auto,
on grid,
test/.style =
{
draw,
circle,
inner sep = 0pt,
semithick,
minimum width = 0.5\unitlen,
},
box/.style =
{
draw,
rectangle,
minimum width = 1\unitlen,
minimum height = 1\unitlen,
inner sep = 0pt,
},
}
\begin{document}
\begin{tikzpicture}
\node (node1) at (0,0) [label=right:test, test] {};
\node (node2) [below=of node1, label=right:box, box] {};
\begin{scope}[unit length=.5cm]
\node (node3) [right=of node1, label=right:test, test] {};
\node (node4) [below=of node3, label=right:box, box] {};
\end{scope}
\end{tikzpicture}
\end{document}
评论 :
- 和
x=1cm
仅y=1cm
用于没有单位的坐标,不用于长度。 - 另一个解决方案是向您传递一个参数
box
,test
即长度,默认值为 1cm。