тикз и рисование узлов
Я хотел бы расширить этот пример «узлов», добавив еще 6 узлов, но я не видел логики, лежащей в основе этого образца кода. Я не мог понять отношения (a), (b) и (c) и то, как они на самом деле используются. Может кто-то объяснить это мне? Вот выходная ссылка:https://texample.net/tikz/examples/nav1d/
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\pagestyle{empty}
%
\tikzstyle{int}=[draw, fill=blue!20, minimum size=2em]
\tikzstyle{init} = [pin edge={to-,thin,black}]
\begin{tikzpicture}[node distance=2.5cm,auto,>=latex']
\node [int, pin={[init]above:$v_0$}] (a) {$\frac{1}{s}$};
\node (b) [left of=a,node distance=2cm, coordinate] {a};
\node [int, pin={[init]above:$p_0$}] (c) [right of=a] {$\frac{1}{s}$};
\node [coordinate] (end) [right of=c, node distance=2cm]{};
\path[->] (b) edge node {$a$} (a);
\path[->] (a) edge node {$v$} (c);
\draw[->] (c) edge node {$p$} (end) ;
\end{tikzpicture}
\end{document}
Ответы
- ваш вопрос не совсем понятен ...
- используемый пример довольно старый, следовательно, он использует устаревший синтаксис (
tikzstyleвместоtikzsetи т. д.) - предполагая, что все узлы находятся в цепочке, имеют одинаковый размер и содержимое, чем вы можете нарисовать их с помощью
chainsбиблиотеки, для меток края используйтеquotesбиблиотеку и определяя стиль для каждого края и вывода:
\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{arrows.meta,
chains,
positioning,
quotes}
\begin{document}
\begin{tikzpicture}[
node distance = 12mm,
start chain = going right,
int/.style = {draw, fill=blue!20, minimum size=2em, font=\large,
on chain},
every edge/.style = {draw, -Latex},
every edge quotes/.style = {auto, font=\footnotesize, text depth=0.25ex},
every pin/.style = {pin edge={Latex-,thin,black}, font=\footnotesize}
]
% nodes vith pin above
\coordinate[on chain] (in);
\node (a) [int, pin=$v_0$] {$\frac{1}{s}$};
\node (b) [int, pin=$p_0$] {$\frac{1}{s}$};
\node (c) [int, pin=$p_1$] {$\frac{1}{s}$};
\node (d) [int, pin=$p_2$] {$\frac{1}{s}$};
\node (e) [int, pin=$p_3$] {$\frac{1}{s}$};
\coordinate[on chain] (out);
% connection between nodes
\draw (in) edge ["$a$"] (a)
(a) edge ["$v$"] (b)
(b) edge ["$p$"] (c)
(c) edge ["$p_1$"] (d)
(d) edge ["$p_2$"] (e)
(e) edge ["$p_3$"] (out) ;
\end{tikzpicture}
\end{document}
Если вы хотите, чтобы в цепочке было больше узлов, просто добавьте их к уже существующим. Если вам не нужны условия запуска, просто введите pinих.
Изменить: пример, который вы предоставляете, состоит из двух частей:
- Определения стилей (там, где используется устаревший синтаксис, сегодня его следует записать как:
\tikzset{
int/.style = {draw, fill=blue!20, minimum size=2em},
init/.style = {pin edge={to-,thin,black}}
}
или как варианты tikzpicture:
\begin{tikzpicture}[node distance=2.5cm,auto,>=latex',
int/.style = {draw, fill=blue!20, minimum size=2em},
init/.style = {pin edge={to-,thin,black}}
]
- Тело изображения, в котором вы рисуете то, что хотите видеть на изображении. Это можно сделать разными способами. Например,
- с использованием абсолютного позиционирования од узлов:
\node (<name>) [<style>] at (<x coordinate>,<y coordinate>) {<node content>};
- с использованием относительного позиционирования од узлов:
\node (<name 1>) [<style 1>] at (<x coordinate>,<y coordinate>) {<node content>};
\node (<name 2>) [<style 2>, above right=of <name 1>] {<node content>};
где <node 2>будет располагаться выше и слева от узла <node 2>для объявленного расстояния до узла в tikzsetили как вариант, как это сделано в показанном выше примере.
- линии, которые можно нарисовать как
\draw[<option>] (<coordinate 1>) -- (<coordinate 2>);
где <option>вы можете использовать, например, initкак это сделано в показанном MWE (минимальный рабочий пример) в вашем вопросе, а для координат используйте имена узлов.
или используйте более продвинутый подход, как в моем ответе.
- для других опций вам необходимо более подробно ознакомиться с пакетом TikZ и их библиотеками. Руководство является частью вашей установки LaTeX, или вы можете найти его на CTAN (используйте google для tikz.sty ).
- Manula огромна, поэтому для начала прочтите часть I «Учебники и рекомендации», а затем часть III: TikZ ist kein Zeichenprogramm .
- Если вы застрянете на каком-нибудь изображении, обратитесь за конкретной помощью. При этом, пожалуйста, предоставьте MWE, который воспроизводит вашу проблему, чтобы люди могли легче вам помочь (подготовка MWE, пример в моем ответе, много раз поможет вам найти решение или самостоятельно обнаружить ошибку в коде)
- Сайт не предназначен для предоставления общих рекомендаций по использованию
tikzпакета.
Полное объяснение ниже -
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary {arrows.meta,graphs,shapes.misc}
\usetikzlibrary{arrows}
\begin{document}
\pagestyle{empty}
%no headers and footers just a blank page
\tikzstyle{int}=[draw, fill=blue!20, minimum size=2em]
%macro for (draw)ing square, (fill) inside color blue, default size 2em
\tikzstyle{init} = [pin edge={to-,thin,black}]
%macro for arrows/ edges
\begin{tikzpicture}[node distance=2.5cm,auto,>=latex']
%separation between nodes 2.5cm, type of arrows defined with >=latex
\node [int, pin={[init]above:$v_0$}] (a) {$\frac{1}{s}$};
%call the int macro for square named (a), and the init macro for the arrow
pointing (to-a), label above the arrow is v_0, and text inside the named node
is {$\frac{1}{s}$}
\node (b) [left of=a,node distance=2cm, coordinate] {a};
%node named (b) placed left of node named (a), tec=xt inside the node is {a}
\node [int, pin={[init]above:$p_0$}] (c) [right of=a] {$\frac{1}{s}$};
%same as first node named (a)
\node [coordinate] (end) [right of=c, node distance=2cm]{};
%same as node named (end) after node named (c)
\path[->] (b) edge node {$a$} (a);
%draw an arrow from node b to node a, label above the arrow {$a$}
\path[->] (a) edge node {$v$} (c);
%same as arrow above
\draw[->] (c) edge node {$p$} (end) ;
%same as arrow above
\end{tikzpicture}
\end{document}