2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Позиционирование узлов в tikz
Сообщение24.05.2011, 20:00 
Пытаюсь сделать древовидную диаграмму, но один узел залезает на другой. Я убирал прямую ссылку на расстояние при позиционировании: below=\len of, но он все равно не работает. Никто не знает, как автоматически позиционировать node_1_1_0 на 1cm ниже верхнего?

Изображение

Код:
\documentclass{article}
\usepackage[a4paper,landscape]{geometry}
\usepackage[cm]{fullpage}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{tikz}
\usetikzlibrary{shapes}
\usetikzlibrary{arrows,positioning}
\begin{document}

\def\len{1cm}
\begin{tikzpicture}[node distance=\len cm, auto]
\tikzset{
    subnode1/.style={rectangle,rounded corners,draw=black, top color=white, bottom color=yellow!50,very thick, inner sep=1em, minimum size=3em, minimum width=3.5cm, text width=3cm, text centered,sibling distance=8cm,},
    common_node/.style={rectangle,rounded corners,draw=black, minimum size=2em, text width=3cm},
}

   \node[subnode1] (node_1_1) {very very very very very long text text text};
   
   \node[common_node, below=\len of node_1_1.west, anchor=west] (node_1_1_0) {2\_1};

\end{tikzpicture}
\end{document}

 
 
 
 Re: Позиционирование узлов в tikz
Сообщение24.05.2011, 22:09 
Код:
\documentclass{article}
\usepackage[a4paper,landscape]{geometry}
\usepackage[cm]{fullpage}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{tikz}
\usetikzlibrary{shapes}
\usetikzlibrary{arrows,positioning}
\begin{document}

\newlength{\len}
\setlength{\len}{1cm}
\begin{tikzpicture}[node distance=\len, auto]
\tikzset{
    subnode1/.style={rectangle,rounded corners,draw=black, top color=white, bottom color=yellow!50,very thick, inner sep=1em, minimum size=3em, minimum width=3.5cm, text width=3cm, text centered,sibling distance=8cm,},
    common_node/.style={rectangle,rounded corners,draw=black, minimum size=2em, text width=3cm},
}

   \node[subnode1] (node_1_1) {very very very very very long text text text};
   
   \node[common_node, below= of node_1_1] (node_1_1_0) {2\_1};

\end{tikzpicture}
\end{document}

У Вас фигура node_1_1 слишком высокая, и, если центр (west — крайняя левая по горизонтали и средняя по вертикали точка) node_1_1_0 будет на 1 см ниже центра node_1_1, они обязательно пересекутся. Так что лучше задавать расстояние между фигурами, а не между их центрами.

 
 
 
 Re: Позиционирование узлов в tikz
Сообщение25.05.2011, 06:51 
Если нужно выравнивание по левому краю
Код:
\node[subnode1] (node_1_1) {very very very very very long text text text};
\node[common_node, below= of node_1_1.south west, anchor=north west] (node_1_1_0) {2\_1};

А не слишком развесистую древовидную диаграмму можно оформить матрицей
Код:
\matrix [below = of node_1_1_0,  matrix anchor=north, row sep=1cm, column sep = 1cm, anchor=north, right]
{
   \node[subnode1] (node_1_1a) {very very very very very long text text text}; &   \node[subnode1] {long text text text};\\
   \node[common_node] (node_1_1_0a) {2\_1};               &   \node[common_node]  {2\_1};\\
};

 
 
 
 Re: Позиционирование узлов в tikz
Сообщение25.05.2011, 15:08 
Аватара пользователя
Код:
--- tkz-orig.tex   2011-05-25 17:55:39.000000000 +0700
+++ tkz.tex   2011-05-25 17:57:13.000000000 +0700
@@ -17,7 +17,7 @@

    \node[subnode1] (node_1_1) {very very very very very long text text text};
   
-   \node[common_node, below=\len of node_1_1.west, anchor=west] (node_1_1_0) {2\_1};
+   \node[common_node, below=\len of node_1_1.south, anchor=north] (node_1_1_0) {2\_1};

\end{tikzpicture}
\end{document}

 
 
 
 Re: Позиционирование узлов в tikz
Сообщение31.05.2011, 00:36 
Danke, camphene и .Serj. Эту задачу я решил так:

Код:
below=\len of node_1_1.south west, anchor=north west


Но возникла еще одна.

Я сделал программу, которая автоматически генерирует диаграмму, отражающую статус проекта в виде дерева. Но при длинном тексте в задачах по разделам проекта они залезают друг на друга.

Изображение

Код:
\documentclass{article}
\usepackage[a4paper,landscape]{geometry}
\usepackage[cm]{fullpage}
\usepackage[russian]{babel}
\usepackage[utf8]{inputenc}
\usepackage{kpfonts}
\usepackage{berasans}

\usepackage{tikz}
\usetikzlibrary{shapes}
\usetikzlibrary{arrows,positioning}
\begin{document}


   \def\len{1}
\begin{tikzpicture}[node distance=\len*1.4 cm, auto]
\tikzset{
    main_node/.style={ellipse, draw=black, top color=white, bottom color=yellow!50,thick, inner sep=1em, minimum size=3em, text centered, double},
    subnode1/.style={rectangle,rounded corners,top color=white, bottom color=yellow!50,very thick, inner sep=1em, text centered},
    common_node/.style={rectangle,rounded corners, draw, inner sep=1em},
    myarrow/.style={draw},
}
\tikzstyle{every node}=[font=\large]
\colorlet{done}{blue}
\colorlet{need_testing}{red}


\node[main_node] (top) {Как оптимально распределить ветви по пространству листа?};

   \node[subnode1, below=\len*2 cm of top, draw=black,align=left] (node_1_1) {Менять ширину колонки\\ в зависимости от максимальной\\ длины текста в ней.};
   \node[left =\len / 3 of node_1_1] (dummy_1) {};
   
   \node[common_node, below=\len of node_1_1.south west, anchor=north west, draw=black] (node_1_1_0) {Непонятно, как считать эту ширину.};
   \draw[myarrow] (node_1_1.west) -- (dummy_1.east) |-  (node_1_1_0.west);



   \node[subnode1, left = of node_1_1, draw=black,align=left] (node_1_0) {Сделать колонки, задав им\\ фиксированную ширину\\ для каждой ветви};
   \node[left =\len / 3 of node_1_0] (dummy_0) {};
   
   \node[common_node, below=\len of node_1_0.south west, anchor=north west, draw=black, text width=5.3cm] (node_1_0_0) {пространство будет использовано нерационально};
   \draw[myarrow] (node_1_0.west) -- (dummy_0.east) |-  (node_1_0_0.west);


   \draw[myarrow] (top.south) -- ++(0,-\len) -| (node_1_0.north);

   \draw[myarrow] (top.south) -- ++(0,-\len) -- (node_1_1.north);


\end{tikzpicture}


\end{document}


 
 
 [ Сообщений: 5 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group