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, Супермодераторы



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

Сейчас этот форум просматривают: teopetuk


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

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