我正在尝试制作一张展示 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}