仅当满足条件时才绘制路径

仅当满足条件时才绘制路径

我正在使用 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
        }

两种解决方案都产生相同的结果:

在此处输入图片描述

相关内容