在 TikZ 中全局配置长度单位

在 TikZ 中全局配置长度单位

考虑以下 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自定义长度。我在以下代码中将默认长度设置为。\unitlen1cm

\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=1cmy=1cm用于没有单位的坐标,不用于长度。
  • 另一个解决方案是向您传递一个参数boxtest即长度,默认值为 1cm。

相关内容