
У меня есть следующая тикз-картинка:
\documentclass{book}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node(x1) {$x_1$};
\node(x2) [right of = x1] {$x_2$};
\node(x3) [right of = x2]{$x_3$};
\node(x4) [right of = x3]{$x_4$};
\draw [->] (x1) -- (x2) ;
\draw [->] (x2) -- (x3) ;
\draw [->] (x3) -- (x4) ;
\node(y1) [below of = x1]{$y_1$};
\node(y2) [right of = y1] {$y_2$};
\node(y3) [right of = y2] {$y_3$};
\node(y4) [right of = y3] {$y_4$};
\draw [->] (y1) -- (x1) ;
\draw [->] (y2) -- (x2) ;
\draw [->] (y3) -- (x3) ;
\draw [->] (y4) -- (x4) ;
\end{tikzpicture}
\end{document}
Я хочу, чтобы стрелки были длиннее. Когда я использую "shorten >= -5pt", например, в команде рисования в квадратных скобках, стрелки становятся длиннее, но они проходят над узлами. Есть ли способ сделать все более просторным, в дополнение к удлинению стрелок?
Кроме того, есть ли способ вставить еще один узел слева от одной из вертикальных стрелок? (или, точнее, как мне указать «ниже» или «слева от» и т. д. для стрелки, а не узла?) Я попробовал \draw(arr1), чтобы пометить стрелку, а затем позже поместить узел слева от arr1, но получаю ошибку.
решение1
Вам не следует использовать below of = node
. Он устарел (см.Разница между «right of=» и «right=of» в PGF/TikZ). Вместо этого используйте positioning
библиотеку от tikz. Она позволяет вам писать right = 1.5cm of node
. Вы можете варьировать или не указывать расстояние.
Чтобы обозначить путь, просто добавьте node[left] {label 1}
после --
. Вы можете добавить pos=value
значение от 0 до 1 к параметрам узла, чтобы указать положение на пути.
Пример
(ваш измененный код)
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\node(x1) {$x_1$};
\node(x2) [right = 1.5cm of x1] {$x_2$};
\node(x3) [right = 1.5cm of x2]{$x_3$};
\node(x4) [right = 1.5cm of x3]{$x_4$};
\draw [->] (x1) -- (x2) ;
\draw [->] (x2) -- (x3) ;
\draw [->] (x3) -- (x4) ;
\node(y1) [below = 2 of x1]{$y_1$};
\node(y2) [below = 2 of x2] {$y_2$};
\node(y3) [below = 2 of x3] {$y_3$};
\node(y4) [below = 2 of x4] {$y_4$};
\draw [->] (y1) -- node[left, pos=0.2] {beginning} (x1) ;
\draw [->] (y2) -- node[left, pos=.8] {ending} (x2) ;
\draw [->] (y3) -- node[left] {label 3} (x3) ;
\draw [->] (y4) -- node[left] {label 4} (x4) ;
\end{tikzpicture}
\end{document}
Результаты в:
решение2
Замечания
Вы можете указать расстояние по умолчанию между узлами, которые размещаются с помощью right of=
, left of=
и т.д., используя ключ node distance=<length>
.
Чтобы разместить узел вдоль пути, просто вставьте его после lineto-operation, т.е.
\draw (0,0) -- node {on the path} (4,0);
Если вы хотите, чтобы текст имел наклон в соответствии с вашим контуром, используйте sloped
ключ в качестве опции для узла.
Подробнее о размещении узлов читайте вДокументация TikZв разделе 16.8 на стр. 190. Вас также может заинтересовать Учебное пособие «Сеть Петри для Хагена», в котором исследуются узлы, и которое можно найти в главе 3 на стр. 40.
Выполнение
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[node distance=2.5cm]
\node(x1) {$x_1$};
\node(x2) [right of = x1] {$x_2$};
\node(x3) [right of = x2] {$x_3$};
\node(x4) [right of = x3] {$x_4$};
\draw [->] (x1) -- (x2) ;
\draw [->] (x2) -- (x3) ;
\draw [->] (x3) -- (x4) ;
\node(y1) [below of = x1]{$y_1$};
\node(y2) [right of = y1] {$y_2$};
\node(y3) [right of = y2] {$y_3$};
\node(y4) [right of = y3] {$y_4$};
\draw [->] (y1) -- node[sloped,below] {(y1) $\to$ (x1)} (x1) ;
\draw [->] (y2) -- node[sloped,below] {(y2) $\to$ (x2)} (x2) ;
\draw [->] (y3) -- node[sloped,below] {(y3) $\to$ (x3)} (x3) ;
\draw [->] (y4) -- node[sloped,below] {(y4) $\to$ (x4)} (x4) ;
\end{tikzpicture}
\end{document}