из pgfmanual:

из pgfmanual:

Я пытаюсь создать диаграмму и хочу, чтобы мои узлы были выровнены по левому краю с помощью опции 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}

введите описание изображения здесь

Связанный контент