Tuesday, December 27, 2011

Latex Tutorial: How to Create Images, Diagrams, and Flow Charts Using Latex

This tutorial is an extension of previous video tutorial on how to use tikz for image creation in Latex. In this video I explain how to set up your document for flow chat design. This equally applies to any other image that uses similar structure.

Specifically, in this video I talk about following things:
  1. How to create a flow chart
  2. How to setup styles for reusable components of an image
  3. How to draw arrows from one component to other
  4. How to change the styles of components
  5. How to change the arrowhead for Latex arrows
  6. How to align components left, right, top, and below of each other

The code use:d in the video is here:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,shadows,arrows}
\begin{document}
\tikzstyle{decision} = [diamond, draw, fill=blue!50]
\tikzstyle{line} = [draw, -stealth, thick]
\tikzstyle{elli}=[draw, ellipse, fill=red!50,minimum height=8mm, text width=5em, text centered]
\tikzstyle{block} = [draw, rectangle, fill=blue!50, text width=8em, text centered, minimum height=15mm, node distance=10em]
\begin{tikzpicture}
\node [block] (start) {Start};
\node [block, left of=start, xshift=-5em] (process1) {Process 1};
\node [elli, above of=start, yshift=5em] (user) {user};
\node [block, right of=start, xshift=5em] (process2) {Process 2};
\node[decision, below of=start, yshift=-5em](decision1){Process 1?};
%arrows
\path [line] (user) -- (start);
\path [line] (start) -- (decision1);
\path [line] (decision1) -| node[yshift=0.5em, xshift=10em] {yes} (process1);
\path [line] (decision1) -| node[yshift=0.5em, xshift=-10em] {no} (process2);
\end{tikzpicture}
\end{document}
The image produced by this code is :

The explanation of this code is given in the tutorial as we develop this code:


7 comments:

  1. Dear Dinwal,

    currently working on master thesis and as a fresher in Latex, I've already profitted a lot from your youtube tutorials. Now, I have a question which has not been answered on your blog. It's about how to generate nice graphs/diagrams from time series data driectly. In my case for example, I want to plot imports and exports of a particular country in one graph (lines, as e.g. could be obtained by using excel graphs/diagrams)from say 1990 until 2011.
    I'd appreciate a lot if you could help me out!

    Many greetings,

    Johanna

    ReplyDelete
  2. Hi!
    Thank you for a great video tutorial, you saved my day! :) I have a small question concerning the text inside the nodes. How do you make a line shift inside the nodes? I have a very simple vertical flow chart, and inside each node there is a short "heading" (e.g. Centrifugation), and I would like to have the specifications underneath (e.g. 10 minutes, 5000 rpm, 50 ml tubes) so it appears something like this:

    CENTRIFUGATION
    - 10 minutes
    - 5000 rpm
    - 50 ml tubes

    I have tried using \itemize and just \\ inside the node, but it does not work and all the text is still in one line like this "Centrifugation 10 minutes 5000 rpm 50 ml tubes."

    I would greatly appreciate your help. Thanks in advance!

    Best regards,

    Kate

    ReplyDelete
    Replies
    1. I think it should work if you put the \newline command between each of those words.

      Delete
  3. Is there a maximum number of nodes one can have in a vertical flowsheet? On my 7th box I get this error:! Undefined control sequence.
    l.284 \node

    All the other boxes above are ok, but everything stops by adding this extra node! Any tips?

    Thanks :)

    ReplyDelete
  4. Thanks for the tutorial. A nice addition would be a quick discussion of how to make a loop, ie, how to place an invisible node in the middle of an arrow.

    ReplyDelete
  5. Its better if you can provide a tutorial on dead locks and loops on your next post. I found this article very informative. Thanks

    Regards,
    Creately

    ReplyDelete

Comments on QuickLatex are strictly moderated. As much as I hate moderation, I must fight spam. Please rest assured that if your comment is relevant I will approve it and answer.