tikz 中的列间距列表

tikz 中的列间距列表

我有以下代码:

\begin{tikzpicture}
  \matrix [draw,column sep={1mm, 4cm},nodes=draw]
  {
    \node(a) {123}; & \node (b) {1};   & \node {1}; \\
    \node    {12};  & \node     {12};  & \node {1}; \\
    \node    {1};   & \node     {123}; & \node {1}; \\
  };
  
\draw [<->,red,thick] (a.center) -- (b.center) node [above,midway] {1cm};

\end{tikzpicture}

在 tikz 手册中,我看到列 sep = {spacing list}

但是当我将距离添加到间距列表时,它似乎不会影响矩阵中列之间的距离。我要做的是按列或行指定矩阵中节点之间的距离。

答案1

我不确定我是否真的了解您想要实现的目标,但也许以下内容可以帮助您:

Z 手册解释说存在选项column sep和,row sep您可以使用它们分别设置矩阵节点之间的列距和行距。

这两个选项都采用所谓的“间距列表”。此间距列表可能只包含一个值(距离),在大多数情况下,这足以设置相关距离。

但是,如果此列表中给出了多个值,并且它们是距离,则所有这些距离将加在一起。此外,此列表的最后一个值可能是between origins或,between borders它将设置各个节点中心之间的距离或边界之间的距离,后者是默认值。

因此,以下内容可以解释如何将多个距离相加添加到选项中:

\documentclass[tikz, border=1cm]{standalone}

\begin{document}
\begin{tikzpicture}
  \matrix [draw, column sep={1cm, 5pt}, row sep={0.5cm}, nodes=draw]
  {
    \node (a) {123}; & \node     {1};   & \node {1}; \\
    \node (c) {12};  & \node     {12};  & \node {1}; \\
    \node     {1};   & \node (b) {123}; & \node {1}; \\
  };

\draw [cyan] (a.north -| b.west) -- (b.north west);

\draw [<->, red, thick] (a.east) -- ++({1cm+5pt},0) node [above, midway, font=\tiny] {1cm + 5pt};

\draw [<->, red, thick] (b.east) -- ++({1cm+5pt},0) node [above, midway, font=\tiny] {1cm + 5pt};

\draw [<->, red, thick] (a.south) -- ++(0,-0.5cm) node [right, midway, font=\tiny] {0.5cm};

\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

正如评论和其他答案所解释的那样,您给出的列表column sep将被添加以获取最后一列 sep。

如果您希望每列都有一个特定的列分隔符,则需要为每列设置一个,或者使用( )column sep的可选参数,该参数的值将添加到默认值中。因此,在不改变的情况下,您可以这样做&\pgfmatrixnextcellcolumn sepcolumn sep=0pt

\matrix[
  draw,
  column sep={between origins},
  nodes=draw] {
    \node(a) {123}; &[1cm] \node (b) {1};   &[4cm] \node {1}; \\
    \node    {12};  &      \node     {12};  &      \node {1}; \\
    \node    {1};   &      \node     {123}; &      \node {1}; \\
  };

但我相信像下面这样使用的键column separations bo更有用(bo= 起源之间)。可以为between borders和行定义类似的键。

的额外分组##1确保您可以使用{min(1cm,width("Test"))},5cm}作为参数,并且,函数的min不会影响内部工作。但是,您不能对每列使用另一个“间距列表”,但您可以使用+而不是,将多个值相加。

代码

\documentclass[tikz]{standalone}
\tikzset{
  column separations bo/.style={
    /utils/exec=\def\pgfmathcounter{0},
    /utils/temp/.style={
      /utils/exec=\edef\pgfmathcounter{\pgfinteval{\pgfmathcounter+1}},
      /tikz/column \pgfmathcounter/.append style={column sep={{##1},between origins}}},
    /utils/temp/.list={#1}}}
\begin{document}
\begin{tikzpicture}
\matrix[
  draw,
  column separations bo={1cm,4cm},
  nodes=draw] {
    \node(a) {123}; & \node (b) {1};   & \node {1}; \\
    \node    {12};  & \node     {12};  & \node {1}; \\
    \node    {1};   & \node     {123}; & \node {1}; \\
  };
\path [<->,red,thick,above] (a.center) edge node {1cm} ++(right:1cm)
                            (b.center) edge node {4cm} ++(right:4cm);
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容