2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Выравнивание узлов в блок схеме
Сообщение07.11.2011, 21:47 


22/03/11
23
Сделал блок-схему на tikz и не знаю, как:

1. Выровнять последние блоки, чтобы они были на одном уровне без расчета расстояния below = xcm of
2. Как вствить текст "да" и "нет" рядом с границей ближайшего узла на расстоянии 2мм для нижнего и 3 мм - для левого. Свойства "very near start" и "near start" неудобно подбирать.

Изображение

Код:
\documentclass{article}
\usepackage[a4paper,landscape]{geometry}
\usepackage[cm]{fullpage}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,backgrounds,calc,positioning}
\begin{document}
\begin{tikzpicture}[node distance = 1cm, auto]
\tikzset{
   line/.style = {draw},
   block/.style = {rectangle, draw, text width=3em, text centered, rounded corners, minimum height=2em},
   comment/.style = {rectangle, draw, text centered, rounded corners, minimum height=2em,fill=white},
   question/.style = {shape=chamfered rectangle, chamfered rectangle xsep=2cm, draw},
   terminator/.style = {shape=rounded rectangle, draw, inner sep=2mm},
}

\node[terminator] (node-1) {\parbox{4.1cm}{Определение платы\\ за коммунальные услуги\\ в многоквартирном доме}};

\node [comment, below = of node-1.south] (node-15) {В конце указаны пункты 307 ПП};

\begin{scope}[on background layer]
   \draw[fill=gray!10] ($(node-15.south west)+(-2mm,-2mm)$) rectangle ($(node-15.north east)+(2mm, 2mm)$);
\end{scope}

\path [line] (node-1) -- ($(node-15.north)+(0mm,+2mm)$);

\node [question, below = of node-15.south] (node-2) {ОПУ установлены?};

\path [line] ($(node-15.south)+(0mm,-2mm)$) -- (node-2);
\node [question, below = of node-2] (node-3) {ИПУ установлены?};
\node [block, below = of node-3.south] (node-4) {23};

\path [line] (node-3) -- node [near start] {да} (node-4);

\node [question, right = of node-4] (node-5) {Жилое помещение?};

\path [line] (node-3) -|  node [very near start] {нет} (node-5);
\node [right = of node-5, inner sep=0pt,minimum size=0pt] (node-5-1) {};

\node [block, below= of node-5.south] (node-6) {21};
\node [block, below = of node-5-1] (node-7) {20};

\path [line] (node-5) -- node [near start] {да} (node-6);
\path [line] (node-5) -| node [near start] {нет} (node-7);

\path [line] (node-2) -- node [near start] {да} (node-3);
\node [question, right = 10 cm of node-3] (node-8) {ИПУ установлены?};
\node [block, below = of node-8] (node-9) {16};

\path [line] (node-8) -- node [near start] {да} (node-9);

\node [question, right = of node-9, node distance=4cm] (node-10) {Жилое помещение?};
\node [right = of node-10, inner sep=0pt,minimum size=0pt] (node-10-1) {};

\path [line] (node-8) -| node [very near start] {нет} (node-10);

\node [block, below = of node-10] (node-11) {19};
\node [block, below = of node-10-1, node distance=3cm] (node-12) {20};

\path [line] (node-10) -- node [near start] {да} (node-11);
\path [line] (node-10) -| node [near start] {нет} (node-12);

\path [line] (node-2) -| node [pos=0.03] {нет} (node-8);

\node[coordinate, below = 3 cm of node-4] (node-13) {};

\path [line] (node-4) -- (node-13);
\path [line] (node-6) |- (node-13);
\path [line] (node-7) |- (node-13);
\path [line] (node-9) |- (node-13);
\path [line] (node-11) |- (node-13);
\path [line] (node-12) |- (node-13);

\node[terminator, below = of node-13, node distance=1.5cm] (node-14) {конец};

\path [line] (node-13) -- (node-14);

\end{tikzpicture}

\end{document}

 Профиль  
                  
 
 Re: Выравнивание узлов в блок схеме
Сообщение08.11.2011, 21:12 


19/09/10
109
1. Например, если нужно поместить «20» на той же горизонтали, что и «21» (и на одной вертикали с node-5-1), можно попробовать
Код:
\node[block] at (node-5-1|-node-6) (node-7) {20};
вместо
Код:
\node [block, below = of node-5-1] (node-7) {20};

 Профиль  
                  
 
 Re: Выравнивание узлов в блок схеме
Сообщение09.11.2011, 00:55 


22/03/11
23
Danke, camphene. Все работает. Появился доп. вопрос: можно ли избавиться от дополнительного узла (5-1)?

Я попытался сделать вот так:

Код:
\node[block] at ($(node-5.south east) + (1cm, 0cm)$|-node-6) (node-7) {20};


Но это дало неправильный результат.

Изображение

 Профиль  
                  
 
 Re: Выравнивание узлов в блок схеме
Сообщение09.11.2011, 20:34 


19/09/10
109
Можно попробовать указать так:
Код:
\node[block] at ([xshift=10mm] node-5.east|-node-6) (node-7) {20};

Но мне, наоборот, кажется более удобным именовать вспомогательные точки (только не как маленький узел, а как \coordinate).

 Профиль  
                  
 
 Re: Выравнивание узлов в блок схеме
Сообщение10.11.2011, 02:11 


22/03/11
23
danke, все получилось.

 Профиль  
                  
 
 Re: Выравнивание узлов в блок схеме
Сообщение10.11.2011, 09:16 


19/09/10
109
Что касается проблемы (2), то можно попробовать поиграть с xsep/ysep и якорем:
Код:
node [pos=0,anchor=south west,inner xsep=2mm] {нет}
Недостаток — надо отдельно определять стили для «западной», «восточной», «южной справа», «южной слева» и т. д. надписей, так что это костыль.

 Профиль  
                  
 
 Re: Выравнивание узлов в блок схеме
Сообщение11.11.2011, 02:42 


22/03/11
23
Я сделал немного иначе.

Код:
\path [line] (node-2) -- node [pos=0, anchor=south west] {да} (node-3);


После этого "да" появилось сверху линии внутри развилки.

Изображение

После чего я сдвинул её вниз по y на 5mm:

Код:
\path [line] (node-2) -- node [pos=0, anchor=south west, yshift=-5mm] {да} (node-3);


Стало нормально.

После чего сделал стиль:

Код:
yes/.style={pos=0, anchor=south west, yshift=-5mm}


И поставил его для всех "да":

Код:
\path [line] (node-2) -- node [yes] {да} (node-3);

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

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



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

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


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

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