Here are the steps to use it on ubuntu:
- install texlive with: sudo apt-get install texlive
- install metauml containing in metapost for tex: sudo apt-get install texlive-metapost
After all these tools have being installed, we can start our first uml diagram in latex.
Suppose we have following classes, and want to draw class diagram for them.
1 class Point
2 {
3 public:
4 int x;
5 int y;
6 };
7
8 class Shape
9 {
10 public:
11 virtual int get_circumference() = 0;
12 virtual ~shape();
13 };
14
15 class Circle : public Shape
16 {
17 private:
18 Point center;
19 int radius;
20 public:
21 int get_circumference();
22 };
2 {
3 public:
4 int x;
5 int y;
6 };
7
8 class Shape
9 {
10 public:
11 virtual int get_circumference() = 0;
12 virtual ~shape();
13 };
14
15 class Circle : public Shape
16 {
17 private:
18 Point center;
19 int radius;
20 public:
21 int get_circumference();
22 };
We create below metapost file, save it as class_diagram.mp, and use "mpost class_diagram.mp" command to generate a postscript file, class_diagram.1.
1 input metauml;
2 beginfig(1);
3 %define classes
4 Class.Point("Point")("+x: int", "+y: int")();
5 Class.Shape("Shape")()("+get_circumference(): int");
6 Class.Circle("Circle")("-center: Point", "-radius: int")("+get_circumference(): int");
7
8 %layout classes
9 topToBottom(50)(Point, Circle);
10 leftToRight(50)(Circle, Shape);
11
12 %draw classes
13 drawObjects(Point, Shape, Circle);
14
15 %link classes
16 link(inheritance)(Circle.e -- Shape.w);
17 link(composition)(Point.s -- Circle.n);
18 endfig;
19 end
20
2 beginfig(1);
3 %define classes
4 Class.Point("Point")("+x: int", "+y: int")();
5 Class.Shape("Shape")()("+get_circumference(): int");
6 Class.Circle("Circle")("-center: Point", "-radius: int")("+get_circumference(): int");
7
8 %layout classes
9 topToBottom(50)(Point, Circle);
10 leftToRight(50)(Circle, Shape);
11
12 %draw classes
13 drawObjects(Point, Shape, Circle);
14
15 %link classes
16 link(inheritance)(Circle.e -- Shape.w);
17 link(composition)(Point.s -- Circle.n);
18 endfig;
19 end
20
Then we create below tex file as a container document for the postscript. And use "pdflatex uml.tex" to generate the final pdf file.
1 \documentclass{article}
2
3 % The following is needed in order to make the code compatible
4 % with both latex/dvips and pdflatex.
5 \ifx\pdftexversion\undefined
6 \usepackage[dvips]{graphicx}
7 \else
8 \usepackage[pdftex]{graphicx}
9 \DeclareGraphicsRule{*}{mps}{*}{}
10 \fi
11
12 \title{MetaUML example}
13 \author{Raymond Wen}
14
15 \begin{document}
16
17 \maketitle
18
19 \section{Example}
20 \includegraphics{class_diagram.1}
21
22 \end{document}
2
3 % The following is needed in order to make the code compatible
4 % with both latex/dvips and pdflatex.
5 \ifx\pdftexversion\undefined
6 \usepackage[dvips]{graphicx}
7 \else
8 \usepackage[pdftex]{graphicx}
9 \DeclareGraphicsRule{*}{mps}{*}{}
10 \fi
11
12 \title{MetaUML example}
13 \author{Raymond Wen}
14
15 \begin{document}
16
17 \maketitle
18
19 \section{Example}
20 \includegraphics{class_diagram.1}
21
22 \end{document}
A thing worth noticing is the latex document is of A4 size by default, which is not possible to contain a complex uml diagram. We can use "\paperwidth = 1024pt", "\paperheight = 1024pt", "\textheight = 800pt" command to create a document of arbitrary size. Here is more information about latex page layout.
The final diagram is shown below:
The advantages of using tex file to draw uml diagram includes:
- We can concentrate on the content of the uml, rather than its layout
- The diagram can be easily version controlled and compared
- It's easier to make modifications
- It's totally free
- The output file format can be easily changed
- It's possible to use/write tools to generate uml diagram automatically
1 comment:
I found a UML diagram software called creately that can draw nice looking UML diagram easily.
Post a Comment