我正在使用 TikZ,如果满足条件,我想绘制从一个节点到另一个节点的路径。这是我的代码:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\begin{document}
\def\hsep{5cm}
\def\ilsize{6}
\def\hlsize{6}
\begin{figure}
\centering
\begin{tikzpicture}
\tikzstyle{neuron}=[circle, draw]
\tikzstyle{input neuron}=[neuron]
\tikzstyle{hidden neuron}=[neuron]
\foreach \name / \y in {1,...,\ilsize}
\node[input neuron] (In-\name) at (0.0cm,-\y cm) {};
\foreach \name / \y in {1,...,\hlsize}
\node[hidden neuron] (H0-\name) at (1.5cm+\hsep,-\y cm) {};
\def\array{{1,0,1,1,1,1}}
\foreach \i in {1,...,\ilsize}
\foreach \j in {1,...,\hlsize}
{
%\ifnum\array[\i]=1
\path (In-\i) edge (H0-\j);
%\fi
}
\end{tikzpicture}
\end{figure}
\end{document}
输出结果如下:
但是,如果我使用 if 条件,文档将无法编译
\ifnum\array[\i]=1
\path (In-\i) edge (H0-\j);
\fi
有人看到我在这里做错了什么吗?
答案1
错误原因是数组不包含整数但ifnum
需要一个整数。
您可以使用pgfmathparse
来解析语句中的数组和pgfmathresult
条目ifnum
。您还需要使用i-1
,否则最后一个数组索引将超出范围,因为数组的索引以 开头0
。
\def\array{{1,0,1,1,1,1}}
\foreach \i in {1,...,\ilsize}
\foreach \j in {1,...,\hlsize}
{
\pgfmathparse{\array[\i-1]}
\ifnum\pgfmathresult=1
\path (In-\i) edge (H0-\j);
\fi
}
由于i
是一个简单的增量计数器,您也可以使用命令count
的选项foreach
,直接在语句中写入数组foreach
。您也不会遇到数组索引的任何问题,并且的最大数量i
将由数组的长度而不是决定ilsize
。
%\def\array{{1,0,1,1,1,1}}
\foreach [count = \i] \a in {1,0,1,1,1,1}
\foreach \j in {1,...,\hlsize}
{
\ifnum\a=1
\path (In-\i) edge (H0-\j);
\fi
}
两种解决方案都产生相同的结果: