# TikZ-UMLD

TikZ-UMLD is a LaTeX package for drawing UML diagrams with TikZ. It is a
fork of Nicolas Kielbasiewicz's TikZ-UML 1.0 and retains its support for class,
package, use-case, state, sequence, and component diagrams. UMLD adds object
diagrams, proper two-compartment enumerations, UML constraints and operation
modifiers, pointed notes, more control over relationship stereotypes, and a
collection of rendering and compatibility fixes.

Version 1.0.0 is the first prepared TikZ-UMLD release.

## Installation

Until a CTAN release is available, put `tikz-umld.sty` next to your document or
in a directory searched by TeX. Then load it with:

```tex
\usepackage{tikz-umld}
```

TikZ-UMLD requires `tikz`, `ifthen`, `xstring`, `calc`, `pgfopts`, and
`etoolbox`. The package loads the required TikZ libraries itself.

## Small example

```tex
\documentclass{standalone}
\usepackage{tikz-umld}

\begin{document}
\begin{tikzpicture}
  \umlabstract{Shape}{}{
    \umlpvirt{area(): real}
  }
  \umlclass[x=5]{Circle}{radius: real}{
    \umloverrd{area(): real}
  }
  \umlinherit{Circle}{Shape}
  \umlnote[x=5,y=-3,px=0,py=-1]{Circle}{Radius must be positive.}
\end{tikzpicture}
\end{document}
```

## UMLD additions

- Static object diagrams with `umlobjdiag`, `\umlobj`, and `\umlsimpleobj`.
- Two-compartment enumerations with `\umlenum`.
- Constraints and operation modifiers: `\umlcon`, `\umlstatic`, `\umlpvirt`,
  `\umlvirt`, `\umloverrd`, and `\umlquery`.
- Pointed notes using the `px` and `py` options.
- Relationship stereotype placement and backing with `st:pos`, `st:anchor`,
  and `st:fill`.
- Actor head colour through `head`, and assembly-connector label placement
  through `labelpos=above|below|left|right`.
- Improved abstract/interface/object typography, arrow tips, sequence-object
  naming, dashed lifelines, and several sequence-diagram fixes.
- Composition shortcuts use `compos`, for example `\umlcompos` and
  `\umlVHVunicompos`.

The English manual documents the complete inherited interface and the UMLD
extensions. `examples/full.tex` is a worked example (a radiation simulation)
with use-case, sequence, state-machine and class diagrams.

## Building the documentation and examples

From the repository root:

```sh
make check
```

The build uses `latexmk` and writes generated files to `build/`. Individual
targets are `make manual` and `make examples`.

`make release-archive` rebuilds everything, refreshes the checked-in manual and
example PDFs, and creates `build/tikz-umld.tar.gz` with the required top-level
directory. `make ctan-archive` is an alias for this final release archive.

## History and authorship

TikZ-UMLD is maintained by David Imolai. It is derived from TikZ-UML by Nicolas
Kielbasiewicz. See [CHANGELOG.md](CHANGELOG.md) for the reconstructed history of
UMLD-specific changes.

## License

TikZ-UMLD is distributed under the GNU Affero General Public License, version 3
or later. See [LICENSE.md](LICENSE.md). Its origin in TikZ-UML 1.0 is recorded
in [NOTICE.md](NOTICE.md).
