I want to draw a system architecture as in the picture below enter image description here

Can you help me?

  • 2
    Easiest way: Use Inkscape and export to TikZ-code. – Uwe Ziegenhagen May 13 '13 at 5:56
  • @UweZiegenhagen: You can't expect the results of this conversion to be easy to work with - if you want to work with Inkscape, save the processor cycles and export as PDF. – Charles Stewart May 16 '13 at 9:55

Maybe something along these lines with TikZ:

  >= latex,
  el/.style={ellipse, draw, text width=8em, align=center},
  rs/.style={rectangle split, draw, rectangle split parts=#1},
  ou/.style={draw, inner xsep=1em, inner ysep=1ex, fit=#1}
  \matrix[matrix of nodes, row sep=5ex, column sep=1em] (mx) {
    INPUT:& |[el]| newspaper text \\
    ANALYSER& |[rs=3]|
    lexical tagger\nodepart{two}morphological analyser\nodepart{three}parser \\
    & |[el]| {analysed newspaper text} \\
    SIMPLIFIER& |[rs=2]| syntactic simplifier\nodepart{two}lexical simplifier \\
    OUTPUT:& |[el]| simplified newspaper text \\
  \node[ou=(mx-2-2)] (ana) {};
  \node[ou=(mx-4-2)] (sim) {};
  \draw(mx-1-2)edge(ana) (ana)edge(mx-3-2) (mx-3-2)edge(sim) (sim)edge(mx-5-2);

enter image description here

Or, with MetaPost (compile with lualatex):

input boxes;

nodesep := 15; % space between nodes
ellipdy := 15; % the dy of ellipses

vardef cuta(suffix a, b) = % from Peter Grogono's MetaPost reference manual
  drawarrow a.c -- b.c cutbefore bpath.a cutafter bpath.b;

  % define contents
  circleit.txt("newspaper text");
  boxjoin(a.sw = b.nw; a.se = b.ne);
  boxit.lext("lexical tagger");
  boxit.mora("morphological analyser");
  circleit.atxt("analysed text");
  boxjoin(a.sw = b.nw; a.se = b.ne);
  boxit.syns("syntactic simplifier");
  boxit.lexs("lexical simplifier");
  circleit.stxt("simplified text");

  % position and tweak
  txt.dy  = ellipdy;
  atxt.dy = ellipdy;
  stxt.dy = ellipdy;
  lext.ne - lext.nw = (110,0);
  txt.s  - lext.n = (0,nodesep);
  prsr.s - atxt.n = (0,nodesep);
  atxt.s - syns.n = (0,nodesep);
  lexs.s - stxt.n = (0,nodesep);

  % draw everything
  picture pic; pic := image(drawboxed(lext, mora, prsr););
  draw pic; draw bbox pic;
  drawboxed(txt, atxt);
  pic := image(drawboxed(syns, lexs));
  draw pic; draw bbox pic;
  cuta(txt, lext);
  cuta(prsr, atxt);
  cuta(atxt, syns);
  cuta(lexs, stxt);

enter image description here

  • Oh, right: a matrix of nodes is itself a node. Had forgotten about that convenience! – Matthew Leingang May 13 '13 at 11:40
  • @Justlife Please consider accepting some of the answers you have received. In several cases, you've indicated in comments that an answer solved your problem nicely, but you have never accepted any of those answers by clicking on the greyed-out checkmark at the top left of the answer. Obviously, you shouldn't accept answers which don't answer your question and it can be good to wait to see several possible solutions, but after that, it would be appreciated if you would consider accepting the answers which have really helped you. – cfr Dec 14 '15 at 3:12

Run with pdflatex -shell-escape


    INPUT:    & \psovalbox{newspaper text} \\
    ANALYSER  & \psframebox{\tabular{|c|}\hline lexical tagger\\\hline
                morphological analyser\\\hline parser\\\hline\endtabular}\\
              & \psovalbox{\parbox{2.5cm}{analysed newspaper text}} \\
    SIMPLIFIER& \psframebox{\tabular{|c|}\hline syntactic simplifier\\\hline
                 lexical simplifier\\\hline \endtabular}\\
    OUTPUT:   & \psovalbox{\parbox{2.5cm}{simplified newspaper text}}


Example output


Tikz is the best choise, lots of examples you can built on like this one:


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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