TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm trying to draw a simple block diagram that looks like this:


schemabloc seems to be the package to use, but then again, it doesn't have the switch symbol that I need. circuitikz doesn't seem to be working either.

How would I draw this diagram using tikz or any other method?

share|improve this question
Related to this? – Marc van Dongen Apr 12 '14 at 13:31
up vote 2 down vote accepted

This is a possible solution where a couple of styles is defined for ease of tikz drawing.

enter image description here


\begin{tikzpicture}[->,auto,node distance=3cm,scale=1]
block/.style ={draw, thick, rectangle, minimum height=4em, minimum width=6em},
line/.style ={draw, very thick,-},
\node[block] (a) []{Noice};
\node[block] (b) [below =2cm of a]{F0};
\node[block,yshift=1.6cm] (r) [right = 2 cm  of b]{VT};
\draw[line] (r.west) -- ++(-0.5cm,0) coordinate(r1){}; 
\draw[line] (b.east) -- ++(1cm,0) -- ++(0,1cm) coordinate(b1){};
\draw[line] (a.east) -- ++(1cm,0) -- ++(0,-1cm)coordinate(a1){};
\draw[line,rounded corners=2pt]  (b1)  -- (r1);
\draw[very thick] ($(b1)+(-5pt,0)$) to [bend left ]($(a1)+(-5pt,0)$);
\draw[very thick,->=stealth]  (r.east) -- ++(1cm,0) node[right](){Out};
share|improve this answer

Here's a simple version in plain Metapost.

enter image description here

The units are PostScript points: 72 = 1in, 28.35=1cm.

prologues := 3;
outputtemplate := "%j%c.eps";
input boxes;
% define the boxes
% place the centres of all the boxes, v.c = origin by implication
v.c + 20 up   + 75 left = n.c;
v.c + 20 down + 75 left = f.c;
v.c + 50 right          = o.c;
% define three points for the switch terminals
z1 = v.w + 10 left;
z2 = v.w + 20 left + 10 up;
z3 = v.w + 20 left + 10 down;
% make the boxes with borders all the same size
n.e-n.w = f.e-f.w = v.e-v.w = 34 right;
n.n-n.s = f.n-f.s = v.n-v.s = 21 up;
% draw the boxes, draw "Out" with no boundary
drawboxed(v,f,n); drawunboxed(o);
% draw the connections
draw n.e -- (x2,ypart n.e) -- z2;
draw f.e -- (x3,ypart f.e) -- z3 -- z1 -- v.w;
drawarrow v.e -- o.w;
% draw an arc to show the movement of the switch
ahlength := 2; % with a smaller arrowhead
drawarrow z3 { (z1-z3) rotated 90 } .. z2 { (z1-z2) rotated 90 } 
          cutbefore fullcircle scaled 4 shifted z3
          cutafter  fullcircle scaled 4 shifted z2
          withcolor .5 white;
% put dots on the terminals
forsuffixes $=1,2,3: filldraw fullcircle scaled 2 shifted z$; endfor
share|improve this answer
First time seeing Metapost. Seems quite 'overkill'/complex though, no? – James Union Apr 13 '14 at 12:24
@JamesUnion "overkill" is a matter of taste of course, but Metapost grows on you as a language; and there's not really much more complexity in the language than I've shown above. If you want something simple, buy a copy of PowerPoint or Omnigraffle (or similar) and push boxes around with your mouse, export the results as PDF and use \includegraphics to get the picture into LaTeX. – Thruston Apr 13 '14 at 16:07

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.