在 tikz 中将分支嵌套在链中

在 tikz 中将分支嵌套在链中

我正在尝试制作一张展示 Cocke-Younger-Kasami 的图片。我为此使用了 tikz,并且已经找到了如何在表格单元格之间添加箭头的方法。现在我遇到了以下问题:我需要多次分支,但不知道该怎么做。我已经浏览了手册,但没有找到任何东西。希望您能帮助我。

这是我的代码:

\documentclass[a4paper]{scrartcl}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{matrix,chains,scopes,arrows}
\begin{document}
\begin{tikzpicture}[every on chain/.style={join={by <-}}]
    \matrix[matrix of math nodes,column sep=2em,row sep=0.3em] (mx) {
        V_{1,n}                                                \\
        V_{1,n-1} & V_{2,n}                                    \\
        \vdots    & \vdots  & \vdots                           \\
        V_{1,2}   & V_{2,3} & \ldots  & V_{n-1,n}              \\
        V_{1,1}   & V_{2,2} & \ldots  & V_{n-1,n-1} & V_{n,n}  \\[1ex]
        w_1 & w_2 & \ldots  & w_{n-1} & w_n                    \\
    };
    {[start chain]
        \chainin (mx-1-1);
        {[start branch] \chainin (mx-2-1); \chainin (mx-3-1);}
        {[start branch] \chainin (mx-2-2); \chainin (mx-3-2);}
    }
\end{tikzpicture}
\end{document}

大致预期的行为:

大致预期的行为

答案1

原则上我知道一种方法,但 stragely在循环\chainin中使用时没有定义\foreach。在示例中,我尝试这样做,但没有成功。节点名称解析正确,为了测试这一点,我画了彩色圆圈。

更新日期:2013-03-14,作者:Qrrbrbirlbel

该问题已记录在使用 foreach 绘制带有分支的链.
TikZ' \foreach、链条和scopes图书馆不能很好地协同工作。

虽然可以使用完整版本的scope环境。

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{matrix,chains,scopes,arrows}
\begin{document}
\begin{tikzpicture}[every on chain/.style={join={by <-}}]
    \matrix[
      matrix of math nodes,
      column sep=2em,
      row sep=1.3em,
      ] (mx) {
        V_{1,n}                                                \\
        V_{1,n-1} & V_{2,n}                                    \\
        \vdots    & \vdots  & \vdots                           \\
        V_{1,2}   & V_{2,3} & \ldots  & V_{n-1,n}              \\
        V_{1,1}   & V_{2,2} & \ldots  & V_{n-1,n-1} & V_{n,n}  \\[1ex]
        w_1 & w_2 & \ldots  & w_{n-1} & w_n                    \\
    };
    \foreach \y in {2,...,5}
    {   \foreach \x in {2,...,\y}
        {   \pgfmathtruncatemacro{\lastx}{\x-1}
            \pgfmathtruncatemacro{\lasty}{\y-1}
            \begin{scope}[start chain] \chainin (mx-\lasty-\lastx);
                \begin{scope}[start branch] \chainin (mx-\y-\lastx);\end{scope}
                \begin{scope}[start branch] \chainin (mx-\y-\x);\end{scope}
            \end{scope}
%            \fill[fill=blue,opacity=0.3] (mx-\lasty-\lastx.north) circle (0.2);
%                \fill[fill=red,opacity=0.3] (mx-\y-\lastx.west) circle (0.2);
%                \fill[fill=green,opacity=0.3] (mx-\y-\x.east) circle (0.2);
        }
    }   
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容