
У меня есть следующий код:
\documentclass[tikz]{standalone}
\usetikzlibrary{graphs}
\begin{document}
\tikz \graph[grow right sep=20,nodes={draw,rectangle}] { a -> {b, long node name} };
\end{document}
Что дает следующий результат:
Я хотел бы, чтобы ребро "a" -> "длинное имя узла" шло не с востока на север, а с юга на запад. Возможно ли это, используя только один вызов \graph? Или мне нужно указать это ребро вручную в дополнительной команде?
(То есть у меня в принципе та же проблема, что и в вопросе)Крайний якорь в тикзе, но я хочу использовать возможности рисования графиков TikZ вместо ручного создания ребер.)
решение1
Чтобы получить западный якорь для узла, long node name
вы можете использовать right anchor=west
.
Код
\documentclass[tikz]{standalone}
\usetikzlibrary{graphs}
\begin{document}
\tikz \graph[grow right sep=20,nodes={draw,rectangle},right anchor=west] { a -> {b, long node name} };
\end{document}
Результат
решение2
Я думаю, это то, что вам нужно.
Я никогда не использовал \graph
. Обычный способ, которым я делаю что-то вроде того, о чем вы спросили, — это использовать \node
s и anchor
s, как показано ниже:
\documentclass[tikz]{standalone}
\usetikzlibrary{graphs}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node[draw] (a) {a};
\node[draw,anchor=west] (b) at ($(a)+(1cm,0)$) {b};
\node[draw,anchor=west] (c) at ($(a)+(1cm,-1cm)$) {long node name};
\draw[->] (a) -- (b);
\draw[->] (a.south) -- (c.west);
\end{tikzpicture}
\end{document}
Конечно, вам нужно установить правильное расстояние между узлами; если это не так, наконечник стрелки может пересечь прямоугольник, но нет способа избежать этого, кроме как изменить наконечники стрелок. Кроме того, вы можете использовать изогнутые стрелки.