2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Позиционирование узлов в tikz
Сообщение24.05.2011, 20:00 


22/03/11
23
Пытаюсь сделать древовидную диаграмму, но один узел залезает на другой. Я убирал прямую ссылку на расстояние при позиционировании: 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 


19/09/10
109
Код:
\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 


19/09/10
109
Если нужно выравнивание по левому краю
Код:
\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 
Аватара пользователя


01/02/09
206
Код:
--- 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 


22/03/11
23
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 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group