If you are looking for TeX support, please go to VietTUG.org

Support #117

Vẽ sơ đồ khối với Tikz

Status: Closed Start Date: 30-10-2008
Priority: Normal Due date:
Assigned to: - % Done:

100%

Category: hình vẽ: nói chung
Target version: 2008_help
Resolution:

Description

Em có vẽ một sơ đồ khối với Tikz. Đoạn code như sau:

\documentclass[a4paper, 10pt]{article}
\usepackage{fontspec}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\usepackage{amsmath}
\begin{document}
\tikzstyle{decision} = [diamond, draw, fill=blue!20,
text width=7em, text badly centered, node distance=3cm, inner sep=0pt]
\tikzstyle{block} = [rectangle, draw, fill=blue!20,
text width=6.5em, text centered, rounded corners, minimum height=4em]
\tikzstyle{line} = [draw, -latex']
\tikzstyle{cloud} = [draw, ellipse,fill=red!20, node distance=3cm,
minimum height=2em]
\begin{tikzpicture}[node distance = 2cm, auto]\label{Sodokhoi}
% Place nodes
\node [block] (1) {Xác định $x, J, \Delta_k$};
\node [decision, below of=1] (2) {$\Delta_k \geq 0$\\ $\forall k \in J$};
\node [cloud, below right of=2, node distance=7cm] (3) {$x$ - tối ưu};
\node [decision, below of=2, node distance=4cm] (4) {$\exists\Delta_k < 0$\\$z_{jk} \leq 0, \forall j \in J$};
\node [block, below right of=4, node distance=4cm] (5) {Không có phương án tối ưu};
\node [block, below left of=4, node distance=4cm] (6) {$\Delta_s = \min\Delta_k$};
\node [block, below of=6, node distance=3cm] (7) {$\theta = \min\dfrac{x_1}{x_{1s}}$};
\node [block, below left of=7, node distance=4cm] (8) {Biến đổi bảng};
\node [block, below right of=5, node distance=5cm] (9) {In kết quả};
\node [cloud, below of=9, node distance=3cm] (10) {Dừng};
% Draw edges
\path [line] (1) -- (2);
\path [line] (2) -| node [near start] {Đ} (3);
\path [line] (3) -- (9);
\path [line] (2) -- (4);
\path [line] (4) -| node [near start] {Đ} (5);
\path [line] (4) -| node [near start] {S} (6);
\path [line] (5) |- (9);
\path [line] (6) -- (7);
\path [line] (7) |- (8);
\path [line] (8) |- (2);
\path [line] (9) -- (10);
\end{tikzpicture}
\end{document}_


Nhưng ko biết cách làm sao để cho node (8) trỏ đến giữa mũi tên (1)->(2)? Có bác nào biết giúp em với ^^!

Và cho em hỏi thêm, nếu em không cho node (8) sang phía bên trái node (7) thì khi node (8) -> node (1) mũi tên sẽ chỉ thẳng đến node (1) và cắt các node khác (làm rối hình). Xin các bác chỉ giáo! ^^

History

#1, #272 Updated by over 4 years ago

• Category set to hình vẽ: nói chung
• Assigned to set to 286
• Target version set to 20

#2, #275 Updated by over 4 years ago

• % Done changed from 0 to 10

Sơ đồ khối của bạn vẽ đẹp quá, mình không ngờ gói tikz lại lợi hại đến thế. Còn vấn đề thứ 2 của bạn, thú thật mình không hiểu :">.

Vấn đề 1 của bạn có thể giải quyết bằng cách sử dụng thêm một node dạng support như sau, bạn chú ý phần tô đậm nhé:

\begin{tikzpicture}[node distance = 2cm, auto]\label{Sodokhoi}

%% Sử dụng môi trường scope hỗ trợ dạng support
\begin{scope}[support/.style={coordinate,join=by fuzzy}]

% Place nodes
\node [block] (1) {Xác định $x, J, \Delta_k$};

%% Mình thêm một node dạng support, gọi là node (after 1)
\node [support, below of=1] (after 1) {};

%% Điều chỉnh lại vị trí của node (2) , bạn có thể tinh chỉnh thêm để có kết quả đẹp hơn
\node [decision, below of=after 1] (2) {$\Delta_k \geq 0$\\ $\forall k \in J$};

\node [cloud, below right of=2, node distance=7cm] (3) {$x$ - tối ưu};
\node [decision, below of=2, node distance=4cm] (4) {$\exists\Delta_k < 0$\\$z_{jk} \leq 0, \forall j \in J$};
\node [block, below right of=4, node distance=4cm] (5) {Không có phương án tối ưu};
\node [block, below left of=4, node distance=4cm] (6) {$\Delta_s = \min\Delta_k$};
\node [block, below of=6, node distance=3cm] (7) {$\theta = \min\dfrac{x_1}{x_{1s}}$};
\node [block, below left of=7, node distance=4cm] (8) {Biến đổi bảng};
\node [block, below right of=5, node distance=5cm] (9) {In kết quả};
\node [cloud, below of=9, node distance=3cm] (10) {Dừng};

% Draw edges
\path [line] (1) -- (2);
\path [line] (2) -| node [near start] {Đ} (3);
\path [line] (3) -- (9);
\path [line] (2) -- (4);
\path [line] (4) -| node [near start] {Đ} (5);
\path [line] (4) -| node [near start] {S} (6);
\path [line] (5) |- (9);
\path [line] (6) -- (7);
\path [line] (7) |- (8);

%% Rồi cho node (8) chỉ đến node (after 1)
\path [line] (8) |- (after 1);

\path [line] (9) -- (10);

%% kết thúc môi trường scope
\end{scope}

\end{tikzpicture}


Chúc bạn thành công!

#3, #286 Updated by over 4 years ago

OT: các bạn dùng PRE để chèn mã latex. Đơn giản nhất là đính kèm tập tin TeX (diễn đàn cho phép các bạn tải tập tin lên). Sắp tới mình sẽ hỗ trợ ajax load như trình bày ở #108

#4, #288 Updated by over 4 years ago

Ý thứ nhất mình làm được rùi. Cảm ddhai! ^^

Còn ý thứ 2 mình muốn nói ở đây là: nếu trong đoạn lệnh sau

\node [block, below left of=7, node distance=4cm] (8) {Biến đổi bảng};


mình sửa thành

\node [block, below of=7, node distance=4cm] (8) {Biến đổi bảng};% blow left sửa thành below


thì lúc đó mũi tên trỏ từ (8) -> (1) sẽ cắt các node khác (bạn cứ thử dịch xem). Bạn có ý kiến nào giúp mình ko? Cảm ơn bạn rất nhiều

#5, #289 Updated by over 4 years ago

^ nhờ hướng dẫn của dduyhai nên mình đã giải quyết được cả ý thứ 2.
Mình tạo thêm một node (left 8) - phía bên trái node (8) kiểu support
rùi từ (left 8) |- (after 1). Vậy là xong!
^ Cảm ơn dduyhai nhiều!
Mình có attack file pdf kèm theo, bạn có thể xem thử! ^^

#6, #297 Updated by over 4 years ago

• Status changed from New to Closed
• % Done changed from 10 to 100

#7, #438 Updated by over 4 years ago

• Target version changed from 20 to 2008_help