Я изменил решение, данноеcfrв этом постеСхема пути с использованием Tikz.
Мой код выглядит так:
\documentclass[tikz]{standalone}
\usetikzlibrary{arrows.meta,calc,positioning}
\begin{document}
\begin{tikzpicture}
[
rect/.style={draw, text centered},
>={Stealth[]}
]
\node (input) {Input};
\node [rect, right=of input] (gen) {Generator};
\node [above right=of gen] (C1) {$Candidate_1$};
\node [below right=of gen] (Cn) {$Candidate_n$};
\node [rect, below right=of C1] (eval) {Evaluator};
\node [right=of eval] (output) {Optimal Output};
\foreach \i [count=\ino] in {Candidate_2,Candidate\ldots}
{
\node at ($(C1)!\ino/3!(Cn)$) (\i) {$\i$};
\draw [->] (gen) -- (\i);
\draw [->] (\i) -- (eval);
}
\foreach \i/\j in {input/gen,gen/C1,gen/Cn,C1/eval,Cn/eval,eval/output} \draw [->] (\i) -- (\j);
\end{tikzpicture}
\end{document}
Проблема в этой строке
\foreach \i [count=\ino] in {Candidate_2,Candidate\ldots}
которые приводят к сбою компиляции с ошибкой:
! Missing \endcsname inserted.
<to be read again>
\protect
l.20 }
так как я не могу найти решение для точек в этой среде.
По сути, я хочу показать, что у вас может быть несколько «Кандидатов» от 1, 2, ..., до n. Но как мне сделать так, чтобы там был «Кандидат...»?
решение1
Для обозначения координат нельзя использовать нерасширяемые токены; можно использовать счетчик \ino
(соответствующим образом оформленный, чтобы избежать путаницы с другими координатами).
Я также исправил форматирование с помощью \mathrm
.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,calc,positioning}
\begin{document}
\begin{tikzpicture}[
rect/.style={draw, text centered},
>={Stealth[]},
]
\node (input) {Input};
\node [rect, right=of input] (gen) {Generator};
\node [above right=of gen] (C1) {$\mathrm{Candidate}_1$};
\node [below right=of gen] (Cn) {$\mathrm{Candidate}_n$};
\node [rect, below right=of C1] (eval) {Evaluator};
\node [right=of eval] (output) {Optimal Output};
\foreach \i [count=\ino] in {\mathrm{Candidate}_2,\mathrm{Candidate}\ldots}
{
\node at ($(C1)!\ino/3!(Cn)$) (c\ino) {$\i$};
\draw [->] (gen) -- (c\ino);
\draw [->] (c\ino) -- (eval);
}
\foreach \i/\j in {input/gen,gen/C1,gen/Cn,C1/eval,Cn/eval,eval/output} \draw [->] (\i) -- (\j);
\end{tikzpicture}
\end{document}
решение2
Я предлагаю вам альтернативное решение с tikz matrix
.
Я использовал \vdots
вместо этого, Canditate...
потому что мне кажется, что это чище.
\documentclass[tikz]{standalone}
\usetikzlibrary{arrows.meta,calc,positioning, matrix}
\begin{document}
\begin{tikzpicture}
[
rect/.style={draw, text centered},
>={Stealth[]}
]
\matrix[%
matrix of nodes,
nodes={inner sep=4pt},
inner sep=0pt,
column sep=30pt,
row sep= 10pt,
] (C) {%
& & $\mathrm{Candidate}_{1}$ \\
& & $\mathrm{Candidate}_{2}$ \\[-15pt]
Input & |[rect]| Generator & & |[rect]| Evaluator & Optimal Output \\[-15pt]
& & $\vdots$ \\
& & $\mathrm{Candidate}_{n}$ \\
};
\foreach \i in {1,2,5}
{%
\draw [->] (C-3-2) -- (C-\i-3);
\draw [->] (C-\i-3) -- (C-3-4);
}
\draw [->] (C-3-1) -- (C-3-2);
\draw [->] (C-3-4) -- (C-3-5);
\end{tikzpicture}
\end{document}
PS = Если вы абсолютно уверены \mathrm{Candidate}\ldots
, просто замените его на \vdots
и добавьте 4,
к \foreach
: \foreach \i in {1,2,4,5}
.