Я пытаюсь создать диаграмму и хочу, чтобы мои узлы были выровнены по левому краю с помощью опции anchor=west
. Я бы предпочел использовать относительное позиционирование, чтобы сделать диаграмму более гибкой к изменениям. Вот мой пример:
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[%
every node/.style = {anchor=west}]
\node[fill=red!40, draw] (n0) at (0,0) {Base node} ;
\node[fill=red!40, draw] (n1) at (0,-2) {Node with longer text} ;
\node[fill=red!40, draw] (n2) [below=of n1] {Node with even longer text} ;
\end{tikzpicture}
\end{document}
Обратите внимание, как второй узел использует anchor=west
стиль, установленный для каждого узла, но третий узел с самым длинным текстом, кажется, центрирован ниже второго, а не выровнен по левому краю с ним. Есть ли способ сделать то, что я ищу?
По сути, мне нужно выравнивание второго узла без указания абсолютных координат.
решение1
попробуй это
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[%
every node/.style = {anchor=west}]
\node[fill=red!40, draw] (n0) at (0,0) {Base node} ;
\node[fill=red!40, draw] (n1) at (0,-2) {Node with longer text} ;
\node[fill=red!40, draw] (n2) [below=of n1.west, right] {Node with even longer text} ;
\end{tikzpicture}
\end{document}
из pgfmanual:
16.5.2 Основные параметры размещения
К сожалению, хотя это вполне логично, часто бывает довольно нелогично, что для того, чтобы разместить узел над заданной точкой, нужно указать южный якорь. По этой причине есть несколько полезных опций, которые позволяют выбирать стандартные якоря более интуитивно:
/tikz/above
(по умолчанию 0pt)
Делает то же самое, что и anchor=south. Если указано , узел дополнительно смещается вверх на указанное .
above \tikz \fill (0,0) circle (2pt) node[above] {above};
above \tikz \fill (0,0) circle (2pt) node[above=2pt] {above};
/tikz/below=<offset>
(по умолчанию 0pt) Аналогично предыдущему.
/tikz/left=<offset>
(по умолчанию 0pt) Аналогично предыдущему.
/tikz/right=<offset>
(по умолчанию 0pt) Аналогично предыдущему.
решение2
Неявно below
подразумевает anchor=north
(и при этом below=of n1
ссылка есть n1.south
), left
подразумевает anchor=east
и т. д.
Пример (синий узел показывает, что ссылка по умолчанию не является n1.center
, зеленый узел показывает желаемое позиционирование):
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[every node/.style={anchor=west}]
\node[fill=red!40, draw] (n0) at (0,0) {Base node} ;
\node[fill=red!40, draw] (n1) at (0,-2) {Node with longer text} ;
\node[fill=red!40, draw,below=of n1] (n2) {Node with even longer text} ;
\node[fill=blue!40, draw,below=of n1.center] (n2) {Node with even longer text}
\node[fill=lime!40, draw,below=of n1.south west,anchor=north west]
(n2) {Node with even longer text} ;
\end{tikzpicture}
\end{document}