[
  {
    "path": ".aspell.conf",
    "content": "add-tex-command \"minted options\" ppppppppppppppppppppppp\nadd-tex-command @ifundefined pppppp\nadd-tex-command Cref p\nadd-tex-command DeclareFontFamily ppp\nadd-tex-command DeclareFontShape pppppp\nadd-tex-command DeclareMathSymbol ppppp\nadd-tex-command DeclareSymbolFont pppppp\nadd-tex-command DisableLigatures p\nadd-tex-command FXRegisterAuthor ppp\nadd-tex-command PassOptionsToPackage pp\nadd-tex-command RequirePackage op\nadd-tex-command begin pop\nadd-tex-command bibliographystyle p\nadd-tex-command captionsetup op\nadd-tex-command citep op\nadd-tex-command citet op\nadd-tex-command color p\nadd-tex-command cref p\nadd-tex-command frac pp\nadd-tex-command hypersetup p\nadd-tex-command label p\nadd-tex-command languageshorthands p\nadd-tex-command lstset ppppppppppppppppppppppp\nadd-tex-command mathit p\nadd-tex-command newcommand pp\nadd-tex-command oname p\nadd-tex-command patchcmd ppp\nadd-tex-command renewcommand pp\nadd-tex-command restoresymbol pp\nadd-tex-command savesymbol p\nadd-tex-command setmainfont ooooppppppppppp\nadd-tex-command setmathfont ooooppppppppppp\nadd-tex-command setminted ppppppp\nadd-tex-command setmonofont ooooppppppppppp\nadd-tex-command setsansfont oooooooopppppppppppp\nadd-tex-command tcbinputlisting ppppppppppppppppppppppp\nadd-tex-command texttt p\nadd-tex-command tikzpicture op\nadd-tex-command tikzset p\nadd-tex-command usemintedstyle p\nadd-tex-command usepackage oooooop\nadd-tex-command usetikzlibrary p\n"
  },
  {
    "path": ".aspell.de.pws",
    "content": "personal_ws-1.1 en 122 utf-8\nACM\nAtlantic\nBPEL\nBPMN\nBei\nCleveref\nDas\nDatabase\nDiag\nFirstname\nGeänderter\nHier\nIEEEtran\nJSON\nJabRef\nKommentar\nLaTeX\nLaTeXing\nLastname\nManuelle\nMarkierter\nMarkierung\nNorth\nOMG\nORCID\nOldStyle\nOrganization\nPractitioner\nRDBMS\nRGB\nTODOs\nTextfarbe\nTreaty\nUML\nWorten\nabbreviationdot\naboveskip\nacmnumeric\nangepasst\napplica\nargs\nauch\nbackticks\nbasewidth\nbasicstyle\nbei\nbelowskip\nbreaklines\ncategory\ncls\ncommentstyle\ncref\nda\ndante\ndazu\nder\ndwarflike\neclipseKeywords\neclipseStrings\nein\neinigen\nenquote\nerror\nescapeinside\nff\nfirstline\nfirstnumber\nflXML\nfontsize\nfr\nfunktioniert\nfür\ngeändert\ngp\nhtml\nhypertext\nist\nitemizations\njson\nkräftig\nlanguage\nlastline\nlastname\nletzten\nlinenos\nlongplural\nlst\nlstlisting\nmarkup\nmicrotype\nmindflow\nmorecomment\nnato\nnd\nnm\nnoch\nnumbersep\nnumberstyle\nnur\noldstyle\nparalist\npowerset\nproduziert\npygments\nrdbms\nseit\nshortplural\nshowstringspaces\nsiunitx\nstepnumber\nstringstyle\nsubcaption\nsubfig\nsubfigure\nsubfigures\ntion\ntt\nwerden\nwird\nwurde\nxleftmargin\nœ\n"
  },
  {
    "path": ".aspell.en.pws",
    "content": "personal_ws-1.1 en 122 utf-8\nACM\nAtlantic\nBPEL\nBPMN\nBei\nCleveref\nDas\nDatabase\nDiag\nFirstname\nGeänderter\nHier\nIEEEtran\nJSON\nJabRef\nKommentar\nLaTeX\nLaTeXing\nLastname\nManuelle\nMarkierter\nMarkierung\nNorth\nOMG\nORCID\nOldStyle\nOrganization\nPractitioner\nRDBMS\nRGB\nTODOs\nTextfarbe\nTreaty\nUML\nWorten\nabbreviationdot\naboveskip\nacmnumeric\nangepasst\napplica\nargs\nauch\nbackticks\nbasewidth\nbasicstyle\nbei\nbelowskip\nbreaklines\ncategory\ncls\ncommentstyle\ncref\nda\ndante\ndazu\nder\ndwarflike\neclipseKeywords\neclipseStrings\nein\neinigen\nenquote\nerror\nescapeinside\nff\nfirstline\nfirstnumber\nflXML\nfontsize\nfr\nfunktioniert\nfür\ngeändert\ngp\nhtml\nhypertext\nist\nitemizations\njson\nkräftig\nlanguage\nlastline\nlastname\nletzten\nlinenos\nlongplural\nlst\nlstlisting\nmarkup\nmicrotype\nmindflow\nmorecomment\nnato\nnd\nnm\nnoch\nnumbersep\nnumberstyle\nnur\noldstyle\nparalist\npowerset\nproduziert\npygments\nrdbms\nseit\nshortplural\nshowstringspaces\nsiunitx\nstepnumber\nstringstyle\nsubcaption\nsubfig\nsubfigure\nsubfigures\ntion\ntt\nwerden\nwird\nwurde\nxleftmargin\nœ\n"
  },
  {
    "path": ".dockerignore",
    "content": ".github\nDockerfile\ngenerator-latex-template\n\nmain-english.pdf\nmain-english-*.pdf\ngraphics/*.pdf_tex\n\n# spelling\n*.spell.bad\n*.spell.txt\n\n# plantuml\n*-plantuml.latex\n*-plantuml.txt\n\n# latexindent\n*.bak\n*.bak?\n*.bak??\n\n# tex4ht\n*.4ct\n*.4tc\n\n# Generated when using Listing environment\n# \\newfloat{Listing}{tbp}{code}[chapter]\n*.code\n\n# IntelliJ\n.idea/\n\n\n\n\n# Created by https://www.toptal.com/developers/gitignore/api/emacs,latex,linux,macos,jabref,windows,libreoffice,microsoftoffice,visualstudiocode\n# Edit at https://www.toptal.com/developers/gitignore?templates=emacs,latex,linux,macos,jabref,windows,libreoffice,microsoftoffice,visualstudiocode\n\n### Emacs ###\n# -*- mode: gitignore; -*-\n*~\n\\#*\\#\n/.emacs.desktop\n/.emacs.desktop.lock\n*.elc\nauto-save-list\ntramp\n.\\#*\n\n# Org-mode\n.org-id-locations\n*_archive\n\n# flymake-mode\n*_flymake.*\n\n# eshell files\n/eshell/history\n/eshell/lastdir\n\n# elpa packages\n/elpa/\n\n# reftex files\n*.rel\n\n# AUCTeX auto folder\n/auto/\n\n# cask packages\n.cask/\ndist/\n\n# Flycheck\nflycheck_*.el\n\n# server auth directory\n/server/\n\n# projectiles files\n.projectile\n\n# directory configuration\n.dir-locals.el\n\n# network security\n/network-security.data\n\n\n### JabRef ###\n# JabRef - https://www.jabref.org/\n*.bak\n*.sav\n\n### LaTeX ###\n## Core latex/pdflatex auxiliary files:\n*.aux\n*.lof\n*.log\n*.lot\n*.fls\n*.out\n*.toc\n*.fmt\n*.fot\n*.cb\n*.cb2\n.*.lb\n\n## Intermediate documents:\n*.dvi\n*.xdv\n*-converted-to.*\n# these rules might exclude image files for figures etc.\n# *.ps\n# *.eps\n# *.pdf\n\n## Generated if empty string is given at \"Please type another file name for output:\"\n.pdf\n\n## Bibliography auxiliary files (bibtex/biblatex/biber):\n*.bbl\n*.bcf\n*.blg\n*-blx.aux\n*-blx.bib\n*.run.xml\n\n## Build tool auxiliary files:\n*.fdb_latexmk\n*.synctex\n*.synctex(busy)\n*.synctex.gz\n*.synctex.gz(busy)\n*.pdfsync\n\n## Build tool directories for auxiliary files\n# latexrun\nlatex.out/\n\n## Auxiliary and intermediate files from other packages:\n# algorithms\n*.alg\n*.loa\n\n# achemso\nacs-*.bib\n\n# amsthm\n*.thm\n\n# beamer\n*.nav\n*.pre\n*.snm\n*.vrb\n\n# changes\n*.soc\n\n# comment\n*.cut\n\n# cprotect\n*.cpt\n\n# elsarticle (documentclass of Elsevier journals)\n*.spl\n\n# endnotes\n*.ent\n\n# fixme\n*.lox\n\n# feynmf/feynmp\n*.mf\n*.mp\n*.t[1-9]\n*.t[1-9][0-9]\n*.tfm\n\n#(r)(e)ledmac/(r)(e)ledpar\n*.end\n*.?end\n*.[1-9]\n*.[1-9][0-9]\n*.[1-9][0-9][0-9]\n*.[1-9]R\n*.[1-9][0-9]R\n*.[1-9][0-9][0-9]R\n*.eledsec[1-9]\n*.eledsec[1-9]R\n*.eledsec[1-9][0-9]\n*.eledsec[1-9][0-9]R\n*.eledsec[1-9][0-9][0-9]\n*.eledsec[1-9][0-9][0-9]R\n\n# glossaries\n*.acn\n*.acr\n*.glg\n*.glo\n*.gls\n*.glsdefs\n*.lzo\n*.lzs\n*.slg\n*.slo\n*.sls\n\n# uncomment this for glossaries-extra (will ignore makeindex's style files!)\n# *.ist\n\n# gnuplot\n*.gnuplot\n*.table\n\n# gnuplottex\n*-gnuplottex-*\n\n# gregoriotex\n*.gaux\n*.glog\n*.gtex\n\n# htlatex\n*.4ct\n*.4tc\n*.idv\n*.lg\n*.trc\n*.xref\n\n# hyperref\n*.brf\n\n# knitr\n*-concordance.tex\n# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files\n# *.tikz\n*-tikzDictionary\n\n# listings\n*.lol\n\n# luatexja-ruby\n*.ltjruby\n\n# makeidx\n*.idx\n*.ilg\n*.ind\n\n# minitoc\n*.maf\n*.mlf\n*.mlt\n*.mtc[0-9]*\n*.slf[0-9]*\n*.slt[0-9]*\n*.stc[0-9]*\n\n# minted\n_minted*\n*.pyg\n\n# morewrites\n*.mw\n\n# newpax\n*.newpax\n\n# nomencl\n*.nlg\n*.nlo\n*.nls\n\n# pax\n*.pax\n\n# pdfpcnotes\n*.pdfpc\n\n# sagetex\n*.sagetex.sage\n*.sagetex.py\n*.sagetex.scmd\n\n# scrwfile\n*.wrt\n\n# svg\nsvg-inkscape/\n\n# sympy\n*.sout\n*.sympy\nsympy-plots-for-*.tex/\n\n# pdfcomment\n*.upa\n*.upb\n\n# pythontex\n*.pytxcode\npythontex-files-*/\n\n# tcolorbox\n*.listing\n\n# thmtools\n*.loe\n\n# TikZ & PGF\n*.dpth\n*.md5\n*.auxlock\n\n# titletoc\n*.ptc\n\n# todonotes\n*.tdo\n\n# vhistory\n*.hst\n*.ver\n\n# easy-todo\n*.lod\n\n# xcolor\n*.xcp\n\n# xmpincl\n*.xmpi\n\n# xindy\n*.xdy\n\n# xypic precompiled matrices and outlines\n*.xyc\n*.xyd\n\n# endfloat\n*.ttt\n*.fff\n\n# Latexian\nTSWLatexianTemp*\n\n## Editors:\n# WinEdt\n\n# Texpad\n.texpadtmp\n\n# LyX\n*.lyx~\n\n# Kile\n*.backup\n\n# gummi\n.*.swp\n\n# KBibTeX\n*~[0-9]*\n\n# TeXnicCenter\n*.tps\n\n# auto folder when using emacs and auctex\n./auto/*\n*.el\n\n# expex forward references with \\gathertags\n*-tags.tex\n\n# standalone packages\n*.sta\n\n# Makeindex log files\n*.lpz\n\n# xwatermark package\n*.xwm\n\n# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib\n# option is specified. Footnotes are the stored in a file with suffix Notes.bib.\n# Uncomment the next line to have this generated file ignored.\n#*Notes.bib\n\n### LaTeX Patch ###\n# LIPIcs / OASIcs\n*.vtc\n\n# glossaries\n*.glstex\n\n### LibreOffice ###\n# LibreOffice locks\n.~lock.*#\n\n### Linux ###\n\n# temporary files which can be created if a process still has a handle open of a deleted file\n.fuse_hidden*\n\n# KDE directory preferences\n.directory\n\n# Linux trash folder which might appear on any partition or disk\n.Trash-*\n\n# .nfs files are created when an open file is removed but is still being accessed\n.nfs*\n\n### macOS ###\n# General\n.DS_Store\n.AppleDouble\n.LSOverride\n\n# Icon must end with two \\r\nIcon\n\n\n# Thumbnails\n._*\n\n# Files that might appear in the root of a volume\n.DocumentRevisions-V100\n.fseventsd\n.Spotlight-V100\n.TemporaryItems\n.Trashes\n.VolumeIcon.icns\n.com.apple.timemachine.donotpresent\n\n# Directories potentially created on remote AFP share\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n\n### macOS Patch ###\n# iCloud generated files\n*.icloud\n\n### MicrosoftOffice ###\n*.tmp\n\n# Word temporary\n~$*.doc*\n\n# Word Auto Backup File\nBackup of *.doc*\n\n# Excel temporary\n~$*.xls*\n\n# Excel Backup File\n*.xlk\n\n# PowerPoint temporary\n~$*.ppt*\n\n# Visio autosave temporary files\n*.~vsd*\n\n### VisualStudioCode ###\n.vscode/*\n!.vscode/settings.json\n!.vscode/tasks.json\n!.vscode/launch.json\n!.vscode/extensions.json\n!.vscode/*.code-snippets\n\n# Local History for Visual Studio Code\n.history/\n\n# Built Visual Studio Code Extensions\n*.vsix\n\n### VisualStudioCode Patch ###\n# Ignore all local history of files\n.history\n.ionide\n\n### Windows ###\n# Windows thumbnail cache files\nThumbs.db\nThumbs.db:encryptable\nehthumbs.db\nehthumbs_vista.db\n\n# Dump file\n*.stackdump\n\n# Folder config file\n[Dd]esktop.ini\n\n# Recycle Bin used on file shares\n$RECYCLE.BIN/\n\n# Windows Installer files\n*.cab\n*.msi\n*.msix\n*.msm\n*.msp\n\n# Windows shortcuts\n*.lnk\n\n# End of https://www.toptal.com/developers/gitignore/api/emacs,latex,linux,macos,jabref,windows,libreoffice,microsoftoffice,visualstudiocode\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "github: [koppor]\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "<...describe the change...>\n\n- [ ] Change in CHANGELOG.md described\n"
  },
  {
    "path": ".github/_config.yml",
    "content": "remote_theme: adr/slate\nanchors: true\nshow_downloads: false\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: '/'\n    schedule:\n      interval: 'weekly'\n"
  },
  {
    "path": ".github/workflows/check.yml",
    "content": "name: Check\non:\n  push:\n    branches:\n      - main\n  pull_request:\n  schedule:\n    - cron: \"5 6 * * 1\"\n  workflow_dispatch:\nconcurrency:\n  group: \"${{ github.workflow }}-${{ github.head_ref || github.ref }}\"\n  cancel-in-progress: true\njobs:\n  pdf:\n    name: pdf (latexmk main-english)\n    runs-on: ubuntu-latest\n    steps:\n      - name: Set up Git repository\n        uses: actions/checkout@v6\n      - name: Install TeX Live\n        uses: zauguin/install-texlive@v4\n        with:\n          package_file: '${{ github.workspace }}/Texlivefile'\n          texlive_version: 2025\n      - name: Prepare latexmk\n        run: |\n          updmap -sys\n          texhash\n          tlmgr generate language --rebuild-sys\n          if [ ! -f \"latexmkrc\" ]; then\n            cp \"_latexmkrc\" \"latexmkrc\"\n          fi\n      - run: latexmk main-english\n\n      # Highlight mis-spelled words in the PDF\n      - uses: awalsh128/cache-apt-pkgs-action@latest\n        with:\n          packages: aspell aspell-en aspell-de\n          version: 1.0\n          execute_install_scripts: true\n      - name: post-setup aspell\n        # refs https://github.com/awalsh128/cache-apt-pkgs-action/issues/157\n        run: |\n          sudo apt-get install -y aspell-en aspell-de\n      - name: aspell\n        # Needs more adaption for scientific thesis; therefore disabled\n        if: ${{ false }}\n        run: |\n          for tex in $(ls *.tex content/*.tex 2>/dev/null); do\n            if [[ \"en\" == \"de\" && \"$tex\" == thesis-example* ]]; then\n              continue\n            fi\n\n            # The lualatex package \"spelling\" requires the content to be in a file ending with \".spell.bad\"\n            aspell --mode=tex\\\n              -l en_US\\\n              --encoding=utf-8\\\n              --conf=./.aspell.conf\\\n              -p ./.aspell.en.pws list\\\n              < $tex | sort | uniq >> main-english.spell.bad\n          done\n      - run: latexmk main-english\n\n      - name: Job summary using texlogsieve\n        run: |\n          texlogsieve --version | head -n 1\n\n          echo '```' >> $GITHUB_STEP_SUMMARY\n          texlogsieve main-english.log | tee -a \"$GITHUB_STEP_SUMMARY\" || true\n          echo '```' >> $GITHUB_STEP_SUMMARY\n      - uses: actions/upload-artifact@v7\n        with:\n          name: test-result\n          path: |\n            main-english.pdf\n            main-english.log\n            main-english.fls\n  word-count:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Set up Git repository\n        uses: actions/checkout@v6\n      - name: Install TeX Live\n        uses: zauguin/install-texlive@v4\n        with:\n          package_file: '${{ github.workspace }}/Texlivefile'\n          texlive_version: 2025\n      - name: Count words\n        run: |\n          texcount -utf8 -inc main-english.tex > texcount.txt\n          echo \"## TeXcount word count\" >> $GITHUB_STEP_SUMMARY\n          echo \"\" >> $GITHUB_STEP_SUMMARY\n          cat \"texcount.txt\" >> $GITHUB_STEP_SUMMARY\n\n          texcount -utf8 -inc -v -html main-english.tex > texcount.html\n\n          # output for summary\n          # too verbose - therefore disabled\n          #\n          # texcount -utf8 -inc -v -htmlcore main-english.tex > texcount.html-body\n          # echo \"\" >> $GITHUB_STEP_SUMMARY\n          # echo \"## TeXcount LaTeX interpretation\" >> $GITHUB_STEP_SUMMARY\n          # echo \"\" >> $GITHUB_STEP_SUMMARY\n          # cat \"texcount.html-body\" >> $GITHUB_STEP_SUMMARY\n      - uses: actions/upload-artifact@v7\n        with:\n          name: word-count\n          path: |\n            texcount.txt\n            texcount.html\n  spell-check:\n    # This is based on https://github.com/mh61503891/action-paper-aspell/tree/master\n    #\n    runs-on: ubuntu-latest\n    steps:\n      - name: Set up Git repository\n        uses: actions/checkout@v6\n\n      # Original action does not work well - see https://github.com/awalsh128/cache-apt-pkgs-action/pull/136\n      # The action is not updated - and thus the dictionaries are not updated\n      - uses: awalsh128/cache-apt-pkgs-action@latest\n        with:\n          packages: aspell aspell-en aspell-de\n          version: 1.0\n          execute_install_scripts: true\n      - name: post-setup aspell\n        # refs https://github.com/awalsh128/cache-apt-pkgs-action/issues/157\n        run: |\n          sudo apt-get install -y aspell-en aspell-de\n      - name: aspell\n        run: |\n          echo \"| file | status |\" >> $GITHUB_STEP_SUMMARY\n          echo \"| -- | -- |\" >> $GITHUB_STEP_SUMMARY\n          failure=0\n          for tex in $(ls *.tex content/*.tex 2>/dev/null); do\n            if [[ \"en\" == \"de\" && \"$tex\" == thesis-example* ]]; then\n              echo \"$tex skipped\"\n              continue\n            fi\n            echo \"Checking $tex...\"\n\n            # Words are output in the order they appear in the document\n            words=$(aspell --mode=tex -l en_US --encoding=utf-8 --conf=./.aspell.conf -p ./.aspell.en.pws list < $tex | tr '\\n' ' ')\n            if [ -z \"$words\" ]; then\n              echo \"| $tex | ✅ |\" >> $GITHUB_STEP_SUMMARY\n            else\n              echo \"| $tex | ❌ $words |\" >> $GITHUB_STEP_SUMMARY\n              if [[ \"$tex\" == \"main-english.tex\" ]]; then\n                failure=1\n              fi\n            fi\n          done\n          if [[ \"$failure\" -eq 1 ]]; then\n             echo \"\" >> $GITHUB_STEP_SUMMARY\n             echo 'If you want to ignore words, add them to `.aspell.en.pws` (your personal aspell dictionary)' >> $GITHUB_STEP_SUMMARY\n            exit 1\n          fi\n  indent:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Set up Git repository\n        uses: actions/checkout@v6\n      - uses: awalsh128/cache-apt-pkgs-action@latest\n        with:\n          packages: libyaml-tiny-perl libfile-homedir-perl\n          version: 1.0\n          execute_install_scripts: true\n      - name: Install latexindent\n        uses: zauguin/install-texlive@v4\n        with:\n          packages: latexindent\n          texlive_version: 2025\n      - run: make format\n      - name: No changes made by latexindent\n        run: git diff --exit-code\n"
  },
  {
    "path": ".github/workflows/gh-pages.yml",
    "content": "name: gh pages\non:\n  push:\n    branches:\n      - main\n      - add-gh-pages-workflow\n  workflow_dispatch:\nconcurrency:\n  group: \"${{ github.workflow }}-${{ github.head_ref || github.ref }}\"\n  cancel-in-progress: true\npermissions:\n  contents: write\njobs:\n  publish:\n    if: ${{ github.repository == 'latextemplates/scientific-thesis-template' }}\n    runs-on: ubuntu-latest\n    steps:\n      - name: Set up Git repository\n        uses: actions/checkout@v6\n      - name: Install TeX Live\n        uses: zauguin/install-texlive@v4\n        with:\n          package_file: '${{ github.workspace }}/Texlivefile'\n          texlive_version: 2025\n      - name: Prepare latexmk\n        run: |\n          updmap -sys\n          texhash\n          tlmgr generate language --rebuild-sys\n          if [ ! -f \"latexmkrc\" ]; then\n            cp \"_latexmkrc\" \"latexmkrc\"\n          fi\n      - run: latexmk main-english\n      - run: latexmk main-english-university-of-hamburg.tex\n      - run: latexmk main-german.tex\n      - run: latexmk main-german-university-of-hamburg.tex\n      - run: latexmk main-minted-english\n      - run: latexmk main-minted-english-university-of-hamburg.tex\n      - run: latexmk main-minted-german.tex\n      - run: latexmk main-minted-german-university-of-hamburg.tex\n      - name: prepare publish\n        run: |\n          mkdir publish\n          cp README.md publish/index.md\n          cd publish\n          cp -r ../docs/* .\n          cp ../*.pdf .\n      - name: Deploy to GitHub Pages\n        uses: crazy-max/ghaction-github-pages@v5\n        with:\n          target_branch: gh-pages\n          build_dir: publish\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/update-files.yml",
    "content": "name: Update Files\non:\n  push:\n    branches:\n      - switch-to-ltg\n      - update-ltg\n  workflow_dispatch:\nconcurrency:\n  group: update-files\n  cancel-in-progress: true\njobs:\n  generatetex:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        language: [en, de]\n        listings: [listings, minted]\n        variant: [ustutt, university-of-hamburg]\n    steps:\n      - name: Set up Git repository\n        uses: actions/checkout@v6\n        with:\n          submodules: recursive\n          ref: '${{ github.event.pull_request.head.ref }}'\n          token: ${{ secrets.GH_TOKEN_WRITE }}\n      - uses: actions/setup-node@v6\n        with:\n          node-version: '22'\n          cache: 'npm'\n          cache-dependency-path: 'generator-latex-template/package-lock.json'\n      - name: Make generator available globally\n        working-directory: ${{ github.workspace }}/generator-latex-template\n        run: |\n          npm install\n          npm link\n          npm install -g yo\n      - run: mkdir /tmp/ltg\n      - name: Generate template\n        shell: bash\n        working-directory: /tmp/ltg\n        run: |\n          yo $GITHUB_WORKSPACE/generator-latex-template/generators/app/index.js \\\n           --githubpublish\\\n           --overleaf=true\\\n           --docker=iot\\\n           --documentclass=scientific-thesis\\\n           --thesisvariant=${{ matrix.variant }}\\\n           --papersize=a4\\\n           --latexcompiler=both\\\n           --bibtextool=biblatex\\\n           --texlive=2025\\\n           --lang=${{ matrix.language }}\\\n           --font=default\\\n           --listings=${{ matrix.listings }}\\\n           --cleveref=true\\\n           --enquotes=csquotes\\\n           --tweakouterquote=babel\\\n           --todo=pdfcomment\\\n           --examples=true\\\n           --howtotext=true\n        env:\n          yeoman_test: true\n      - name: Prepare files\n        working-directory: /tmp/ltg\n        run: |\n          ls -la\n\n          if [ ${{ matrix.language }} == \"en\" ]; then\n            LANGUAGE=english\n          else\n            LANGUAGE=german\n          fi\n\n          if [ ${{ matrix.variant }} == \"ustutt\" ]; then\n            VARIANT=\"\"\n          else\n            VARIANT=\"-university-of-hamburg\"\n          fi\n\n          if [ ${{ matrix.listings }} == \"minted\" ]; then\n            mv main-$LANGUAGE.tex main-minted-$LANGUAGE$VARIANT.tex\n          else\n            if [ -n \"$VARIANT\" ]; then\n              mv main-$LANGUAGE.tex main-$LANGUAGE$VARIANT.tex\n            fi\n          fi\n\n          # remove files which should not be overwritten\n\n          # _latexmkrc alternates between including and excluding \"--shell-escape\"; we just want to keep the minted + en version of it\n          if [ \"${{ matrix.listings }}\" != \"minted\" ] || [ \"${{ matrix.language }}\" != \"en\" ]; then\n            echo \"REMOVING _latexmkrc\"\n            rm Makefile\n            rm README.md\n            rm _latexmkrc\n            rm -rf .github/workflows\n            rm .dockerignore\n            rm .gitignore\n            rm abbreviations.tex\n            rm commands.tex\n          fi\n\n          # Files are ready\n          # Overwrite old versions in $GITHUB_WORKSPACE\n          cp -r * $GITHUB_WORKSPACE\n          cp -r .* $GITHUB_WORKSPACE\n\n          # output current status\n          cd ${{ github.workspace }}\n          git status\n          git diff\n      - name: Commit changes\n        uses: EndBug/add-and-commit@v10\n        with:\n          message: 'Update files based on generated files by template generator'\n          author_name: 'github-actions[bot]'\n          author_email: 'github-actions[bot]@users.noreply.github.com'\n          push: false\n      - name: Push changes\n        run: |\n          parallel --retries 10 --delay 9 ::: \"git pull --rebase; git push\"\n  publish:\n    runs-on: ubuntu-latest\n    needs: [generatetex]\n    steps:\n      - name: Set up Git repository\n        uses: actions/checkout@v6\n        with:\n          ref: '${{ github.event.pull_request.head.ref }}'\n      - name: Create latexmkrc\n        run: |\n          ls -la\n          # use latexmkrc (which is disabled due to easy overleaf usage)\n          cp _latexmkrc latexmkrc\n      - name: Install TeX Live\n        uses: zauguin/install-texlive@v4\n        with:\n          package_file: '${{ github.workspace }}/Texlivefile'\n      - name: Prepare latexmk\n        run: |\n          updmap -sys\n          texhash\n          tlmgr generate language --rebuild-sys\n      - name: Build all examples\n        run: |\n          for doc in main*.tex; do\n            latexmk \"$doc\"\n\n            echo \"\" >> \"$GITHUB_STEP_SUMMARY\"\n            echo \"## $doc\" >> \"$GITHUB_STEP_SUMMARY\"\n            echo \"\" >> \"$GITHUB_STEP_SUMMARY\"\n            echo '```' >> \"$GITHUB_STEP_SUMMARY\"\n            texlogsieve < \"${doc%.tex}.log\" >> \"$GITHUB_STEP_SUMMARY\" || true\n            echo '```' >> \"$GITHUB_STEP_SUMMARY\"\n          done\n      - run: |\n          mkdir publish\n          cp main*.pdf publish/\n          cp README.md publish/\n          cp .github/_config.yml publish/\n\n          mkdir publish/docs\n          cp -r docs/adr publish/docs/\n      - uses: actions/upload-artifact@v7\n        with:\n          name: publish\n          path: publish/\n      - name: Deploy\n        if: github.ref == 'refs/heads/main'\n        uses: peaceiris/actions-gh-pages@v4\n        with:\n          github_token: ${{ secrets.GITHUB_TOKEN }}\n          publish_dir: ./publish\n          enable_jekyll: true\n"
  },
  {
    "path": ".gitignore",
    "content": "main-english.pdf\nmain-english-*.pdf\nfigures/*.pdf_tex\n\nmain-english.tex\nmain-english-university-of-hamburg.tex\nmain-german.tex\nmain-german-university-of-hamburg.tex\nmain-minted-english.tex\nmain-minted-english-university-of-hamburg.tex\nmain-minted-german.tex\nmain-minted-german-university-of-hamburg.tex\n\n# glossaries\n*.glo-abr\n\n# glossaries-extra\n*.ist\n\n# spelling\n*.spell.bad\n*.spell.txt\n\n# plantuml\n*-plantuml.latex\n*-plantuml.txt\n\n# latexindent\n*.bak\n*.bak?\n*.bak??\n\n# tex4ht\n*.4ct\n*.4tc\n\n# Generated when using Listing environment\n# \\newfloat{Listing}{tbp}{code}[chapter]\n*.code\n\n# IntelliJ\n.idea/\n\n# new minted\n*.data.minted\n\n# Created by https://www.toptal.com/developers/gitignore/api/emacs,latex,linux,macos,jabref,windows,libreoffice,microsoftoffice,visualstudiocode\n# Edit at https://www.toptal.com/developers/gitignore?templates=emacs,latex,linux,macos,jabref,windows,libreoffice,microsoftoffice,visualstudiocode\n\n### Emacs ###\n# -*- mode: gitignore; -*-\n*~\n\\#*\\#\n/.emacs.desktop\n/.emacs.desktop.lock\n*.elc\nauto-save-list\ntramp\n.\\#*\n\n# Org-mode\n.org-id-locations\n*_archive\n\n# flymake-mode\n*_flymake.*\n\n# eshell files\n/eshell/history\n/eshell/lastdir\n\n# elpa packages\n/elpa/\n\n# reftex files\n*.rel\n\n# AUCTeX auto folder\n/auto/\n\n# cask packages\n.cask/\ndist/\n\n# Flycheck\nflycheck_*.el\n\n# server auth directory\n/server/\n\n# projectiles files\n.projectile\n\n# directory configuration\n.dir-locals.el\n\n# network security\n/network-security.data\n\n\n### JabRef ###\n# JabRef - https://www.jabref.org/\n*.bak\n*.sav\n\n### LaTeX ###\n## Core latex/pdflatex auxiliary files:\n*.aux\n*.lof\n*.log\n*.lot\n*.fls\n*.out\n*.toc\n*.fmt\n*.fot\n*.cb\n*.cb2\n.*.lb\n\n## Intermediate documents:\n*.dvi\n*.xdv\n*-converted-to.*\n# these rules might exclude image files for figures etc.\n# *.ps\n# *.eps\n# *.pdf\n\n## Generated if empty string is given at \"Please type another file name for output:\"\n.pdf\n\n## Bibliography auxiliary files (bibtex/biblatex/biber):\n*.bbl\n*.bcf\n*.blg\n*-blx.aux\n*-blx.bib\n*.run.xml\n\n## Build tool auxiliary files:\n*.fdb_latexmk\n*.synctex\n*.synctex(busy)\n*.synctex.gz\n*.synctex.gz(busy)\n*.pdfsync\n\n## Build tool directories for auxiliary files\n# latexrun\nlatex.out/\n\n## Auxiliary and intermediate files from other packages:\n# algorithms\n*.alg\n*.loa\n\n# achemso\nacs-*.bib\n\n# amsthm\n*.thm\n\n# beamer\n*.nav\n*.pre\n*.snm\n*.vrb\n\n# changes\n*.soc\n\n# comment\n*.cut\n\n# cprotect\n*.cpt\n\n# elsarticle (documentclass of Elsevier journals)\n*.spl\n\n# endnotes\n*.ent\n\n# fixme\n*.lox\n\n# feynmf/feynmp\n*.mf\n*.mp\n*.t[1-9]\n*.t[1-9][0-9]\n*.tfm\n\n#(r)(e)ledmac/(r)(e)ledpar\n*.end\n*.?end\n*.[1-9]\n*.[1-9][0-9]\n*.[1-9][0-9][0-9]\n*.[1-9]R\n*.[1-9][0-9]R\n*.[1-9][0-9][0-9]R\n*.eledsec[1-9]\n*.eledsec[1-9]R\n*.eledsec[1-9][0-9]\n*.eledsec[1-9][0-9]R\n*.eledsec[1-9][0-9][0-9]\n*.eledsec[1-9][0-9][0-9]R\n\n# glossaries\n*.acn\n*.acr\n*.glg\n*.glo\n*.gls\n*.glsdefs\n*.lzo\n*.lzs\n*.slg\n*.slo\n*.sls\n\n# uncomment this for glossaries-extra (will ignore makeindex's style files!)\n# *.ist\n\n# gnuplot\n*.gnuplot\n*.table\n\n# gnuplottex\n*-gnuplottex-*\n\n# gregoriotex\n*.gaux\n*.glog\n*.gtex\n\n# htlatex\n*.4ct\n*.4tc\n*.idv\n*.lg\n*.trc\n*.xref\n\n# hyperref\n*.brf\n\n# knitr\n*-concordance.tex\n# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files\n# *.tikz\n*-tikzDictionary\n\n# listings\n*.lol\n\n# luatexja-ruby\n*.ltjruby\n\n# makeidx\n*.idx\n*.ilg\n*.ind\n\n# minitoc\n*.maf\n*.mlf\n*.mlt\n*.mtc[0-9]*\n*.slf[0-9]*\n*.slt[0-9]*\n*.stc[0-9]*\n\n# minted\n_minted*\n*.pyg\n\n# morewrites\n*.mw\n\n# newpax\n*.newpax\n\n# nomencl\n*.nlg\n*.nlo\n*.nls\n\n# pax\n*.pax\n\n# pdfpcnotes\n*.pdfpc\n\n# sagetex\n*.sagetex.sage\n*.sagetex.py\n*.sagetex.scmd\n\n# scrwfile\n*.wrt\n\n# svg\nsvg-inkscape/\n\n# sympy\n*.sout\n*.sympy\nsympy-plots-for-*.tex/\n\n# pdfcomment\n*.upa\n*.upb\n\n# pythontex\n*.pytxcode\npythontex-files-*/\n\n# tcolorbox\n*.listing\n\n# thmtools\n*.loe\n\n# TikZ & PGF\n*.dpth\n*.md5\n*.auxlock\n\n# titletoc\n*.ptc\n\n# todonotes\n*.tdo\n\n# vhistory\n*.hst\n*.ver\n\n# easy-todo\n*.lod\n\n# xcolor\n*.xcp\n\n# xmpincl\n*.xmpi\n\n# xindy\n*.xdy\n\n# xypic precompiled matrices and outlines\n*.xyc\n*.xyd\n\n# endfloat\n*.ttt\n*.fff\n\n# Latexian\nTSWLatexianTemp*\n\n## Editors:\n# WinEdt\n\n# Texpad\n.texpadtmp\n\n# LyX\n*.lyx~\n\n# Kile\n*.backup\n\n# gummi\n.*.swp\n\n# KBibTeX\n*~[0-9]*\n\n# TeXnicCenter\n*.tps\n\n# auto folder when using emacs and auctex\n./auto/*\n*.el\n\n# expex forward references with \\gathertags\n*-tags.tex\n\n# standalone packages\n*.sta\n\n# Makeindex log files\n*.lpz\n\n# xwatermark package\n*.xwm\n\n# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib\n# option is specified. Footnotes are the stored in a file with suffix Notes.bib.\n# Uncomment the next line to have this generated file ignored.\n#*Notes.bib\n\n### LaTeX Patch ###\n# LIPIcs / OASIcs\n*.vtc\n\n# glossaries\n*.glstex\n\n### LibreOffice ###\n# LibreOffice locks\n.~lock.*#\n\n### Linux ###\n\n# temporary files which can be created if a process still has a handle open of a deleted file\n.fuse_hidden*\n\n# KDE directory preferences\n.directory\n\n# Linux trash folder which might appear on any partition or disk\n.Trash-*\n\n# .nfs files are created when an open file is removed but is still being accessed\n.nfs*\n\n### macOS ###\n# General\n.DS_Store\n.AppleDouble\n.LSOverride\n\n# Icon must end with two \\r\nIcon\n\n\n# Thumbnails\n._*\n\n# Files that might appear in the root of a volume\n.DocumentRevisions-V100\n.fseventsd\n.Spotlight-V100\n.TemporaryItems\n.Trashes\n.VolumeIcon.icns\n.com.apple.timemachine.donotpresent\n\n# Directories potentially created on remote AFP share\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n\n### macOS Patch ###\n# iCloud generated files\n*.icloud\n\n### MicrosoftOffice ###\n*.tmp\n\n# Word temporary\n~$*.doc*\n\n# Word Auto Backup File\nBackup of *.doc*\n\n# Excel temporary\n~$*.xls*\n\n# Excel Backup File\n*.xlk\n\n# PowerPoint temporary\n~$*.ppt*\n\n# Visio autosave temporary files\n*.~vsd*\n\n### VisualStudioCode ###\n.vscode/*\n!.vscode/settings.json\n!.vscode/tasks.json\n!.vscode/launch.json\n!.vscode/extensions.json\n!.vscode/*.code-snippets\n\n# Local History for Visual Studio Code\n.history/\n\n# Built Visual Studio Code Extensions\n*.vsix\n\n### VisualStudioCode Patch ###\n# Ignore all local history of files\n.history\n.ionide\n\n### Windows ###\n# Windows thumbnail cache files\nThumbs.db\nThumbs.db:encryptable\nehthumbs.db\nehthumbs_vista.db\n\n# Dump file\n*.stackdump\n\n# Folder config file\n[Dd]esktop.ini\n\n# Recycle Bin used on file shares\n$RECYCLE.BIN/\n\n# Windows Installer files\n*.cab\n*.msi\n*.msix\n*.msm\n*.msp\n\n# Windows shortcuts\n*.lnk\n\n# End of https://www.toptal.com/developers/gitignore/api/emacs,latex,linux,macos,jabref,windows,libreoffice,microsoftoffice,visualstudiocode\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"generator-latex-template\"]\n\tpath = generator-latex-template\n\turl = https://github.com/latextemplates/generator-latex-template.git\n"
  },
  {
    "path": ".vscode/extensions.json",
    "content": "{\n    \"recommendations\": [\n        \"manhen.latex-workshop-2\",\n        \"tecosaur.latex-utilities\",\n        \"ltex-plus.vscode-ltex-plus\"\n    ]\n}\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/).\nFrom 2025-01-26 onwards, versioning is done using [Calendar Versioning](https://calver.org/).\n\n## [2025-10-25]\n\n### Added\n\n- Added initial support for University of Hamburg\n\n### Changed\n\n- Single line spacing in text\n\n## [2025-10-20]\n\n### Changed\n\n- Now generated using the [latex template generator](https://www.npmjs.com/package/generator-latex-template).\n- One `main-*` document for both pdflatex and lualatex.\n\n### Removed\n\n- Removed support for Paderborn\n\n## [2025-01-26]\n\n### Added\n\n- Added initial `Dockerfile` to enable building using Docker.\n- Added package [mindflow](https://www.ctan.org/pkg/mindflow), which supports quickly noting down thoughts with a) a proper rendering of LaTeX and b) a proper differentiation from the main text\n- Added more LaTeX hints\n\n### Changed\n\n- Switch to pdflatex (to speed up compile time)\n- Now generated using the [latex template generator](https://www.npmjs.com/package/generator-latex-template).\n- Replaced `\\ifluatex` statements by separate `.tex` documents. This makes each `.tex` document smaller and simpler to understand.\n- Updated to TeXLive 2021\n\n### Fixed\n\n- Fixed examples in latexhints\n- Fixed typo in latexmk action name\n- Fixed mention of license in README\n\n### Removed\n\n## [3.0.0] &ndash; 2020-09-03\n\n### Fixed\n\n- Fixed loading of newtxmath.\n- Fixed loading of \"TeX Gyre Termes\" and \"TeX Gyre Heros\" on MiKTeX.\n- Fixed bold and italics\n- Fixed font in math environment `\\mathrm` to use \"TeX Gyre Termes\"\n- Fixed renaming of `\\acronymname` to \"Abkürzungsverzeichnis\" when using the german template\n- Fixed loading of \"TeX Gyre Heros\" variants on LuaLaTeX\n- Fixed the broken PlantUML setup link in the documentation\n\n### Changed\n\n- Simplified styleguide of `config.tex`\n- Removed package [dtk-logos](https://ctan.org/tex-archive/usergrps/dante/dtk), because it causes issues with lualatex\n- Removed package [amssymb](https://ctan.org/pkg/amsfonts?lang=de) to fix compilation error. [#125](https://github.com/latextemplates/scientific-thesis-template/issues/125)\n- Change documentation to tell users to download `master.zip` instead of the latest release.\n- Switch from lualatex to pdflatex as default compiler.\n\n### Added\n\n- Added section \"related work\". [#127](https://github.com/latextemplates/scientific-thesis-template/issues/127)\n\n### Removed\n\n- Removed option `hyperref` at xcolor package. It is not used and caused troubles at some setups.\n\n## [3.0.0-beta.4] – 2019-02-10\n\n### Added\n\n- Added [stfloats](https://ctan.org/pkg/stfloats) package to enable footnotes below floats.\n- Added `ngerman` as class option for German documents.\n- Added macros `\\eg` and `\\ie`.\n- Added macro `\\powerset` to correctly typeset the powerset symbol.\n- Added example for [forest package](https://ctan.org/pkg/forest).\n- Enable deletion of *.bbl when calling `latexmk -c`\n\n### Changed\n\n- Change kind of loading of `cleveref` package.\n- Strings for `cleveref` in German are set explicitly.\n\n### Fixed\n\n- There were English words appearing in German documents. [#100](https://github.com/latextemplates/scientific-thesis-template/pull/100) [#103](https://github.com/latextemplates/scientific-thesis-template/issues/103)\n- Links to abbreviations work again. [#102](https://github.com/latextemplates/scientific-thesis-template/issues/102)\n- Fix spacing between numbers and text in the TOC. [#78](https://github.com/latextemplates/scientific-thesis-template/issues/78)\n- `latexhints-minted-german.tex` compiles with pdflatex again\n- Fix \"LaTeX Warning: Reference `tab:Results' on page 1 undefined on input line 422.\"\n\n## [3.0.0-beta.3] – 2018-06-06\n\n## Fixed\n\n- German quotes are correct when using `\\qq{...}`.\n- `.editorconfig` only for `*.tex`, `*.bib`, `*.yaml` to enable seamless editing of `*.cpp`, `*.java`, etc. Fixes [#25](https://github.com/latextemplates/scientific-thesis-template/issues/90).\n\n### Changed\n\n- Bibliography goes before appendix.\n\n## [3.0.0-beta.2] – 2018-06-04\n\n### Added\n\n- LatexDemo to show the LaTeX source code for equations and enumerations and the result in a box next to it.\n- ADR-0004 explaining the usage of lualatex for ligature handling.\n\n### Changed\n\n- Moved documentation contents of `README.md` to `docs/index.md`.\n- Refined setup instructions.\n- Refined overleaf instructions.\n- Refined instructions not to use `\\\\` to separate paragraphs in LaTeX (but to use a blank line).\n- Documentation improvements in `config.tex`.\n\n## [3.0.0-beta.1] – 2018-03-12\n\n### Added\n\n- Magic comment `% !TeX TXS-program:compile = txs:///lualatex/[--shell-escape]` to `main-minted-german.tex`.\n\n### Changed\n\n- Default compiler is `lualatex` (instead of `pdflatex`): `% !TeX program` and `.latexmkrc` adapted accordingly.\n- Quotes are now made by `\\qq{word}` instead of `\\enquote{word}` to easy typing.\n\n## [2.5.0] – 2018-03-07\n\n### Added\n\n- Add package [selnolig](https://ctan.org/pkg/selnolig) to correctly handle [ligatures](https://en.wikipedia.org/wiki/Typographic_ligature).\n- Add package [tikz-uml](https://perso.ensta-paristech.fr/~kielbasi/tikzuml/) for generating uml diagrams.\n- Add package [longtable](https://www.ctan.org/pkg/longtable) for tables over multiple pages.\n\n### Changed\n\n- Monospaced font is now Inconsolata.\n- Reorderded `latexhints-*.tex` to keep topics (figures, tables, code) together.\n- Switch from `glyphtounicode` to [cmap](https://ctan.org/pkg/cmap) package.\n\n### Fixed\n\n- Fix encoding in PDF bookmarks (pdf.js).\n- Compilation with `lualatex` works again.\n\n## [2.4.0] – 2018-02-28\n\n### Added\n\n- Added hint on `\\abs` command to `latexhints-*.tex`.\n- Added `\\initialism` and direct commands (e.g., `BPEL`) to have nice renderings of names of standards.\n  Thereby added [lccaps](https://ctan.org/pkg/lccaps) package.\n  They are rendered differently in English and German documents.\n\n### Fixed\n\n- Babel shorthands work in English texts, too.\n- No more warning of deprecated `firstinits` (fixed by replacing it by `giveninits`).\n- In English hints: no more double section \"Weitere Illustrationen\".\n\n### Changed\n\n- `maxcitenames` of biblatex is now `2` to abbreviate also three authors when using `\\Citet{...}`.\n\n### Removed\n\n- Removed outdated hint on `\\textsc` in `latexhints-*.tex`.\n\n## [2.3.0] – 2018-02-04\n\n### Changed\n\n- URLs are typeset in monospaced font again. With the change of the font to Times Roman, it looks good in the monospaced font again.\n- Replace 1997 [footnote](https://ctan.org/pkg/footnote) package by [footnotehyper](https://ctan.org/pkg/footnotehyper).\n- Switch from manual `\\clubpenalty` and `\\widowpenalty` commands to [nowidow](https://www.ctan.org/pkg/nowidow) package.\n- More English translations in `config.tex`.\n- Ligatures are disabled for monospaced font. E.g., \\texttt{--} stays `--` and is not converted to an en dash.\n\n### Fixed\n\n- Listings rendered by minted are now also shown in the TOC\n- latexindent config: `removeSentenceLineBreaks` set to 0 to avoid collapsing of environments\n\n## [2.2.0] – 2018-01-19\n\n### Added\n\n- Added package [upquote](https://ctan.org/pkg/upquote) to enable backticks in verbatim text.\n\n### Changed\n\n- Change package option `final` to `draft=false` to reduce output from KOMA-Script\n- Change font text to Times Roman for both English and German templates. Fixes [#48](https://github.com/latextemplates/scientific-thesis-template/issues/48).\n\n## [2.1.1] – 2018-01-18\n\n### Added\n\n- Lines in listings (made by `lstlistings`) are numbered.\n- Initial [latexindent](https://ctan.org/pkg/latexindent) config.\n\n### Fixed\n\n- Fixed numbering of minted listings.\n\n## [2.1.0] – 2018-01-16\n\n### Added\n\n- Added `main-minted-german.tex` to show how [minted](https://github.com/gpoore/minted) can be used.\n- Added an explanation (`docs/overleaf.md`) with screenshots of how to start at overleaf.\n\n### Changed\n\n- Switched from [subfig](https://ctan.org/pkg/subfig) to [subcaption](https://ctan.org/pkg/subcaption) package\n- Enabled line breaks in long urls (which are not separated by spaces or slashes) in the bibliography.\n- Option `hyphens` added to package `url`: URLs can now also be hyphenated at hyphens, even though that might be confusing: Is the \"-\" part of the address or just a hyphen?.\n- Switch from `uni-stuttgart-cs-cover.sty` to [scientific-thesis-cover](https://ctan.org/pkg/scientific-thesis-cover).\n- Rename `latex-hints-de.tex` to `latexhints-german.tex` to be consistent with the filename pattern for `main-*.tex`.\n\n## [2.0.1] – 2017-12-19\n\n### Added\n\n- Added homepage at <https://github.com/latextemplates/scientific-thesis-template> containing rendered examples created by CircleCI.\n- Added [Markdown Architectural Decision Records](https://adr.github.io/madr/) to `docs/adr` folder.\n\n### Changed\n\n- Microtype is now loaded with `babel=true` option. This should lead to even better micro-typographic results.\n- Refined styleguide in `config.tex`.\n- Refined `README.md`.\n\n### Fixed\n\n- Fix typo in \"Bachelor\" in `main-paderborn-*.tex`.\n\n## [2.0.0] – 2017-12-18\n\n### Added\n\n- `main-paderborn-english.tex` and `main-paderborn-german.tex`- start documents for Paderborn University.\n- `main-english.tex` – start document for English documents.\n\n### Fixed\n\n- Remove outdated section \"Using with your own git repository\"\n\n### Changed\n\n- The main file for works is `main-german.tex` for German documents.\n- No text content in sub files. Most users do not need the split. Advanced users can split the content by themselves.\n- All configuration files put in the root folder.\n- Remove \"CR classification\" from `uni-stuttgart-cs-cover.sty`.\n- git tags now without `v` prefix.\n- Change license to [CC0](https://creativecommons.org/publicdomain/zero/1.0/) to ensure wide use.\n\n## [1.3.0] – 2017-12-11\n\n### Added\n\n- New course \"Medieninformatik\" (`medinf`)\n\n### Fixed\n\n- Translate float name of 'Algorithmus' environment in English thesis\n- Translate float name of 'algorithm' environment only in German thesis\n\n### Changed\n\n- The repository uses the branch `master` as default branch and not `template` anymore.\n\n## [1.2.0] – 2017-07-28\n\n### Changed\n\n- Fixed non-inline todos\n- Use German name for 'list of todos' in German thesis\n\n## [1.1.0] – 2017-07-22\n\n### Changed\n\n- English works also take the same heading style than German works (sans serif)\n- made font size default again (now 11pt instead of 12pt) to look better\n- margins are set in a way that the page content does not \"jump\" when reading on screen.\n\n## 1.0.0 – 2017-06-16\n\n### Changed\n\n- Start versioning based on the current version at 1.0.0.\n- Add initial [CONTRIBUTING.md](CONTRIBUTING.md).\n- `number` for a thesis is now completely optional.\n\n[Unreleased]: https://github.com/latextemplates/scientific-thesis-template/compare/2025-10-25...HEAD\n[2025-10-25]: https://github.com/latextemplates/scientific-thesis-template/compare/2025-10-20...2025-10-25\n[2025-10-20]: https://github.com/latextemplates/scientific-thesis-template/compare/2025-01-26...2025-10-20\n[2025-01-26]: https://github.com/latextemplates/scientific-thesis-template/compare/3.0.0...2025-01-26\n[3.0.0]: https://github.com/latextemplates/scientific-thesis-template/compare/3.0.0-beta.4...3.0.0\n[3.0.0-beta.4]: https://github.com/latextemplates/scientific-thesis-template/compare/3.0.0-beta.3...3.0.0-beta.4\n[3.0.0-beta.3]: https://github.com/latextemplates/scientific-thesis-template/compare/3.0.0-beta.2...3.0.0-beta.3\n[3.0.0-beta.2]: https://github.com/latextemplates/scientific-thesis-template/compare/3.0.0-beta.1...3.0.0-beta.2\n[3.0.0-beta.1]: https://github.com/latextemplates/scientific-thesis-template/compare/2.5.0...3.0.0-beta.1\n[2.5.0]: https://github.com/latextemplates/scientific-thesis-template/compare/2.4.0...2.5.0\n[2.4.0]: https://github.com/latextemplates/scientific-thesis-template/compare/2.3.0...2.4.0\n[2.3.0]: https://github.com/latextemplates/scientific-thesis-template/compare/2.2.0...2.3.0\n[2.2.0]: https://github.com/latextemplates/scientific-thesis-template/compare/2.1.1...2.2.0\n[2.1.1]: https://github.com/latextemplates/scientific-thesis-template/compare/2.1.0...2.1.1\n[2.1.0]: https://github.com/latextemplates/scientific-thesis-template/compare/2.0.1...2.1.0\n[2.0.1]: https://github.com/latextemplates/scientific-thesis-template/compare/2.0.0...2.0.1\n[2.0.0]: https://github.com/latextemplates/scientific-thesis-template/compare/v1.2.0...2.0.0\n[1.3.0]: https://github.com/latextemplates/scientific-thesis-template/compare/v1.2.0...v1.3.0\n[1.2.0]: https://github.com/latextemplates/scientific-thesis-template/compare/v1.1.0...v1.2.0\n[1.1.0]: https://github.com/latextemplates/scientific-thesis-template/compare/v1.0.0...v1.1.0\n\n<!-- markdownlint-disable-file MD024 MD033 -->\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to the scientific thesis template\n\nWe welcome contributions to this template and encourage to create a fork, clone, **create a new branch** (such as `fix-for-issue-121`), **work on the new branch — not master**, and create a pull request.\nBe sure to create a **separate branch** for each improvement you implement.\nTake a look at GitHub's excellent [help documentation] for a detailed explanation and the explanation of [Feature Branch Workflow](https://de.atlassian.com/git/tutorials/comparing-workflows#feature-branch-workflow) for the idea behind this kind of development.\n\nAlternatively, you can just use the edit button if a single file in the web browser.\nSteps described at https://github.com/JabRef/help.jabref.org/blob/gh-pages/CONTRIBUTING.md.\nKeep in mind that these steps are wrote for <https://help.jabref.org>, but they are also fully applicable for this repository.\n\n## Rights\n\nBy contributing, you agree that your contribution is made available under [BSD0](https://choosealicense.com/licenses/0bsd/#), but that the current maintainer of this work may change the license as it fits.\n\n## Create a pull request\n\nCreate a pull request on GitHub.\nFor text inspirations, consider [How to write the perfect pull request](https://github.com/blog/1943-how-to-write-the-perfect-pull-request).\n\nYou can add the prefix `[WIP]` to indicate that the pull request is not yet complete, but you want to discuss something or inform about the current state of affairs.\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM registry.gitlab.com/islandoftex/images/texlive:latest\nWORKDIR /workdir\n"
  },
  {
    "path": "LICENSE",
    "content": "BSD Zero Clause License\n\nCopyright (c) [year] [fullname]\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "Makefile",
    "content": "# Executables\n\n## Required for thumbpdf as latexmk does not support thumbpdf by itself\nlatexcompiler = lualatex\n\n## evince at linux\nviewer = 'C:/Program Files (x86)/SumatraPDF/SumatraPDF.exe'\n\n## Editor\neditor = gedit\n\n# Files\n\n## Main file name and literature list\nMASTER_TEX = main-english.tex\nLITERATURE = bibliography.bib\n\n## Derived file names\nSRC = $(shell basename $(MASTER_TEX) .tex)\nTEX_FILES = $(wildcard *.tex content/*.tex)\nGFX_FILES = $(wildcard figures/*)\n\nPDF = $(SRC).pdf\nAUX = $(SRC).aux\n\n# Other\n\ndate=$(shell date +%Y%m%d%H%M)\n\n# Tasks\n\n\n## was wird gemacht, falls nur make aufgerufen wird\n## hier sollte noch der aspell check rein für jedes file einzeln über for schleife\nall: $(PDF)\n.PHONY: $(PDF)\n\ncompile: $(PDF)\n\n$(PDF): $(MASTER_TEX) $(LITERATURE) $(TEX_FILES) $(GFX_FILES)\n\tlatexmk $(MASTER_TEX)\n\nclean:\n\tlatexmk -C\n\n## Endversion - mit eingebauter Seitenvorschau\n## Mehrere Durchlaeufe, da bei longtable einige runs mehr vonnoeten sind...\nfinal: $(PDF)\n\tthumbpdf $(PDF)\n\t$(latexcompiler) $(MASTER_TEX)\n\nmrproper: clean\n\trm -f *~\n\n\n# Verschiedene Ausgabformate\n\npdf: $(PDF)\n\nstand: $(PDF)\n\tcp $(PDF) \"Ausarbeitung - Stand $(date).pdf\"\n\nhtml: clean pdf\n\trm $(AUX)\n\thtlatex $(SRC) \"html,word,charset=utf8\" \" -utf8\"\n\n\n# Tools\n\nview: pdf\n\t$(viewer) $(PDF)&\n\nedit:\n\t$(viewer) $(PDF)&\n\t$(editor) *.tex&\n\n\n# Support\n\n## Rechtschreibung\n##\n## Das Ganze am Besten vor der final und als eigene Version ala \"make aspell\"\n##\n## .aspell.conf - zu ignorierende LaTeX-Befehle\n##   Schreiben der LaTeX-Befehle in eine config Dateiname. Sieht so aus:\n##   add-tex-command democommand PO // PO := prüfe []{} ;; po := ignoriere []{}\n##\n## .aspell.en.pws - persönliches Wörterbuch\naspell:\n\tfor tex in $(TEX_FILES);\n\t\tdo\n\t\t\taspell --mode=tex -l en_US --encoding=utf-8 --conf=./.aspell.conf -p ./.aspell.en.pws -c $$tex;\n\t\tdone\n\nshowundef:\n\tgrep undefined $(LOG)\n\n\n## Reformatierung\n\nformat:\n\tlatexindent -l -s -sl -w $(SRC)\n\nindent:\n\tlatexindent -y=\"indentPreamble:1,defaultIndent:'  '\" -m -w $(SRC)\n\nsplit-sentences:\n\tlatexindent -m -l -s -sl -w $(SRC)\n"
  },
  {
    "path": "README.md",
    "content": "# LaTeX Template for a Scientific Thesis\n\nThis template is a general template for scientific theses.\nCurrently, it is the unofficial LaTeX template for Master, Bachelor, Diploma, and Student Theses at following institutions:\n\n- University of Stuttgart, Computer Science\n\n  - 🇺🇸 [English example](https://latextemplates.github.io/scientific-thesis-template/main-english.pdf)\n  - 🇺🇸 [English example with minted and PlantUML](https://latextemplates.github.io/scientific-thesis-template/main-minted-english.pdf)\n  - 🇺🇸 [English example with minted and PlantUML (University of Hamburg)](https://latextemplates.github.io/scientific-thesis-template/main-minted-english-university-of-hamburg.pdf)\n  - 🇩🇪 [German example](https://latextemplates.github.io/scientific-thesis-template/main-german.pdf)\n  - 🇩🇪 [German example with minted and PlantUML](https://latextemplates.github.io/scientific-thesis-template/main-minted-german.pdf)\n  - 🇩🇪 [German example with minted and PlantUML (Universität Hamburg)](https://latextemplates.github.io/scientific-thesis-template/main-minted-german-university-of-hamburg.pdf)\n\nThe template will be extended to support theses from different institutions.\n\nFor [architectural decision records](https://adr.github.io) see [docs/adr](docs/adr/).\n\n## Quick start\n\n1. Download\n\n    1. Go to the development version at <https://github.com/latextemplates/scientific-thesis-template/archive/main.zip>. Reason: LaTeX packages change so fast over time and we cannot do a release on each change.\n    2. Extract `scientific-thesis-template-main.zip` to the directory you want to work. E.g., `c:\\users\\user\\documents\\thesis`.\n\n2. Start texing\n\n    - University of Stuttgart:\n        - English: `main-english.tex`\n        - German: `main-german.tex`\n        - German advanced usage: `main-minted-german.tex` (see below)\n\n### Usage at overleaf\n\nSee [docs/overleaf](docs/overleaf/).\n\n## Usage\n\n- `main-english.tex` is the main document\n- Use \"lualatex + biblatex\" in your TeX editor or `latexmk main-english` / `make` in the command line\n\n### Using `latexmk`\n\n[latexmk] is a very smart tool for latex compilation.\nIt executes the latex tools as often as needed to get the final PDF.\n(More information about why `latexmk` is great can be found at <https://tex.stackexchange.com/a/249243/9075>.)\n\nTo build the whole document, execute following command.\nNote that this requires a working perl installation.\n\n```bash\nlatexmk main-english\n```\n\nTo enable latexmk, please move `_latexmkrc` to `latexmkrc`.\n\nIf you want automatic compilation use following command:\n\n```bash\nlatexmk -pvc main-english\n```\n\nThis will also open a [Sumatra PDF] and only works with the supplied configuration.\n\n#### latexmk configuration\n\nThis repository ships a `.latexmkrc` which is read by latexmk.\nIn case there is a `_latexmkrc` file, you need to rename it to `.latexmkrc`.\nIt is configured for Windows and especially sets Sumatra PDF as default PDF viewer.\nYou can make this local configuration a global configuration, when you put it at [the right place](http://tex.stackexchange.com/a/41149/9075).\n\nIf you want to add more packages, configure it there.\nFor instance, for support of `makeglossaries` see <http://tex.stackexchange.com/questions/1226/how-to-make-latexmk-use-makeglossaries>.\n\n### Debugging LaTeX errors\n\nIn case something goes wrong, you can instruct the LaTeX compiler to stop at the first error:\n\n```bash\nlualatex --synctex=1 --shell-escape main-english\n```\n\nRun `biber main-english` to get the bibliography rendered (execute `lualatex` afterwards).\n\n### Advanced usage\n\nOn the command line, there are additional features:\n\n- `latexmk -C` or `make clean` for cleaning up\n- `make format` to reformat the `.tex` files (one sentence per line and indent)\n- `make aspell` for interactive spell checking\n- `make stand`: Creates a new PDF with the current status of the thesis.\n- `make view`: Opens the configured viewer\n- `make mrproper`: Cleans up and removes also editor backup files.\n\n## Benefits\n\nFollowing features are enabled in this template:\n\n- (Optional) Typesetting of listings using advanced highlighting powered by the [minted] package.\n  `minted` provides better output than [listings], but requires [latexminted] to be installed.\n- Generated PDF allows for copy and paste of text without getting words with [ligatures](https://en.wikipedia.org/wiki/Typographic_ligature) such as \"workflow\" destroyed.\n  This is enabled by `glyphtounicode`, which encodes ligatures (such as fl) using unicode characters.\n- Ligatures are removed if they are typeset at the wrong place.\n  This is enabled by the [selnolig](https://tex.meta.stackexchange.com/questions/2884/new-package-selnolig-that-automates-suppression-of-typographic-ligatures) package.\n- Support of hyperlinked references without extra color thanx to [hyperref].\n- Better breaking of long URLs.\n- Support for `\\powerset` command.\n- Support todos as pdf annotations. This is enabled by the [pdfcomment] package.\n- [microtypographic extensions](https://www.ctan.org/pkg/microtype) for a better look of the paper.\n- Modern packages such as [microtype], [cleveref], [csquotes], [paralist], [hyperref], [hypcap], [upquote], [booktabs].\n- LaTeX compilation using the modern [lualatex] compiler.\n  For older systems, [pdflatex](https://en.wikipedia.org/wiki/PdfTeX) is still supported.\n- [biblatex]+[biber] instead of plain [bibtex] to have a more intuitive `.bib` file:\n  Unicode (UTF-8) is fully supported and commands such as `\\citeauthor{...}` work out of the box. See also <https://tex.stackexchange.com/q/8411/9075>.\n- [latexmk] for easy compilation of the LaTeX document.\n- Ready-to-go configuration for [latexindent].\n- Proper hyphenation and microtype for English texts.\n- Hints on writing an abstract and thesis by Dirk Fahland.\n\n## Disabled features\n\nFollowing features were not activated for this template.\nYou can run the [latex template generator] to enable the features.\n\nCongratulations. You chose to use all available features.\n\n## Tool hints\n\n### Prerequisites\n\n- Windows: Recent [MiKTeX](http://miktex.org/). MiKTeX installation hints are given at <http://latextemplates.github.io/scientific-thesis-template/#installation-hints-for-windows>.\n- Mac OS X: Recent [TeX Live](https://www.tug.org/texlive/) (e.g. through [MacTeX](https://tug.org/mactex/)) - Try `sudo tlmgr update --all` if you encounter issues with biblatex\n- Linux: Recent TeX Live distribution\n\nSee <docs/latex-setup.md> for refined installation instructions.\n\n### Usage of `minted`\n\nTo have minted running properly, you have to do following steps on Windows:\n\n1. Install python: `choco install python` - that uses [chocolatey](https://chocolatey.org/) to install Python\n2. Install [latexminted]: `pip instal latexminted` - that uses the Python package manager to install the minted library\n3. When latexing, use `-shell-escape`: `pdflatex -shell-escape main-english`.\n   You can also just execute `latexmk main-english`.\n\n### VS Code configuration\n\nCurrently, following extensions are recommended:\n\n- [LaTeX Workshop](https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop) to support LaTeX in VS Code and\n- [LaTeX Utilities](https://marketplace.visualstudio.com/items?itemName=tecosaur.latex-utilities) to enhance LaTeX Workshop\n- [LTeX+] to have a nice spell checker that also identifies grammar issues\n\nThen, change the setting of LaTeX Workshop to use `biber`:\n\nPress <kbd>Shift</kbd>+<kbd>Ctrl</kbd>+<kbd>P</kbd> to open the command palette.\nThen type \"JSON\" and select \"Preferences: Open Settings (JSON)\" to open `settings.json`.\n\nUpdate the following lines in VS Code's `settings.json` to contain:\n\n```javascript\n    \"latex-workshop.latex.recipes\": [\n        {\n            \"name\": \"lualatex ➞ biblatex ➞ lualatex × 2 🔃\",\n            \"tools\": [\n                \"lualatex\",\n                \"biblatex\",\n                \"lualatex\",\n                \"lualatex\"\n            ]\n        },\n    ],\n    \"latex-workshop.latex.tools\": [\n        // ...\n        {\n            \"name\": \"biblatex\",\n            \"command\": \"biblatex\",\n            \"args\": [\n                \"%DOCFILE%\"\n            ],\n            \"env\": {}\n        },\n        // ...\n    ],\n```\n\nThe following settings are additionally recommended:\n\n```javascript\n{\n    \"editor.wordWrap\": \"on\",                              // enable soft line breaks\n    \"latex-workshop.view.pdf.viewer\": \"tab\",              // display the generaded PDF in a separate tab\n    \"latex-workshop.view.pdf.backgroundColor\": \"#cccccc\", // use a darker background in de PDF viewer to lift of the pages from it\n    \"latex-workshop.latex.autoBuild.run\": \"never\",        // never automatically build; alternative: \"onSave\" (on saving .tex files)\n    \"editor.renderWhitespace\": \"all\",                     // display all whitespaces\n}\n```\n\nAlternatively, just copy and paste the contents of the [vscode.settings.json](vscode.settings.json) file to your VS Code settings file.\n\nYou can manually trigger compilation by hitting the green button in the extension or using other methods provided by LaTeX Workshop.\n\nPlease remove the magic comments (`% !TeX program ...`) at the top of the `main-....tex` file.\nAlthough [LaTeX-Workshop supports magic comments](https://github.com/James-Yu/LaTeX-Workshop/blob/master/README.md#magic-comments), it currently does not work reliably.\nWithout the magic comments, compilation works.\n\n### LTeX+ tips and tricks\n\n[LTeX+] is an offline grammar and spell checker with support for LaTeX and Markdown.\n\nAdd a magic comment to your files to tell LTeX+ which language to use:\n\n```latex\n% LTeX: language=de-DE\n```\n\nIf you want to use different languages in the text, use the `\\foreignlanguage{language}{text}` command.\nLTeX+ will detect these elements and automatically switch the spell checker's language.\nFor example:\n\n```latex\n\\foreignlanguage{english}{Therefore, our proposed approach will change the world.}\n```\n\n## Usage with docker\n\nThe generated `Dockerfile` is based on the [Dockerfile by the Island of TeX](https://gitlab.com/islandoftex/images/texlive#tex-live-docker-image).\n\n```cmd\ndocker run --rm -v \"c:\\users\\example\\latex-document:/workdir\" ltg latexmk\n```\n\nFollowing one-time setup is required:\n\n```cmd\ndocker build -t ltg .\n```\n\n## Contained Directories and Files\n\n### Directories\n\n- [figures](graphics/) Directory containing the figures.\n  By using LuaLaTex/PDFLaTeX it is possible to use PDFs, JPGs, PNGs, ... We recommend to use PDFs to enable smooth scaling.\n\n### Files\n\n- `main-english.tex` - The main `.tex` file loading all LaTeX packages and their configurations.\n  - Add text here\n  - Adjust title etc. here\n- [bibliography.bib](bibliography.bib) - Bibliography. [biblatex] format. Manage it with [JabRef].\n- [abbreviations.tex](abbreviations.tex) - Acronyms and abbreviations.\n- [commands.tex](commands.tex) - Example LaTeX macros.\n\nFollowing additional files are included, which do not need to be adapted:\n\n- [localSettings.yaml](localSettings.yaml) - Settings for [latexindent](https://ctan.org/pkg/latexindent)\n- [Makefile](Makefile) - The Makefile. Builds on latexmk.\n- [Texlivefile](Texlivefile) - List of packages required for a minimal TeXLive installation.\n\n## FAQs\n\n### Q: How can I synchronize updates from the template to my repository?\n\n1. Initialize your git repository as usual\n2. Add this repository as git remote: `git remote add template https://github.com/latextemplates/{template}.git`\n3. Merge the branch `template/main` into your `main` branch: `git merge template/main`.\n\nAfter that you can use and push the `main` branch as usual.\nNotes on syncing with the upstream repository [are available from GitHub](https://help.github.com/articles/syncing-a-fork/).\n\n### Q: I get the error `! pdfTeX error (font expansion): auto expansion is only possible with scalable fonts.`\n\nInstall the `cm-super` package using the MiKTeX package manager. Then, run `initexmf --mkmaps` on the command line. (Long description: <https://tex.stackexchange.com/a/324972/9075>)\n\n### Q: I get `Package csquotes Error: Unbalanced groups or invalid nesting.` What can I do?\n\nA: You have activated `\\MakeOuterQuote{\"}` and used some special babel command to allow hyphenation at other places as a dash. One example is writing `application\"=specific`.\nNow, you have to decide whether you want keep using plain quotes to enquote a word or use the special hyphenation command.\nIn other words: Do you want `\"quote\"` and `app\\-lication\\-specific` or `\\enquote{quote} and  application\"=specific`?\n\nNote that this should not happen when the template is generated as the setting `tweakouterquote` ensures that these two options are mutually exclusive.\n\n### Q: I need more space. What can I do?\n\nThe most simple solution to get more space is to exchange the font.\n\n### Q: How can I reformat my `.tex` files?\n\nExecute `latexindent -l -s -sl -w main-english.tex`\n\nAlternatively, execute `make format`.\n\n### Q: How I want to obey the one-sentence-per-line rule. How to do?\n\nSee \"How can I reformat my `.tex` files?\"\n\n### Q: I want to use minted, because I think its syntax highlighting seems to be better.\n\nYou can re-generate the template and choose `minted` as listings environment.\nMoreover, ensure that python and [latexminted] are installed properly:\n\n- `choco install python`\n- `pip install latexminted`\n\n### Q: I have troubles with minted on Windows.\n\nFor instance, on gets following output:\n\n```text\n! Package minted Error: minted v3+ executable is not installed, is not added to\n PATH, or is not permitted with restricted shell escape; or MiKTeX is being use\nd with -aux-directory or -output-directory without setting a TEXMF_OUTPUT_DIREC\nTORY environment variable.\n```\n\nTry out following command to update `latexminted`.\nSee [minted#425](https://github.com/gpoore/minted/issues/425) for details.\n\n```shell\npython3 -m pip install --force-reinstall latexminted\n```\n\n### Q: Can I also write in German?\n\nYes. You can regenerate the template and choose \"German\" as language.\n\n### Q: I was recommended the Harvard style\n\nThis template uses the alphabetic style.\nThat style is explained at the [biblatex documentation](http://texdoc.net/texmf-dist/doc/latex/biblatex/biblatex.pdf) on page 60:\n\n> The alphabetic labels resemble a compact author-year\n> style to some extent, but the way they are employed is similar to a numeric citation\n> scheme. For example, instead of “Jones 1995” this style would use the label “[Jon95]”.\n> “Jones and Williams 1986” would be rendered as “[JW86]”.\n\nWe are aware that the University of Stuttgart [recommends to use the Hardvard style](https://ilias3.uni-stuttgart.de/ilias.php?ref_id=12257&from_page=11895&obj_id=11896&cmd=layout&cmdClass=illmpresentationgui&cmdNode=dn&baseClass=ilLMPresentationGUI).\nHowever, this style is not common in natural sciences and information science.\n\n### Q: `ngerman-x-latest` is reported missing\n\nInstall the package `dehyph-exptl`.\n\n### Q: I get ``! I can't find file `clmr28t10+20'.``\n\nYou seem to use `latexmk` locally.\nPlease move `_latexmkrc` to `latexmkrc` to get `latexmk` working.\nIf you don't do this, `latexmk` tries to execute `latex`, which tries to produce a DVI file (and not a PDF file).\n\n### Q: I get `Font \"LatinModernMath-Regular\" not found.`. What can I do?\n\nError message:\n\n```text\nluaotfload | db : Reload initiated (formats: otf,ttf,ttc); reason: Font \"LatinModernMath-Regular\" not found.\nluaotfload | resolve : sequence of 3 lookups yielded nothing appropriate.\n\n! Package fontspec Error: The font \"LatinModernMath-Regular\" cannot be found.\n```\n\nInstall the package `lm-math` manually.\n\n### Q: I get ``File `ushyphex.tex' not found.``\n\nInstall package `tugboat`.\n\n### Q: I get `! Package fontspec Error: The font \"LinuxLibertineO\" cannot be found.`. What can I do?\n\nInstall the package `libertine` manually.\n\n### Q: I get `! Package fontspec Error: The font \"TeXGyreTermes\" cannot be found.`. What can I do?\n\nInstall the package `tex-gyre` and `tex-gyre-math` manually.\n\n### Q: I get `! error:  (type 1): cannot find encoding file 'ntx-ot1-tlf.enc' for reading`. What can I do?\n\nSee <https://tex.stackexchange.com/a/240850/9075>: Install the packages `newpx` and `newtxsf` manually.\n\n### Q: I get `! TeX capacity exceeded, sorry [main memory size=3000000].`. What can I do?\n\nFollow the steps at <https://tex.stackexchange.com/a/548335/9075>\n\nTry with following command\n\n```bash\nlualatex -shell-escape --extra-mem-top=10000000 --synctex=1 main-english.tex\n```\n\nSee <https://tex.stackexchange.com/a/124206/9075> for details.\n\n### Q: There is an output that biber/biblatex too old\n\nSee installation hints of how to update them at different systems.\n\n### Q: MiKTeX complains about missing `.sty` files.\n\nUse the [MiKTeX console](https://miktex.org/howto/miktex-console) to refresh the package index.\nThen, automatic installation should work again.\n\n### Q: I cannot get minted to run. There is this `-shell-escape` warning.\n\nPlease ensure that your compilation command includes `-shell-escape`.\nE.g., `lualatex -shell-escape -synctex=1 main-minted-german.tex`.\nWhen compiling `main-minted-german.tex` with TeXStudio, you will see a dialog warning about overriding the compilation command.\nJust answer \"(a) allow for this document\" and it will work.\n\n### Q: How to include Excel charts properly?\n\n1. Select the Excel chart you want to use.\n2. Print to PDF with the option \"Print Selected Chart\".\n3. Remove empty space of the created PDF page with `pdfcrop chart.pdf chart_cropped.pdf` (install via MikTeX first, if not available; check via `pdfcrop --version`).\n4. Use [pdfscissors](https://sites.google.com/site/pdfscissors) to crop the borders and title (maybe you have to allow <https://sites.google.com> in the Java security center in the control panel).\n5. Include the PDF in LaTeX via `\\includegraphics{chart_cropped.pdf}`.\n\n### Q: How do I change the appearance of chapter headings?\n\nLook for `% Code for my fancy chapters.` in your main `.tex` file and play around with parameters.\n\n### Q: Aren't there other templates?\n\nSure. The [Hagenberg Thesis Document Collection](https://github.com/Digital-Media/HagenbergThesis) seems to be the most promising.\nHowever, they currently do not support microtype and not the cover of the University of Stuttgart.\n\nWe are collecting alternatives at the issue [#25](https://github.com/latextemplates/scientific-thesis-template/issues/25) and plan to add a comparison to each other template.\n\n### Q: Do I have to do something special for the final version?\n\n- If you included some version control statements, please remove them. Currently, the template does not support any, but it used to support SVN.\n- By using `\\largepage` and `\\shortpage`, single lines at the bottom or at the top of the page can be manually fixed.\n- Search the PDF for \"TODO\" or similar things. Remove `\\usepackage{todonotes}` in your main `.tex` file.\n- Ensure that you run `lualatex` at least three times and that there are no \"undefined references\".\n- The margins are intended for good screen reading. **Do not change them** (or do exactly know what you are doing).\n### Q: `main-minted-german.tex` does not compile: ``File `main-minted-german-plantuml.latex' not found. \\end{plantuml}``. What can I do?\n\nYou did not setup the [plantuml package](https://www.ctan.org/pkg/plantuml) correctly.\nPlease head to <https://koppor.github.io/plantuml/> for installation instructions.\n\n## Further information\n\n- Other templates: <https://latextemplates.github.io/>\n- For German users, go to <https://texfragen.de/>.\n- Frank Mittelbach with Ulrike Fischer: [The LaTeX Companion](https://www.latex-project.org/news/2023/03/17/TLC3/) is the ultimate guide for LaTeX: The authors went through all packages offered by [CTAN](https://ctan.org/), selected the most promising ones, described them, and provide minimal working example for each of it.\n- Lutz Hering, Heike Hering: [How to Write Technial Reports](https://doi.org/10.1007/978-3-540-69929-3), Springer, 2010; also available in German [Technische Berichte - verständlich gliedern, gut gestalten, überzeugend vortragen](https://doi.org/10.1007/978-3-8348-8317-9). - Highly recommended, because it guides through all aspects of a report (such as a Master Thesis).\n- Marcus Deininger et al.: [Studienarbeiten - Ein Leitfaden zur Erstellung, Durchführung und Präsentation wissenschaftlicher Abschlussarbeiten am Beispiel Informatik](https://vdf.ch/studienarbeiten.html?author_id=2877), vdf. - Recommended as guideline for planning and working on the whole thesis.\n- Charles Lipson, [Cite Right, Second Edition: A Quick Guide to Citation Styles--MLA, APA, Chicago, the Sciences, Professions, and More](http://www.press.uchicago.edu/ucp/books/book/chicago/C/bo10702043.html), Chicago Guides to Writing, Editing, and Publishing, 2011. - Recommended in case you are unsure about how to correctly cite something.\n\n## License\n\nThe license of this work is [0BSD](https://spdx.org/licenses/0BSD.html) which corresponds to \"public domain\".\nAny derived work can freely be relicensed and can omit original copyright and license information.\n\n[biber]: https://www.ctan.org/pkg/biber\n[biblatex]: http://tex.stackexchange.com/tags/biblatex/info\n[bibtex]: https://www.ctan.org/pkg/bibtex\n[booktabs]: https://ctan.org/pkg/booktabs\n[cleveref]: https://ctan.org/pkg/cleveref\n[csquotes]: https://www.ctan.org/pkg/csquotes\n[hypcap]: https://www.ctan.org/pkg/hypcap\n[hyperref]: https://ctan.org/pkg/hyperref\n[latexindent]: https://ctan.org/pkg/latexindent\n[latexmk]: http://tex.stackexchange.com/tags/latexmk/info\n[listings]: https://ctan.org/pkg/listings\n[lualatex]: http://www.luatex.org/\n[microtype]: https://ctan.org/pkg/microtype\n[minted]: https://ctan.org/pkg/minted\n[natbib]: https://ctan.org/pkg/natbib\n[paralist]: https://www.ctan.org/pkg/paralist\n[pdfcomment]: https://www.ctan.org/pkg/pdfcomment\n[upquote]: https://www.ctan.org/pkg/upquote\n\n[JabRef]: https://www.jabref.org\n[LanguageTool]: https://languagetool.org/\n[latex template generator]: https://www.npmjs.com/package/generator-latex-template\n[LTeX+]: https://marketplace.visualstudio.com/items?itemName=ltex-plus.vscode-ltex-plus\n[latexminted]: https://pypi.org/project/latexminted/\n[Sumatra PDF]: https://www.sumatrapdfreader.org/free-pdf-reader\n\n<!-- disable markdown-lint rules contradicting our writing of FAQs -->\n<!-- markdownlint-disable-file MD001 MD013 MD026 -->\n"
  },
  {
    "path": "Texlivefile",
    "content": "scheme-basic\nlatexindent\nlatexmk\ntexlogsieve\n\namsmath\nacmart\nalgorithms\nalgorithmicx\nalgpseudocodex\nautotype\nauxhook\nbabel\nbabel-english\nbabel-german\nbiblatex\nbiber\nbigfoot\nbigintcalc\nbitset\nblindtext\nbookcover\nbooktabs\ncaption\ncatchfile\ncfr-lm\ncharter\ncleveref\ncm-super\ncmap\ncomment\ncsquotes\nctablestack\ncurrfile\ndatetime2\ndatetime2-german\ndatetime2-english\ndatatool\ndehyph-exptl\ndiagbox\nenumitem\nenviron\nepstopdf\netexcmds\netoolbox\neveryshi\nfgruler\nfifo-stack\nfilehook\nfixmath\nfloat\nfloatbytocbasic\nfloatflt\nfncychap\nfontaxes\nfontspec\nfootmisc\ngettitlestring\nglossaries\nglossaries-german\nglossaries-english\nglossaries-extra\ngraphics\nhelvetic\nhyphenex\ninconsolata\nhycolor\nhypcap\nhyperref\nhyperxmp\nhyph-utf8\nhyphen-english\nhyphen-german\nifmtarg\nifplatform\niftex\ninfwarerr\nintcalc\nkoma-script\nkvdefinekeys\nkvoptions\nkvsetkeys\nletltxmacro\nlibertine\nlibertinus-fonts\nlineno\nlipsum\nlistings\nltxcmds\nlscapeenhanced\nluacode\nlualatex-math\nluatex85\nluatexbase\nluaxml\nly1\nmarginnote\nmathdesign\nmathtools\nmfirstuc\nmicrotype\nmindflow\nminim-math\nminted\nmnsymbol\nmultirow\nmwe\nnatbib\nncctools\nnewcomputermodern\nnewfloat\nnewtx\nnewtxtt\nnfssext-cfr\nntheorem\nnowidow\nparalist\npdfcomment\npdfescape\npdflscape\npdftexcmds\npdfpages\npgf\npict2e\nplaceins\npsnfss\nragged2e\nrefcount\nrerunfilecheck\nscientific-thesis-cover\nscrhack\nselnolig\nsetspace\nsetspaceenhanced\nsidecap\nsiunitx\nsnapshot\nsoul\nsoulpos\nspelling\nstringenc\nsttools\nsubfig\nsvn-prov\ntabto-ltx\ntcolorbox\ntexcount\ntexlogsieve\ntex-gyre\ntikzmark\ntimes\ntools\ntotcount\ntotpages\ntracklang\ntranslations\ntrimspaces\ntxfonts\nunicode-math\nuniquecounter\nupquote\nurl\n\nvarwidth\nxcharter\nxcolor\nxifthen\nxfor\nxkeyval\nxpatch\nxstring\nzref\n"
  },
  {
    "path": "_latexmkrc",
    "content": "$pdflatex = 'lualatex --shell-escape --file-line-error --synctex=-1 %O %S';\n\n#Use SumatraPDF instead of the default PDF viewer\n$pdf_previewer = 'start \"C:\\Program Files\\SumatraPDF\\SumatraPDF.exe\"';\n\n#SumatraPDF updates automatically\n$preview_mode = 0;\n\n#automatically call lualatex/pdflatex (instead of latex)\n$pdf_mode = 1;\n\n# enable deletion of *.bbl when calling \"latexmk -c\"\n$bibtex_use = 2;\n\n# Glossaries inclusion inspired by https://tex.stackexchange.com/a/44316/9075\nadd_cus_dep('glo', 'gls', 0, 'run_makeglossaries');\nadd_cus_dep('acn', 'acr', 0, 'run_makeglossaries');\n\nsub run_makeglossaries {\n  if ( $silent ) {\n    # we use -lite to avoid an installation of perl\n    system \"makeglossaries-lite\", \"-q\", $_[0];\n  }\n  else {\n    system \"makeglossaries-lite\", $_[0];\n  };\n}\n\n#remove more files than in the default configuration\n@generated_exts = qw(acn acr alg aux code fls glg glo glo-abr gls glsdefs idx ind ist lof lol lot out run.xml synctex thm toc tpt upa upb wrt);\n$clean_ext .= ' %R.ist %R.xdy';\n"
  },
  {
    "path": "abbreviations.tex",
    "content": "% Note the difference between \"acronym\" and \"abbreviation\": https://english.stackexchange.com/q/3755/66058\n% We regard abbreviation as superset of acronym\n\\newabbreviation{er}{ER}{error rate}\n\\newabbreviation{fr}{FR}{Fehlerrate}\n\\newabbreviation[shortplural={RDBMS},longplural={RDBMS}]{rdbms}{RDBMS}{Relational Database Management System}\n\\newabbreviation[category=abbreviationdot]{dante}{DANTE e.V.}{Deutschsprachige Anwendervereinigung \\TeX\\ e.V.}\n\\newabbreviation{gp}{G.P.}{General Practitioner}\n\n% Source: https://tex.stackexchange.com/a/154566/9075\n\\newabbreviation{html}{HTML}{hypertext markup language}\n\\newacronym{nato}{NATO}{North Atlantic Treaty Organization}\n"
  },
  {
    "path": "bibliography.bib",
    "content": "% Encoding: UTF-8\n\n@InProceedings{Winery,\n  author    = {Oliver Kopp and others},\n  booktitle = {Proceedings of 11\\textsuperscript{th} International Conference on Service-Oriented Computing (ICSOC'13)},\n  title     = {{Winery -- A Modeling Tool for {TOSCA}-based Cloud Applications}},\n  year      = {2013},\n  pages     = {700--704},\n  publisher = {Springer Berlin Heidelberg},\n  series    = {LNCS},\n  volume    = {8274},\n  doi       = {10.1007/978-3-642-45005-1_64},\n  keywords  = {Cloud Applications; Modeling; TOSCA; Management; Portability},\n}\n\n@Article{Binz2009,\n  author    = {Tobias Binz and Gerd Breiter and Frank Leymann and Thomas Spatzier},\n  journal   = {IEEE Internet Computing},\n  title     = {{Portable Cloud Services Using TOSCA}},\n  year      = {2012},\n  issn      = {1089-7801},\n  month     = may,\n  number    = {03},\n  pages     = {80--85},\n  volume    = {16},\n  doi       = {10.1109/mic.2012.43},\n  publisher = {IEEE Computer Society},\n}\n\n@Manual{mwe,\n  title  = {The \\texttt{mwe} Package},\n  author = {Martin Scharrer},\n  year   = {2017},\n  url    = {http://texdoc.net/mwe},\n}\n\n@Comment{jabref-meta: databaseType:biblatex;}\n"
  },
  {
    "path": "commands.tex",
    "content": "% 🇩🇪 wird fuer Tabellen benötigt (z.B. >{centering\\RBS}p{2.5cm} erzeugt einen zentrierten 2,5cm breiten Absatz in einer Tabelle\n\\newcommand{\\RBS}{\\let\\\\=\\tabularnewline}\n\n% 🇺🇸 To avoid issues with Springer's \\mathplus. See also http://tex.stackexchange.com/q/212644/9075\n\\providecommand\\mathplus{+}\n\n% 🇺🇸 from hmks makros.tex - \\indexify\n\\newcommand{\\toindex}[1]{\\index{#1}#1}\n\n% 🇩🇪 Tipp aus \"The Comprehensive LaTeX Symbol List\"\n\\newcommand{\\dotcup}{\\ensuremath{\\,\\mathaccent\\cdot\\cup\\,}}\n\n% 🇩🇪 Anstatt $|x|$ $\\abs{x}$ verwenden. Die Betragsstriche skalieren automatisch, falls \"x\" etwas größer sein sollte...\n\\newcommand{\\abs}[1]{\\left\\lvert#1\\right\\rvert}\n\n% 🇩🇪 Seitengrößen - Gegen Schusterjungen und Hurenkinder...\n\\newcommand{\\largepage}{\\enlargethispage{\\baselineskip}}\n\\newcommand{\\shortpage}{\\enlargethispage{-\\baselineskip}}\n\n\\newcommand{\\initialism}[1]{%\n  \\textlcc{#1}\\xspace%\n}\n\\newcommand{\\OMG}{\\initialism{OMG}}\n\\newcommand{\\BPEL}{\\initialism{BPEL}}\n\\newcommand{\\BPMN}{\\initialism{BPMN}}\n\\newcommand{\\UML}{\\initialism{UML}}\n"
  },
  {
    "path": "config.tex",
    "content": "% !TeX encoding = utf8\n% -*- coding:utf-8 mod:LaTeX -*-\n\n% EN: This file includes basic packages and sets options. The order of package\n%     loading is important\n\n% DE: In dieser Datei werden zuerst die benoetigten Pakete eingebunden und\n%     danach diverse Optionen gesetzt. Achtung Reihenfolge ist entscheidend!\n\n\n% EN: Styleguide:\n% - English comments are prefixed with \"EN\", German comments are prefixed with \"DE\"\n% - Prefixed headings define the language for the subsequent paragraphs\n% - It is tried to organize packages in blocks. Bocks are separated by two empty lines.\n\n% DE: Styleguide:\n%\n% Ein sehr kleiner Styleguide. Packages werden in Blöcken organisiert.\n% Zwischen zwei Blöcken sind 2 Leerzeilen!\n\n\n% EN: Enable copy and paste of text from the PDF\n%     Only required for pdflatex. It \"just works\" in the case of lualatex.\n%     mmap enables mathematical symbols but does not work with the newtx font set\n%     See: https://tex.stackexchange.com/a/64457/9075\n%     Other solutions outlined at http://goemonx.blogspot.de/2012/01/pdflatex-ligaturen-und-copynpaste.html and http://tex.stackexchange.com/questions/4397/make-ligatures-in-linux-libertine-copyable-and-searchable\n%     Troubleshooting outlined at https://tex.stackexchange.com/a/100618/9075\n\n\\ifluatex\n\\else\n  \\usepackage{cmap}\n\\fi\n\n\n% EN: File encoding\n% DE: Codierung\n%     Wir sind im 21 Jahrhundert, utf-8 löst so viele Probleme.\n%\n% Mit UTF-8 funktionieren folgende Pakete nicht mehr. Bitte beachten!\n%   * fancyvrb mit §\n%   * easylist -> http://www.ctan.org/tex-archive/macros/latex/contrib/easylist/\n\\ifluatex\n  % EN: See https://tex.stackexchange.com/a/158517/9075\n  %     Not required, because of usage of fontspec package\n  %\\usepackage[utf8]{luainputenc}\n\\else\n  \\usepackage[utf8]{inputenc}\n\\fi\n\n\n% DE: Parallelbetrieb tex4ht und pdflatex\n\n\\makeatletter\n\\@ifpackageloaded{tex4ht}{\n  \\def\\iftex4ht{\\iftrue}\n}{\n  \\def\\iftex4ht{\\iffalse}\n}\n\\makeatother\n\n\n% EN: Mathematics\n% DE: Mathematik\n%\n% DE: Viele Mathematik-Sachen. Siehe https://texdoc.net/pkg/amsmath\n%\n% EN: Options must be passed this way, otherwise it does not work with glossaries\n% DE: fleqn (=Gleichungen linksbündig platzieren) funktioniert nicht direkt. Es muss noch ein Patch gemacht werden:\n\\PassOptionsToPackage{fleqn,leqno}{amsmath}\n%\n% DE: amsmath Muss nicht mehr geladen werden, da es von newtxmath automatisch geladen wird\n% \\usepackage{amsmath}\n\n\n%% EN: Fonts\n%% DE: Schriften\n%%\n%% !!! If you change the font, be sure that words such as \"workflow\" can\n%% !!! still be copied from the PDF. If this is not the case, you have\n%% !!! to use glyphtounicode. See comment at cmap package\n\n\n% EN: Times Roman for all text\n\\ifluatex\n  \\RequirePackage{amsmath}\n  \\RequirePackage{unicode-math}\n  \\setmainfont{TeX Gyre Termes}\n  \\setmathfont{texgyretermes-math.otf}\n  \\setsansfont[Scale=.9]{TeX Gyre Heros}\n  \\setmonofont[StylisticSet={1,3},Scale=.9]{inconsolata}\n\\else\n  \\RequirePackage{newtxtext}\n  \\RequirePackage{newtxmath}\n  % EN: looks good with times, but no equivalent for lualatex found,\n  %     therefore replaced with inconsolata\n  %\\RequirePackage[zerostyle=b,scaled=.9]{newtxtt}\n  \\RequirePackage[varl,scaled=.9]{inconsolata}\n\n  % DE: Symbole\n  % unicode-math scheint für die meisten schon etwas anzubieten\n  %\n  %\\usepackage[geometry]{ifsym} % \\BigSquare\n\n  % EN: The euro sign\n  % DE: Das Euro Zeichen\n  %     Fuer Palatino (mathpazo.sty): richtiges Euro-Zeichen\n  %     Alternative: \\usepackage{eurosym}\n  \\newcommand{\\EUR}{\\ppleuro}\n\\fi\n\n\n% DE: Noch mehr Symbole\n%\\usepackage{stmaryrd} %fuer \\ovee, \\owedge, \\otimes\n%\\usepackage{marvosym} %fuer \\Writinghand %patched to not redefine \\Rightarrow\n%\\usepackage{mathrsfs} %mittels \\mathscr{} schoenen geschwungenen Buchstaben erzeugen\n%\\usepackage{calrsfs} %\\mathcal{} ein bisserl dickeren buchstaben erzeugen - sieht net so gut aus.\n\n% EN: Fallback font - if the subsequent font packages do not define a font (e.g., monospaced)\n%     This is the modern package for \"Computer Modern\".\n%     In case this gets activated, one has to switch from cmap package to glyphtounicode (in the case of pdflatex)\n% DE: Fallback-Schriftart\n%\\usepackage[%\n%    rm={oldstyle=false,proportional=true},%\n%    sf={oldstyle=false,proportional=true},%\n%    tt={oldstyle=false,proportional=true,variable=true},%\n%    qt=false%\n%]{cfr-lm}\n\n% EN: Headings are typset in Helvetica (which is similar to Arial)\n% DE: Schriftart fuer die Ueberschriften - ueberschreibt lmodern\n%\\usepackage[scaled=.95]{helvet}\n\n% DE: Für Schreibschrift würde tun, muss aber nicht\n%\\usepackage{mathrsfs} %  \\mathscr{ABC}\n\n% EN: Font for the main text\n% DE: Schriftart fuer den Fliesstext - ueberschreibt lmodern\n%     Linux Libertine, siehe http://www.linuxlibertine.org/\n%     Packageparamter [osf] = Minuskel-Ziffern\n%     rm = libertine im Brottext, Linux Biolinum NICHT als serifenlose Schrift, sondern helvet (von oben) beibehalten\n%\\usepackage[rm]{libertine}\n\n% EN: Alternative Font: Palantino. It is recommended by Prof. Ludewig for German texts\n% DE: Alternative Schriftart: Palantino, Packageparamter [osf] = Minuskel-Ziffern\n%     Bitte nur in deutschen Texten\n%\\usepackage{mathpazo} %ftp://ftp.dante.de/tex-archive/fonts/mathpazo/ - Tipp aus DE-TEX-FAQ 8.2.1\n\n% DE: Schriftart fuer Programmcode - ueberschreibt lmodern\n%     Falls auskommentiert, wird die Standardschriftart lmodern genommen\n%     Fuer schreibmaschinenartige Schluesselwoerter in den Listings - geht bei alten Installationen nicht, da einige Fontshapes (<>=) fehlen\n%\\usepackage[scaled=.92]{luximono}\n%\\usepackage{courier}\n% DE: BeraMono als Typewriter-Schrift, Tipp von http://tex.stackexchange.com/a/71346/9075\n%\\usepackage[scaled=0.83]{beramono}\n\n% EN: backticks (`) are rendered as such in verbatim environments.\n%     See the following links for details:\n%     - https://tex.stackexchange.com/a/341057/9075\n%     - https://tex.stackexchange.com/a/47451/9075\n%     - https://tex.stackexchange.com/a/166791/9075\n\\usepackage{upquote}\n\n% EN: For \\texttrademark{}\n\\usepackage{textcomp}\n\n% EN: name-clashes von marvosym und mathabx vermeiden:\n\\def\\delsym#1{%\n  %  \\expandafter\\let\\expandafter\\origsym\\expandafter=\\csname#1\\endcsname\n  %  \\expandafter\\let\\csname orig#1\\endcsname=\\origsym\n  \\expandafter\\let\\csname#1\\endcsname=\\relax\n}\n\n%\\usepackage{pifont}\n%\\usepackage{bbding}\n%\\delsym{Asterisk}\n%\\delsym{Sun}\\delsym{Mercury}\\delsym{Venus}\\delsym{Earth}\\delsym{Mars}\n%\\delsym{Jupiter}\\delsym{Saturn}\\delsym{Uranus}\\delsym{Neptune}\n%\\delsym{Pluto}\\delsym{Aries}\\delsym{Taurus}\\delsym{Gemini}\n%\\delsym{Rightarrow}\n%\\usepackage{mathabx} - Ueberschreibt leider zu viel - und die \\le-Zeichen usw. sehen nicht gut aus!\n\n\n% EN: Modern font encoding\n%     Has to be loaded AFTER any font packages. See https://tex.stackexchange.com/a/2869/9075.\n\\ifluatex\n\\else\n  \\usepackage[T1]{fontenc}\n\\fi\n%\n\n\n% EN: Character protrusion and font expansion. See http://www.ctan.org/tex-archive/macros/latex/contrib/microtype/\n% DE: Optischer Randausgleich und Grauwertkorrektur\n\n\\usepackage[\n  babel=true, % EN: Enable language-specific kerning. Take language-settings from the language of the current document (see Section 6 of microtype.pdf)\n  expansion=alltext,\n  protrusion=alltext-nott, % EN: Ensure that at listings, there is no change at the margin of the listing\n  final % EN: Always enable microtype, even if in draft mode. This helps finding bad boxes quickly.\n        %     In the standard configuration, this template is always in the final mode, so this option only makes a difference if \"pros\" use the draft mode\n]{microtype}\n\n\n% EN: \\texttt{test -- test} keeps the \"--\" as \"--\" (and does not convert it to an en dash)\n\\DisableLigatures{encoding = T1, family = tt* }\n\n% DE: fuer microtype\n% DE: tracking=true muss als Parameter des microtype-packages mitgegeben werden\n% DE: Deaktiviert, da dies bei Algorithmen seltsam aussieht\n\n%\\DeclareMicrotypeSet*[tracking]{my}{ font = */*/*/sc/* }%\n%\\SetTracking{ encoding = *, shape = sc }{ 45 }\n% DE: Hier wird festgelegt,\n%     dass alle Passagen in Kapitälchen automatisch leicht\n%     gesperrt werden.\n%     Quelle: http://homepage.ruhr-uni-bochum.de/Georg.Verweyen/pakete.html\n%    Deaktiviert, da sonst \"BPEL\", \"BPMN\" usw. wirklich komisch aussehen.\n%     Macht wohl nur bei geisteswissenschaftlichen Arbeiten Sinn.\n\n\n% EN: amsmath teaks\n\n\n% EN: Fixes bugs in AMS math\n%     Currently conflicts with unicode-math\n% \\usepackage{mathtools}\n\n%\\numberwithin{equation}{section}\n%\\renewcommand{\\theequation}{\\thesection.\\Roman{equation}}\n\n% EN: work-around ams-math problem with align and 9 -> 10. Does not work with glossaries, No visual changes.\n%\\addtolength\\mathindent{1em}\n\n\n% EN: For theorems, replacement for amsthm\n\\usepackage[amsmath,hyperref]{ntheorem}\n\\theorempreskipamount 2ex plus1ex minus0.5ex\n\\theorempostskipamount 2ex plus1ex minus0.5ex\n\\theoremstyle{break}\n\\newtheorem{definition}{Definition}[section]\n\n\n% CTAN: https://ctan.org/pkg/lccaps\n% Doc: http://texdoc.net/pkg/lccaps\n%\n% Required for DE/EN \\initialism\n\\usepackage{lccaps}\n\n\n% EN: Definition of colors. The \"hyperref\" argument is not used as we do not want to change the border colors of links: Links are not colored anymore.\n% DE: Farbdefinitionen\n\\usepackage[dvipsnames]{xcolor}\n\n\n% EN: Required for custom acronyms/glossaries style.\n%     Left aligned Columns in tables with fixed width.\n%     See http://tex.stackexchange.com/questions/91566/syntax-similar-to-centering-for-right-and-left\n\\usepackage{ragged2e}\n\n\n% DE: Wichtig, ansonsten erscheint \"No room for a new \\write\"\n\\usepackage{scrwfile}\n\n\n% EN: Support for language-specific hyphenation\n% DE: Neue deutsche Rechtschreibung und Literatur statt \"Literature\"\n%     Die folgende Einstellung ist der Nachfolger von ngerman.sty\n\\ifdeutsch\n  % DE: letzte Sprache ist default, Einbindung von \"american\" ermöglicht \\begin{otherlanguage}{amercian}...\\end{otherlanguage} oder \\foreignlanguage{american}{Text in American}\n  %     Siehe auch http://tex.stackexchange.com/a/50638/9075\n  \\usepackage[american,main=ngerman]{babel}\n  % Ein \"abstract\" ist eine \"Kurzfassung\", keine \"Zusammenfassung\"\n  \\addto\\captionsngerman{%\n    \\renewcommand\\abstractname{Kurzfassung}%\n  }\n  \\ifluatex\n    % EN: conditionally disable ligatures. See https://github.com/latextemplates/scientific-thesis-template/issues/54\n    %     for a discussion\n    \\usepackage[ngerman]{selnolig}\n  \\fi\n\\else\n  % EN: Set English as the language and allow to write hyphenated\"=words\n  %     `american`, `english` and `USenglish` are synonyms for babel package (according to https://tex.stackexchange.com/questions/12775/babel-english-american-usenglish).\n  %      \"english\" has to go last to set it as the default language\n  \\usepackage[ngerman,main=english]{babel}\n  % EN: Hint by http://tex.stackexchange.com/a/321066/9075 -> enable \"= as dashes\n  \\addto\\extrasenglish{\\languageshorthands{ngerman}\\useshorthands{\"}}\n  \\ifluatex\n    % EN: conditionally disable ligatures. See https://github.com/latextemplates/scientific-thesis-template/issues/54\n    %     for a discussion\n    \\usepackage[english]{selnolig}\n  \\fi\n\\fi\n%\n\n\n% EN: For easy quotations: \\enquote{text}\n%     This package is very smart when nesting is applied, otherwise textcmds (see below) provides a shorter command\n%     Note that this package results in a warning when it is loaded before minted (actually fvextra).\n% DE: Anführungszeichen\n%     Zitate in \\enquote{...} setzen, dann werden automatisch die richtigen Anführungszeichen verwendet.\n%     Dieses package erzeugt eine Warnung, wenn es vor minted (genauer fvextra) geladen wird.\n\\usepackage{csquotes}\n\n\n% EN: For even easier quotations: \\qq{text}.\n%     Is not smart in the case of nesting, but good enough for most cases\n\\usepackage{textcmds}\n\\ifdeutsch\n  % EN: German quotes are different. So do not use the English quotes, but the ones provided by the csquotes package.\n  \\renewcommand{\\qq}[1]{\\enquote{#1}}\n\\fi\n\n\n% EN: extended enumarations\n% DE: erweitertes Enumerate\n\\usepackage{paralist}\n\n\n% DE: Gestaltung der Kopf- und Fußteilen\n\n\\usepackage[automark]{scrlayer-scrpage}\n\n\\automark[section]{chapter}\n\\setkomafont{pageheadfoot}{\\normalfont\\sffamily}\n\\setkomafont{pagenumber}{\\normalfont\\sffamily}\n\n% DE: funktioniert nicht: Alle Linien sind hier weg\n%\\setheadsepline[.4pt]{.4pt}\n\n\n% DE: Intelligentes Leerzeichen um hinter Abkürzungen die richtigen Abstände zu erhalten, auch leere.\n%     Siehe commands.tex \\gq{}\n\\usepackage{xspace}\n% DE: Macht \\xspace und \\enquote kompatibel\n\\makeatletter\n\\xspaceaddexceptions{\\grqq \\grq \\csq@qclose@i \\} }\n\\makeatother\n\n\n\\newcommand{\\eg}{e.\\,g.,\\ }\n\\newcommand{\\ie}{i.\\,e.,\\ }\n\n\n% EN: introduce \\powerset - hint by http://matheplanet.com/matheplanet/nuke/html/viewtopic.php?topic=136492&post_id=997377\n\\DeclareFontFamily{U}{MnSymbolC}{}\n\\DeclareSymbolFont{MnSyC}{U}{MnSymbolC}{m}{n}\n\\DeclareFontShape{U}{MnSymbolC}{m}{n}{\n  <-6>    MnSymbolC5\n  <6-7>   MnSymbolC6\n  <7-8>   MnSymbolC7\n  <8-9>   MnSymbolC8\n  <9-10>  MnSymbolC9\n  <10-12> MnSymbolC10\n  <12->   MnSymbolC12%\n}{}\n\\DeclareMathSymbol{\\powerset}{\\mathord}{MnSyC}{180}\n\n\n% EN: Package for the appendix\n% DE: Anhang\n\\usepackage{appendix}\n%[toc,page,title,header]\n%\n\n\n% EN: Graphics\n% DE: Grafikeinbindungen\n%\n% EN: The parameter \"pdftex\" is not required\n\\usepackage{graphicx}\n\\graphicspath{{\\getgraphicspath}}\n\\newcommand{\\getgraphicspath}{graphics/}\n\n\n% EN: Enables inclusion of SVG graphics - 1:1 approach\n%    This is NOT the approach of https://ctan.org/pkg/svg-inkscape,\n%     which allows text in SVG to be typeset using LaTeX\n%     We just include the SVG as is.\n\\usepackage{epstopdf}\n\\epstopdfDeclareGraphicsRule{.svg}{pdf}{.pdf}{%\n  inkscape -z -D --file=#1 --export-pdf=\\OutputFile\n}\n\n\n% EN: Enables inclusion of SVG graphics - text-rendered-with-LaTeX-approach\n%     This is the approach of https://ctan.org/pkg/svg-inkscape,\n\\newcommand{\\executeiffilenewer}[3]{%\n  \\IfFileExists{#2}\n  {\n    %\\message{file #2 exists}\n    \\ifnum\\pdfstrcmp{\\pdffilemoddate{#1}}%\n      {\\pdffilemoddate{#2}}>0%\n      {\\immediate\\write18{#3}}\n    \\else\n      {%\\message{file up to date #2}\n      }\n    \\fi%\n  }{\n    %\\message{file #2 doesn't exist}\n    %\\message{argument: #3}\n    %\\immediate\\write18{echo \"test\" > xoutput.txt}\n    \\immediate\\write18{#3}\n  }\n}\n\\newcommand{\\includesvg}[1]{%\n  \\executeiffilenewer{#1.svg}{#1.pdf}%\n  {\n    inkscape -z -D --file=\\getgraphicspath#1.svg %\n    --export-pdf=\\getgraphicspath#1.pdf --export-latex}%\n  \\input{\\getgraphicspath#1.pdf_tex}%\n}\n\n\n% EN: Enable typesetting values with SI units.\n\\ifdeutsch\n  \\usepackage[mode=text,group-minimum-digits=4]{siunitx}\n  \\sisetup{locale=DE}\n\\else\n  \\usepackage[mode=text,group-minimum-digits=4,group-separator={,}]{siunitx}\n  \\sisetup{locale=US}\n\\fi\n\n\n% EN: Extensions for tables\n% DE: Tabellenerweiterungen\n\\usepackage{array} %increases tex's buffer size and enables ``>'' in tablespecs\n\\usepackage{longtable}\n\\usepackage{dcolumn} %Aligning numbers by decimal points in table columns\n\\ifdeutsch\n  \\newcolumntype{d}[1]{D{.}{,}{#1}}\n\\else\n  \\newcolumntype{d}[1]{D{.}{.}{#1}}\n\\fi\n\\setlength{\\extrarowheight}{1pt}\n\n\n% DE: Eine Zelle, die sich über mehrere Zeilen erstreckt.\n%     Siehe Beispieltabelle in Kapitel 2\n\\usepackage{multirow}\n\n\n% DE: Fuer Tabellen mit Variablen Spaltenbreiten\n%\\usepackage{tabularx}\n%\\usepackage{tabulary}\n\n\n% EN: Links behave as they should. Enables \"\\url{...}\" for URL typesettings.\n%     Allow URL breaks also at a hyphen, even though it might be confusing: Is the \"-\" part of the address or just a hyphen?\n%     See https://tex.stackexchange.com/a/3034/9075.\n% DE: Links verhalten sich so, wie sie sollen\n%     Zeilenumbrüche bei URLs auch bei Bindestrichen erlauben, auch wenn es verwirrend sein könnte: Gehört der Bindestrich zur URL oder ist es ein Trennstrich?\n%     Siehe https://tex.stackexchange.com/a/3034/9075.\n\\usepackage[hyphens]{url}\n%\n%  EN: When activated, use text font as URL font, not the monospaced one.\n%      For all options see https://tex.stackexchange.com/a/261435/9075.\n% \\urlstyle{same}\n%\n% EN: Hint by http://tex.stackexchange.com/a/10419/9075.\n\\makeatletter\n\\g@addto@macro{\\UrlBreaks}{\\UrlOrds}\n\\makeatother\n\n\n% DE: Index über Begriffe, Abkürzungen\n%\\usepackage{makeidx} makeidx ist out -> http://xindy.sf.net verwenden\n\n\n% DE: lustiger Hack fuer das Abkuerzungsverzeichnis\n%     nach latex durchlauf folgendes ausfuehren\n%     makeindex ausarbeitung.nlo -s nomencl.ist -o ausarbeitung.nls\n%     danach nochmal latex\n%\\usepackage{nomencl}\n%    \\let\\abk\\nomenclature %Deutsche Ueberschrift setzen\n%          \\renewcommand{\\nomname}{List of Abbreviations}\n%        %Punkte zw. Abkuerzung und Erklaerung\n%          \\setlength{\\nomlabelwidth}{.2\\hsize}\n%          \\renewcommand{\\nomlabel}[1]{#1 \\dotfill}\n%        %Zeilenabstaende verkleinern\n%          \\setlength{\\nomitemsep}{-\\parsep}\n%    \\makenomenclature\n\n\n% EN: Logic for TeX - enables if-then-else in commands\n% DE: Logik für TeX\n%     FÜr if-then-else @ commands.tex\n\\usepackage{ifthen}\n\n\n% EN: Code Listings\n% DE: Listings\n\\usepackage{listings}\n\\lstset{language=XML,\n  showstringspaces=false,\n  extendedchars=true,\n  basicstyle=\\footnotesize\\ttfamily,\n  commentstyle=\\slshape,\n  % DE: Original: \\rmfamily, damit werden die Strings im Quellcode hervorgehoben. Zusaetzlich evtl.: \\scshape oder \\rmfamily durch \\ttfamily ersetzen. Dann sieht's aus, wie bei fancyvrb\n  stringstyle=\\ttfamily,\n  breaklines=true,\n  breakatwhitespace=true,\n  % EN: alternative: fixed\n  columns=flexible,\n  numbers=left,\n  numberstyle=\\tiny,\n  basewidth=.5em,\n  xleftmargin=.5cm,\n  % aboveskip=0mm, %DE: deaktivieren, falls man lstlistings direkt als floating object benutzt (\\begin{lstlisting}[float,...])\n  % belowskip=0mm, %DE: deaktivieren, falls man lstlistings direkt als floating object benutzt (\\begin{lstlisting}[float,...])\n  captionpos=b\n}\n\n\\ifluatex\n\\else\n  % EN: Enable UTF-8 support - see https://tex.stackexchange.com/q/419327/9075\n  \\usepackage{listingsutf8}\n  \\lstset{inputencoding=utf8/latin1}\n\\fi\n\n\\ifdeutsch\n  \\renewcommand{\\lstlistlistingname}{Verzeichnis der Listings}\n\\fi\n\n\n% EN: Alternative to listings could be fancyvrb. Can be used together.\n% DE: Alternative zu Listings ist fancyvrb. Kann auch beides gleichzeitig benutzt werden.\n\\usepackage{fancyvrb}\n%\n% EN: Font size for the normal text\n% DE: Groesse fuer den Fliesstext. Falls deaktiviert: \\normalsize\n%\\fvset{fontsize=\\small}\n%\n% DE: Somit kann im Text ganz einfach §verbatim§ text gesetzt werden.\n%     Disabled, because UTF-8 does not work any more and lualatex causes issues\n%\\DefineShortVerb{\\§}\n%\n% EN: Shrink font size of listings\n\\RecustomVerbatimEnvironment{Verbatim}{Verbatim}{fontsize=\\footnotesize}\n\\RecustomVerbatimCommand{\\VerbatimInput}{VerbatimInput}{fontsize=\\footnotesize}\n%\n% EN: Hack for fancyvrb based on http://newsgroups.derkeiler.com/Archive/Comp/comp.text.tex/2008-12/msg00075.html\n%     Change of the solution: \\Vref somehow collided with cleveref/varioref as the output of \\Vref{} was \"Abschnitt 4.3 auf Seite 85\"; therefore changed to \\myVref -- so completely removed\n%     See https://tex.stackexchange.com/q/132420/9075 for more information.\n\\newcommand{\\Vlabel}[1]{\\label[line]{#1}\\hypertarget{#1}{}}\n\\newcommand{\\lref}[1]{\\hyperlink{#1}{\\FancyVerbLineautorefname~\\ref*{#1}}}\n\n\n% EN: Tunings of captions for floats, listings, ...\n% DE: Bildunterschriften bei floats genauso formatieren wie bei Listings\n%     Anpassung wird unten bei den newfloat-Deklarationen vorgenommen\n%     https://www.ctan.org/pkg/caption2 is superseeded by this package.\n\\usepackage{caption}\n\n\n% EN: Provides rotating figures, where the PDF page is also turned\n% DE: Ermoeglicht es, Abbildungen um 90 Grad zu drehen\n%     Alternatives Paket: rotating Allerdings wird hier nur das Bild gedreht, während bei lscape auch die PDF-Seite gedreht wird.\n%     Das Paket lscape dreht die Seite auch nicht\n\\usepackage{pdflscape}\n\n\n% EN: Required for proper environments of fancyvrb and lstlistings\n%    There is also the newfloat package (recommended by minted), but we currently have no experience with that\n% DE: Wird für fancyvrb und für lstlistings verwendet\n\\usepackage{float}\n%\n% EN: Alternative to float package\n%\\usepackage{floatrow}\n% DE: zustäzlich für den Paramter [H] = Floats WIRKLICH da wo sie deklariert wurden paltzieren - ganz ohne Kompromisse\n%     floatrow ist der Nachfolger von float\n%     Allerdings macht floatrow in manchen Konstellationen Probleme. Deshalb ist das Paket deaktiviert.\n%\n% EN: See http://www.tex.ac.uk/cgi-bin/texfaq2html?label=floats\n% DE: floats IMMER nach einer Referenzierung platzieren\n%\\usepackage{flafter}\n\n\n% EN: Put footnotes below floats\n%     Source: https://tex.stackexchange.com/a/32993/9075\n\\usepackage{stfloats}\n\\fnbelowfloat\n\n\n% EN: For nested figures\n% DE: Fuer Abbildungen innerhalb von Abbildungen\n%     Ersetzt die Pakete subfigure und subfig - siehe https://tex.stackexchange.com/a/13778/9075\n\\usepackage[hypcap=true]{subcaption}\n\n\n% EN: Extended support for footnotes\n% DE: Fußnoten\n%\n%\\usepackage{dblfnote}  %Zweispaltige Fußnoten\n%\n% Keine hochgestellten Ziffern in der Fußnote (KOMA-Script-spezifisch):\n%\\deffootnote[1.5em]{0pt}{1em}{\\makebox[1.5em][l]{\\bfseries\\thefootnotemark}}\n%\n% Abstand zwischen Fußnoten vergrößern:\n%\\setlength{\\footnotesep}{.85\\baselineskip}\n%\n% EN: Following command disables the separating line of the footnote\n% DE: Folgendes Kommando deaktiviert die Trennlinie zur Fußnote\n%\\renewcommand{\\footnoterule}{}\n%\n\\addtolength{\\skip\\footins}{\\baselineskip} % Abstand Text <-> Fußnote\n%\n% Fußnoten immer ganz unten auf einer \\raggedbottom-Seite\n% fnpos kommt aus dem yafoot package\n\\usepackage{fnpos}\n\\makeFNbelow\n\\makeFNbottom\n\n\n% EN: Variable page heights\n% DE: Variable Seitenhöhen zulassen\n\\raggedbottom\n\n\n% DE: Falls die Seitenzahl bei einer Referenz auf eine Abbildung nur dann angegeben werden soll,\n%     falls sich die Abbildung nicht auf der selben Seite befindet...\n\\iftex4ht\n  %tex4ht does not work well with vref, therefore we emulate vref behavior\n  \\newcommand{\\vref}[1]{\\ref{#1}}\n\\else\n  \\ifdeutsch\n    \\usepackage[ngerman]{varioref}\n  \\else\n    \\usepackage{varioref}\n  \\fi\n\\fi\n\n\n% EN: More beautiful tables if one uses \\toprule, \\midrule, \\bottomrule\n% DE: Noch schoenere Tabellen als mit booktabs mit http://www.zvisionwelt.de/downloads.html\n\\usepackage{booktabs}\n%\n%\\usepackage[section]{placeins}\n\n\n% EN: Graphs and Automata\n%\n% TODO: Since version 3.0 (2013-10-01), it supports pdflatex via the auto-pst-pdf package\n%       Requires -shell-escape\n%\\usepackage{gastex}\n\n\n%\\usepackage{multicol}\n\n% DE: kollidiert mit diplomarbeit.sty\n%\\usepackage{setspace}\n\n\n% DE: biblatex statt bibtex\n\\usepackage[\n  backend       = biber, %biber does not work with 64x versions alternative: bibtex8\n  %minalphanames only works with biber backend\n  sortcites     = true,\n  bibstyle      = alphabetic,\n  citestyle     = alphabetic,\n  giveninits    = true,\n  useprefix     = false, %\"von, van, etc.\" will be printed, too. See below.\n  minnames      = 1,\n  minalphanames = 3,\n  maxalphanames = 4,\n  maxbibnames   = 99,\n  maxcitenames  = 2,\n  natbib        = true,\n  eprint        = true,\n  url           = true,\n  doi           = true,\n  isbn          = true,\n  backref       = true]{biblatex}\n\n% enable more breaks at URLs. See https://tex.stackexchange.com/a/134281.\n\\setcounter{biburllcpenalty}{7000}\n\\setcounter{biburlucpenalty}{8000}\n\n\\bibliography{bibliography}\n%\\addbibresource[datatype=bibtex]{bibliography.bib}\n\n%Do not put \"vd\" in the label, but put it at \"\\citeauthor\"\n%Source: http://tex.stackexchange.com/a/30277/9075\n\\makeatletter\n\\AtBeginDocument{\\toggletrue{blx@useprefix}}\n\\AtBeginBibliography{\\togglefalse{blx@useprefix}}\n\\makeatother\n\n%Thin spaces between initials\n%http://tex.stackexchange.com/a/11083/9075\n\\renewrobustcmd*{\\bibinitdelim}{\\,}\n\n%Keep first and last name together in the bibliography\n%http://tex.stackexchange.com/a/196192/9075\n\\renewcommand*\\bibnamedelimc{\\addnbspace}\n\\renewcommand*\\bibnamedelimd{\\addnbspace}\n\n%Replace last \"and\" with a comma in bibliography\n%See http://tex.stackexchange.com/a/41532/9075\n\\AtBeginBibliography{%\n  \\renewcommand*{\\finalnamedelim}{\\addcomma\\space}%\n}\n\n\\DefineBibliographyStrings{ngerman}{\n  backrefpage  = {zitiert auf S\\adddot},\n  backrefpages = {zitiert auf S\\adddot},\n  andothers    = {et\\ \\addabbrvspace al\\adddot},\n  %Tipp von http://www.mrunix.de/forums/showthread.php?64665-biblatex-Kann-%DCberschrift-vom-Inhaltsverzeichnis-nicht-%E4ndern&p=293656&viewfull=1#post293656\n  bibliography = {Literaturverzeichnis}\n}\n\n% EN: enable hyperlinked author names when using \\citeauthor\n%     source: http://tex.stackexchange.com/a/75916/9075\n\\DeclareCiteCommand{\\citeauthor}\n{\\boolfalse{citetracker}%\n  \\boolfalse{pagetracker}%\n  \\usebibmacro{prenote}}\n{\\ifciteindex\n  {\\indexnames{labelname}}\n  {}%\n  \\printtext[bibhyperref]{\\printnames{labelname}}}\n{\\multicitedelim}\n{\\usebibmacro{postnote}}\n\n% EN: natbib compatibility\n%\\newcommand{\\citep}[1]{\\cite{#1}}\n%\\newcommand{\\citet}[1]{\\citeauthor{#1} \\cite{#1}}\n% EN: Beginning of sentence - analogous to cleveref - important for names such as \"zur Muehlen\"\n%\\newcommand{\\Citep}[1]{\\cite{#1}}\n%\\newcommand{\\Citet}[1]{\\Citeauthor{#1} \\cite{#1}}\n\n% DE: Blindtext. Paket \"blindtext\" ist fortgeschritterner als \"lipsum\" und kann auch Mathematik im Text (http://texblog.org/2011/02/26/generating-dummy-textblindtext-with-latex-for-testing/)\n%     kantlipsum (https://www.ctan.org/tex-archive/macros/latex/contrib/kantlipsum) ist auch ganz nett, aber eben auch keine Mathematik\n%     Wird verwendet, um etwas Text zu erzeugen, um eine volle Seite wegen Layout zu sehen.\n\\usepackage[math]{blindtext}\n\n\n% EN: Make LaTeX logos available by commands. E.g., \\lualatex\n%     Disabled, because currently causes \\not= already defined\n%\\usepackage{dtk-logos}\n\n% quick replacement:\n\\newcommand{\\LuaLaTeX}{Lua\\LaTeX\\xspace}\n\\newcommand{\\lualatex}{\\LuaLaTeX}\n\n% DE: Neue Pakete bitte VOR hyperref einbinden. Insbesondere bei Verwendung des\n%     Pakets \"index\" wichtig, da sonst die Referenzierung nicht funktioniert.\n%     Für die Indizierung selbst ist unter http://xindy.sourceforge.net\n%     ein gutes Tool zu erhalten.\n%     Hier also neue packages einbinden.\n% EN: Add new packages at this place.\n\n\n% EN: Provides hyperlinks\n%     Option \"unicode\" fixes umlauts in the PDF bookmarks - see https://tex.stackexchange.com/a/338770/9075\n%\n% DE: Erlaubt Hyperlinks im Dokument.\n%     Alle Optionen nach \\hypersetup verschoben, sonst crash\n%     Siehe auch: \"Praktisches LaTeX\" - www.itp.uni-hannover.de/~kreutzm\n\\usepackage[unicode]{hyperref}\n\n\n% EN: Define colors\n% DE: Da es mit KOMA 3 und xcolor zu Problemen mit den global Options kommt MÜSSEN die Optionen so gesetzt werden.\n%     Eigene Farbdefinitionen ohne die Namen des xcolor packages\n\\definecolor{darkblue}{rgb}{0,0,.5}\n\\definecolor{black}{rgb}{0,0,0}\n\n\n% EN: Define the color of links and more\n\\hypersetup{\n  % have both title and number hyperlinking to content\n  linktoc=all,\n  bookmarksnumbered=true,\n  bookmarksopen=true,\n  bookmarksopenlevel=1,\n  breaklinks=true,\n  colorlinks=true,\n  pdfstartview=Fit,\n  pdfpagelayout=SinglePage, % DE: Alterntaive: TwoPageRight -- zweiseitige Darstellung: ungerade Seiten rechts im PDF-Viewer - siehe auch http://tex.stackexchange.com/a/21109/9075\n  %pdfencoding=utf8, % EN: This is probably the same as passing the option \"unicode\" at \\usepackage{hyperref}\n  filecolor=darkblue,\n  urlcolor=darkblue,\n  linkcolor=black,\n  citecolor=black\n}\n\n\n% EN: Abbreviations - has to be loaded after hyperref\n% DE: Abkürzungsverzeichnis - muss nach hyperref geladen werden\n%\n% DE: siehe http://www.dickimaw-books.com/cgi-bin/faq.cgi?action=view&categorylabel=glossaries#glsnewwriteexceeded\n\\usepackage[acronym,indexonlyfirst,nomain]{glossaries}\n\\ifdeutsch\n  \\addto\\captionsngerman % DE: siehe https://tex.stackexchange.com/a/154566\n  {%\n    \\renewcommand*{\\acronymname}{Abkürzungsverzeichnis}\n  }\n\\else\n  \\addto\\captionsenglish{%\n    \\renewcommand*{\\acronymname}{List of Abbreviations}%\n  }\n\\fi\n\\renewcommand*{\\glsgroupskip}{}\n%\n% EN: Removed Glossarie as a table as a quick fix to get the template working again\n%     See http://tex.stackexchange.com/questions/145579/how-to-print-acronyms-of-glossaries-into-a-table\n%\n\\makenoidxglossaries\n\n\n% EN: Extensions for references inside the document (\\cref{fig:sample}, ...)\n% DE: cleveref für cref statt autoref, da cleveref auch bei Definitionen funktioniert\n\\usepackage[capitalise,nameinlink,noabbrev]{cleveref}\n\\ifdeutsch\n  \\crefname{table}{Tabelle}{Tabellen}\n  \\Crefname{table}{Tabelle}{Tabellen}\n  \\crefname{figure}{\\figurename}{\\figurename}\n  \\Crefname{figure}{Abbildung}{Abbildungen}\n  \\crefname{equation}{Gleichung}{Gleichungen}\n  \\Crefname{equation}{Gleichung}{Gleichungen}\n  \\crefname{theorem}{Theorem}{Theoreme}\n  \\Crefname{theorem}{Theorem}{Theoreme}\n  \\crefname{listing}{\\lstlistingname}{\\lstlistingname}\n  \\Crefname{listing}{Listing}{Listings}\n  \\crefname{section}{Abschnitt}{Abschnitte}\n  \\Crefname{section}{Abschnitt}{Abschnitte}\n  \\crefname{paragraph}{Abschnitt}{Abschnitte}\n  \\Crefname{paragraph}{Abschnitt}{Abschnitte}\n  \\crefname{subparagraph}{Abschnitt}{Abschnitte}\n  \\Crefname{subparagraph}{Abschnitt}{Abschnitte}\n\\else\n  \\crefname{listing}{\\lstlistingname}{\\lstlistingname}\n  \\Crefname{listing}{Listing}{Listings}\n\\fi\n\n\n% DE: Zur Darstellung von Algorithmen\n%     Algorithm muss nach hyperref geladen werden\n\\usepackage[chapter]{algorithm}\n\\usepackage[]{algpseudocode}\n\n\n% DE: Links auf Gleitumgebungen springen nicht zur Beschriftung,\n%     Doc: http://mirror.ctan.org/tex-archive/macros/latex/contrib/oberdiek/hypcap.pdf\n%     sondern zum Anfang der Gleitumgebung\n\\usepackage[all]{hypcap}\n\n\n% DE: Deckblattstyle\n%\n\\ifdeutsch\n  \\PassOptionsToPackage{language=german}{scientific-thesis-cover}\n\\else\n  \\PassOptionsToPackage{language=english}{scientific-thesis-cover}\n\\fi\n\n\n% EN: Bugfixes packages\n%\\usepackage{fixltx2e} %Fuer neueste LaTeX-Installationen nicht mehr benoetigt - bereinigte einige Ungereimtheiten, die auf Grund von Rueckwaertskompatibilitaet beibahlten wurden.\n%\\usepackage{mparhack} %Fixt die Position von marginpars (die in DAs selten bis gar nicht gebraucht werden}\n%\\usepackage{ellipsis} %Fixt die Abstaende vor \\ldots. Wird wohl auch nicht benoetigt.\n\n\n% EN: Settings for captions of floats\n% DE: Formatierung der Beschriftungen\n%\n\\captionsetup{\n  format=hang,\n  labelfont=bf,\n  justification=justified,\n  %single line captions should be centered, multiline captions justified\n  singlelinecheck=true\n}\n\n\n% EN: New float environments for listings and algorithms\n%\n% \\floatstyle{ruled} % TODO: enabled or disabled causes no change - listings and algorithms are always ruled\n%\n\\newfloat{Listing}{tbp}{code}[chapter]\n\\crefname{Listing}{Listing}{Listings}\n\n\\newfloat{Algorithmus}{tbp}{alg}[chapter]\n\\ifdeutsch\n  \\crefname{Algorithmus}{Algorithmus}{Algorithmus}\n\\else\n  \\crefname{Algorithmus}{Algorithm}{Algorithms}\n  \\floatname{Algorithmus}{Algorithm}\n\\fi\n\n\n\n% EN: Various chapter styles\n% DE: unterschiedliche Chapter-Styles\n%     u.a. Paket fncychap\n\n% Andere Kapitelueberschriften\n% falls einem der Standard von KOMA nicht gefaellt...\n% Falls man zurück zu KOMA moechte, dann muss jede der vier folgenden Moeglichkeiten deaktiviert sein.\n\n%\\usepackage[Sonny]{fncychap}\n\n%\\usepackage[Bjarne]{fncychap}\n\n%\\usepackage[Lenny]{fncychap}\n\n%DE: Zur Aktivierung eines der folgenden Möglichkeiten ein Paar von \"\\iffalse\" und \"\\fi\" auskommentieren\n\n\\iffalse\n  \\usepackage[Bjarne]{fncychap}\n  \\ChNameVar{\\Large\\sf} \\ChNumVar{\\Huge} \\ChTitleVar{\\Large\\sf}\n  \\ChRuleWidth{0.5pt} \\ChNameUpperCase\n\\fi\n\n\\iffalse\n  \\usepackage[Rejne]{fncychap}\n  \\ChNameVar{\\centering\\Huge\\rm\\bfseries}\n  \\ChNumVar{\\Huge}\n  \\ChTitleVar{\\centering\\Huge\\rm}\n  \\ChNameUpperCase\n  \\ChTitleUpperCase\n  \\ChRuleWidth{1pt}\n\\fi\n\n\\iffalse\n  \\usepackage{fncychap}\n  \\ChNameUpperCase\n  \\ChTitleUpperCase\n  \\ChNameVar{\\raggedright\\normalsize} %\\rm\n  \\ChNumVar{\\bfseries\\Large}\n  \\ChTitleVar{\\raggedright\\Huge}\n  \\ChRuleWidth{1pt}\n\\fi\n\n\\iffalse\n  \\usepackage[Bjornstrup]{fncychap}\n  \\ChNumVar{\\fontsize{76}{80}\\selectfont\\sffamily\\bfseries}\n  \\ChTitleVar{\\raggedright\\Large\\sffamily\\bfseries}\n\\fi\n\n% EN: Complete different chapter style - self-made\n\n% Innen drin kann man dann noch zwischen\n%   * serifenloser Schriftart (eingestellt)\n%   * serifenhafter Schriftart (wenn kein zusaetzliches Kommando aktiviert ist) und\n%   * Kapitälchen wählen\n\\iffalse\n  \\makeatletter\n  %\\def\\thickhrulefill{\\leavevmode \\leaders \\hrule height 1ex \\hfill \\kern \\z@}\n\n  %Fuer Kapitel mit Kapitelnummer\n  \\def\\@makechapterhead#1{%\n    \\vspace*{10\\p@}%\n    {\\parindent \\z@ \\raggedright \\reset@font\n      %Default-Schrift: Serifenhaft (gut fuer englische Dokumente)\n      %A) Fuer serifenlose Schrift:\n      \\fontfamily{phv}\\selectfont\n      %B) Fuer Kapitaelchen:\n      %\\fontseries{m}\\fontshape{sc}\\selectfont\n      %C) Fuer ganz \"normale\" Schrift:\n      %\\normalfont\n      %\n      \\Large \\@chapapp{} \\thechapter\n      \\par\\nobreak\\vspace*{10\\p@}%\n      \\interlinepenalty\\@M\n      {\\Huge\\bfseries\\baselineskip3ex\n        %Fuer Kapitaelchen folgende Zeile aktivieren:\n        %\\fontseries{m}\\fontshape{sc}\\selectfont\n        #1\\par\\nobreak}\n      \\vspace*{10\\p@}%\n      \\makebox[\\textwidth]{\\hrulefill}%    \\hrulefill alone does not work\n      \\par\\nobreak\n      \\vskip 40\\p@\n    }}\n\n  %Fuer Kapitel ohne Kapitelnummer (z.B. Inhaltsverzeichnis)\n  \\def\\@makeschapterhead#1{%\n    \\vspace*{10\\p@}%\n    {\\parindent \\z@ \\raggedright \\reset@font\n      \\normalfont \\vphantom{\\@chapapp{} \\thechapter}\n      \\par\\nobreak\\vspace*{10\\p@}%\n      \\interlinepenalty\\@M\n      {\\Huge \\bfseries %\n        %Default-Schrift: Serifenhaft (gut fuer englische Dokumente)\n        %A) Fuer serifenlose Schrift folgende Zeile aktivieren:\n        \\fontfamily{phv}\\selectfont\n        %B) Fuer Kapitaelchen folgende Zeile aktivieren:\n        %\\fontseries{m}\\fontshape{sc}\\selectfont\n        #1\\par\\nobreak}\n      \\vspace*{10\\p@}%\n      \\makebox[\\textwidth]{\\hrulefill}%    \\hrulefill does not work\n      \\par\\nobreak\n      \\vskip 40\\p@\n    }}\n  %\n  \\makeatother\n\\fi\n\n\n% DE: Minitoc-Einstellungen\n%\\dominitoc\n%\\renewcommand{\\mtctitle}{Inhaltsverzeichnis dieses Kapitels}\n\n\n% EN: Nicer paragraph line placement:\n%     - Disable single lines at the start of a paragraph (Schusterjungen)\n%     - Disable single lines at the end of a paragraph (Hurenkinder)\n%     Normally, this is clubpenalty and widowpenalty, but using a package, it feels more non-hacky\n\\usepackage[all,defaultlines=3]{nowidow}\n%\n\\displaywidowpenalty = 10000\n\n\n% EN: Try to get rid of \"overfull hbox\" things and let the text flow better\n%     See also\n%       - http://groups.google.de/group/de.comp.text.tex/browse_thread/thread/f97da71d90442816/f5da290593fd647e?lnk=st&q=tolerance+emergencystretch&rnum=5&hl=de#f5da290593fd647e\n%       - http://www.tex.ac.uk/cgi-bin/texfaq2html?label=overfull\n\\tolerance=2000\n%\n% EN: This could be increased to 20pt\n\\setlength{\\emergencystretch}{3pt}\n%\n% EN: Suppress hbox warnings if less than 1pt\n\\setlength{\\hfuzz}{1pt}\n\n\n% EN: Fix names for algorithms in German\n% DE: fuer algorithm.sty: - falls Deutsch und nicht Englisch.\n\\ifdeutsch\n  \\floatname{algorithm}{Algorithmus}\n  \\renewcommand{\\listalgorithmname}{Verzeichnis der Algorithmen}\n\\fi\n\n\n\n\n% Float-placements - http://dcwww.camd.dtu.dk/~schiotz/comp/LatexTips/LatexTips.html#figplacement\n% and http://people.cs.uu.nl/piet/floats/node1.html\n\\renewcommand{\\topfraction}{0.85}\n\\renewcommand{\\bottomfraction}{0.95}\n\\renewcommand{\\textfraction}{0.1}\n\\renewcommand{\\floatpagefraction}{0.75}\n%\\setcounter{totalnumber}{5}\n\n% EN: ensure that floats covering a whole page are placed at the top of the page\n%    see http://tex.stackexchange.com/a/28565/9075\n\\makeatletter\n\\setlength{\\@fptop}{0pt}\n\\setlength{\\@fpbot}{0pt plus 1fil}\n\\makeatother\n\n\n\n% DE: Bei Gleichungen nur dann die Nummer zeigen, wenn die Gleichung auch referenziert wird\n%     Funktioniert mit MiKTeX Stand 2012-01-13 nicht. Deshalb ist dieser Schalter deaktiviert.\n%\n%\\mathtoolsset{showonlyrefs}\n\n\n% EN: Margins\n% DE: Ränder\n%     Viele Moeglichkeiten, die Raender im Dokument einzustellen.\n%\n%     Satzspiegel neu berechnen. Dokumentation dazu ist in \"scrguide.pdf\" von KOMA-Skript zu finden\n%     Optionen werden bei \\documentclass[] in ausarbeitung.tex mitgegeben.\n% \\typearea[current]{current} %neu berechnen, da neue Schrift eingebunden\n\n%\\usepackage{a4}\n%\\usepackage{a4wide}\n%\\areaset{170mm}{277mm} %a4:29,7hochx21mbreit\n\n%Wer die Masse direkt eingeben moechte:\n%Bei diesem Beispiel wird die Regel nicht beachtet, dass der innere Rand halb so gross wie der aussere Rand und der obere Rand halb so gross wie der untere Rand sein sollte\n%\\usepackage[inner=2.5cm, outer=2.5cm, includefoot, top=3cm, bottom=1.5cm]{geometry}\n\n% EN: Package geometry to enlarge on page\n%\n%     Normally, geometry should not be used as the typearea package calculates the margins perfectly for printing\n%     However, we want better screen-readable documents where the content does not \"jump\"\n%     Thus, we fix the margins left and right to the same value\n%\n%     Source: http://www.howtotex.com/tips-tricks/change-margins-of-a-single-page/\n%\n\\usepackage[\n  left=3cm,right=3cm,top=2.5cm,bottom=2.5cm,\n  headsep=18pt,\n  footskip=30pt,\n  includehead,\n  includefoot\n]{geometry}\n\n\n% EN: Provides todo notes\n% DE: schoene TODOs\n\\ifdeutsch\n  \\usepackage[colorinlistoftodos,ngerman]{todonotes}\n\\else\n  \\usepackage[colorinlistoftodos]{todonotes}\n\\fi\n\\setlength{\\marginparwidth}{2,5cm}\n\n\\let\\xtodo\\todo\n\\renewcommand{\\todo}[1]{\\xtodo[inline,color=black!5]{#1}}\n\\newcommand{\\utodo}[1]{\\xtodo[inline,color=green!5]{#1}}\n\\newcommand{\\itodo}[1]{\\xtodo[inline]{#1}}\n\n\n% EN: Enable footnotes in tables.\n%     This package supersedes the 1997 package \"footnote\"\n\\usepackage{footnotehyper}\n% TODO: The footnotehyper author recommends to enclose the respective area with \\begin{savenotes} ... \\end{savenotes}\n\\makesavenoteenv{tabular}\n\\makesavenoteenv{table}\n% Reuse of footnotes, see http://tex.stackexchange.com/questions/10102/multiple-references-to-the-same-footnote-with-hyperref-support-is-there-a-bett\n\\crefformat{footnote}{#2\\footnotemark[#1]#3}\n\n\n% EN: pgfplots (optional if the package is installed)\n%     PGFPlots draws high-qual­ity func­tion plots in nor­mal or log­a­rith­mic scal­ing\n\\IfFileExists{pgfplots.sty}{\n  \\usepackage{pgfplots}\n  % EN: highest version supported by overleaf as of 2018-03-16\n  \\pgfplotsset{compat=1.14}\n}{}\n\n\n% EN: pgfplotstable (optional if the package is installed)\n%     PGFPlots generates tables from CSV files\n\\IfFileExists{pgfplotstable.sty}{\n  \\usepackage{pgfplotstable}\n}{}\n\n\n% EN: Package for creating graphics programmatically\n\\usepackage{tikz}\n\n\n% EN: Package for creating uml diagramms\n\\usepackage{tikz-uml}\n\n\n% EN: Forest: apgf/TikZ-based package for drawing linguistic trees - https://ctan.org/pkg/forest\n\\usepackage{forest}\n\n\n% EN: Enable PlantUML listings in the environment \"plantuml\"\n\\IfFileExists{plantuml.sty}{\n  \\usepackage[output=latex]{plantuml}\n}{}\n\n\n% EN: Layout: bottoms of pages not aligned with each other\n% DE: Der untere Rand darf \"flattern\"\n\\raggedbottom\n\n\n% DE: Wie tief wird das Inhaltsverzeichnis aufgeschlüsselt\n% 0 --\\chapter\n% 1 --\\section % fuer kuerzeres Inhaltsverzeichnis verwenden - oder minitoc benutzen\n% 2 --\\subsection\n% 3 --\\subsubsection\n% 4 --\\paragraph\n\\setcounter{tocdepth}{1}\n\n\n% EN: Fixes wrong spacing in the TOC.\n%     Source: https://tex.stackexchange.com/a/33842/9075 -> comment by esdd\n\\RedeclareSectionCommand[tocnumwidth=2.8em]{section}\n\n\n% DE: Angaben in die PDF-Infos uebernehmen\n\\makeatletter\n\\hypersetup{\n  pdftitle={}, %Titel der Arbeit\n  pdfauthor={}, %Author\n  pdfkeywords={}, % CR-Klassifikation und ggf. weitere Stichworte\n  pdfsubject={}\n}\n\\makeatother\n\n\n% EN: Higher compression of the output PDF\n\\pdfcompresslevel=9\n\n\n% EN: Required for a recent version of komascript, as some packages are not as compatible with KOMAScript as they should be\n%     Has to be loaded at the *very* end, so we use \"\\AtEndPreamble\" by etoolsbox\n\\usepackage{etoolbox}\n\\AtEndPreamble{\\usepackage{scrhack}}\n\n\n% EN: Provide tables over multiple pages\n\\usepackage{longtable}\n\n\n% EN: Show LaTeX commands and their results in the document\n%     Enables the command \\PrintDemo\n% See https://github.com/latextemplates/scientific-thesis-template/issues/82 for further discussion\n\\usepackage{latexdemo}\n\n\n% DE: Fuer deutsche Texte: Weniger Silbentrennung, mehr Abstand zwischen den Woertern\n\\ifdeutsch\n  \\setlength{\\emergencystretch}{3em} % Silbentrennung reduzieren durch mehr frei Raum zwischen den Worten\n\\fi\n"
  },
  {
    "path": "data/data.csv",
    "content": "a,b,c,d\n1,4,5,1\n2,3,1,5\n3,5,6,1\n4,1,4,9\n5,3,4,7"
  },
  {
    "path": "docs/adr/0000-use-markdown-architectural-decision-records.md",
    "content": "# Use Markdown Architectural Decision Records\n\nShould we record the architectural decisions made in this project?\nAnd if we do, how to structure these recordings?\n\n## Considered Options\n\n* Use [MADR](https://adr.github.io/madr/) 2.0.1 - The Markdown Architectural Decision Records\n* [Michael Nygard's template](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions) - The first incarnation of the term \"ADR\". Maintainable by [adr-tools](https://github.com/npryce/adr-tools).\n* [Sustainable Architectural Decisions](https://www.infoq.com/articles/sustainable-architectural-design-decisions) - The Y-Statements\n* Other templates listed at <https://github.com/joelparkerhenderson/architecture_decision_record>\n* No records\n\n## Decision Outcome\n\nChosen option: MADR 2.0.1, because:\n- Implicit assumptions should be made explicit.\n  Design documentation is important to enable people understanding the decisions later on.\n  See also [A rational design process: How and why to fake it](https://doi.org/10.1109/TSE.1986.6312940).\n- The MADR template is lean and fits our development style.\n- Version 2.0.1 is the latest one available when starting to document ADRs.\n"
  },
  {
    "path": "docs/adr/0001-offer-tex-files-instead-of-a-package.md",
    "content": "# Offer tex files instead of a package\n\nIt has to be decided how the template is distributed.\n\n## Considered Alternatives\n\n* Distribute using a ZIP file downloadable via GitHub\n* Offer as latex package (`.sty`) distributed using CTAN\n* Offer as a class file  (`.cls`) distributed using CTAN\n\n## Decision Outcome\n\n* Chosen Alternative: Distribute using a ZIP file downloadable via GitHub\n* It should be easy for users to\n  1) start using the template and\n  2) apply hints from tex.stackexchange or other LaTeX help platforms.\n  When distributing as package (`.cls` and `.sty` files) (such as [hagenberg-thesis](https://ctan.org/pkg/hagenberg-thesis)), it is difficult for users to adapt the packages.\n  The main reason is that there will be never as much help as for basic classes such as [KOMA-Script](https://www.komascript.de/).\n* When there is an update, it will be more difficult for users to pick the updates.\n  They could do it by advanced use of git or just by coping the patches manually.\n  However, there should not be much updates coming\n"
  },
  {
    "path": "docs/adr/0002-use-cc0-as-license.md",
    "content": "# Use CC0 as license\n\nEach information published should take a license to clearly state what is allowed and what not.\n\n- The template should be usable freely.\n- The license should be an accepted one at least in the European Union and the US.\n\n## Considered Options\n\n* CC0\n* MIT\n* GPL\n\n## Decision Outcome\n\nChosen option: CC0, because comes out best (see below).\n\n## Pros and Cons of the Options\n\n### CC0\n\n* Good, because allows the user to do anything\n* Bad, because the license text is long\n* Bad, because not as well-known as MIT, GPL\n\n### MIT\n\n* Good, because well-known\n* Bad, because more a code license than a license for text\n\n### GPL\n\n* Good, because well-known\n* Bad, because forces the user of the template to make available his text under GPL, too.\n  A long reasoning regarding this statement is done at: <https://opensource.stackexchange.com/a/4206/5671>\n"
  },
  {
    "path": "docs/adr/0003-use-minted-for-code-highlithing.md",
    "content": "# Use minted for code highlighting\n\n## Context and Problem Statement\n\nSource code needs to be highlighted\n\n## Considered Options\n\n* [minted](https://www.ctan.org/pkg/minted)\n* [listings](https://www.ctan.org/pkg/listings)\n* [pygmentex](https://www.ctan.org/pkg/pygmentex)\n* [texments](https://www.ctan.org/pkg/texments)\n\n## Decision Outcome\n\nChosen option: \"minted\", because\n\n1. Listings is inferior because it doesn't utilize a full lexer\n2. Minted offers integration with [pygments](http://pygments.org/) and is actively maintained.\n3. The person who took over minted development, [evaluated all alternatives](https://tex.stackexchange.com/a/103471/9075) and came to the conclusion that minted is the most promising solution.\n\nPositive Consequences:\n\n* Source is highlighted properly\n\nNegative consequences:\n\n* Users need to install python and pygments\n"
  },
  {
    "path": "docs/adr/0005-use-lualatex-as-default.md",
    "content": "# Use lualatex as default\n\n## Context and Problem Statement\n\nWhich latex compiler to use?\n\n* pdflatex\n* xelatex\n* lualatex\n\n## Decision Outcome\n\nChosen option: \"lualatex\", because well-maintained and better typography.\nWe accept that compilation will take longer.\nUsers can switch to pdflatex if they want and are aware of the consequences.\n"
  },
  {
    "path": "docs/adr/index.md",
    "content": "# Architectural Decision Log\n\nThis log lists the architectural decisions for the scientific-thesis-template.\n\n<!-- adrlog -- Regenerate the content by using \"adr-log -i\". You can install it via \"npm install -g adr-log\" -->\n\n- [ADR-0000](0000-use-markdown-architectural-decision-records.md) - Use Markdown Architectural Decision Records\n- [ADR-0001](0001-offer-tex-files-instead-of-a-package.md) - Offer tex files instead of a package\n- [ADR-0002](0002-use-cc0-as-license.md) - Use CC0 as license\n- [ADR-0003](0003-use-minted-for-code-highlithing.md) - Use minted for code highlighting\n- [ADR-0004](0004-use-lualatex-for-correct-ligatures.md) - Use lualatex for correct ligatures\n\n<!-- adrlogstop -->\n\nFor new ADRs, please use [template.md](template.md) as basis.\nMore information on MADR is available at <https://adr.github.io/madr/>.\nGeneral information about architectural decision records is available at <https://adr.github.io/>.\n"
  },
  {
    "path": "docs/adr/template.md",
    "content": "# [short title of solved problem and solution]\n\n* Status: [proposed | rejected | accepted | deprecated | … | superseded by [ADR-0005](0005-example.md)] <!-- optional -->\n* Deciders: [list everyone involved in the decision] <!-- optional -->\n* Date: [YYYY-MM-DD when the decision was last updated] <!-- optional -->\n\nTechnical Story: [description | ticket/issue URL] <!-- optional -->\n\n## Context and Problem Statement\n\n[Describe the context and problem statement, e.g., in free form using two to three sentences. You may want to articulate the problem in form of a question.]\n\n## Decision Drivers <!-- optional -->\n\n* [driver 1, e.g., a force, facing concern, …]\n* [driver 2, e.g., a force, facing concern, …]\n* … <!-- numbers of drivers can vary -->\n\n## Considered Options\n\n* [option 1]\n* [option 2]\n* [option 3]\n* … <!-- numbers of options can vary -->\n\n## Decision Outcome\n\nChosen option: \"[option 1]\", because [justification. e.g., only option, which meets k.o. criterion decision driver | which resolves force force | … | comes out best (see below)].\n\n### Positive Consequences <!-- optional -->\n\n* [e.g., improvement of quality attribute satisfaction, follow-up decisions required, …]\n* …\n\n### Negative Consequences <!-- optional -->\n\n* [e.g., compromising quality attribute, follow-up decisions required, …]\n* …\n\n## Pros and Cons of the Options <!-- optional -->\n\n### [option 1]\n\n[example | description | pointer to more information | …] <!-- optional -->\n\n* Good, because [argument a]\n* Good, because [argument b]\n* Bad, because [argument c]\n* … <!-- numbers of pros and cons can vary -->\n\n### [option 2]\n\n[example | description | pointer to more information | …] <!-- optional -->\n\n* Good, because [argument a]\n* Good, because [argument b]\n* Bad, because [argument c]\n* … <!-- numbers of pros and cons can vary -->\n\n### [option 3]\n\n[example | description | pointer to more information | …] <!-- optional -->\n\n* Good, because [argument a]\n* Good, because [argument b]\n* Bad, because [argument c]\n* … <!-- numbers of pros and cons can vary -->\n\n## Links <!-- optional -->\n\n* [Link type] [Link to ADR] <!-- example: Refined by [ADR-0005](0005-example.md) -->\n* … <!-- numbers of links can vary -->\n"
  },
  {
    "path": "docs/latex-setup.md",
    "content": "# Recommended LaTeX environments\n\n## TeXStudio as LaTeX Editor\n\nGrammar and spell checking is available at [TeXstudio].\nPlease download [LanguageTool] and [configure TeXstudio to use it](http://wiki.languagetool.org/checking-la-tex-with-languagetool#toc4).\nNote that it is enough to point to `languagetool-server.jar`.\n![language-tool-configuration](texstudio-configuration-languagetool.png)\n\nThe template is compiled using normal compilation commands.\nYour LaTeX environment (such as [TeXStudio]) should take care about the compilation transparently.\n\nIf you open `main-minted-german.tex`, there will be a warning that the compilation command will be overridden.\nPlease answer `(a) allow for this document`:\n\n![allow --shell-escape for this document](texstudio-confirmation-1.png)\n\nAt \"Build & View\", there will be a question to update to biber.\nPlease answer `(a) allow for this document`:\n\n![allow biber for this document](texstudio-confirmation-2.png)\n\nWhen the \"Package Installation\" dialog pops up at TeXStudio, choose your username at \"The package will be installed for:\" and uncheck \"Always show this dialog before installing packages.\"\nIf you want to include .svg graphics, [inkscape] has to be in your path.\n\n**Attention!** The first compilation will take **at least 30 seconds**, because there will be some LaTeX packages installed.\n\n**If TeXstudio doesn't fit your need, check [the list of all available LaTeX Editors](http://tex.stackexchange.com/questions/339/latex-editors-ides).**\n\n## JabRef for managing literature\n\nUse [JabRef] to manage your bibliography.\nQuick installation using [Chocolatey]: `choco install texstudio languagetool jabref`.\n\nA comparison to other literature management software is available at <https://ultimate-comparisons.github.io/ultimate-reference-management-software-comparison/>.\nSee [LaTeX Editors/IDEs question on TeX.SX](http://tex.stackexchange.com/questions/339/latex-editors-ides) for a complete list of LaTeX editors.\n\n## Installation hints for Ubuntu\n\n- From Ubuntu 18.10 onwards, the basic version of the template works without issues.\n  Advanced usages such as cool syntax highlighting with [minted](https://www.ctan.org/pkg/minted) needs more configuration.\n- Ubuntu 16.04 [ships biber 2.4](https://bugs.launchpad.net/ubuntu/+source/biber/+bug/1589644), so you have to upgrade your texlive distribution.\n  The easiest way is to uninstall the ubuntu package and use [install-tl-ubuntu](https://github.com/scottkosty/install-tl-ubuntu).\n  Then, you can follow the instructions given at <http://tex.stackexchange.com/a/55459/9075> to update your texlive distribution.\n  If you do not want to have an updated installation, but fiddle around with dirty patching your installation, please follow  <http://tex.stackexchange.com/questions/84624/how-to-upgrade-biblatex-properly>.\n\nAlways working solution: Use the [docker image](https://gitlab.com/islandoftex/images/texlive#tex-live-docker-image).\nThis provides a perfectly configured latex distribution with all required tools.\n\n1. Execute `sudo visudo` to edit the sudoers file\n1. Add the line `myusername ALL = (root) NOPASSWD: /usr/bin/docker`. Replace `myusername` accordingly. (Source: <https://unix.stackexchange.com/a/13058/18033>)\n1. Execute `sudo docker pull registry.gitlab.com/islandoftex/images/texlive:latest`.\n   This should not ask for any password.\n   Will download approx. 4GB.\n1. Open TeXstudio\n1. Options > Configure TeXstudio > Commands\n1. Set \"PdfLaTeX\" to `docker run --rm -v DIROFTEXDOCUMENT:DIROFTEXDOCUMENT --workdir=DIROFTEXDOCUMENT registry.gitlab.com/islandoftex/images/texlive:latest pdflatex --shell-escape -synctex=1 -interaction=nonstopmode %.tex`, replace `DIROFTEXDOCUMENT` by the directory of your latex document. Example: `/home/user/thesis`.\n1. Set \"LuaLaTeX\" to `docker run --rm -v DIROFTEXDOCUMENT:DIROFTEXDOCUMENT --workdir=DIROFTEXDOCUMENT registry.gitlab.com/islandoftex/images/texlive:latest lualatex --shell-escape -synctex=1 -interaction=nonstopmode %.tex`, replace `DIROFTEXDOCUMENT` by the directory of your latex document. Example: `/home/user/thesis`.\n1. Set \"Biber\" to `docker run --rm -v DIROFTEXDOCUMENT:DIROFTEXDOCUMENT --workdir=DIROFTEXDOCUMENT registry.gitlab.com/islandoftex/images/texlive:latest biber %`, replace `DIROFTEXDOCUMENT` by the directory of your latex document. Example: `/home/user/thesis`.\n1. Check if the \"docker pull\" command from step 3 succeed. If not, wait.\n1. Try to press the \"Compile\" (<kbd>F6</kbd>) button in TeXstudio.\n\n## Installation hints for Windows\n\nNote: The default installation of MiKTeX might ship with incompatible biblatex and biber packages.\n**You have to keep your MiKTeX up to date.**\nIn case you followed the linked installation steps, you only have to run \"Update MiKTeX\".\nIf you installed MiKTeX other ways, you have to run \"Update MiKTeX (Admin)\" and \"Update MiKTeX\" and check in both tools for updates (see <http://tex.stackexchange.com/a/108490/9075>).\n  \n### Preparations\n\n1. Install [chocolatey]:\n    1. Open `cmd.exe` as Administartor\n    2. Paste and hit <kbd>Enter</kbd> `@\"%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command \"iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))\" && SET \"PATH=%PATH%;%ALLUSERSPROFILE%\\chocolatey\\bin\"`\n1. Execute `choco feature enable -n=allowGlobalConfirmation` to get rid off additional installation confirmations.\n1. Execute `choco install texstudio sumatrapdf.install strawberryperl jre8 jabref languagetool` to install necessary tooling.\n1. In case [PlantUML](http://plantuml.com/) should be used, follow the installation instructions at <https://koppor.github.io/plantuml/> listed at the \"pre-conditions\" section.\n1. For more recommended tooling see <https://github.com/koppor/koppors-chocolatey-scripts>.\n\n### Recommended setup of MiKTeX\n\n1. Download the basic installer from <http://miktex.org/download>\n1. Start it\n1. First screen: Read the license conditions and be sure that you really agree.\n    - Check \"I accept the MiKTeX copying conditions\"\n    - Click \"Next\"\n1. Second screen: \"Shared Installation\": Install MiKTeX for: \"Only for: `username`\".\n    - Check first option\n    - Click \"Next\"\n1. Third screen: \"Installation Directory\": Install MiKTeX to: `C:\\MiKTeX`. This enabled browsing for documentation at `C:\\MiKTeX29\\doc\\latex`\n    - Input \"C:\\MiKTeX\" in the input field\n    - Click \"Next\"\n1. Fourth screen: \"Settings\": Preferred paper: A4 and install missing packages on the fly.\n    - First combo box: \"A4\"\n    - Second combo box: \"Yes\":\n    - Click \"Next\"\n1. Fifth screen: Press \"Start\"\n1. Now a window \"Executing\" appears. It will take about 5 minutes until this is finished.\n1. At the last screen: Click \"Close\"\n1. After the installation:\n     1. Open `cmd.exe`\n     2. Execute `refreshenv` to make MiKTeX's binaries known right after the installation\n     3. Execute `mpm --update-db`\n     4. Execute `mpm --update`\n     5. Execute `mpm --install=tex-gyre` (to resolve `fontspec error: \"font-not-found\"`, `\\setmainfont{TeX Gyre Termes}`)\n     6. Execute `mpm --install=tex-gyre-math`\n     7. Execute `mpm --install=cm-super`\n     8. Execute `initexmf --update-fndb` (ensure that no other MiKTeX tooling such as the [MiKTeX Console](https://miktex.org/howto/miktex-console) is run in parallel - see <https://github.com/MiKTeX/miktex/issues/98#issuecomment-375952270>)\n     9. Execute `initexmf --mklinks --force`\n\n[chocolatey]: https://chocolatey.org/\n[JabRef]: https://www.jabref.org\n[LanguageTool]: https://languagetool.org/\n[TeXstudio]: http://texstudio.sourceforge.net/\n"
  },
  {
    "path": "docs/overleaf/overleaf.md",
    "content": "# Usage at overleaf\n\n<!-- toc -->\n\n- [Automatic setup](#automatic-setup)\n- [Manual setup](#manual-setup)\n\n<!-- tocstop -->\n\n## Automatic setup\n\n1. Sign in at overleaf and click on \"upload new project\"  \n   ![upload new project](overleaf-step-1.png)\n\n2. Choose \"Upload Zip\"  \n   ![Upload Zip](overleaf-step-2.png)\n\n3. Select <https://github.com/latextemplates/scientific-thesis-template/archive/main.zip> for uploading  \n   ![select main.zip for uploading](overleaf-step-3.png)\n\n4. Upload main.zip  \n   ![upload main.zip](overleaf-step-4.png)\n\n5. Ignore import error of `latexmkrc`  \n  ![Ignore import errors](overleaf-step-5.png)\n\n6. Choose main file: For English, choose `main-english.tex`. For German, choose `main-german.tex`.  \n  ![Choose main file](overleaf-step-6.png)\n\n<!--\n\n7. See error missing `sty` files.  \n  You get following error:  \n  ![lccaps](overleaf-step-7-lccaps-error.png)  \n  The Overleaf FAQ states at [What packages do you support?](https://www.overleaf.com/help/30-what-packages-do-you-support) that they support TeX Live 2016, which does not include all new packages.\n  The templates makes use of two packages, which are not included at overleaf until now.\n  Thus, you have to upload the sty files manually.\n\n8. Upload `llcaps.sty`  \n  ![lccaps](overleaf-step-8.1.png)  \n  Insert the URL <https://raw.githubusercontent.com/latextemplates/stys-for-overleaf/master/lccaps.sty>  \n  ![lccaps](overleaf-step-8.2.png)\n\n9. Upload `scientific-thesis-cover.sty`  \n   Similar as `llcaps.sty`. Use <https://raw.githubusercontent.com/latextemplates/scientific-thesis-cover/master/scientific-thesis-cover.sty> as URL.\n\n10. ~~Switch build tool to lualatex.~~\n    LuaLaTeX is currently not working on Overleaf.\n    You have to wait for an overleaf update.\n    ~~Choose lualatex in project settings as outlined at <https://www.overleaf.com/blog/167-new-build-options-available-on-writelatex-compile-with-lualatex-or-latex-plus-dvipdf#.WqE7rOdG3kY>.~~\n    <!-- ![Switch to lualatex](https://www.filepicker.io/api/file/aPVX5DQ0T9KSp8UNeWk1) -->\n\n11. Now you can start working in the main file.\n\n## Manual setup\n\n1. create new overleaf project\n2. clone the overleaf project using git\n3. copy the files to that directory. Follow the steps at \"Download\" above\n4. delete `.latexmkrc`\n5. `git add .`\n6. `git commit -m\"initial import\"`\n7. `git push`\n"
  },
  {
    "path": "latexhints-english.tex",
    "content": "% !TeX root = main-english.tex\n% !TeX spellcheck = en-US\n% !TeX encoding = utf8\n% -*- coding:utf-8 mod:LaTeX -*-\n\n%This smart spell only works if no changes have been made to the chapter\n%using the options proposed in preambel/chapterheads.tex.\n\\setchapterpreamble[u]{%\n  \\dictum[Albert Einstein]{We cannot solve our problems with the same level of thinking that created them}\n}\n\\chapter{LaTeX Hints}\n\\label{chap:latexhints}\n\nOne sentence per line.\nThis rule is important for the usage of version control systems.\nA new line is generated with a blank line.\nAs you would do in Word:\nNew paragraphs are generated by pressing enter.\nIn LaTeX, this does not lead to a new paragraph as LaTeX joins subsequent lines.\nIn case you want a new paragraph, just press enter twice (!).\nThis leads to an empty line.\nIn word, there is the functionality to press shift and enter.\nThis leads to a hard line break.\nThe text starts at the beginning of a new line.\nIn LaTeX, you can do that by using two backslashes (\\textbackslash\\textbackslash).\nThis is rarely used.\n\nPlease do \\textit{not} use two backslashes for new paragraphs.\nFor instance, this sentence belongs to the same paragraph, whereas the last one started a new one.\nA long motivation for that is provided at \\url{http://loopspace.mathforge.org/HowDidIDoThat/TeX/VCS/#section.3}.\n\nOne can write \\emph{emphasized text (rendered in italics)} and \\textbf{bold text}.\n\n\\section{File Encoding and Support of Umlauts}\n\\label{sec:firstsectioninlatexhints}\nThe template offers foll UTF-8 support.\nAll recent editors should not have issues with that.\n\n\\section{Citations}\n\n\nReferences are set by means of \\texttt{\\textbackslash cite[key]}.\n\n\\begin{filecontents*}[overwrite]{\\democodefile}\nExample: \\cite{WSPA} or by author input: \\citet{WSPA}.\n\\end{filecontents*}\n\\PrintDemo{style=parallel}\n\nThe following sentence demonstrates\n\\begin{inparaenum}[1.]\n  \\item the capitalization of author names at the beginning of the sentence,\n  \\item the correct citation using author names and the reference,\n  \\item that the author names are a hyperlink to the bibliography and that\n  \\item the bibliography contains the name prefix \\qq{van der} of \\qq{Wil M.\\,P.\\ van der Aalst}.\n\\end{inparaenum}\n\n\\begin{filecontents*}[overwrite]{\\democodefile}\n\\Citet{RVvdA2016} present a study on the effectiveness of workflow management systems.\n\\end{filecontents*}\n\\PrintDemo{style=parallel}\n\nThe following sentence demonstrates that you can overwrite the text part of the generated label using \\texttt{label} in a bibliopgrahie\"=entry, but the year and the uniqueness are still generated by biber.\n\n\\begin{filecontents*}[overwrite]{\\democodefile}\nThe workflow engine Apache ODE \\cite{ApacheODE} executes \\BPEL processes reliably.\n\\end{filecontents*}\n\\PrintDemo{style=parallel}\n\n\\begin{filecontents*}[overwrite]{\\democodefile}\nWords are best enclosed using \\texttt{\\textbackslash qq\\{..\\}}, then the correct quotes are used.\n\\end{filecontents*}\n\\PrintDemo{style=parallel}\n\nWhen creating the Bibtex file it is recommended to make sure that the DOI is listed.\n\n\\section{Formulas and Equations}\n\\label{sec:mf}\n\n\\begin{filecontents*}[overwrite]{\\democodefile}\nEquations $f(x)=x$ inside the text can be provided.\n\\end{filecontents*}\n\\PrintDemo{style=parallel}\n\nA list with all available mathematical symbols is provided at \\url{http://texdoc.net/pkg/symbols-a4}.\n\n\\begin{filecontents*}[overwrite]{\\democodefile}\nAs an example, the set of natural numbers is given by $\\mathbb{N}$.\n\\end{filecontents*}\n\\PrintDemo{style=parallel}\n\nFor the documentation of editing mathematical formulas read the package documentation of \\texttt{amsmath}\\footnote{\\url{http://texdoc.net/pkg/amsmath}}.\n\nEquation~\\ref{eq:test} is numbered and can be referenced in the text:\n\\begin{filecontents*}[overwrite]{\\democodefile}\n\\begin{align}\n  \\label{eq:test}\n  x = y\n\\end{align}\n\\end{filecontents*}\n\\PrintDemo{style=parallel}\n\nThe following equation is not numbered because of using \\texttt{\\textbackslash align*} as environment.\n\\begin{filecontents*}[overwrite]{\\democodefile}\n\\begin{align*}\n  x = y\n\\end{align*}\n\\end{filecontents*}\n\\PrintDemo{style=parallel}\n\nThe template offers \\verb+\\abs+ to enable the bars to scale well at the absolute value:\n\n\\begin{filecontents*}[overwrite]{\\democodefile}\n$\\abs{X}$.\n\\end{filecontents*}\n\\PrintDemo{style=parallel}\n\nThe documentation available at \\url{http://www.ctan.org/tex-archive/help/Catalogue/entries/voss-mathmode.html} provides more details about mathematical environments.\n\n\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\section{Sourcecode}\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\Cref{lst:ListingANDlstlisting} shows how to embed source code.\nWith \\texttt{\\textbackslash lstinputlisting} the source code can be loaded directly from files.\n\n%Listing-Umgebung wurde durch \\newfloat{Listing} definiert\n\\begin{Listing}\n  \\begin{lstlisting}\n<listing name=\"second sample\">\n  <content>not interesting</content>\n</listing>\n\\end{lstlisting}\n  \\caption{The code is separated by two horizontal lines in the listings environment.}\n  \\label{lst:ListingANDlstlisting}\n\\end{Listing}\n\n\\begin{filecontents*}[overwrite]{\\democodefile}\nSource code is also available in the text \\lstinline|<listing />|.\n\\end{filecontents*}\n\\PrintDemo{style=parallel}\n\n\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\section{Pseudocode}\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\Cref{alg:sample} shows a sample algorithm.\n\\begin{Algorithmus} %Use the environment only if you want to place the algorithm similar to graphics from TeX\n  \\caption{Sample algorithm}\n  \\label{alg:sample}\n  \\begin{algorithmic}\n\\Procedure{Sample}{$a$,$v_e$}\n\\State $\\mathsf{parentHandled} \\gets (a = \\mathsf{process}) \\lor \\mathsf{visited}(a'), (a',c,a) \\in \\mathsf{HR}$\n\\State \\Comment $(a',c'a) \\in \\mathsf{HR}$ denotes that $a'$ is the parent of $a$\n\\If{$\\mathsf{parentHandled}\\,\\land(\\mathcal{L}_\\mathit{in}(a)=\\emptyset\\,\\lor\\,\\forall l \\in \\mathcal{L}_\\mathit{in}(a): \\mathsf{visited}(l))$}\n\\State $\\mathsf{visited}(a) \\gets \\text{true}$\n\\State $\\mathsf{writes}_\\circ(a,v_e) \\gets\n\\begin{cases}\n\\mathsf{joinLinks}(a,v_e) & \\abs{\\mathcal{L}_\\mathit{in}(a)} > 0\\\\\n\\mathsf{writes}_\\circ(p,v_e)\n& \\exists p: (p,c,a) \\in \\mathsf{HR}\\\\\n(\\emptyset, \\emptyset, \\emptyset, false) & \\text{otherwise}\n\\end{cases}\n$\n\\If{$a\\in\\mathcal{A}_\\mathit{basic}$}\n  \\State \\Call{HandleBasicActivity}{$a$,$v_e$}\n\\ElsIf{$a\\in\\mathcal{A}_\\mathit{flow}$}\n  \\State \\Call{HandleFlow}{$a$,$v_e$}\n\\ElsIf{$a = \\mathsf{process}$} \\Comment Directly handle the contained activity\n  \\State \\Call{HandleActivity}{$a'$,$v_e$}, $(a,\\bot,a') \\in \\mathsf{HR}$\n  \\State $\\mathsf{writes}_\\bullet(a) \\gets \\mathsf{writes}_\\bullet(a')$\n\\EndIf\n\\ForAll{$l \\in \\mathcal{L}_\\mathit{out}(a)$}\n  \\State \\Call{HandleLink}{$l$,$v_e$}\n\\EndFor\n\\EndIf\n\\EndProcedure\n  \\end{algorithmic}\n\\end{Algorithmus}\n\n\\clearpage\nAnd if you want to write an algorithm that goes over several pages, you can only do this with the following \\textbf{dirty} hack:\n\n{\n\\begin{minipage}{\\textwidth}\n  \\hrule height .8pt width\\textwidth\n  \\vskip.3em%\\vskip\\abovecaptionskip\\relax\n  \\stepcounter{Algorithmus}\n  \\addcontentsline{alg}{Algorithmus}{\\protect\\numberline{\\theAlgorithmus}{\\ignorespaces Description \\relax}}\n  \\noindent\\textbf{Algorithmus \\theAlgorithmus} Description\n  %\\stepcounter{algorithm}\n  %\\addcontentsline{alg}{Algorithmus}{\\thealgorithm{}\\hskip0em Description}\n  %\\textbf{Algorithmus \\thealgorithm} Description\n  \\vskip.3em%\\vskip\\belowcaptionskip\\relax\n  \\hrule height .5pt width\\textwidth\n\\end{minipage}\n%without the following line, the text is never at the rule\n\\vskip-.3em\n%\ncode goes here\\\\\ntest2\\\\\n%\n\\vskip-.7em\n\\hrule height .5pt width\\textwidth\n}\n\n\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\section{Figures}\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\nThe \\cref{fig:chor1} and \\ref{fig:chor2} are important to understand this document.\nIn the appendix \\vref{fig:AnhangsChor} shows again the complete choreography.\n\n%The parameters in square brackets are optional - e.g. [htb!]\n%htb! means: Dear LaTeX, please place this image here first (\"_h_ere\"). If this does not work, place it at the \"_t_op\" of the page. And if this is not possible, please place it at the \"_b_ottom\" of the page. And please, please prefer here and above, even if it doesn't look so optimal (\"!\")\n%These should NOT be used if possible. LaTeX's algorithm for placing the glide environment is already very good!\n\\begin{figure}\n  \\centering\n  \\includegraphics[width=\\textwidth]{choreography.pdf}\n  \\caption{Example Choreography}\n  \\label{fig:chor1}\n\\end{figure}\n\n\\begin{figure}\n  \\centering\n  \\includegraphics[width=.8\\textwidth]{choreography.pdf}\n  \\caption[Example Choreography]{The example choreography. Now slightly smaller to demonstrate \\texttt{\\textbackslash textwidth}. And also the use of alternative captions for the list of images. However, the latter is only conditionally recommended, because who reads so much text under a picture? Or is it just a matter of style?}\n  \\label{fig:chor2}\n\\end{figure}\n\n\n\\begin{figure}\n  \\hfill\n  \\begin{subfigure}{.3\\textwidth}\n    \\includegraphics[width=\\textwidth]{choreography.pdf}\n    \\caption{Choreography 1}\n    \\label{fig:subfigA}\n  \\end{subfigure}\n  \\hfill\n  \\begin{subfigure}{.3\\textwidth}\n    \\includegraphics[width=\\textwidth]{choreography.pdf}\n    \\caption{Choreography 2}\n    \\label{fig:subfigB}\n  \\end{subfigure}\n  \\hfill\n  \\begin{subfigure}{.3\\textwidth}\n    \\includegraphics[width=.9\\textwidth]{choreography.pdf}\n    \\caption{Choreography 3}\n    \\label{fig:subfigC}\n  \\end{subfigure}\n  \\caption{Example to place 3 illustrations next to each other. Further, it is possible to reference each separately.}\n  \\label{fig:subfig_example}\n\\end{figure}\n\n\\Cref{fig:subfig_example} shows the usage of the package subcaption.\nIt is indeed possible to reference to sub figures: \\Cref{fig:subfigA}.\n\nIt is possible to convert SVGs to PDF directly during compilation.\nThis is described in the source code of latex-tipps.tex, but commented out.\n\n\\iffalse % <-- Take this away if inkscape is in the path\n  The SVG in \\cref{fig:directSVG} is directly included, while the text in the SVG in \\cref{fig:latexSVG} is set using pdflatex.\n  If you want to see the graphics, inkscape must be in PATH and in the text source \\texttt{\\textbackslash{}iffalse} and \\text{\\textbackslash{}iftrue} have to be commented out.\n\n  \\begin{figure}\n    \\centering\n    \\includegraphics{svgexample.svg}\n    \\caption{SVG directly included}\n    \\label{fig:directSVG}\n  \\end{figure}\n\n  \\begin{figure}\n    \\centering\n    \\def\\svgwidth{.4\\textwidth}\n    \\includesvg{svgexample}\n    \\caption{Text in SVN set via \\LaTeX{}}\n    \\label{fig:latexSVG}\n  \\end{figure}\n\\fi % <-- Take this away if inkscape is in the path\n\n\n\n\\section{More Illustrations}\n\\Cref{fig:AnhangsChor,fig:AnhangsChor2} show two choreographies, which should further explain the facts. The second figure is rotated 90 degrees to demonstrate the \\texttt{pdflscape} package.\n\n\\begin{figure}\n  \\centering\n  \\includegraphics[width=\\textwidth]{choreography.pdf}\n  \\caption{Example Choreography I}\n  \\label{fig:AnhangsChor}\n\\end{figure}\n\n\\begin{landscape}\n  %sidewaysfigure\n  \\begin{figure}\n    \\centering\n    \\includegraphics[width=\\textwidth]{choreography.pdf}\n    \\caption{Example Choreography II}\n    \\label{fig:AnhangsChor2}\n  \\end{figure}\n\\end{landscape}\n\n\n\\IfFileExists{pgfplots.sty}{\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n  \\section{Plots with pgfplots}\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n  The package pdfplots provides plotting of functions directly in \\LaTeX~like with matlab or gnuplot. Some visual examples are available here\\footnote{\\url{http://texdoc.net/pkg/visualtikz}}.\n  \\begin{figure}[h]\n    \\centering\n    \\begin{tikzpicture}\n      \\begin{axis}[xlabel=$x$,\n          ylabel=$\\sin(x)$]\n        \\addplot {sin(deg(x))};  % Print sine function\n      \\end{axis}\n    \\end{tikzpicture}\n    \\caption{Plot of $\\sin(x)$ direclty inside the figure environment with pgfplots.}\n  \\end{figure}\n\n  \\begin{figure}[h]\n    \\centering\n    \\begin{tikzpicture}\n      \\begin{axis}[xlabel=$x$,\n          ylabel=$y$]\n        \\addplot table [x=a, y=c, col sep=comma] {data/data.csv};  % Read coordinates from csv file and plot them\n      \\end{axis}\n    \\end{tikzpicture}\n    \\caption{Coordinates $x$ and $y$ read from csv file and plotted pgfplots.}\n  \\end{figure}\n\n}{}\n\n\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\section{Figures with tikz}\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\nThe tikz is a package for creating graphics programmatically. With this package grids or other regular strucutres can be easliy generated.\n\n\\begin{figure}[ht]\n  \\centering\n  \\begin{tikzpicture}\n    \\draw(0,0) rectangle (4,4);\n    \\foreach \\x in {0.5,1,1.5,2,2.5,3,3.5}\n    \\foreach \\y in {0.5,1,1.5,2,2.5,3,3.5}\n    \\draw(\\x,\\y) circle (1pt);\n  \\end{tikzpicture}\n  \\caption{A regular grid generated easily with two for loops.}\\label{fig:tikz_example}\n\\end{figure}\n\n\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\section{UML diagrams using tikz-uml}\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n\\Cref{fig:uml} presents a class diagram typeset using tikz-uml.\n\n\\begin{figure}\n  \\centering\n  \\begin{tikzpicture}\n  \\begin{umlpackage}{p}\n  \\begin{umlpackage}{sp1}\n  \\umlclass[template=T]{A}{\n    n : uint \\\\ t : float\n  }{}\n  \\umlclass[y=-3]{B}{\n    d : double\n  }{\n    \\umlvirt{setB(b : B) : void} \\\\ getB() : B}\n  \\end{umlpackage}\n  \\begin{umlpackage}[x=10,y=-6]{sp2}\n  \\umlinterface{C}{\n    n : uint \\\\ s : string\n  }{}\n  \\end{umlpackage}\n  \\umlclass[x=2,y=-10]{D}{\n    n : uint\n    }{}\n  \\end{umlpackage}\n\n  \\umlassoc[geometry=-|-, arg1=tata, mult1=*, pos1=0.3, arg2=toto, mult2=1, pos2=2.9, align2=left]{C}{B}\n  \\umlunicompo[geometry=-|, arg=titi, mult=*, pos=1.7, stereo=vector]{D}{C}\n  \\umlimport[geometry=|-, anchors=90 and 50, name=import]{sp2}{sp1}\n  \\umlaggreg[arg=tutu, mult=1, pos=0.8, angle1=30, angle2=60, loopsize=2cm]{D}{D}\n  \\umlinherit[geometry=-|]{D}{B}\n  \\umlnote[x=2.5,y=-6, width=3cm]{B}{A note with respect to class B}\n  \\umlnote[x=7.5,y=-2]{import-2}{A anotation}\n  \\end{tikzpicture}\n  \\caption{Class diagram generated with tikz-uml. Example adapted from Nicolas Kielbasiewicz.}\n  \\label{fig:uml}\n\\end{figure}\n\n\\section{UML diagrams using PlantUML}\n\nIn case \\lualatex{} is used and PlantUML is installed, UML diagrams can be defined using PlantUML.\n\n% Only works if \"--shell-escape\" is activated. Please activate only if you are sure, your compilation settings are correct\n%\\IfFileExists{plantuml.sty}{\\input{latexhints-english-plantuml}}{}\n\n\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\section{Linguistic Forests}\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n\\begin{filecontents*}[overwrite]{\\democodefile}\n\\begin{forest}\n  [VP\n    [DP]\n    [V’\n      [V]\n      [DP]\n    ]\n  ]\n\\end{forest}\n\\end{filecontents*}\n\\PrintDemo{style=parallel}\n\n\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\section{Tables}\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\cref{tab:Ergebnisse} shows results and \\cref{tab:Werte} shows how numerical data can be represented in a table.\n\\begin{table}\n  \\centering\n  \\begin{tabular}{ccc}\n    \\toprule\n    \\multicolumn{2}{c}{\\textbf{summed}} & \\textbf{Title}                                                          \\\\ \\midrule\n    Table                                      & as                                                           & in      \\\\\n    \\url{tabsatz.pdf}                            & recommended                                                     & gesetzt \\\\\n\n    \\multirow{2}{*}{Example}                    & \\multicolumn{2}{c}{a nice example}                                \\\\\n                                                 & \\multicolumn{2}{c}{for using \\qq{multirow}}           \\\\\n    \\bottomrule\n  \\end{tabular}\n  \\caption[Example Table]{Exampe Table -- see \\url{http://www.ctan.org/tex-archive/info/german/tabsatz/}}\n  \\label{tab:Ergebnisse}\n\\end{table}\n\n\\begin{table}\n  \\centering\n  \\begin{tabular}{l *{8}{d{3.2}}}\n    \\toprule\n\n                         & \\multicolumn{2}{c}{\\textbf{Parameter 1}} & \\multicolumn{2}{c}{\\textbf{Parameter 2}} & \\multicolumn{2}{c}{\\textbf{Parameter 3}} & \\multicolumn{2}{c}{\\textbf{Parameter 4}}                                                                                                                                       \\\\\n    \\cmidrule(r){2-3}\\cmidrule(lr){4-5}\\cmidrule(lr){6-7}\\cmidrule(l){8-9}\n\n    \\textbf{Bedingungen} & \\multicolumn{1}{c}{\\textbf{M}}           & \\multicolumn{1}{c}{\\textbf{SD}}          & \\multicolumn{1}{c}{\\textbf{M}}           & \\multicolumn{1}{c}{\\textbf{SD}}          & \\multicolumn{1}{c}{\\textbf{M}} & \\multicolumn{1}{c}{\\textbf{SD}} & \\multicolumn{1}{c}{\\textbf{M}} & \\multicolumn{1}{c}{\\textbf{SD}} \\\\\n    \\midrule\n\n    W                    & 1.1                                      & 5.55                                     & 6.66                                     & .01                                      &                                &                                 &                                &                                 \\\\\n    X                    & 22.22                                    & 0.0                                      & 77.5                                     & .1                                       &                                &                                 &                                &                                 \\\\\n    Y                    & 333.3                                    & .1                                       & 11.11                                    & .05                                      &                                &                                 &                                &                                 \\\\\n    Z                    & 4444.44                                  & 77.77                                    & 14.06                                    & .3                                       &                                &                                 &                                &                                 \\\\\n    \\bottomrule\n  \\end{tabular}\n\n  \\caption{Example table for 4 constraints (W-Z), each having 4 parameters with (M und SD). Note: use always the same number of decimal places.}\n  \\label{tab:Werte}\n\\end{table}\n\n\\IfFileExists{pgfplotstable.sty}{\n\n\\subsection{Tables with pgfplots}\nWith the pgfplotstable package tables can be directly generated from a csv file.\n\n\\begin{table}[h]\n\\centering\n\\pgfplotstabletypeset[\ncol sep = comma,\nevery head row/.style={before row=\\toprule,after row=\\midrule},\nevery last row/.style={after row=\\bottomrule},\ndisplay columns/0/.style={string type,column name={}}\n]\n{data/data.csv}\n\\caption{Table directly generated from the values of a csf file.}\n\\end{table}\n}{}\n\n\n\\section{Tables spanning multiple pages}\n\n\n\\begin{longtable}{|l|l|l|}\n\\caption{A sample long table.} \\label{tab:long} \\\\\n\n\\hline \\multicolumn{1}{|c|}{\\textbf{First column}} & \\multicolumn{1}{c|}{\\textbf{Second column}} & \\multicolumn{1}{c|}{\\textbf{Third column}} \\\\ \\hline\n\\endfirsthead\n\n\\multicolumn{3}{c}%\n{{\\bfseries \\tablename\\ \\thetable{} -- continued from previous page}} \\\\\n\\hline \\multicolumn{1}{|c|}{\\textbf{First column}} & \\multicolumn{1}{c|}{\\textbf{Second column}} & \\multicolumn{1}{c|}{\\textbf{Third column}} \\\\ \\hline\n\\endhead\n\n\\hline \\multicolumn{3}{|r|}{{Continued on next page}} \\\\ \\hline\n\\endfoot\n\n\\hline \\hline\n\\endlastfoot\n\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\nA & BC & D \\\\\n\\end{longtable}\n\n\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\section{Abbreviations}\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\nAt the first pass, the \\gls{fr} was 5.\nAt the second pass was \\gls{fr} 3.\nThe plural form can be seen here: \\glspl{er}.\nTo demonstrate what the list of abbreviations looks like for longer description texts, \\glspl{rdbms} must be mentioned here.\n\nWith \\verb+\\gls{...}+ you can enter abbreviations, the first time you call it, the long form is used.\nWhen reusing \\verb+\\gls{..}+ the short form is automatically displayed.\nThe abbreviation is also automatically inserted in the abbreviation list.\nWith \\verb+\\glspl{...}+ the plural form is used.\nIf you want the short form to appear directly at the first use, you can use \\verb+\\glsunset{..}+ to mark an abbreviation as already used.\nThe opposite is achieved with \\verb+\\glsreset{..}+.\n\nAbbreviations are defined in \\verb+\\content\\ausarbeitung.tex+ by means of \\verb+\\newacronym{...}{...}{...}+.\n\nMore information at: \\url{http://tug.ctan.org/macros/latex/contrib/glossaries/glossariesbegin.pdf}\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\section{References}\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\nFor distant sections \\qq{varioref} is recommended:\n\\qq{See \\vref{sec:mf}}.\nThe command \\texttt{\\textbackslash{}vref} works similarly to \\texttt{\\textbackslash{}cref} the difference being that a reference to the page is additionally added.\n\\texttt{vref}: \\qq{\\vref{sec:firstsectioninlatexhints}}, \\texttt{cref}: \\qq{\\cref{sec:firstsectioninlatexhints}}, \\texttt{ref}: \\qq{\\ref{sec:firstsectioninlatexhints}}.\n\nIf \\qq{varioref} causes difficulties, then \\qq{cref} can be used instead.\nThis also creates the word \\qq{section} automatically: \\cref{sec:mf}.\nThis is also possible for illustrations etc.\nIn English please use \\verb1\\Cref{...}1 (with large \\qq{C} at the beginning).\n\n%With MiKTeX installation from 2012-01-16 no longer necessary.\n%If a section becomes longer than one page and you want to refer to a specific place in the section with \\texttt{\\textbackslash{}vref}, then you should use \\texttt{\\textbackslash{}phantomsection} then using \\texttt{vref} will also display the correct page number.\n\n%%The link location will be placed on the line below.\n%%Tipp von http://en.wikibooks.org/wiki/LaTeX/Labels_and_Cross-referencing#The_hyperref_package_and_.5Cphantomsection\n%\\phantomsection\n%\\label{alabel}\n%View the example for \\texttt{\\textbackslash{}phantomsection} in the \\LaTeX{} source code.\n\n%Here is the example: See Section \\vref{hack1} and Section \\vref{hack2}.\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\section{Definitions}\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\begin{definition}[Title]\n  \\label{def:def1}\n  Definition Text\n\\end{definition}\n\n\\Cref{def:def1} shows \\ldots\n\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\section{Footnotes}\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\nFootnotes are provided by the command \\verb+\\footnote{...}+\\footnote{\\label{fussnote}Example footnote.}. Citing footnotes is possible by provinding a label\\verb+\\footnote{\\label{...}...}+ and cite the footnote with \\verb+\\cref{...}+ in the text\\cref{fussnote}.\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\section{Various Things}\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\label{sec:diff}\n\\ifdeutsch\n  Numbers (123\\,654\\,789) are nicely set.\n  Either in a line or as a non-lining figure.\n  The latter is reached by the parameter \\texttt{osf} at package \\texttt{libertine} or.\\ \\texttt{mathpazo} in \\text{fonts.tex}.\n\\fi\n\n\\begin{filecontents*}[overwrite]{\\democodefile}\n\\begin{compactenum}[I.]\n  \\item You can also keep the numbering compact thanks to paralist\n  \\item and switch to a different numbering\n\\end{compactenum}\n\\end{filecontents*}\n\\PrintDemo{style=parallel}\n\nThe words \\qq{workflow} and \\qq{dwarflike} can be copied from the PDF and pasted to a text file.\n\n\\begin{filecontents*}[overwrite]{\\democodefile}\nIn case \\LuaLaTeX{} is used as the compiler, there is no ligature at \\qq{f\\/l} in the word \\qq{dwarflike} (in contrast to \\qq{fl} at \\qq{workflow}).\nIn other words: \\qq{dwarflike} and \\qq{dwarf\\/like} look the same in the PDF.\nIn case they do not, there is an issue with Lua\\LaTeX{} and the selnolig package.\n\\end{filecontents*}\n\\PrintDemo{style=parallel}\n% Meta comment: The precise form of the optimal ligation suppression command may vary depending on the character pairs involved - see https://tex.stackexchange.com/q/28437/9075\n\n\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\\section{Closing remarks}\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\nPlease feel free to provide enhancements for this template and create a new ticket on GitHub (\\url{https://github.com/latextemplates/uni-stuttgart-computer-science-template/issues}).\n"
  },
  {
    "path": "latexhints-german-plantuml.tex",
    "content": "\\Cref{fig:umlcar} zeigt ein einfaches UML-Diagramm mittels PlantUML.\n\n\\begin{figure}\n  \\centering\n  \\begin{plantuml}\n  @startuml\n    class Car\n\n    Driver - Car : drives >\n    Car *- Wheel : have 4 >\n    Car -- Person : < owns\n  @enduml\n  \\end{plantuml}\n  \\caption{Einfaches PlantUML-Diagramm}\n  \\label{fig:umlcar}\n\\end{figure}\n\n\\Cref{fig:plantuml} zeigt das Beispiel von \\cref{fig:uml} mittels PlantUML.\n\n\\begin{figure}\n  \\centering\n  \\begin{plantuml}\n    @startuml\n    package \"p\" #DDDDDD {\n      package \"sp1\" #DDDDDD {\n        class A<T> {\n          + n : uint\n          + t : float\n        }\n        class B {\n          + d : double\n          - setB(b: B): void\n          + getB(): B\n        }\n        note bottom of Class: A note on class B\n      }\n      package \"sp2\" #DDDDDD {\n        interface  C << interface >> {\n          + n : uint\n          + s : string\n        }\n      }\n      class D {\n        + n : uint\n      }\n\n      sp2 ..> sp1 : N1\n      note on link: An annotation\n\n      B <|--D\n      B \"1 toto\" --> \"0..* tata\" C\n      D \"1\" o-- D : tutu\n      D *--> \"titi 0..*\" C : << vector >>\n    }\n    @enduml\n  \\end{plantuml}\n  \\caption{PlantUML-Diagramm}\n  \\label{fig:plantuml}\n\\end{figure}\n"
  },
  {
    "path": "latexhints-german.tex",
    "content": "% !TeX root = main-german.tex\n% !TeX spellcheck = de_DE\n% !TeX encoding = utf8\n% -*- coding:utf-8 mod:LaTeX -*-\n\n%Die Angabe des schlauen Spruchs auf diesem Wege funtioniert nur,\n%wenn keine Änderung des Kapitels mittels den in preambel/chapterheads.tex\n%vorgeschlagenen Möglichkeiten durchgeführt wurde.\n\\setchapterpreamble[u]{%\n  \\dictum[Albert Einstein]{Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.}\n}\n\\chapter{LaTeX-Tipps}\n\\label{chap:latextipps}\n\nIn diesem Kapitel sollen allgemeine \\LaTeX-Hinweise gegeben werden.\n\n\\section{Trennung von Absätzen}\n\nPro Satz eine neue Zeile.\nDas ist wichtig, um sauber versionieren zu können.\nIn LaTeX werden Absätze durch eine Leerzeile getrennt.\nAnalogie zu Word: Bei Word werden neue Absätze durch einmal Eingabetaste gemacht.\nDies führt bei LaTeX jedoch nicht zu einem neuen Absatz, da LaTeX direkt aufeinanderfolgende Zeilen zu einer Zeile zusammenfügt.\nMöchte man nun einen Absatz haben, muss man zweimal die Eingabetaste drücken.\nDies führt zu einer leeren Zeile.\nIn Word gibt es die Funktion Großschreibetaste und Eingabetaste gleichzeitig.\nWenn man dies drückt, wird einer harter Umbruch erzwungen.\nDer Text fängt am Anfang der neuen Zeile an.\nIn LaTeX erreicht man dies durch Doppelbackslashes (\\textbackslash\\textbackslash) erzeugt.\nDies verwendet man quasi nie.\n\nFolglich werden neue Abstäze insbesondere \\emph{nicht} durch Doppelbackslashes erzeugt.\nBeispielsweise begann der letzte Satz in einem neuen Absatz.\nEine ausführliche Motivation hierfür findet sich in \\url{http://loopspace.mathforge.org/HowDidIDoThat/TeX/VCS/#section.3}.\n\nMöchte man die Art des Absatzes ändern, so kann man die Dokumentklassenoption \\texttt{parskip} verwenden.\nBeispielsweise kann man mit \\texttt{parskip=off} erreichen, dass statt eines freien Bereichs die erste Zeile des Absatzes eingezogen wird.\n\n\\section{File-Encoding und Unterstützung von Umlauten}\n\\label{sec:firstsectioninlatexhints}\nDie Vorlage wurde 2010 auf UTF-8 umgestellt.\nAlle neueren Editoren sollten damit keine Schwierigkeiten haben.\n\n\\section{Zitate}\nReferenzen werden mittels \\texttt{\\textbackslash cite[key]} gesetzt.\nBeispiel: \\cite{WSPA} oder mit Autorenangabe: \\citet{WSPA}.\n\nDer folgende Satz demonstriert\n\\begin{filecontents*}[overwrite]{\\democodefile}\n\\begin{inparaenum}[1.]\n  \\item die Großschreibung von Autorennamen am Satzanfang,\n  \\item die richtige Zitation unter Verwendung von Autorennamen und der Referenz,\n  \\item dass die Autorennamen ein Hyperlink auf das Literaturverzeichnis sind sowie\n  \\item dass in dem Literaturverzeichnis der Namenspräfix \\qq{van der} von \\qq{Wil M.\\,P.\\ van der Aalst} steht.\n\\end{inparaenum}\n\\end{filecontents*}\n\n\\PrintDemo{style=parallel}\n\n\\Citet{RVvdA2016} präsentieren eine Studie über die Effektivität von Workflow-Management-Systemen.\n\nDer folgende Satz demonstriert, dass man mittels \\texttt{label} in einem Bibliopgrahie\"=Eintrag den Textteil des generierten Labels überschreiben kann, aber das Jahr und die Eindeutigkeit noch von biber generiert wird.\nDie Apache ODE Engine \\cite{ApacheODE} ist eine Workflow-Maschine, die \\BPEL-Prozesse zuverlässig ausführt.\n\nWörter am besten mittels \\texttt{\\textbackslash qq\\{...\\}} \\qq{einschließen}, dann werden die richtigen Anführungszeichen verwendet.\n\nBeim Erstellen der Bibtex-Datei wird empfohlen darauf zu achten, dass die DOI aufgeführt wird.\n\n\\section{Mathematische Formeln}\n\\label{sec:mf}\nMathematische Formeln kann man $so$ setzen. \\texttt{symbols-a4.pdf} (zu finden auf \\url{http://texdoc.net/pkg/symbols-a4}) enthält eine Liste der unter LaTeX direkt verfügbaren Symbole.\nBeispielsweise $\\mathbb{N}$ für die Menge der natürlichen Zahlen.\nFür eine vollständige Dokumentation für mathematischen Formelsatz sollte die Dokumentation zu \\texttt{amsmath}, \\url{http://texdoc.net/pkg/amsmath} gelesen werden.\n\nFolgende Gleichung erhält keine Nummer, da \\texttt{\\textbackslash equation*} verwendet wurde.\n\\begin{filecontents*}[overwrite]{\\democodefile}\n\\begin{equation*}\n  x = y\n\\end{equation*}\n\\end{filecontents*}\n\n\\PrintDemo{style=parallel}\n\nDie Gleichung~\\ref{eq:test} erhält eine Nummer:\n\\begin{filecontents*}[overwrite]{\\democodefile}\n\\begin{equation}\n  \\label{eq:test}\n  x = y\n\\end{equation}\n\\end{filecontents*}\n\n\\PrintDemo{style=parallel}\n\nDie Vorlage bietet \\verb+\\abs+ an, damit die Absolutbetragsstriche richtig skalieren:\n$\\abs{X}$.\n\nEine ausführliche Anleitung zum Mathematikmodus von LaTeX findet sich in \\url{http://www.ctan.org/tex-archive/help/Catalogue/entries/voss-mathmode.html}.\n\n\\section{Quellcode}\n\\Cref{lst:ListingANDlstlisting,helloworld} zeigen, wie man Programmlistings einbindet.\nMittels \\texttt{\\textbackslash lstinputlisting} kann man den Inhalt direkt aus Dateien lesen.\n\n%Listing-Umgebung wurde durch \\newfloat{Listing} definiert\n\n\\begin{Listing}\n  \\begin{lstlisting}[language=XML]\n<listing name=\"second sample\">\n  <!-- comment -->\n  <content>not interesting</content>\n</listing>\n\\end{lstlisting}\n  \\caption{lstlisting in einer Listings-Umgebung, damit das Listing durch Balken abgetrennt ist}\n  \\label{lst:ListingANDlstlisting}\n\\end{Listing}\n\n\n%TODO: Currently not shown in TOC\n\\lstinputlisting[language=C++,label=helloworld,caption={\"`hello world\"' in C++.},float]{code/helloworld.cpp}\n\nQuellcode im \\lstinline|<listing />| ist auch möglich.\n\n\n\\section{Pseudocode}\n\\Cref{alg:sample} zeigt einen Beispielalgorithmus.\n\n\n\\begin{Algorithmus} %Die Umgebung nur benutzen, wenn man den Algorithmus ähnlich wie Graphiken von TeX platzieren lassen möchte\n  \\caption{Sample algorithm}\n  \\label{alg:sample}\n  %EN: This is an environment from the algorithmicx package\n  \\begin{algorithmic}\n    \\Procedure{Sample}{$a$,$v_e$}\n      \\State $\\mathsf{parentHandled} \\gets (a = \\mathsf{process}) \\lor \\mathsf{visited}(a'), (a',c,a) \\in \\mathsf{HR}$\n      \\State \\Comment $(a',c'a) \\in \\mathsf{HR}$ denotes that $a'$ is the parent of $a$\n    \\If{$\\mathsf{parentHandled}\\,\\land(\\mathcal{L}_\\mathit{in}(a)=\\emptyset\\,\\lor\\,\\forall l \\in \\mathcal{L}_\\mathit{in}(a): \\mathsf{visited}(l))$}\n      \\State $\\mathsf{visited}(a) \\gets \\text{true}$\n      \\State $\\mathsf{writes}_\\circ(a,v_e) \\gets\n        \\begin{cases}\n          \\mathsf{joinLinks}(a,v_e)                & \\abs{\\mathcal{L}_\\mathit{in}(a)} > 0 \\\\\n          \\mathsf{writes}_\\circ(p,v_e)\n                                                   & \\exists p: (p,c,a) \\in \\mathsf{HR}   \\\\\n          (\\emptyset, \\emptyset, \\emptyset, false) & \\text{otherwise}\n        \\end{cases}\n      $\n    \\If{$a\\in\\mathcal{A}_\\mathit{basic}$}\n      \\State \\Call{HandleBasicActivity}{$a$,$v_e$}\n    \\ElsIf{$a\\in\\mathcal{A}_\\mathit{flow}$}\n      \\State \\Call{HandleFlow}{$a$,$v_e$}\n    \\ElsIf{$a = \\mathsf{process}$} \\Comment Directly handle the contained activity\n      \\State \\Call{HandleActivity}{$a'$,$v_e$}, $(a,\\bot,a') \\in \\mathsf{HR}$\n      \\State $\\mathsf{writes}_\\bullet(a) \\gets \\mathsf{writes}_\\bullet(a')$\n    \\EndIf\n    \\ForAll{$l \\in \\mathcal{L}_\\mathit{out}(a)$}\n      \\State \\Call{HandleLink}{$l$,$v_e$}\n    \\EndFor\n    \\EndIf\n    \\EndProcedure\n  \\end{algorithmic}\n\\end{Algorithmus}\n\n\\clearpage\nUnd wer einen Algorithmus schreiben möchte, der über mehrere Seiten geht, der kann das nur mit folgendem \\textbf{üblen} Hack tun:\n\n{\n\\begin{minipage}{\\textwidth}\n  \\hrule height .8pt width\\textwidth\n  \\vskip.3em%\\vskip\\abovecaptionskip\\relax\n  \\stepcounter{Algorithmus}\n  \\addcontentsline{alg}{Algorithmus}{\\protect\\numberline{\\theAlgorithmus}{\\ignorespaces Description \\relax}}\n  \\noindent\\textbf{Algorithmus \\theAlgorithmus} Description\n  %\\stepcounter{algorithm}\n  %\\addcontentsline{alg}{Algorithmus}{\\thealgorithm{}\\hskip0em Description}\n  %\\textbf{Algorithmus \\thealgorithm} Description\n  \\vskip.3em%\\vskip\\belowcaptionskip\\relax\n  \\hrule height .5pt width\\textwidth\n\\end{minipage}\n%without the following line, the text is never at the rule\n\\vskip-.3em\n%\ncode goes here\\\\\ntest2\\\\\n%\n\\vskip-.7em\n\\hrule height .5pt width\\textwidth\n}\n\n\n\n\n\\section{Abbildungen}\n\nDie \\cref{fig:chor1} und \\ref{fig:chor2} sind für das Verständnis dieses Dokuments wichtig.\nIm Anhang zeigt \\vref{fig:AnhangsChor} erneut die komplette Choreographie.\n\n%Die Parameter in eckigen Klammern sind optionale Parameter - z.B. [htb!]\n%htb! bedeutet: \"Liebes LaTeX, bitte platziere diese Abbildung zuerst hier (\"_h_ere\"). Falls das nicht funktioniert, dann bitte oben auf der Seite (\"_t_op\"). Und falls das nicht geht, bitte unten auf der Seite (\"_b_ottom\"). Und bitte, bitte bevorzuge hier und oben, auch wenn's net so optimal aussieht (\"!\")\n%Diese sollten nach Möglichkeit NICHT verwendet werden. LaTeX's Algorithmus für das Platzieren der Gleitumgebung ist schon sehr gut!\n\n\\begin{figure}\n  \\centering\n  \\includegraphics[width=\\textwidth]{choreography.pdf}\n  \\caption{Beispiel-Choreographie}\n  \\label{fig:chor1}\n\\end{figure}\n\n\n\n\\begin{figure}\n  \\centering\n  \\includegraphics[width=.8\\textwidth]{choreography.pdf}\n  \\caption[Beispiel-Choreographie]{Die Beispiel-Choreographie.\n    Nun etwas kleiner, damit \\texttt{\\textbackslash textwidth} demonstriert wird.\n    Und auch die Verwendung von alternativen Bildunterschriften für das Verzeichnis der Abbildungen.\n    Letzteres ist allerdings nur Bedingt zu empfehlen, denn wer liest schon so viel Text unter einem Bild?\n    Oder ist es einfach nur Stilsache?\n  }\n  \\label{fig:chor2}\n\\end{figure}\n\n\n\\begin{figure}\n  \\hfill\n  \\begin{subfigure}{.3\\textwidth}\n    \\includegraphics[width=\\textwidth]{choreography.pdf}\n    \\caption{Choreografie 1}\n    \\label{fig:subfigA}\n  \\end{subfigure}\n  \\hfill\n  \\begin{subfigure}{.3\\textwidth}\n    \\includegraphics[width=\\textwidth]{choreography.pdf}\n    \\caption{Choreografie 2}\n    \\label{fig:subfigB}\n  \\end{subfigure}\n  \\hfill\n  \\begin{subfigure}{.3\\textwidth}\n    \\includegraphics[width=.9\\textwidth]{choreography.pdf}\n    \\caption{Choreografie 3}\n    \\label{fig:subfigC}\n  \\end{subfigure}\n  \\caption{Beispiel um 3 Abbildung nebeneinader zu stellen nur jedes einzeln referenzieren zu können.}\n  \\label{fig:subfig_example}\n\\end{figure}\n\n\\Cref{fig:subfig_example} zeigt die Verwendung des subcaption-Pakets.\nEs ist auch möglich, auf Unterabbildungen zu verweisen: \\Cref{fig:subfigA}.\n\nEs ist möglich, SVGs direkt beim Kompilieren in PDF umzuwandeln.\nDies ist im Quellcode zu latex-tipps.tex beschrieben, allerdings auskommentiert.\n\n\\iffalse % <-- Das hier wegnehmen, falls inkscape im Pfad ist\n  Das SVG in \\cref{fig:directSVG} ist direkt eingebunden, während der Text im SVG in \\cref{fig:latexSVG} mittels pdflatex gesetzt ist.\n  Falls man die Graphiken sehen möchte, muss inkscape im PATH sein und im Tex-Quelltext \\texttt{\\textbackslash{}iffalse} und \\texttt{\\textbackslash{}iftrue} auskommentiert sein.\n\n  \\begin{figure}\n    \\centering\n    \\includegraphics{svgexample.svg}\n    \\caption{SVG direkt eingebunden}\n    \\label{fig:directSVG}\n  \\end{figure}\n\n  \\begin{figure}\n    \\centering\n    \\def\\svgwidth{.4\\textwidth}\n    \\includesvg{svgexample}\n    \\caption{Text im SVG mittels \\LaTeX{} gesetzt}\n    \\label{fig:latexSVG}\n  \\end{figure}\n\\fi % <-- Das hier wegnehmen, falls inkscape im Pfad ist\n\n\n\\section{Weitere Illustrationen}\n\\Cref{fig:AnhangsChor,fig:AnhangsChor2} zeigen zwei Choreographien, die den Sachverhalt weiter erläutern sollen.\nDie zweite Abbildung ist um 90 Grad gedreht, um das Paket \\texttt{pdflscape} zu demonstrieren.\n\n\\begin{figure}\n  \\centering\n  \\includegraphics[width=\\textwidth]{choreography.pdf}\n  \\caption{Beispiel-Choreographie I}\n  \\label{fig:AnhangsChor}\n\\end{figure}\n\n\\begin{landscape}\n  \\begin{figure}\n    \\centering\n    \\includegraphics[width=\\textwidth]{choreography.pdf}\n    \\caption{Beispiel-Choreographie II}\n    \\label{fig:AnhangsChor2}\n  \\end{figure}\n\\end{landscape}\n\n\n\\iffalse\n\n  \\clearpage\n\n  FIXME - This does not work with MiKTeX as of 2016-12-30\n\n  TODO- demonstrate rotating package\n\n  %hint by http://tex.stackexchange.com/a/3265/9075\n  %other option is to use changepage according to http://tex.stackexchange.com/a/2639/9075. This, however, has issues with landscape\n  \\thispagestyle{empty}\n\n  \\savegeometry{koma}\n\n  %If you only have height problems, this is not needed at all\n  \\addtolength{\\textwidth}{2cm}\n  \\addtolength{\\evensidemargin}{-1cm}\n\n  \\begin{landscape}\n    %sidewaysfigure\n    \\begin{figure}\n      \\centering\n      \\includegraphics[width=0.9\\paperheight]{choreography.pdf}\n      \\caption{Beispiel-Choreographie, auf einer weißen Seite gezeigt wird und über die definierten Seitenränder herausragt}\n    \\end{figure}\n  \\end{landscape}\n\n  %the original layout is restored.\n  %%\\restoregeometry cannot be used as we use \\addtolength\n  \\loadgeometry{koma}\n\n\\fi\n\n\\IfFileExists{pgfplots.sty}{\n  \\section{Plots with pgfplots}\n  Pgfplot ist ein Paket um Graphen zu plotten ohne den Umweg über gnuplot oder matplotlib zu gehen.\n  %hint by http://tex.stackexchange.com/a/3265/9075%other option is to use changepage according to http://tex.stackexchange.com/a/2639/9075. This, however, has issues with landscape%If you only have height problems, this is not needed at all%sidewaysfigure%the original layout is restored.%%\\restoregeometry cannot be used as we use \\addtolength\n  \\begin{figure}[h]\n    \\centering\n    \\begin{tikzpicture}\n      \\begin{axis}[xlabel=$x$,\n          ylabel=$\\sin(x)$]\n        \\addplot {sin(deg(x))};  % Sinus-Funktion zeichnen\n      \\end{axis}\n    \\end{tikzpicture}\n    \\caption{$\\sin(x)$ mit pgfplots.}\n  \\end{figure}\n\n   \\begin{figure}[h]\n    \\centering\n    \\begin{tikzpicture}\n      \\begin{axis}[xlabel=$x$,\n          ylabel=$y$]\n        \\addplot table [x=a, y=c, col sep=comma] {data/data.csv};  % Koordinaten aus einer CSV-Datei lesen und plotten\n      \\end{axis}\n    \\end{tikzpicture}\n    \\caption{Koordianten $x$ und $y$ aus einer CSV-Datei geplottet mit pgfplots.}\n  \\end{figure}\n\n}{}\n\n\\section{Figures with tikz}\nTikZ ist ein Paket um Zeichnungen mittels Programmierung zu erstellen.\nDieses Paket eignet sich um Gitter zu erstellen oder andere regelmäßige Strukturen zu erstellen.\nHier gibt es sehr viele visuelle Beispiele was tikz alles kann\\footnote{\\url{http://texdoc.net/pkg/visualtikz}}.\n\n\\begin{figure}[ht]\n  \\centering\n  \\begin{tikzpicture}\n    \\draw(0,0) rectangle (4,4);\n    \\foreach \\x in {0.5,1,1.5,2,2.5,3,3.5}\n    \\foreach \\y in {0.5,1,1.5,2,2.5,3,3.5}\n    \\draw(\\x,\\y) circle (1pt);\n  \\end{tikzpicture}\n  \\caption{Eine tikz-Graphik.}\\label{fig:tikz_example}\n\\end{figure}\n\n\n\\section{UML-Diagramme mit tikz-uml}\n\n\\Cref{fig:uml} zeigt ein Klassendiagramm, das mittels tikz-uml gesetzt wurde.\n\n\\begin{figure}\n  \\centering\n  \\begin{tikzpicture}\n  \\begin{umlpackage}{p}\n  \\begin{umlpackage}{sp1}\n  \\umlclass[template=T]{A}{\n    n : uint \\\\ t : float\n  }{}\n  \\umlclass[y=-3]{B}{\n    d : double\n  }{\n    \\umlvirt{setB(b : B) : void} \\\\ getB() : B}\n  \\end{umlpackage}\n  \\begin{umlpackage}[x=10,y=-6]{sp2}\n  \\umlinterface{C}{\n    n : uint \\\\ s : string\n  }{}\n  \\end{umlpackage}\n  \\umlclass[x=2,y=-10]{D}{\n    n : uint\n    }{}\n  \\end{umlpackage}\n\n  \\umlassoc[geometry=-|-, arg1=tata, mult1=*, pos1=0.3, arg2=toto, mult2=1, pos2=2.9, align2=left]{C}{B}\n  \\umlunicompo[geometry=-|, arg=titi, mult=*, pos=1.7, stereo=vector]{D}{C}\n  \\umlimport[geometry=|-, anchors=90 and 50, name=import]{sp2}{sp1}\n  \\umlaggreg[arg=tutu, mult=1, pos=0.8, angle1=30, angle2=60, loopsize=2cm]{D}{D}\n  \\umlinherit[geometry=-|]{D}{B}\n  \\umlnote[x=2.5,y=-6, width=3cm]{B}{Eine Notiz f\\\"ur die Klasse B}\n  \\umlnote[x=7.5,y=-2]{import-2}{Eine Anmerkung}\n  \\end{tikzpicture}\n  \\caption{Ein Klassendiagramm mit tikz-uml generiert. Beispiel von Nicolas Kielbasiewicz adaptiert.}\n  \\label{fig:uml}\n\\end{figure}\n\n\\section{Tabellen}\n\n\\cref{tab:Ergebnisse} zeigt Ergebnisse und die \\cref{tab:Ergebnisse} zeigt wie numerische Daten in einer Tabelle representiert werden können.\n\\begin{table}\n  \\centering\n  \\begin{tabular}{ccc}\n    \\toprule\n    \\multicolumn{2}{c}{\\textbf{zusammengefasst}} & \\textbf{Titel}                                                          \\\\ \\midrule\n    Tabelle                                      & wie                                                           & in      \\\\\n    \\url{tabsatz.pdf}                            & empfohlen                                                     & gesetzt \\\\\n\n    \\multirow{2}{*}{Beispiel}                    & \\multicolumn{2}{c}{ein schönes Beispiel}                                \\\\\n                                                 & \\multicolumn{2}{c}{für die Verwendung von \\qq{multirow}}           \\\\\n    \\bottomrule\n  \\end{tabular}\n  \\caption[Beispieltabelle]{Beispieltabelle -- siehe \\url{http://www.ctan.org/tex-archive/info/german/tabsatz/}}\n  \\label{tab:Ergebnisse}\n\\end{table}\n\n\\begin{table}\n  \\centering\n  \\begin{tabular}{l *{8}{d{3.2}}}\n    \\toprule\n\n                         & \\multicolumn{2}{c}{\\textbf{Parameter 1}} & \\multicolumn{2}{c}{\\textbf{Parameter 2}} & \\multicolumn{2}{c}{\\textbf{Parameter 3}} & \\multicolumn{2}{c}{\\textbf{Parameter 4}}                                                                                                                                       \\\\\n    \\cmidrule(r){2-3}\\cmidrule(lr){4-5}\\cmidrule(lr){6-7}\\cmidrule(l){8-9}\n\n    \\textbf{Bedingungen} & \\multicolumn{1}{c}{\\textbf{M}}           & \\multicolumn{1}{c}{\\textbf{SD}}          & \\multicolumn{1}{c}{\\textbf{M}}           & \\multicolumn{1}{c}{\\textbf{SD}}          & \\multicolumn{1}{c}{\\textbf{M}} & \\multicolumn{1}{c}{\\textbf{SD}} & \\multicolumn{1}{c}{\\textbf{M}} & \\multicolumn{1}{c}{\\textbf{SD}} \\\\\n    \\midrule\n\n    W                    & 1.1                                      & 5.55                                     & 6.66                                     & .01                                      &                                &                                 &                                &                                 \\\\\n    X                    & 22.22                                    & 0.0                                      & 77.5                                     & .1                                       &                                &                                 &                                &                                 \\\\\n    Y                    & 333.3                                    & .1                                       & 11.11                                    & .05                                      &                                &                                 &                                &                                 \\\\\n    Z                    & 4444.44                                  & 77.77                                    & 14.06                                    & .3                                       &                                &                                 &                                &                                 \\\\\n    \\bottomrule\n  \\end{tabular}\n\n  \\caption{\n    Beispieltabelle f\\\"{u}r 4 Bedingungen (W-Z) mit jeweils 4 Parameters mit (M und SD).\n    Hinweis: Stets die selbe Anzahl an Nachkommastellen angeben.\n  }\n  \\label{tab:Werte}\n\\end{table}\n\n\n\n\\IfFileExists{pgfplotstable.sty}{\n\n\\subsection{Tabellen mit pgfplots}\nMit pgfplots koennen Tabellen direkt aus einer CSV-Datei erstellt werden.\n\n\\begin{table}[h]\n\\centering\n\\pgfplotstabletypeset[\ncol sep = comma,\nevery head row/.style={before row=\\toprule,after row=\\midrule},\nevery last row/.style={after row=\\bottomrule},\ndisplay columns/0/.style={string type,column name={}}\n]\n{data/data.csv}\n\\caption{Tabelle generiert aus einer CSV-Datei mit pgfplots}\n\\end{table}\n}{}\n\n\n\\section{Tabellen über mehere Seiten}\n\n\\begin{longtable}{|l|l|l|}\n\\caption{Tabelle \\\"uber mehere Seiten} \\label{tab:long} \\\\\n\n\\hline \\multicolumn{1}{|c|}{\\textbf{A}} & \\multicolumn{1}{c|}{\\textbf{B}} & \\multicolumn{1}{c|}{\\textbf{B}} \\\\ \\hline\n\\endfirsthead\n\n\\multicolumn{3}{c}%\n{{\\bfseries \\tablename\\ \\thetable{} -- von dor vorherigen Seite weitergeführt}} \\\\\n\\hline \\multicolumn{1}{|c|}{\\textbf{First column}} & \\multicolumn{1}{c|}{\\textbf{Second column}} & \\multicolumn{1}{c|}{\\textbf{Third column}} \\\\ \\hline\n\\endhead\n\n\\hline \\multicolumn{3}{|r|}{{Wird auf der n\\\"achsten Seite fortgef\\\"uhrt}} \\\\ \\hline\n\\endfoot\n\n\\hline \\hline\n\\endlastfoot\n\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\nA & B C & D \\\\\n\\end{longtable}\n\n\n\\section{Abkürzungen}\n\nBeim ersten Durchlauf betrug die \\gls{fr} 5.\nBeim zweiten Durchlauf war die \\gls{fr} 3.\nDie Pluralform sieht man hier: \\glspl{er}.\nUm zu demonstrieren, wie das Abkürzungsverzeichnis bei längeren Beschreibungstexten aussieht, muss hier noch \\glspl{rdbms} erwähnt werden.\n\nMit \\verb+\\gls{...}+ können Abkürzungen eingebaut werden, beim ersten Aufrufen wird die lange Form eingesetzt.\nBeim wiederholten Verwenden von \\verb+\\gls{...}+ wird automatisch die kurz Form angezeigt.\nAußerdem wird die Abkürzung automatisch in die Abkürzungsliste eingefügt.\nMit \\verb+\\glspl{...}+ wird die Pluralform verwendet.\nMöchte man, dass bei der ersten Verwendung direkt die Kurzform erscheint, so kann man mit \\verb+\\glsunset{...}+ eine Abkürzung als bereits verwendet markieren.\nDas Gegenteil erreicht man mit \\verb+\\glsreset{...}+.\n\nDefiniert werden Abkürzungen in der Datei \\textit{content\\\\ausarbeitung.tex} mithilfe von \\verb+\\newacronym{...}{...}{...}+.\n\nMehr Infos unter: \\url{http://tug.ctan.org/macros/latex/contrib/glossaries/glossariesbegin.pdf}\n\n\n\\section{Verweise}\nFür weit entfernte Abschnitte ist \\qq{varioref} zu empfehlen:\n\\qq{Siehe \\vref{sec:mf}}.\nDas Kommando \\texttt{\\textbackslash{}vref} funktioniert ähnlich wie \\texttt{\\textbackslash{}cref} mit dem Unterschied, dass zusätzlich ein Verweis auf die Seite hinzugefügt wird.\n\\texttt{vref}: \\qq{\\vref{sec:firstsectioninlatexhints}}, \\texttt{cref}: \\qq{\\cref{sec:firstsectioninlatexhints}}, \\texttt{ref}: \\qq{\\ref{sec:firstsectioninlatexhints}}.\n\nFalls \\qq{varioref} Schwierigkeiten macht, dann kann man stattdessen \\qq{cref} verwenden.\nDies erzeugt auch das Wort \\qq{Abschnitt} automatisch: \\cref{sec:mf}.\nDas geht auch für Abbildungen usw.\nIm Englischen bitte \\verb1\\Cref{...}1 (mit großem \\qq{C} am Anfang) verwenden.\n\n\n%Mit MiKTeX Installation ab dem 2012-01-16 nicht mehr nötig\n%Falls ein Abschnitt länger als eine Seite wird und man mittels \\texttt{\\textbackslash{}vref} auf eine konkrete Stelle in der Section\n%verweisen möchte, dann sollte man \\texttt{\\textbackslash{}phantomsection} verwenden und dann wird\n%auch bei \\texttt{vref} die richtige Seite angeben.\n\n%%The link location will be placed on the line below.\n%%Tipp von http://en.wikibooks.org/wiki/LaTeX/Labels_and_Cross-referencing#The_hyperref_package_and_.5Cphantomsection\n%\\phantomsection\n%\\label{alabel}\n%Das Beispiel für \\texttt{\\textbackslash{}phantomsection} bitte im \\LaTeX{}-Quellcode anschauen.\n\n%Hier das Beispiel: Siehe Abschnitt \\vref{hack1} und Abschnitt \\vref{hack2}.\n\n\n\\section{Definitionen}\n\\begin{definition}[Title]\n  \\label{def:def1}\n  Definition Text\n\\end{definition}\n\n\\Cref{def:def1} zeigt \\ldots\n\n\\section{Fußnoten}\nFußnoten können mit dem Befehl \\verb+\\footnote{...}+ gesetzt werden\\footnote{\\label{fussnote}Diese Fußnote ist ein Beispiel.\n}.\nMehrfache Verwendung von Fußnoten ist möglich indem man zu erst ein Label in der Fußnote setzt \\verb+\\footnote{\\label{...}...}+ und anschließend mittels \\verb+\\cref{...}+ die Fußnote erneut verwendet\\cref{fussnote}.\n\n\n\\section{Verschiedenes}\n\\label{sec:diff}\n\\ifdeutsch\n  Ziffern (123\\,654\\,789) werden schön gesetzt.\n  Entweder in einer Linie oder als Minuskel-Ziffern.\n  Letzteres erreicht man durch den Parameter \\texttt{osf} bei dem Paket \\texttt{libertine} bzw.\\ \\texttt{mathpazo} in \\texttt{fonts.tex}.\n\\fi\n\n\\begin{compactenum}[I.]\n  \\item Man kann auch die Nummerierung dank paralist kompakt halten\n  \\item und auf eine andere Nummerierung umstellen\n\\end{compactenum}\n\nDie Wörter \\qq{Workflow} und \\qq{Auflage} lassen sich im PDF kopieren und in eine Textdatei einfügen.\n\nBei der Nutzung von \\LuaLaTeX{} wird bei \\qq{Auflage} automatisch keine Ligatur bei \\qq{f\\/l} (im Gegensatz zu \\qq{fl} bei \\qq{workflow}) gesetzt.\nIn anderen Worten: \\qq{Auflage} und \\qq{Auf\\/lage} sehen im Falle der Nutzung von \\LuaLaTeX{} im PDF gleich aus.\nWeiterhin setzt dieses Vorgehen die Duden-Regeln bezüglich \\qq{Ligaturen} \\cite[S.\\ 96]{Duden2001} um.\n\n\\section{Schlusswort}\nVerbesserungsvorschläge für diese Vorlage sind immer willkommen.\nBitte bei GitHub ein Ticket eintragen (\\url{https://github.com/latextemplates/scientific-thesis-template/issues}).\n"
  },
  {
    "path": "latexhints-minted-german.tex",
    "content": "% !TeX root = main-minted-german.tex\n\n\\section{UML-Diagramme mit PlantUML}\n\nFalls \\lualatex{} verwendet wird und PlantUML installiert ist, können UML-Diagramme mittels PlantUML erstellt werden.\n\n\\ifluatex\n  \\IfFileExists{plantuml.sty}{\\input{latexhints-german-plantuml}}{}\n\\fi\n\n\\section{minted}\n\n\\href{https://github.com/gpoore/minted}{minted} ist eine Alternative zum \\href{https://ctan.org/pkg/listings}{lstlistings}-Paket, das erweiterte Syntax-Hervorhebungen erlaubt.\n\\Cref{lst:xml} zeigt ein XML-Listing.\n% Cleveref and minted do not play together, so we have to use \\lineref - seee https://tex.stackexchange.com/q/132420/9075\nMan kann auch direkt auf eine Zeile verweisen: \\lref{commentline}.\n\n% Unbedingt Listing mit großem \"l\" benutzen, da sonst das Listing nicht im \"Verzeichnis der Listings\" auftaucht.\n\\begin{Listing}[hb]\n  \\begin{minted}[linenos=true,escapeinside=||]{xml}\n<listing name=\"third sample\">\n  <!-- comment -->\n  <content>not interesting</content> |\\Vlabel{commentline}|\n</listing>\n\\end{minted}\n  \\caption{XML-Dokument gerendert mittels minted}\n  \\label{lst:xml}\n\\end{Listing}\n"
  },
  {
    "path": "localSettings.yaml",
    "content": "indentPreamble: 1\ndefaultIndent: '  '\nmaxNumberOfBackUps: 9\nmodifyLineBreaks:\n  preserveBlankLines: 1\n  condenseMultipleBlankLinesInto: 0\n  oneSentencePerLine:\n    manipulateSentences: 1\n    removeSentenceLineBreaks: 0\n    sentencesFollow:\n      par: 1\n      blankLine: 1\n      fullStop: 1\n      exclamationMark: 1\n      questionMark: 1\n      rightBrace: 1\n      commentOnPreviousLine: 1\n      other: 0\n    sentencesBeginWith:\n      A-Z: 1\n      a-z: 0\n      other: 0\n    sentencesEndWith:\n      basicFullStop: 0\n      betterFullStop: 1\n      exclamationMark: 1\n      questionMark: 1\n      other: '(?:\\.\\)(?!\\h*[a-z]))|(?:(?<!(?:(?:e\\.g)|(?:i\\.e)|(?:etc))))\\.(?!(?:[a-z]|[A-Z]|\\-|\\,|\\.|[0-9]))'\n\nnoAdditionalIndent:\n  abstract: 1\n  # ifluatex: 1\n  ltgexample: 1\n\nspecialBeginEnd:\n  begingroup:\n    begin: '\\\\begingroup'\n    end: '\\\\endgroup'\n    lookForThis: 1\n  bgroup:\n    begin: '\\\\bgroup'\n    end: '\\\\egroup'\n\nverbatimCommands:\n  verb: 1\n  lstinline: 1\n\n# documentation: https://latexindentpl.readthedocs.io/en/latest/sec-default-user-local.html#verbatim-code-blocks\nverbatimEnvironments:\n  lstlisting: 1\n  markdown: 1\n  mindflow: 1\n  minted: 1\n  verbatim: 1\n\n  # TODO: algorithm configuration - see https://latexindentpl.readthedocs.io/en/latest/sec-default-user-local.html#lst-special2-mod1\n"
  },
  {
    "path": "pre-documentclass.tex",
    "content": "% EN: This file is loaded before the \\documentclass command in the main document\n\n% EN: The following package allows \\\\ at the title page\n%     For more information see https://github.com/latextemplates/scientific-thesis-cover/issues/4\n\\RequirePackage{kvoptions-patch}\n\n\\ifenglisch\n  \\PassOptionsToClass{numbers=noenddot}{scrbook}\n\\else\n  %()Aus scrguide.pdf - der Dokumentation von KOMA-Script)\n  %Nach DUDEN steht in Gliederungen, in denen ausschließlich arabische Ziffern für die Nummerierung\n  %verwendet werden, am Ende der Gliederungsnummern kein abschließender Punkt\n  %(siehe [DUD96, R3]). Wird hingegen innerhalb der Gliederung auch mit römischen Zahlen\n  %oder Groß- oder Kleinbuchstaben gearbeitet, so steht am Ende aller Gliederungsnummern ein\n  %abschließender Punkt (siehe [DUD96, R4])\n  \\PassOptionsToClass{numbers=autoendperiod}{scrbook}\n\\fi\n\n% Warns about outdated packages and missing caption declarations\n% See https://www.ctan.org/pkg/nag\n\\RequirePackage[l2tabu, orthodox]{nag}\n\n%DE: Neue deutsche Trennmuster\n%    Siehe http://www.ctan.org/pkg/dehyph-exptl und http://projekte.dante.de/Trennmuster/WebHome\n%    Nur für pdflatex, nicht für lualatex\n\\RequirePackage{ifluatex}\n\\ifluatex\n  % do not load anything\n\\else\n  \\ifdeutsch\n    \\RequirePackage[ngerman=ngerman-x-latest]{hyphsubst}\n  \\fi\n\\fi\n"
  },
  {
    "path": "stfloats.sty",
    "content": "%%\n%% This is file `stfloats.sty',\n%% generated with the docstrip utility.\n%%\n%% The original source files were:\n%%\n%% stfloats.dtx  (with options: `package')\n%% \n%% Copyright (C) 1997-2025 by Sigitas Tolu\\v{s}is <sigitas@vtex.lt>\n%% VTeX UAB, Mokslininku 2a, Vilnius, Lithuania\n%% --------------------------------------------------------------------------\n%% This work may be distributed and/or modified under the\n%% conditions of the LaTeX Project Public License, either version 1.3\n%% of this license or (at your option) any later version.\n%% The latest version of this license is in\n%%   http://www.latex-project.org/lppl.txt\n%% and version 1.3 or later is part of all distributions of LaTeX\n%% version 2005/12/01 or later.\n%%\n%% PURPOSE:   Improve float mechanism and baselineskip settings\n%%\n\\NeedsTeXFormat{LaTeX2e}[2015/12/01]\n\\ProvidesPackage{stfloats}\n    [2025/06/18 v3.4 Improve float mechanism and baselineskip settings]\n\\newif\\if@kernel@version@MMXXV\n\\@ifundefined{@makespecialcolbox}{\\@kernel@version@MMXXVtrue}{}\n\\gdef\\@dblbotlist{}\n\\newcount\\@dblbotnum\n\\newcount\\c@dblbotnumber\n\\@defaultunits\\expandafter\\c@dblbotnumber\\fmtversion\\relax\\@nnil\n\\ifnum\\c@dblbotnumber<2015\\relax\n    \\@latex@error{Too old LaTeX format (<2015)!\\MessageBreak\n                  Update LaTeX system!}\\@ehd\n\\fi\n\\setcounter{dblbotnumber}{2}\n\\def\\@dbflt#1{\\@ifnextchar[{\\@xdblfloat{#1}}{\\@xdblfloat{#1}[tbp]}}\n\\g@addto@macro\\@dblfloatplacement{\\global\\@dblbotnum\\c@dblbotnumber}\n\\def\\@addtodblcol{%\n    \\begingroup\n        \\@insertfalse\n        \\@setfloattypecounts\n        \\@getfpsbit \\tw@\n        \\ifodd\\@tempcnta\n            \\@flsetnum \\@dbltopnum\n            \\ifnum \\@dbltopnum>\\z@\n                \\@tempswafalse\n                \\ifdim \\@dbltoproom>\\ht\\@currbox\n                    \\@tempswatrue\n                \\else\n                    \\ifnum \\@fpstype<\\sixt@@n\n                        \\advance \\@dbltoproom \\@textmin\n                        \\ifdim \\@dbltoproom>\\ht\\@currbox\n                            \\@tempswatrue\n                        \\fi\n                        \\advance \\@dbltoproom -\\@textmin\n                    \\fi\n                \\fi\n                \\if@tempswa\n                    \\@bitor \\@currtype \\@deferlist\n                    \\@testwrongwidth\\@currbox\n                    \\if@test\n                    \\else\n                        %% [[ stfloats adds\n                        \\@bitor \\@currtype \\@dblbotlist\n                        \\if@test\n                        \\else\n                        %% stfloats adds ]]\n                            \\@tempdima -\\ht\\@currbox\n                            \\advance\\@tempdima\n                              -\\ifx \\@dbltoplist\\@empty \\dbltextfloatsep \\else\n                                                        \\dblfloatsep \\fi\n                            \\global \\advance \\@dbltoproom \\@tempdima\n                            \\global \\advance \\@colht \\@tempdima\n                            \\global \\advance \\@dbltopnum \\m@ne\n                            \\@cons \\@dbltoplist \\@currbox\n                            \\@inserttrue\n                        %% [[ stfloats adds\n                        \\fi\n                        %% stfloats adds ]]\n                    \\fi\n                \\fi\n            \\fi\n        \\fi\n        \\if@insert\n        \\else\n            %% [[ stfloats adds\n            \\@getfpsbit 4\\relax\n            \\ifodd\\@tempcnta\n                \\@flsetnum \\@dblbotnum\n                \\ifnum \\@dblbotnum>\\z@\n                    \\@tempswafalse\n                    \\ifdim \\@dbltoproom>\\ht\\@currbox\n                        \\@tempswatrue\n                    \\else\n                        \\ifnum \\@fpstype<\\sixt@@n\n                          \\advance \\@dbltoproom \\@textmin\n                          \\ifdim \\@dbltoproom>\\ht\\@currbox\n                              \\@tempswatrue\n                          \\fi\n                          \\advance \\@dbltoproom -\\@textmin\n                        \\fi\n                    \\fi\n                    \\if@tempswa\n                        \\@bitor \\@currtype \\@deferlist\n                        \\@testwrongwidth\\@currbox\n                        \\if@test\n                        \\else\n                            \\@tempdima -\\ht\\@currbox\n                            \\advance\\@tempdima\n                              -\\ifx \\@dblbotlist\\@empty \\dbltextfloatsep \\else\n                                                       \\dblfloatsep \\fi\n                            \\global \\advance \\@dbltoproom \\@tempdima\n                            \\global \\advance \\@colht \\@tempdima\n                            \\global \\advance \\@dblbotnum \\m@ne\n                            \\@cons \\@dblbotlist \\@currbox\n                            \\@inserttrue\n                        \\fi\n                    \\fi\n                \\fi\n            \\fi\n            \\if@insert\n            \\else\n            %% stfloats adds ]]\n                \\@cons\\@deferlist\\@currbox\n            %% [[ stfloats adds\n            \\fi\n            %% stfloats adds ]]\n        \\fi\n    \\endgroup\n    }\n\\def\\@addtocurcol{%\n    \\@insertfalse\n    \\@setfloattypecounts\n    \\ifnum \\@fpstype=8\n    \\else\n        \\ifnum \\@fpstype=24\n        \\else\n            \\@flsettextmin\n            \\advance \\@textmin \\@textfloatsheight\n            \\@reqcolroom \\@pageht\n            \\ifdim \\@textmin>\\@reqcolroom\n                \\@reqcolroom \\@textmin\n            \\fi\n            \\advance \\@reqcolroom \\ht\\@currbox\n            \\if@kernel@version@MMXXV \\saved@reqcolroom \\@reqcolroom\\fi %% stfloats adds\n            \\ifdim \\@colroom>\\@reqcolroom\n                \\@flsetnum \\@colnum\n                \\ifnum \\@colnum>\\z@\n                    \\@bitor\\@currtype\\@deferlist\n                    %% \\@testwrongwidth\\@currbox % moved deeper\n                    \\if@test\n                    \\else\n                        %% [[ stfloats adds\n                        \\@testwrongwidth\\@currbox\n                        \\if@test\n                            \\if@firstcolumn\n                                \\@getfpsbit \\tw@\n                                \\ifodd\\@tempcnta\n                                    \\@flsetnum \\@dbltopnum\n                                    \\ifnum \\@dbltopnum>\\z@\n                                        \\@tempswafalse\n                                        \\ifdim \\@dbltoproom>\\ht\\@currbox\n                                            \\@tempswatrue\n                                        \\else\n                                            \\ifnum \\@fpstype<\\sixt@@n\n                                                \\advance \\@dbltoproom \\@textmin\n                                                \\ifdim \\@dbltoproom>\\ht\\@currbox\n                                                    \\@tempswatrue\n                                                \\fi\n                                                \\advance \\@dbltoproom -\\@textmin\n                                            \\fi\n                                        \\fi\n                                        \\if@tempswa\n                                            \\@bitor\\@currtype{\\@toplist\\@midlist\\@botlist\\@dblbotlist}%\n                                            \\if@test\n                                            \\else\n                                                \\@tempdima -\\ht\\@currbox\n                                                \\advance\\@tempdima\n                                                  -\\ifx \\@dbltoplist\\@empty \\dbltextfloatsep \\else\n                                                                      \\dblfloatsep \\fi\n                                                \\global \\advance \\@dbltoproom \\@tempdima\n                                                \\global \\advance \\@colht \\@tempdima\n                                                \\global \\advance \\@colroom \\@tempdima\n                                                \\global \\advance \\@dbltopnum \\m@ne\n                                                \\@cons \\@dbltoplist \\@currbox\n                                                \\@inserttrue\n                                            \\fi\n                                        \\fi\n                                    \\fi\n                                \\else\n                                    \\@getfpsbit 4\\relax\n                                    \\ifodd\\@tempcnta\n                                        \\@flsetnum \\@dblbotnum\n                                        \\ifnum \\@dblbotnum>\\z@\n                                            \\@tempswafalse\n                                            \\ifdim \\@dbltoproom>\\ht\\@currbox\n                                                \\@tempswatrue\n                                            \\else\n                                                \\ifnum \\@fpstype<\\sixt@@n\n                                                    \\advance \\@dbltoproom \\@textmin\n                                                    \\ifdim \\@dbltoproom>\\ht\\@currbox\n                                                        \\@tempswatrue\n                                                    \\fi\n                                                    \\advance \\@dbltoproom -\\@textmin\n                                                \\fi\n                                            \\fi\n                                            \\if@tempswa\n                                                \\@tempdima -\\ht\\@currbox\n                                                \\advance\\@tempdima\n                                                  -\\ifx \\@dblbotlist\\@empty \\dbltextfloatsep \\else\n                                                                    \\dblfloatsep \\fi\n                                                \\global \\advance \\@dbltoproom \\@tempdima\n                                                \\global \\advance \\@colht \\@tempdima\n                                                \\global \\advance \\@colroom \\@tempdima\n                                                \\global \\advance \\@dblbotnum \\m@ne\n                                                \\@cons \\@dblbotlist \\@currbox\n                                                \\@inserttrue\n                                            \\fi\n                                        \\fi\n                                    \\fi\n                                \\fi\n                            \\fi\n                        \\else\n                        %% stfloats adds ]]\n                            \\@bitor\\@currtype\\@botlist\n                            \\if@test\n                                \\@addtobot\n                            \\else\n                                \\ifodd \\count\\@currbox\n                                    \\advance \\@reqcolroom \\intextsep\n                                    \\ifdim \\@colroom>\\@reqcolroom\n                                        \\global \\advance \\@colnum \\m@ne\n                                        \\global \\advance \\@textfloatsheight \\ht\\@currbox\n                                        \\global \\advance \\@textfloatsheight 2\\intextsep\n                                        \\@cons \\@midlist \\@currbox\n                                        \\if@nobreak\n                                            \\nobreak\n                                            \\@nobreakfalse\n                                            \\everypar{}%\n                                        \\else\n                                            \\addpenalty \\interlinepenalty\n                                        \\fi\n                                        \\vskip \\intextsep\n                                        \\box\\@currbox\n                                        \\penalty\\interlinepenalty\n                                        \\vskip\\intextsep\n                                        \\ifnum\\outputpenalty <-\\@Mii \\vskip -\\parskip\\fi\n                                        \\outputpenalty \\z@\n                                        \\@inserttrue\n                                    \\fi\n                                \\fi\n                                \\if@insert\n                                \\else\n                                    \\@addtotoporbot\n                                \\fi\n                            \\fi\n                        \\fi\n                    \\fi\n                \\fi\n            \\fi\n        \\fi\n    \\fi\n    \\if@insert\n    \\else\n        \\@resethfps\n        \\@cons\\@deferlist\\@currbox\n    \\fi\n    }%\n\\def\\@addtotoporbot{%\n    \\@getfpsbit \\tw@\n    \\ifodd \\@tempcnta\n        \\@flsetnum \\@topnum\n        \\ifnum \\@topnum>\\z@\n            \\@tempswafalse\n            \\@flcheckspace \\@toproom \\@toplist\n            \\if@tempswa\n                %% [[ stfloats adds\n                %% \\@bitor\\@currtype{\\@midlist\\@botlist}%\n                \\@bitor\\@currtype{\\@midlist\\@botlist\\@dblbotlist}%\n                %% stfloats adds ]]\n                \\if@test\n                \\else\n                    \\@flupdates \\@topnum \\@toproom \\@toplist\n                    \\@inserttrue\n                \\fi\n            \\fi\n        \\fi\n    \\fi\n    \\if@insert\n    \\else\n        \\@addtobot\n    \\fi\n    }\n\\def\\@addtobot{%\n    \\@getfpsbit 4\\relax\n    \\ifodd \\@tempcnta\n        \\@flsetnum \\@botnum\n        \\ifnum \\@botnum>\\z@\n            \\@tempswafalse\n            \\@flcheckspace \\@botroom \\@botlist\n            \\if@tempswa\n                %% [[ stfloats adds\n                \\@bitor\\@currtype{\\@dblbotlist}%\n                \\if@test\n                \\else\n                    \\if@kernel@version@MMXXV\\else \\global \\maxdepth \\z@\\fi\n                %% stfloats adds ]]\n                    \\@flupdates \\@botnum \\@botroom \\@botlist\n                    \\@inserttrue\n                %% [[ stfloats adds\n                \\fi\n                %% stfloats adds ]]\n            \\fi\n        \\fi\n    \\fi\n    }\n\\def\\@doclearpage{%\n    \\ifvoid\\footins\n        \\ifvbox\\@kludgeins\n            {\\setbox \\@tempboxa \\box \\@kludgeins}%\n        \\fi\n        \\setbox\\@tempboxa\\vsplit\\@cclv to\\z@ \\unvbox\\@tempboxa\n        \\setbox\\@tempboxa\\box\\@cclv\n        \\xdef\\@deferlist{\\@toplist\\@botlist\\@deferlist}%\n        \\global \\let \\@toplist \\@empty\n        \\global \\let \\@botlist \\@empty\n        \\global \\@colroom \\@colht\n        \\ifx \\@currlist\\@empty\n        \\else\n            \\@latexerr{Float(s) lost}\\@ehb\n            \\global \\let \\@currlist \\@empty\n        \\fi\n        \\@makefcolumn\\@deferlist\n        \\@whilesw\\if@fcolmade \\fi{\\@opcol\\@makefcolumn\\@deferlist}%\n        \\if@twocolumn\n            \\if@firstcolumn\n                %% [[ stfloats adds\n                %%\\xdef\\@deferlist{\\@dbltoplist\\@deferlist}%\n                \\xdef\\@deferlist{\\@dbltoplist\\@dblbotlist\\@deferlist}%\n                \\global \\let \\@dblbotlist \\@empty\n                %% stfloats adds ]]\n                \\global \\let \\@dbltoplist \\@empty\n                \\global \\@colht \\textheight\n                \\begingroup\n                    \\@dblfloatplacement\n                    \\@makefcolumn\\@deferlist\n                    \\@whilesw\\if@fcolmade \\fi{\\@outputpage\n                                              \\@makefcolumn\\@deferlist}%\n                \\endgroup\n            \\else\n                \\vbox{}\\clearpage\n            \\fi\n        \\fi\n        \\ifx\\@deferlist\\@empty \\else\\clearpage \\fi\n    \\else\n        \\setbox\\@cclv\\vbox{\\box\\@cclv\\vfil}%\n        \\@makecol\\@opcol\n        \\clearpage\n    \\fi\n    }\n\\def\\@combinedblfloats{%\n    \\ifx \\@dbltoplist\\@empty \\else \\@cdblflt \\fi %% kernel \\@combinedblfloats version\n    \\ifx \\@dblbotlist\\@empty \\else \\@cdblflb \\fi\n    }\n\\def\\@cdblflt{%\n    \\setbox\\@tempboxa \\vbox{}%\n    \\let \\@elt \\@comdblflelt\n    \\@dbltoplist\n    \\let \\@elt \\relax\n    \\xdef \\@freelist {\\@freelist\\@dbltoplist}%\n    \\global\\let \\@dbltoplist \\@empty\n    %% [[ stfloats adds\n    %% \\setbox\\@outputbox \\vbox to\\textheight\n    \\setbox\\@outputbox \\vbox% to\\textheight\n    %% stfloats adds ]]\n        {%\n         \\unvbox\\@tempboxa\\vskip-\\dblfloatsep\n         \\ifnum \\@dbltopnum>\\m@ne\n             \\dblfigrule\n         \\fi\n         \\vskip \\dbltextfloatsep\n         \\unvbox \\@outputbox\n        }%\n    }\n\\def\\@cdblflb{%\n    \\setbox\\@tempboxa \\vbox{}%\n    \\let \\@elt \\@comdblflelt\n    \\@dblbotlist\n    \\let \\@elt \\relax\n    \\xdef \\@freelist {\\@freelist\\@dblbotlist}%\n    \\global\\let \\@dblbotlist \\@empty\n    \\setbox\\@outputbox \\vbox% to\\textheight\n        {%\n         \\unvbox\\@outputbox\n         \\vskip \\dbltextfloatsep\n         \\ifnum \\@dblbotnum>\\m@ne\n             \\dblfigrule\n         \\fi\n         \\unvbox\\@tempboxa\n         \\vskip -\\dblfloatsep\n         }%\n    }\n\\global\\let\\org@makecol@stfloats\\@makecol\n\\gdef\\fn@makecol{%\n    \\setbox\\@outputbox \\box\\@cclv\n    \\let\\@elt\\relax\n    \\xdef\\@freelist{\\@freelist\\@midlist}%\n    \\global \\let \\@midlist \\@empty\n    \\@combinefloats\n    \\ifvoid\\footins\n    \\else\n        \\setbox\\@outputbox \\vbox {%\n            \\boxmaxdepth \\@maxdepth\n            \\unvbox \\@outputbox\n            \\vskip \\skip\\footins\n            \\color@begingroup\n                \\normalcolor\n                \\footnoterule\n                \\unvbox \\footins\n            \\color@endgroup\n            }%\n    \\fi\n    \\ifvbox\\@kludgeins\n        \\@makespecialcolbox\n    \\else\n        \\setbox\\@outputbox \\vbox to\\@colht {%\n            \\@texttop\n            \\dimen@ \\dp\\@outputbox\n            \\unvbox \\@outputbox\n            \\vskip -\\dimen@\n            \\@textbottom\n            }%\n    \\fi\n    \\global \\maxdepth \\@maxdepth\n    }\n\\def\\fnbelowfloat{%\n    %% available Socket Plugs: floats-space-footnotes, space-floats-footnotes\n    \\kernel@ifnextchar[{\\fn@below@float}{\\fn@below@float[floats-footnotes]}%\n    }\n\\def\\fn@below@float[#1]{%\n    \\if@kernel@version@MMXXV\n        \\AssignSocketPlug{build/column/outputbox}{#1}%\n     \\else\n        \\global\\let\\@makecol\\fn@makecol\n    \\fi\n    }\n\\def\\fnunderfloat{%\n    %% available Socket Plugs: space-footnotes-floats, footnotes-space-floats, footnotes-floats\n    \\kernel@ifnextchar[{\\fn@under@float}{\\fn@under@float[footnotes-floats-legacy]}%\n    }\n\\def\\fn@under@float[#1]{%\n    \\if@kernel@version@MMXXV\n        \\AssignSocketPlug {build/column/outputbox}{#1}%\n    \\else\n        \\global\\let\\@makecol\\org@makecol@stfloats\n    \\fi\n    }\n\\def\\set@floatfontsize#1#2#3{%\n    \\@defaultunits\\@tempdimb#2\\p@\\relax\\@nnil\n    \\edef\\f@size{\\strip@pt\\@tempdimb}%\n    \\@defaultunits\\@tempskipa#3\\p@\\relax\\@nnil\n    \\edef\\f@baselineskip{\\the\\@tempskipa}%\n    \\edef\\f@linespread{#1}%\n    \\let\\baselinestretch\\f@linespread\n    \\def\\size@update{%\n        \\baselineskip\\f@baselineskip\n        \\@tempskipa\\baselineskip\\relax\\baselineskip=1\\baselineskip\n        \\advance\\@tempskipa by-\\baselineskip\\baselineskip\\f@baselineskip\n         \\baselineskip\\f@linespread\\baselineskip\n         \\advance\\@tempskipa by\\baselineskip\\baselineskip\\@tempskipa\n         \\normalbaselineskip\\baselineskip\n         \\setbox\\strutbox\\hbox{%\n             \\vrule\\@height.7\\baselineskip\n                  \\@depth.3\\baselineskip\n                  \\@width\\z@}%\n         \\let\\size@update\\relax\n        }%\n    }\n\\let\\set@@@fontsize\\set@fontsize\n\\def\\setbaselinefloat{\\let\\set@fontsize\\set@floatfontsize}\n\\def\\setbaselinefixed{%\n    \\@tempdima=\\baselinestretch\\p@\n    \\edef\\baselinestretch{\\strip@pt\\@tempdima}%\n    \\let\\set@fontsize\\set@@@fontsize\n    }\n\\endinput\n%%\n%% End of file `stfloats.sty'.\n"
  },
  {
    "path": "tikz-uml.sty",
    "content": "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n% Start of tikz-uml.sty\n%\n% Some macros for UML Diagrams.\n% Home page of project : \n% Author: Nicolas Kielbasiewicz\n% Style from : \n% Fixed by Nicolas Kielbasiewicz (nicolas.kielbasiewicz@ensta-paristech.fr) in march 2016 to compile with pgf 3.00\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%\n\\NeedsTeXFormat{LaTeX2e}[1995/12/01]%\n\\ProvidesPackage{tikz-uml}[2011/01/26]%\n%\n\\RequirePackage{ifthen}%\n\\RequirePackage{tikz}%\n\\RequirePackage{xstring}%\n\\RequirePackage{calc}%\n\\RequirePackage{pgfopts}%\n\\usetikzlibrary{backgrounds,arrows,shapes,fit,shadows,decorations.markings}%\n%\n\\def\\tikzumlPackageLayersNum{3}%\n\\pgfkeys{/tikzuml/options/.cd, packageLayers/.initial=3}%\n\\pgfkeys{/tikzuml/options/.cd, packageLayers/.store in=\\tikzumlPackageLayersNum}%\n\\def\\tikzumlStateLayersNum{3}%\n\\pgfkeys{/tikzuml/options/.cd, stateLayers/.initial=3}%\n\\pgfkeys{/tikzuml/options/.cd, stateLayers/.store in=\\tikzumlStateLayersNum}%\n\\def\\tikzumlFragmentLayersNum{3}%\n\\pgfkeys{/tikzuml/options/.cd, fragmentLayers/.initial=3}%\n\\pgfkeys{/tikzuml/options/.cd, fragmentLayers/.store in=\\tikzumlFragmentLayersNum}%\n\\def\\tikzumlComponentLayersNum{3}%\n\\pgfkeys{/tikzuml/options/.cd, componentLayers/.initial=3}%\n\\pgfkeys{/tikzuml/options/.cd, componentLayers/.store in=\\tikzumlComponentLayersNum}%\n%\n\\ProcessPgfOptions{/tikzuml/options}%\n%\n\\def\\pgfsetlayersArg{background}%\n\\pgfdeclarelayer{background}%\n\\newcounter{tikzumlPackageLayers}%\n\\loop \\pgfdeclarelayer{package\\thetikzumlPackageLayers}%\n  \\xdef\\pgfsetlayersArg{\\pgfsetlayersArg,package\\thetikzumlPackageLayers}%\n  \\ifnum\\tikzumlPackageLayersNum>\\thetikzumlPackageLayers%\n    \\stepcounter{tikzumlPackageLayers}%\n\\repeat%\n%\n\\newcounter{tikzumlFragmentLayers}%\n\\loop \\pgfdeclarelayer{fragment\\thetikzumlFragmentLayers}%\n  \\xdef\\pgfsetlayersArg{\\pgfsetlayersArg,fragment\\thetikzumlFragmentLayers}%\n  \\ifnum\\tikzumlFragmentLayersNum>\\thetikzumlFragmentLayers%\n    \\stepcounter{tikzumlFragmentLayers}%\n\\repeat%\n%\n\\newcounter{tikzumlStateLayers}%\n\\loop \\pgfdeclarelayer{state\\thetikzumlStateLayers}%\n  \\xdef\\pgfsetlayersArg{\\pgfsetlayersArg,state\\thetikzumlStateLayers}%\n  \\ifnum\\tikzumlStateLayersNum>\\thetikzumlStateLayers%\n    \\stepcounter{tikzumlStateLayers}%\n\\repeat%\n%\n\\newcounter{tikzumlComponentLayers}%\n\\loop \\pgfdeclarelayer{component\\thetikzumlComponentLayers}%\n  \\xdef\\pgfsetlayersArg{\\pgfsetlayersArg,component\\thetikzumlComponentLayers}%\n  \\ifnum\\tikzumlComponentLayersNum>\\thetikzumlComponentLayers%\n    \\stepcounter{tikzumlComponentLayers}%\n\\repeat%\n%\n\\pgfdeclarelayer{lifelines}%\n\\pgfdeclarelayer{activity}%\n\\pgfdeclarelayer{connections}%\n\\xdef\\pgfsetlayersArg{\\pgfsetlayersArg,lifelines,activity,connections,main}%\n\\pgfsetlayers{\\pgfsetlayersArg}%\n%\n\\pgfkeys{/tikzuml/.cd, text/.initial=black, draw/.initial=black, font/.initial=\\small,%\n                       x/.initial=0, y/.initial=0,%\n                       package type/.initial=tikzumlEmpty, fill package/.initial=blue!20,%\n                       class width/.initial=10ex, simple interface width/.initial=4ex, class type/.initial=class, fill class/.initial=yellow!20, fill template/.initial=yellow!2,%\n                       narynode width/.initial=6ex,%\n                       relation geometry/.initial=--, relation angle1/.initial=-30, relation angle2/.initial=30, relation loopsize/.initial=3em, relation weight/.initial=0.5, relation pos1/.initial=0.2, relation pos2/.initial=0.8, relation pos stereo/.initial=0.5,%\n                       note width/.initial=3cm, fill note/.initial=green!20,%\n                       fill system/.initial=white,%\n                       fill usecase/.initial=blue!20,%\n                       actor below/.initial=0.5cm,%\n                       state join width/.initial=3ex,%\n                       state decision width/.initial=3ex,%\n                       state initial width/.initial=5ex,%\n                       state final width/.initial=5.5ex,%\n                       state enter width/.initial=5ex,%\n                       state exit width/.initial=5ex,%\n                       state end width/.initial=5ex,%\n                       state history width/.initial=5ex,%\n                       state deep history width/.initial=5ex,%\n                       state width/.initial=8ex, fill state/.initial=yellow!20,%\n                       object stereo/.initial=object, fill object/.initial=yellow!20,%\n                       call dt/.initial=tikzumlEmpty, call padding/.initial=2, call type/.initial=synchron, fill call/.initial=white,%\n                       fragment type/.initial=opt, fragment inner xsep/.initial=1, fragment inner ysep/.initial=1, fill fragment/.initial= none,%\n                       create call dt/.initial=4,%\n                       component width/.initial=8ex, fill component/.initial= yellow!20,%\n                       required interface distance/.initial=2.5cm, required interface width/.initial=1em, required interface padding/.initial=1cm,%\n                       provided interface distance/.initial=3cm, provided interface width/.initial=1em, provided interface padding/.initial=1cm,%\n                       port width/.initial=1ex, fill port/.initial= yellow!20,%\n                       fill assembly connector/.initial= white,%\n                       .unknown/.code={%\n                         \\let\\keyname=\\pgfkeyscurrentname%\n                         \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                         \\errmessage{TIKZUML ERROR : in tikzuml global, invalid option \\keyname}%\n                       }%\n}%\n%\n\\pgfkeys{/tikzuml/.cd, text/.get=\\tikzumlDefaultTextColor, draw/.get=\\tikzumlDefaultDrawColor, font/.get=\\tikzumlDefaultFont,%\n                       x/.get=\\tikzumlDefaultX, y/.get=\\tikzumlDefaultY,%\n                       package type/.get=\\tikzumlPackageDefaultType, fill package/.get=\\tikzumlPackageDefaultFillColor,%\n                       class width/.get=\\tikzumlClassDefaultWidth, simple interface width/.get=\\tikzumlSimpleInterfaceDefaultWidth, class type/.get=\\tikzumlClassDefaultType, fill class/.get=\\tikzumlClassDefaultFillColor, fill template/.get=\\tikzumlClassTemplateFillColorDefaultFillColor,%\n                       narynode width/.get=\\tikzumlNaryNodeDefaultWidth,%\n                       relation geometry/.get=\\tikzumlRelationDefaultGeometry, relation angle1/.get=\\tikzumlRelationDefaultAngleO, relation angle2/.get=\\tikzumlRelationDefaultAngleT, relation loopsize/.get=\\tikzumlRelationDefaultLoopSize, relation weight/.get=\\tikzumlRelationDefaultWeight, relation pos1/.get=\\tikzumlRelationDefaultPosO, relation pos2/.get=\\tikzumlRelationDefaultPosT, relation pos stereo/.get=\\tikzumlRelationDefaultPosStereo,%\n                       note width/.get=\\tikzumlNoteDefaultWidth, fill note/.get=\\tikzumlNoteDefaultFillColor,%\n                       fill system/.get=\\tikzumlSystemDefaultFillColor,%\n                       fill usecase/.get=\\tikzumlUseCaseDefaultFillColor,%\n                       actor below/.get=\\tikzumlActorDefaultBelow,%\n                       state join width/.get=\\tikzumlStateJoinDefaultWidth,%\n                       state decision width/.get=\\tikzumlStateDecisionDefaultWidth,%\n                       state initial width/.get=\\tikzumlStateInitialDefaultWidth,%\n                       state final width/.get=\\tikzumlStateFinalDefaultWidth,%\n                       state enter width/.get=\\tikzumlStateEnterDefaultWidth,%\n                       state exit width/.get=\\tikzumlStateExitDefaultWidth,%\n                       state end width/.get=\\tikzumlStateEndDefaultWidth,%\n                       state history width/.get=\\tikzumlStateHistoryDefaultWidth,%\n                       state deep history width/.get=\\tikzumlStateDeepHistoryDefaultWidth,%\n                       state width/.get=\\tikzumlStateDefaultWidth, fill state/.get=\\tikzumlStateDefaultFillColor,%\n                       object stereo/.get=\\tikzumlObjectDefaultStereo, fill object/.get=\\tikzumlObjectDefaultFillColor,%\n                       call dt/.get=\\tikzumlCallDefaultDT, call padding/.get=\\tikzumlCallDefaultPadding, call type/.get=\\tikzumlCallDefaultType, fill call/.get=\\tikzumlCallDefaultFillColor,%\n                       fragment type/.get=\\tikzumlFragmentDefaultType, fragment inner xsep/.get=\\tikzumlFragmentDefaultXSep, fragment inner ysep/.get=\\tikzumlFragmentDefaultYSep, fill fragment/.get=\\tikzumlFragmentDefaultFillColor,%\n                       create call dt/.get=\\tikzumlCreateCallDefaultDT,%\n                       component width/.get=\\tikzumlComponentDefaultWidth, fill component/.get=\\tikzumlComponentDefaultFillColor,%\n                       required interface distance/.get=\\tikzumlRequiredInterfaceDefaultDistance, required interface width/.get=\\tikzumlRequiredInterfaceDefaultWidth, required interface padding/.get=\\tikzumlRequiredInterfaceDefaultPadding,%\n                       provided interface distance/.get=\\tikzumlProvidedInterfaceDefaultDistance, provided interface width/.get=\\tikzumlProvidedInterfaceDefaultWidth, provided interface padding/.get=\\tikzumlProvidedInterfaceDefaultPadding,%\n                       port width/.get=\\tikzumlPortDefaultWidth, fill port/.get=\\tikzumlPortDefaultFillColor,%\n                       fill assembly connector/.get=\\tikzumlAssemblyConnectorDefaultFillColor%\n}%\n%\n% utility : change default colors\n\\newcommand{\\tikzumlset}[1]{%\n  \\pgfkeys{/tikzuml/.cd,#1}%\n  \\pgfkeys{/tikzuml/.cd, text/.get=\\tikzumlDefaultTextColor, draw/.get=\\tikzumlDefaultDrawColor, font/.get=\\tikzumlDefaultFont,%\n                         x/.get=\\tikzumlDefaultX, y/.get=\\tikzumlDefaultY,%\n                         package type/.get=\\tikzumlPackageDefaultType, fill package/.get=\\tikzumlPackageDefaultFillColor,%\n                         class width/.get=\\tikzumlClassDefaultWidth, simple interface width/.get=\\tikzumlSimpleInterfaceDefaultWidth, class type/.get=\\tikzumlClassDefaultType, fill class/.get=\\tikzumlClassDefaultFillColor, fill template/.get=\\tikzumlClassTemplateFillColorDefaultFillColor,%\n                         narynode width/.get=\\tikzumlNaryNodeWidth,%\n                         relation geometry/.get=\\tikzumlRelationDefaultGeometry, relation angle1/.get=\\tikzumlRelationDefaultAngleO, relation angle2/.get=\\tikzumlRelationDefaultAngleT, relation loopsize/.get=\\tikzumlRelationDefaultLoopSize, relation weight/.get=\\tikzumlRelationDefaultWeight, relation pos1/.get=\\tikzumlRelationDefaultPosO, relation pos2/.get=\\tikzumlRelationDefaultPosT, relation pos stereo/.get=\\tikzumlRelationDefaultPosStereo,%\n                         note width/.get=\\tikzumlNoteDefaultWidth, fill note/.get=\\tikzumlNoteDefaultFillColor,%\n                         fill system/.get=\\tikzumlSystemDefaultFillColor,%\n                         fill usecase/.get=\\tikzumlUseCaseDefaultFillColor,%\n                         actor below/.get=\\tikzumlActorDefaultBelow,%\n                         state join width/.get=\\tikzumlStateJoinDefaultWidth,%\n                         state decision width/.get=\\tikzumlStateDecisionDefaultWidth,%\n                         state initial width/.get=\\tikzumlStateInitialDefaultWidth,%\n                         state final width/.get=\\tikzumlStateFinalDefaultWidth,%\n                         state enter width/.get=\\tikzumlStateEnterDefaultWidth,%\n                         state exit width/.get=\\tikzumlStateExitDefaultWidth,%\n                         state end width/.get=\\tikzumlStateEndDefaultWidth,%\n                         state history width/.get=\\tikzumlStateHistoryDefaultWidth,%\n                         state deep history width/.get=\\tikzumlStateDeepHistoryDefaultWidth,%\n                         state width/.get=\\tikzumlStateDefaultWidth, fill state/.get=\\tikzumlStateDefaultFillColor,%\n                         object stereo/.get=\\tikzumlObjectDefaultStereo, fill object/.get=\\tikzumlObjectDefaultFillColor,%\n                         call dt/.get=\\tikzumlCallDefaultDT, call padding/.get=\\tikzumlCallDefaultPadding, call type/.get=\\tikzumlCallDefaultType, fill call/.get=\\tikzumlCallDefaultFillColor,%\n                         fragment type/.get=\\tikzumlFragmentDefaultType, fragment inner xsep/.get=\\tikzumlFragmentDefaultXSep, fragment inner ysep/.get=\\tikzumlFragmentDefaultYSep, fill fragment/.get=\\tikzumlFragmentDefaultFillColor,%\n                         create call dt/.get=\\tikzumlCreateCallDT,%\n                         component width/.get=\\tikzumlComponentDefaultWidth, fill component/.get=\\tikzumlComponentDefaultFillColor,%\n                         required interface distance/.get=\\tikzumlRequiredInterfaceDefaultDistance, required interface width/.get=\\tikzumlRequiredInterfaceDefaultWidth, required interface padding/.get=\\tikzumlRequiredInterfaceDefaultPadding,%\n                         provided interface distance/.get=\\tikzumlProvidedInterfaceDefaultDistance, provided interface width/.get=\\tikzumlProvidedInterfaceDefaultWidth, provided interface padding/.get=\\tikzumlProvidedInterfaceDefaultPadding,%\n                         port width/.get=\\tikzumlPortDefaultWidth, fill port/.get=\\tikzumlPortDefaultFillColor,%\n                         fill assembly connector/.get=\\tikzumlAssemblyConnectorDefaultFillColor%\n  }%\n}%\n%\n% define a point\n% arg : node/coordinates of the point\n\\newcommand{\\umlpoint}[1]{%\n  \\begin{pgfonlayer}{connections}%\n  \\node[tikzuml control nodes style] at (#1) {};%\n  \\end{pgfonlayer}%\n}%\n%\n\\newcommand{\\tikzumlskipescape}[3][_]{%\n\\begingroup%\n  \\def\\_{#1}\\edef\\x{\\endgroup%\n    \\def\\noexpand\\csname #3\\endcsname{#2}}\\x%\n}%\n%\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%                       class diagrams                    %\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%\n\\pgfkeys{/tikzuml/relation/.cd, attr1/.style args={#1|#2}{arg1=#1, mult1=#2},%\n                                attr2/.style args={#1|#2}{arg2=#1, mult2=#2},%\n                                attr/.style args={#1|#2}{arg=#1, mult=#2},%\n                                recursive/.style args={#1|#2|#3}{angle1=#1, angle2=#2, loopsize=#3},%\n                                anchors/.style args={#1 and #2}{anchor1=#1, anchor2=#2},%\n                                recursive direction/.style args={#1 to #2}{recursive direction start=#1, recursive direction end=#2}%\n}%\n%\n\\pgfkeys{/tikzuml/note/.cd, anchors/.style args={#1 and #2}{anchor1=#1, anchor2=#2}}%\n%\n\\tikzstyle{tikzuml simpleclass style}=[rectangle, minimum height=2em, node distance=2em]%\n\\tikzstyle{tikzuml simpleinterface style}=[circle, minimum height=1em, node distance=1em]%\n\\tikzstyle{tikzuml class style}=[rectangle split, rectangle split parts=3, rectangle split part align={center, left, left}, minimum height=2em, node distance=2em]%\n\\tikzstyle{tikzuml narynode style}=[diamond]%\n\\tikzstyle{tikzuml template style}=[dashed, inner ysep=0.5em, inner xsep=1ex]%\n\\tikzstyle{tikzuml control nodes style}=[fill=black, inner sep=1.5pt, circle]%\n%\n\\tikzstyle{tikzuml association style}=[color=\\tikzumlDefaultDrawColor, -]%\n\\tikzstyle{tikzuml bidirectional association style}=[color=\\tikzumlDefaultDrawColor, angle45-angle45]%\n\\tikzstyle{tikzuml unidirectional association style}=[color=\\tikzumlDefaultDrawColor, -angle 45]%\n\\tikzstyle{tikzuml aggregation style}=[color=\\tikzumlDefaultDrawColor, open diamond-]%\n\\tikzstyle{tikzuml unidirectional aggregation style}=[color=\\tikzumlDefaultDrawColor, open diamond-angle 45]%\n\\tikzstyle{tikzuml composition style}=[color=\\tikzumlDefaultDrawColor, diamond-]%\n\\tikzstyle{tikzuml unidirectional composition style}=[color=\\tikzumlDefaultDrawColor, diamond-angle 45]%\n\\tikzstyle{tikzuml nesting style}=[color=\\tikzumlDefaultDrawColor]%\n\\tikzstyle{tikzuml dependency style}=[color=\\tikzumlDefaultDrawColor, -angle 45, dashed]%\n\\tikzstyle{tikzuml import style}=[color=\\tikzumlDefaultDrawColor, -angle 45, dashed]%\n\\tikzstyle{tikzuml inherit style}=[color=\\tikzumlDefaultDrawColor, -open triangle 45]%\n\\tikzstyle{tikzuml implements style}=[color=\\tikzumlDefaultDrawColor, -open triangle 45, dashed]%\n%\n\\pgfkeys{/tikzuml/assemblyconnectorrelation/.cd, anchors/.style args={#1 and #2}{anchor1=#1, anchor2=#2}}%\n%\n\\newcounter{tikzumlPackageClassNum}%\n\\newcounter{tikzumlPackageSubPackageNum}%\n\\newcounter{tikzumlRelationNum}%\n\\setcounter{tikzumlRelationNum}{1}%\n\\newcounter{tikzumlNoteNum}%\n\\setcounter{tikzumlNoteNum}{1}%\n%\n\\newcounter{pos}%\n\\newcounter{posT}%\n\\newcounter{posStereo}%\n%\n\\newcounter{tikzumlPackageLevel}%\n\\setcounter{tikzumlPackageLevel}{0}%\n%\n\\newif\\iftikzumlpackageSimpleStyle%\n\\newif\\iftikzumlclassSimpleStyle%\n\\newif\\iftikzumlclassCircleShape%\n\\newif\\iftikzumlpackageWithoutCoords%\n\\newif\\iftikzumlclassWithoutCoords%\n\\newif\\iftikzumlassocclassWithoutCoords%\n\\newif\\iftikzumlnoteWithoutCoords%\n%\n% define a uml package\n% arg : package name\n% optional : x, y: coordinates of the package\n%            type: stereotype of the package\n%            name: name of the package node\n%            draw, fill, text: colors\n%            style: to manage every default TikZ option\n%            no coords: to tell that the package position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newenvironment{umlpackage}[2][]{%\n  \\pgfkeys{/tikzuml/package/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, style/.style={},%\n                                 name/.initial=tikzumlEmpty, type/.initial=\\tikzumlPackageDefaultType, draw/.initial=\\tikzumlDefaultDrawColor,% \n                                 fill/.initial=\\tikzumlPackageDefaultFillColor, text/.initial=\\tikzumlDefaultTextColor,%\n                                 no coords/.is if=tikzumlpackageWithoutCoords,%\n                                 no coords=false,%\n                                 .unknown/.code={%\n                                   \\let\\keyname=\\pgfkeyscurrentname%\n                                   \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                   \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                               \\equal{\\keyname}{left}\\OR%\n                                               \\equal{\\keyname}{below}\\OR%\n                                               \\equal{\\keyname}{right}\\OR%\n                                               \\equal{\\keyname}{above left}\\OR%\n                                               \\equal{\\keyname}{above right}\\OR%\n                                               \\equal{\\keyname}{below left}\\OR%\n                                               \\equal{\\keyname}{below right}}{%\n                                     \\IfSubStr{\\keyvalue}{ of }{%\n                                       \\pgfkeys{/tikzuml/package/.cd, no coords}%\n                                     }{}%\n                                   }{}%\n                                   \\ifx\\keyvalue\\pgfkeysnovalue%\n                                     \\pgfkeys{/tikzuml/package/.cd, style/.append style/.expand once={\\keyname}}%\n                                   \\else%\n                                     \\pgfkeys{/tikzuml/package/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                   \\fi%\n                                   %\\errmessage{TIKZUML ERROR : in umlpackage, invalid option \\keyname}%\n                                 }%\n  }%\n  \\pgfkeys{/tikzuml/package/.cd, #1}%\n  \\pgfkeys{/tikzuml/package/.cd, x/.get=\\tikzumlPackageXShift, y/.get=\\tikzumlPackageYShift, name/.get=\\tikzumlPackageName, type/.get=\\tikzumlPackageTypeTmp,%\n                                 draw/.get=\\tikzumlPackageDrawColor, fill/.get=\\tikzumlPackageFillColor,%\n                                 text/.get=\\tikzumlPackageTextColor%\n  }%\n  %\n\n  %\n  \\ifthenelse{\\equal{\\tikzumlPackageTypeTmp}{tikzumlEmpty}}{%\n    \\def\\tikzumlPackageType{}%\n  }{%\n    \\expandafter\\def\\expandafter\\tikzumlPackageType\\expandafter{$\\ll$\\tikzumlPackageTypeTmp$\\gg$ \\\\}%\n  }%\n  %\n  \\ifnum\\thetikzumlPackageLevel>0%\n    \\let\\tikzumlPackage@nameold\\tikzumlPackage@fitname%\n    \\def\\tikzumlPackage@name{#2}%\n    \\begingroup%\n      \\def\\_{@}\\edef\\x{\\endgroup%\n        \\def\\noexpand\\tikzumlPackage@fitname{\\tikzumlPackage@name}}\\x%\n    \\let\\tikzumlPackage@parentold\\tikzumlPackage@parent%\n    \\edef\\tikzumlPackage@parent{\\tikzumlPackage@parentold @@\\tikzumlPackage@nameold}%\n  \\else%\n    \\def\\tikzumlPackage@parent{}%\n    \\def\\tikzumlPackage@name{#2}%\n    \\begingroup%\n      \\def\\_{@}\\edef\\x{\\endgroup%\n        \\def\\noexpand\\tikzumlPackage@fitname{\\tikzumlPackage@name}}\\x%\n  \\fi%\n  %\n  \\let\\tikzumlPackage@nodeNameold\\tikzumlPackage@nodeName%\n  %  \n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlPackage@nodeName{\\tikzumlPackage@name}}\\x%\n  %\n  \\ifthenelse{\\equal{\\tikzumlPackageName}{tikzumlEmpty}}{}{%\n    \\def\\tikzumlPackage@nodeName{\\tikzumlPackageName}%\n  }%\n  %\n  \\StrSubstitute{\\tikzumlPackage@nodeName}{.}{@POINT@}{\\tikzumlPackage@nodeName}%\n  %\n  \\expandafter\\gdef\\csname tikzumlPackageFit\\tikzumlPackage@parent @@\\tikzumlPackage@fitname\\endcsname{}%\n  %\n  \\setcounter{tikzumlPackageClassNum}{0}%\n  \\setcounter{tikzumlPackageSubPackageNum}{0}%\n  \\stepcounter{tikzumlPackageLevel}%\n  %\n  \\begin{scope}[xshift=\\tikzumlPackageXShift cm, yshift=\\tikzumlPackageYShift cm]%\n}{%\n  \\addtocounter{tikzumlPackageLevel}{-1}%\n  \\begin{pgfonlayer}{package\\thetikzumlPackageLevel}%\n  %\n  % if contains no class, and not simple, one define a fictive node to enable the fit option\n  \\ifnum\\c@tikzumlPackageClassNum=0%\n    \\ifnum\\c@tikzumlPackageSubPackageNum=0%\n      \\iftikzumlpackageWithoutCoords%\n        \\node[inner sep=1.5ex, /tikzuml/package/style] (\\tikzumlPackage@nodeName-root) {\\phantom{\\tikzumlPackage@nodeName}};%\n      \\else%\n        \\node[inner sep=1.5ex, /tikzuml/package/style] (\\tikzumlPackage@nodeName-root) at (0,0) {\\phantom{\\tikzumlPackage@nodeName}};%\n      \\fi%\n      \\expandafter\\xdef\\csname tikzumlPackageFit\\tikzumlPackage@parent @@\\tikzumlPackage@fitname\\endcsname{(\\tikzumlPackage@nodeName-root)}%\n    \\fi%\n  \\fi%\n  %\n  \\ifnum\\c@tikzumlPackageLevel>0%\n    \\def\\tikzumlPackageFitTmp{\\csname tikzumlPackageFit\\tikzumlPackage@parent\\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlPackageFit\\tikzumlPackage@parent\\endcsname{\\tikzumlPackageFitTmp (\\tikzumlPackage@nodeName) (\\tikzumlPackage@nodeName-caption)}%\n    \\stepcounter{tikzumlPackageSubPackageNum}%\n  \\fi%\n  %\n  \\node[draw=\\tikzumlPackageDrawColor, fill=\\tikzumlPackageFillColor, text=\\tikzumlPackageTextColor, font=\\tikzumlDefaultFont, inner sep=1.5ex, /tikzuml/package/style, fit = \\csname tikzumlPackageFit\\tikzumlPackage@parent @@\\tikzumlPackage@fitname\\endcsname] (\\tikzumlPackage@nodeName) {};%\n  \\node[draw=\\tikzumlPackageDrawColor, fill=\\tikzumlPackageFillColor, text=\\tikzumlPackageTextColor, font=\\tikzumlDefaultFont, minimum height=1.5em, outer ysep=-0.3, anchor=south west] (\\tikzumlPackage@nodeName-caption) at (\\tikzumlPackage@nodeName.north west) {\\begin{tabular}{c} \\tikzumlPackageType \\textbf{\\tikzumlPackage@name}\\end{tabular}};%\n  \\end{pgfonlayer}%\n  \\end{scope}%\n}%\n%\n% shortcut to define an empty package\n\\newcommand{\\umlemptypackage}[2][]{\\begin{umlpackage}[#1]{#2} \\end{umlpackage}}%\n%\n% define a uml class\n% args : name of the class\n%        attributes of the class\n%        operations of the class\n% optional : x, y: coordinates of the class\n%            width: of the class node\n%            type: type of class (class, interface, typedef, enum)\n%            tags: tagged values of class\n%            template: template parameters\n%            simple: if used, class is empty and drawn with a rectangle\n%            circle: if used with simple, class is empty and drawn with a circle\n%            draw, fill, fill template, and text: colors\n%            style: to manage every default TikZ option\n%            no coords: to tell that the class position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newcommand{\\umlclass}[4][]{%\n  \\pgfkeys{/tikzuml/class/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, width/.initial=\\tikzumlClassDefaultWidth, type/.initial=\\tikzumlClassDefaultType,%\n                               tags/.initial={}, style/.style={},%\n                               template/.initial={}, name/.initial=tikzumlEmpty,%\n                               draw/.initial=\\tikzumlDefaultDrawColor,%\n                               fill template/.initial=\\tikzumlClassTemplateFillColorDefaultFillColor,%\n                               fill/.initial=\\tikzumlClassDefaultFillColor,%\n                               text/.initial=\\tikzumlDefaultTextColor,%\n                               simple/.is if=tikzumlclassSimpleStyle, circle/.is if=tikzumlclassCircleShape, no coords/.is if=tikzumlclassWithoutCoords,%\n                               simple=false, circle=false, no coords=false,%\n                               .unknown/.code={%\n                                 \\let\\keyname=\\pgfkeyscurrentname%\n                                 \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                 \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                             \\equal{\\keyname}{left}\\OR%\n                                             \\equal{\\keyname}{below}\\OR%\n                                             \\equal{\\keyname}{right}\\OR%\n                                             \\equal{\\keyname}{above left}\\OR%\n                                             \\equal{\\keyname}{above right}\\OR%\n                                             \\equal{\\keyname}{below left}\\OR%\n                                             \\equal{\\keyname}{below right}}{%\n                                   \\IfSubStr{\\keyvalue}{ of }{%\n                                     \\pgfkeys{/tikzuml/class/.cd, no coords}%\n                                   }{}%\n                                 }{}%\n                                 \\ifx\\keyvalue\\pgfkeysnovalue%\n                                   \\pgfkeys{/tikzuml/class/.cd, style/.append style/.expand once={\\keyname}}%\n                                 \\else%\n                                   \\pgfkeys{/tikzuml/class/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                 \\fi%\n                                 %\\errmessage{TIKZUML ERROR : in umlclass, invalid option \\keyname}%\n                               }%\n  }%\n  \\pgfkeys{/tikzuml/class/.cd,#1}%\n  %\n  \\iftikzumlclassSimpleStyle%\n    \\iftikzumlclassCircleShape%\n      \\pgfkeys{/tikzuml/class/.cd, width/.initial=\\tikzumlSimpleInterfaceDefaultWidth}%\n    \\fi%\n  \\fi%\n  %\n  \\pgfkeys{/tikzuml/class/.cd, x/.get=\\tikzumlClassX, y/.get=\\tikzumlClassY, width/.get=\\tikzumlClassMinimumWidth,% \n                               type/.get=\\tikzumlClassTypeTmp, tags/.get=\\tikzumlClassTagsTmp, template/.get=\\tikzumlClassTemplateFillColorParam,%\n                               name/.get=\\tikzumlClassName,%\n                               draw/.get=\\tikzumlClassDrawColor, fill/.get=\\tikzumlClassFillColor,%\n                               text/.get=\\tikzumlClassTextColor, fill template/.get=\\tikzumlClassTemplateFillColor%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlClassTypeTmp}{class}\\OR\\equal{\\tikzumlClassTypeTmp}{abstract}}{%\n    \\def\\tikzumlClassType{}%\n  }{%\n    \\expandafter\\def\\expandafter\\tikzumlClassType\\expandafter{$\\ll$\\tikzumlClassTypeTmp$\\gg$ \\\\}%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlClassTagsTmp}{}}{%\n    \\def\\tikzumlClassTags{}%\n  }{%\n    \\def\\tikzumlClassTags{\\\\ \\{\\tikzumlClassTagsTmp\\}}%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlClassTemplateFillColorParam}{}}{%\n    \\def\\tikzumlClassVPadding{}%\n    \\def\\tikzumlClassHPadding{}%\n  }{%\n    \\def\\tikzumlClassVPadding{\\vspace{0.1em} \\\\}%\n    \\def\\tikzumlClassHPadding{\\hspace{0.5ex} $ $}%\n  }%\n  %\n  \\def\\tikzumlClassName{#2}%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlClassNodeName{\\tikzumlClassName}}\\x%\n  %\n  \\ifthenelse{\\equal{\\tikzumlClassName}{tikzumlEmpty}}{}{%\n    \\def\\tikzumlClassNodeName{\\tikzumlClassName}%\n  }%\n  %\n  \\StrSubstitute{\\tikzumlClassNodeName}{:}{@COLON@}[\\tikzumlClassNodeName]%\n  \\StrSubstitute{\\tikzumlClassNodeName}{\\_}{@UNDERSCORE@}[\\tikzumlClassNodeName]%\n  %\n  \\ifthenelse{\\equal{\\tikzumlClassTypeTmp}{abstract}}{%\n    \\let\\tikzumlClassNameOld\\tikzumlClassName%\n    \\def\\tikzumlClassName{{\\it \\tikzumlClassNameOld}}%\n  }{}%\n  %\n  \\def\\tikzumlClassPos{\\tikzumlClassX,\\tikzumlClassY}%\n  \\def\\tikzumlClassAttributes{#3}%\n  \\def\\tikzumlClassOperations{#4}%\n  %\n  \\iftikzumlclassSimpleStyle%\n    \\iftikzumlclassWithoutCoords%\n      \\iftikzumlclassCircleShape%\n        \\node[tikzuml simpleinterface style, draw=\\tikzumlClassDrawColor, fill=\\tikzumlClassFillColor, text=\\tikzumlClassTextColor, font=\\tikzumlDefaultFont, minimum width=\\tikzumlClassMinimumWidth, /tikzuml/class/style] (\\tikzumlClassNodeName) {};%\n        \\node[anchor=south] (\\tikzumlClassNodeName-label) at (\\tikzumlClassNodeName.north) {\\begin{tabular}{c}\\tikzumlClassVPadding \\tikzumlClassType \\tikzumlClassHPadding \\textbf{\\tikzumlClassName} \\tikzumlClassHPadding \\tikzumlClassTags \\end{tabular}%\n        };%\n      \\else%\n        \\node[tikzuml simpleclass style, draw=\\tikzumlClassDrawColor, fill=\\tikzumlClassFillColor, text=\\tikzumlClassTextColor, font=\\tikzumlDefaultFont, minimum width=\\tikzumlClassMinimumWidth, /tikzuml/class/style] (\\tikzumlClassNodeName) {\\begin{tabular}{c}\\tikzumlClassVPadding \\tikzumlClassType \\tikzumlClassHPadding \\textbf{\\tikzumlClassName} \\tikzumlClassHPadding \\tikzumlClassTags \\end{tabular}%\n        };%\n      \\fi%\n    \\else%\n      \\iftikzumlclassCircleShape%\n        \\node[tikzuml simpleinterface style, draw=\\tikzumlClassDrawColor, fill=\\tikzumlClassFillColor, text=\\tikzumlClassTextColor, font=\\tikzumlDefaultFont, minimum width=\\tikzumlClassMinimumWidth, /tikzuml/class/style] (\\tikzumlClassNodeName) at (\\tikzumlClassPos) {};\n        \\node[anchor=south] (\\tikzumlClassNodeName-label) at (\\tikzumlClassNodeName.north){\\begin{tabular}{c}\\tikzumlClassVPadding \\tikzumlClassType \\tikzumlClassHPadding \\textbf{\\tikzumlClassName} \\tikzumlClassHPadding \\tikzumlClassTags \\end{tabular}%\n        };%\n      \\else%\n        \\node[tikzuml simpleclass style, draw=\\tikzumlClassDrawColor, fill=\\tikzumlClassFillColor, text=\\tikzumlClassTextColor, font=\\tikzumlDefaultFont, minimum width=\\tikzumlClassMinimumWidth, /tikzuml/class/style] (\\tikzumlClassNodeName) at (\\tikzumlClassPos) {\\begin{tabular}{c}\\tikzumlClassVPadding \\tikzumlClassType \\tikzumlClassHPadding \\textbf{\\tikzumlClassName} \\tikzumlClassHPadding \\tikzumlClassTags \\end{tabular}%\n        };%\n      \\fi%\n    \\fi%\n  \\else%\n    \\iftikzumlclassWithoutCoords%\n      \\node[tikzuml class style, draw=\\tikzumlClassDrawColor, fill=\\tikzumlClassFillColor, text=\\tikzumlClassTextColor, font=\\tikzumlDefaultFont, minimum width=\\tikzumlClassMinimumWidth, /tikzuml/class/style] (\\tikzumlClassNodeName) {\\begin{tabular}{c}\\tikzumlClassVPadding \\tikzumlClassType \\tikzumlClassHPadding \\textbf{\\tikzumlClassName} \\tikzumlClassHPadding \\tikzumlClassTags \\end{tabular}%\n      \\nodepart{second}%\n      \\begin{tabular}{l}%\n      \\tikzumlClassAttributes%\n      \\end{tabular}%\n      \\nodepart{third}%\n      \\begin{tabular}{l}%\n      \\tikzumlClassOperations%\n      \\end{tabular}%\n      };%\n    \\else%\n      \\node[tikzuml class style, draw=\\tikzumlClassDrawColor, fill=\\tikzumlClassFillColor, text=\\tikzumlClassTextColor, font=\\tikzumlDefaultFont, minimum width=\\tikzumlClassMinimumWidth, /tikzuml/class/style] (\\tikzumlClassNodeName) at (\\tikzumlClassPos) {\\begin{tabular}{c}\\tikzumlClassVPadding \\tikzumlClassType \\tikzumlClassHPadding \\textbf{\\tikzumlClassName} \\tikzumlClassHPadding \\tikzumlClassTags \\end{tabular}%\n      \\nodepart{second}%\n      \\begin{tabular}{l}%\n      \\tikzumlClassAttributes%\n      \\end{tabular}%\n      \\nodepart{third}%\n      \\begin{tabular}{l}%\n      \\tikzumlClassOperations%\n      \\end{tabular}%\n      };%\n    \\fi%\n  \\fi%\n  %\n  \\ifthenelse{\\equal{\\tikzumlClassTemplateFillColorParam}{}}{}{%\n    \\draw (\\tikzumlClassNodeName.north east) node[tikzuml template style, name=\\tikzumlClassNodeName-template, draw=\\tikzumlClassDrawColor, fill=\\tikzumlClassTemplateFillColor, text=\\tikzumlClassTextColor, font=\\tikzumlDefaultFont] {\\tikzumlClassTemplateFillColorParam};%\n  }%\n  %\n  % add to fit\n  \\ifnum\\c@tikzumlPackageLevel>0%\n    \\edef\\tikzumlPackageFitOld{\\csname tikzumlPackageFit\\tikzumlPackage@parent @@\\tikzumlPackage@fitname\\endcsname}%\n    \\ifthenelse{\\equal{\\tikzumlClassTemplateFillColorParam}{}}{%\n      \\expandafter\\xdef\\csname tikzumlPackageFit\\tikzumlPackage@parent @@\\tikzumlPackage@fitname\\endcsname{\\tikzumlPackageFitOld (\\tikzumlClassNodeName)}%\n    }{%\n      \\expandafter\\xdef\\csname tikzumlPackageFit\\tikzumlPackage@parent @@\\tikzumlPackage@fitname\\endcsname{\\tikzumlPackageFitOld (\\tikzumlClassNodeName) (\\tikzumlClassNodeName-template)}%\n    }%\n    \\stepcounter{tikzumlPackageClassNum}%\n  \\fi%\n  \\ifnum\\c@tikzumlComponentLevel>0%\n    \\def\\tikzumlComponentFitTmp{\\csname tikzumlComponentFit\\tikzumlComponent@parent @@\\tikzumlComponent@fitname\\endcsname}%\n    \\ifthenelse{\\equal{\\tikzumlClassTemplateFillColorParam}{}}{%\n      \\expandafter\\xdef\\csname tikzumlComponentFit\\tikzumlComponent@parent @@\\tikzumlComponent@fitname\\endcsname{\\tikzumlComponentFitTmp (\\tikzumlClassNodeName)}%\n    }{%\n      \\expandafter\\xdef\\csname tikzumlComponentFit\\tikzumlComponent@parent @@\\tikzumlComponent@fitname\\endcsname{\\tikzumlComponentFitTmp (\\tikzumlClassNodeName) (\\tikzumlClassNodeName-template)}%\n    }%\n    \\stepcounter{tikzumlComponentSubComponentNum}%\n  \\fi%\n}%\n%\n% shortcuts for interface, enum and typedef environments\n\\newcommand{\\umlabstract}[4][]{%\n  \\pgfkeys{/tikzuml/class/.cd, .unknown/.code={%\n                                          \\let\\keyname=\\pgfkeyscurrentname%\n                                          \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                          \\ifthenelse{\\equal{\\keyname}{type}}{%\n                                            \\errmessage{TIKZUML ERROR : in umlabstract, forbidden option type}%\n                                          }{}%\n                                        }%\n  }%\n  \\pgfkeys{/tikzuml/class/.cd, #1}%\n  \\umlclass[type=abstract,#1]{#2}{#3}{#4}%\n}%\n\\newcommand{\\umlinterface}[4][]{%\n  \\pgfkeys{/tikzuml/class/.cd, .unknown/.code={%\n                                          \\let\\keyname=\\pgfkeyscurrentname%\n                                          \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                          \\ifthenelse{\\equal{\\keyname}{type}}{%\n                                            \\errmessage{TIKZUML ERROR : in umlinterface, forbidden option type}%\n                                          }{}%\n                                        }%\n  }%\n  \\pgfkeys{/tikzuml/class/.cd, #1}%\n  \\umlclass[type=interface,#1]{#2}{#3}{#4}%\n}%\n\\newcommand{\\umltypedef}[4][]{%\n  \\pgfkeys{/tikzuml/class/.cd, .unknown/.code={%\n                                          \\let\\keyname=\\pgfkeyscurrentname%\n                                          \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                          \\ifthenelse{\\equal{\\keyname}{type}}{%\n                                            \\errmessage{TIKZUML ERROR : in umltypedef, forbidden option type}%\n                                          }{}%\n                                        }%\n  }%\n  \\pgfkeys{/tikzuml/class/.cd, #1}%\n  \\umlclass[type=typedef,#1]{#2}{#3}{#4}%\n}%\n\\newcommand{\\umlenum}[4][]{%\n  \\pgfkeys{/tikzuml/class/.cd, .unknown/.code={%\n                                          \\let\\keyname=\\pgfkeyscurrentname%\n                                          \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                          \\ifthenelse{\\equal{\\keyname}{type}}{%\n                                            \\errmessage{TIKZUML ERROR : in umlenum, forbidden option type}%\n                                          }{}%\n                                        }%\n  }%\n  \\pgfkeys{/tikzuml/class/.cd, #1}%\n  \\umlclass[type=enum,#1]{#2}{#3}{#4}\n}%\n%\n% shortcut to define an empty class\n\\newcommand{\\umlemptyclass}[2][]{\\umlclass[#1]{#2}{}{}}%\n\\newcommand{\\umlsimpleclass}[2][]{%\n  \\pgfkeys{/tikzuml/class/.cd, .unknown/.code={%\n                                          \\let\\keyname=\\pgfkeyscurrentname%\n                                          \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                          \\ifthenelse{\\equal{\\keyname}{simple}}{%\n                                            \\errmessage{TIKZUML ERROR : in umlsimpleclass, forbidden option simple}%\n                                          }{}%\n                                        }%\n  }%\n  \\pgfkeys{/tikzuml/class/.cd, #1}%\n  \\umlemptyclass[simple, #1]{#2}%\n}%\n%\n\\newcommand{\\umlsimpleinterface}[2][]{%\n  \\pgfkeys{/tikzuml/class/.cd, .unknown/.code={%\n                                 \\let\\keyname=\\pgfkeyscurrentname%\n                                 \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                 \\ifthenelse{\\equal{\\keyname}{simple}}{%\n                                   \\errmessage{TIKZUML ERROR : in umlsimpleinterface, forbidden option simple}%\n                                 }{%\n                                   \\ifthenelse{\\equal{\\keyname}{circle}}{%\n                                     \\errmessage{TIKZUML ERROR : in umlsimpleinterface, forbidden option circle}%\n                                   }{}%\n                                 }%\n                               }%\n  }%\n  \\pgfkeys{/tikzuml/class/.cd, #1}%\n  \\umlsimpleclass[circle, #1]{#2}%\n}%\n% underline the text for static arg\n\\newcommand{\\umlstatic}[1]{\\underline{#1}}%\n\\newcommand{\\umlvirt}[1]{\\textit{#1}}%\n%\n% define node for n-ary association\n\\newcommand{\\umlNarynode}[2][]{%\n  \\def\\tikzumlNaryNodeAnchor{.north}\n  \\def\\tikzumlNaryNodeLabelPos{above}\n  \\pgfkeys{/tikzuml/narynode/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, width/.initial=\\tikzumlNaryNodeDefaultWidth, name/.initial=tikzumlEmpty,%\n                                  draw/.initial=\\tikzumlDefaultDrawColor, fill/.initial=\\tikzumlClassDefaultFillColor,%\n                                  text/.initial=\\tikzumlDefaultTextColor, style/.style={},%\n                                  .unknown/.code={%\n                                    \\let\\keyname=\\pgfkeyscurrentname%\n                                    \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                    \\ifthenelse{\\equal{\\keyname}{above}}{%\n                                      \\def\\tikzumlNaryNodeAnchor{.north}%\n                                      \\def\\tikzumlNaryNodeLabelPos{above}%\n                                    }{%\n                                      \\ifthenelse{\\equal{\\keyname}{above left}}{%\n                                        \\def\\tikzumlNaryNodeAnchor{.north west}%\n                                        \\def\\tikzumlNaryNodeLabelPos{above left}%\n                                      }{%\n                                        \\ifthenelse{\\equal{\\keyname}{left}}{%\n                                          \\def\\tikzumlNaryNodeAnchor{.west}%\n                                          \\def\\tikzumlNaryNodeLabelPos{left}%\n                                        }{%\n                                          \\ifthenelse{\\equal{\\keyname}{below left}}{%\n                                            \\def\\tikzumlNaryNodeAnchor{.south west}%\n                                            \\def\\tikzumlNaryNodeLabelPos{below left}%\n                                          }{%\n                                            \\ifthenelse{\\equal{\\keyname}{below}}{%\n                                              \\def\\tikzumlNaryNodeAnchor{.south}%\n                                              \\def\\tikzumlNaryNodeLabelPos{below}%\n                                            }{%\n                                              \\ifthenelse{\\equal{\\keyname}{below right}}{%\n                                                \\def\\tikzumlNaryNodeAnchor{.south east}%\n                                                \\def\\tikzumlNaryNodeLabelPos{below right}%\n                                              }{%\n                                                \\ifthenelse{\\equal{\\keyname}{right}}{%\n                                                  \\def\\tikzumlNaryNodeAnchor{.east}%\n                                                  \\def\\tikzumlNaryNodeLabelPos{right}%\n                                                }{%\n                                                  \\ifthenelse{\\equal{\\keyname}{above right}}{%\n                                                    \\def\\tikzumlNaryNodeAnchor{.north east}%\n                                                    \\def\\tikzumlNaryNodeLabelPos{above right}%\n                                                  }{%\n                                                    \\ifx\\keyvalue\\pgfkeysnovalue%\n                                                      \\pgfkeys{/tikzuml/narynode/.cd, style/.append style/.expand once={\\keyname}}%\n                                                    \\else%\n                                                      \\pgfkeys{/tikzuml/narynode/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                                    \\fi%\n                                                    %\\errmessage{TIKZUML ERROR : in umlNarynode, invalid option \\keyname}%\n                                                  }%\n                                                }%\n                                              }%\n                                            }%\n                                          }%\n                                        }%\n                                      }%\n                                    }%\n                                  }%\n  }%\n  \\pgfkeys{/tikzuml/narynode/.cd,#1}%\n  \\pgfkeys{/tikzuml/narynode/.cd, x/.get=\\tikzumlNaryNodeX, y/.get=\\tikzumlNaryNodeY, width/.get=\\tikzumlNaryNodeMinimumWidth,%\n                                  name/.get=\\tikzumlNaryNodeName,%\n                                  draw/.get=\\tikzumlNaryNodeDrawColor, fill/.get=\\tikzumlNaryNodeFillColor,%\n                                  text/.get=\\tikzumlNaryNodeTextColor%\n  }%\n  %\n  \\def\\tikzumlNaryName{#2}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlNaryNodeName}{tikzumlEmpty}}{%\n    \\edef\\tikzumlNaryNodeName{\\tikzumlNaryName}%\n  }{%\n    \\edef\\tikzumlNaryNodeName{\\tikzumlNaryNodeName}%\n  }%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlNaryNode@nodeName{\\tikzumlNaryNodeName}}\\x%\n  %\n  \\StrSubstitute{\\tikzumlNaryNode@nodeName}{:}{@COLON@}[\\tikzumlNaryNode@nodeName]%\n  \\StrSubstitute{\\tikzumlNaryNode@nodeName}{\\_}{@UNDERSCORE@}[\\tikzumlNaryNode@nodeName]%\n  %\n  \\def\\tikzumlNarynodePos{\\tikzumlNaryNodeX,\\tikzumlNaryNodeY}%\n  %\n  \\node[tikzuml narynode style, draw=\\tikzumlNaryNodeDrawColor, fill=\\tikzumlNaryNodeFillColor, text=\\tikzumlNaryNodeTextColor, font=\\tikzumlDefaultFont, minimum width=\\tikzumlNaryNodeMinimumWidth, minimum height=\\tikzumlNaryNodeMinimumWidth, /tikzuml/narynode/style] (\\tikzumlNaryNode@nodeName) at (\\tikzumlNarynodePos) {};%\n  \\draw (\\tikzumlNaryNode@nodeName\\tikzumlNaryNodeAnchor) node[\\tikzumlNaryNodeLabelPos] {\\tikzumlNaryName};%\n  %\n  % add to fit\n  \\ifnum\\c@tikzumlPackageLevel>0%\n    \\edef\\tikzumlPackageFitOld{\\csname tikzumlPackageFit\\tikzumlPackage@parent @@\\tikzumlPackage@fitname\\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlPackageFit\\tikzumlPackage@parent @@\\tikzumlPackage@fitname\\endcsname{\\tikzumlPackageFitOld (\\tikzumlNaryNode@nodeName)}%\n    \\stepcounter{tikzumlPackageClassNum}%\n  \\fi%\n}%\n%\n\\newdimen\\tikzumlNestingSymbolSize%\n%\n% main command to define a relation between two classes\n% args : src class\n%        dest class\n% optional : geometry: geometry of the line\n%            weight: barycentric weight of the middle part when geometry is a 3-line\n%            arm1, arm2: lengths of first or last part when geometry id a 3-line\n%            arg1, arg2, arg: name of the src/dest/dest side class type attribute defined by the relation\n%            mult1, mult2, mult: multiplicity of the src/dest/dest side class type attribute defined by the relation\n%            pos1, pos2, pos: position of the src/dest/dest side class type attribute defined by the relation\n%            align1, align2, align: text justification of the src/dest/dest side class type attribute defined by the relation\n%            anchor1, anchor2: src/dest anchors on linked classes\n%            angle1, angle2, loopsize: start angle, end angle and size of the relation (only if recursive)\n%            stereo: stereotype of the relation\n%            pos stereo: position of the stereotype on the relation\n%            style: style of the relation (association, aggregation, composition, inherit, ...)\n%            name: rootname used for naming nodes of the relation\n%            recursive mode: type of recursive arrow (transition for state diagrams, or default)\n%            recursive direction start/end: when transition relation, start/end directions of the relation arrow\n\\newcommand{\\umlrelation}[3][]{%\n  \\pgfkeys{/tikzuml/relation/.cd, geometry/.initial=\\tikzumlRelationDefaultGeometry, weight/.initial=\\tikzumlRelationDefaultWeight,%\n                                  arm1/.initial=auto, arm2/.initial=auto,%\n                                  arg1/.initial={}, arg2/.initial={}, arg/.initial={},%\n                                  mult1/.initial={}, mult2/.initial={}, mult/.initial={},%\n                                  pos1/.initial=\\tikzumlRelationDefaultPosO, pos2/.initial=\\tikzumlRelationDefaultPosT, pos/.initial=tikzumlEmpty,%\n                                  align1/.initial={}, align2/.initial={}, align/.initial={},%\n                                  anchor1/.initial=tikzumlEmpty, anchor2/.initial=tikzumlEmpty,%\n                                  angle1/.initial=\\tikzumlRelationDefaultAngleO, angle2/.initial=\\tikzumlRelationDefaultAngleT, loopsize/.initial=\\tikzumlRelationDefaultLoopSize,%\n                                  stereo/.initial={}, pos stereo/.initial=\\tikzumlRelationDefaultPosStereo,%\n                                  style/.initial=->, style2/.style={}, name/.initial=relation-\\thetikzumlRelationNum,%\n                                  recursive mode/.initial=default, recursive direction start/.initial=right,%\n                                  recursive direction end/.initial=bottom,%\n                                  .unknown/.code={%\n                                    \\let\\keyname=\\pgfkeyscurrentname%\n                                    \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                    \\ifthenelse{\\equal{\\keyname}{with port}%\n                                             \\OR\\equal{\\keyname}{interface}%\n                                             \\OR\\equal{\\keyname}{padding}%\n                                             \\OR\\equal{\\keyname}{width}%\n                                             \\OR\\equal{\\keyname}{first arm}%\n                                             \\OR\\equal{\\keyname}{second arm}%\n                                             \\OR\\equal{\\keyname}{middle arm}%\n                                             \\OR\\equal{\\keyname}{last arm}%\n                                             \\OR\\equal{\\keyname}{distance}}{}{%\n                                               \\ifx\\keyvalue\\pgfkeysnovalue%\n                                                 \\pgfkeys{/tikzuml/relation/.cd, style2/.append style/.expand once={\\keyname}}%\n                                               \\else%\n                                                 \\pgfkeys{/tikzuml/relation/.cd, style2/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                               \\fi%\n                                               %\\errmessage{TIKZUML ERROR : in umlrelation, invalid option \\keyname}%\n                                    }%\n                                  }%\n  }%\n  \\pgfkeys{/tikzuml/relation/.cd,#1}%\n  \\pgfkeys{/tikzuml/relation/.cd, geometry/.get=\\tikzumlRelationGeometry, weight/.get=\\tikzumlRelationWeight,%\n                                  arm1/.get=\\tikzumlRelationArmO, arm2/.get=\\tikzumlRelationArmT,%\n                                  arg1/.get=\\tikzumlRelationAttrName, arg2/.get=\\tikzumlRelationAttrNameTO, arg/.get=\\tikzumlRelationAttrNameTT,%\n                                  mult1/.get=\\tikzumlRelationMultiplicity, mult2/.get=\\tikzumlRelationMultiplicityTO, mult/.get=\\tikzumlRelationMultiplicityTT,%\n                                  pos1/.get=\\tikzumlRelationPosition, pos2/.get=\\tikzumlRelationPositionTO, pos/.get=\\tikzumlRelationPositionTT,%\n                                  align1/.get=\\tikzumlRelationAlign, align2/.get=\\tikzumlRelationAlignTO, align/.get=\\tikzumlRelationAlignTT,%\n                                  anchor1/.get=\\tikzumlRelationSrcAnchor, anchor2/.get=\\tikzumlRelationDestAnchor,%\n                                  angle1/.get=\\tikzumlRelationStartAngle, angle2/.get=\\tikzumlRelationEndAngle, loopsize/.get=\\tikzumlRelationLoopSize,%\n                                  stereo/.get=\\tikzumlRelationStereoType, pos stereo/.get=\\tikzumlRelationPositionStereotype,%\n                                  style/.get=\\tikzumlRelationStyle, name/.get=\\tikzumlRelationName,%\n                                  recursive mode/.get=\\tikzumlRelationRecursiveMode,%\n                                  recursive direction start/.get=\\tikzumlRelationRecursiveDirectionStart,%\n                                  recursive direction end/.get=\\tikzumlRelationRecursiveDirectionEnd%\n  }%\n  %\n  \\def\\tikzumlSrcClassName{#2}%\n  %\n  % managing \\_ in class names for node names\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlSrcClassNodeName{\\tikzumlSrcClassName}}\\x%\n  %\n  \\StrSubstitute{\\tikzumlSrcClassNodeName}{:}{@COLON@}[\\tikzumlSrcClassNodeName]%\n  \\StrSubstitute{\\tikzumlSrcClassNodeName}{\\_}{@UNDERSCORE@}[\\tikzumlSrcClassNodeName]%\n  %\n  \\def\\tikzumlDestClassName{#3}%\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlDestClassNodeName{\\tikzumlDestClassName}}\\x%\n  %\n  \\StrSubstitute{\\tikzumlDestClassNodeName}{:}{@COLON@}[\\tikzumlDestClassNodeName]%\n  \\StrSubstitute{\\tikzumlDestClassNodeName}{\\_}{@UNDERSCORE@}[\\tikzumlDestClassNodeName]%\n  %\n  % managing alias keys\n  \\def\\tikzumlRelationAttrNameT{\\tikzumlRelationAttrNameTO\\tikzumlRelationAttrNameTT}%\n  \\def\\tikzumlRelationMultiplicityT{\\tikzumlRelationMultiplicityTO\\tikzumlRelationMultiplicityTT}%\n  \\def\\tikzumlRelationAlignT{\\tikzumlRelationAlignTO\\tikzumlRelationAlignTT}%\n  \\def\\posAttrName{}%\n  \\def\\posMultiplicity{}%\n  \\def\\posAttrNameT{}%\n  \\def\\posMultiplicityT{}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlRelationPositionTT}{tikzumlEmpty}}{%\n    \\def\\tikzumlRelationPositionT{\\tikzumlRelationPositionTO}%\n  }{%\n    \\def\\tikzumlRelationPositionT{\\tikzumlRelationPositionTT}%\n  }%\n  %\n  \\def\\attrAlign{}%\n  \\def\\multAlign{}%\n  \\def\\attrAlignT{}%\n  \\def\\multAlignT{}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlRelationAlign}{left}}{%\n    \\def\\attrAlign{above right}%\n    \\def\\multAlign{below right}%\n  }{%\n    \\ifthenelse{\\equal{\\tikzumlRelationAlign}{right}}{%\n      \\def\\attrAlign{above left}%\n      \\def\\multAlign{below left}%\n    }{}%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlRelationAlignT}{left}}{%\n    \\def\\attrAlignT{above right}%\n    \\def\\multAlignT{below right}%\n  }{%\n    \\ifthenelse{\\equal{\\tikzumlRelationAlignT}{right}}{%\n      \\def\\attrAlignT{above left}%\n      \\def\\multAlignT{below left}%\n    }{}%\n  }%\n  %\n  % def stereotype\n  \\ifthenelse{\\equal{\\tikzumlRelationStereoType}{}}{%\n    \\def\\stereotype{}%\n  }{%\n    \\def\\stereotype{$\\ll$\\tikzumlRelationStereoType$\\gg$}%\n  }%\n  \n  % def anchors macros\n  \\ifthenelse{\\equal{\\tikzumlRelationSrcAnchor}{tikzumlEmpty}}{%\n    \\def\\tikzumlRelationSrcAnchor{}%\n  }{%\n    \\let\\tikzumlRelationSrcAnchorold\\tikzumlRelationSrcAnchor%\n    \\def\\tikzumlRelationSrcAnchor{.\\tikzumlRelationSrcAnchorold}%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlRelationDestAnchor}{tikzumlEmpty}}{%\n    \\def\\tikzumlRelationDestAnchor{}%\n  }{%\n    \\let\\tikzumlRelationDestAnchorold\\tikzumlRelationDestAnchor%\n    \\def\\tikzumlRelationDestAnchor{.\\tikzumlRelationDestAnchorold}%\n  }%\n  %\n  \\setcounter{pos}{100*\\real{\\tikzumlRelationPosition}}%\n  \\setcounter{posT}{100*\\real{\\tikzumlRelationPositionT}}%\n  \\setcounter{posStereo}{100*\\real{\\tikzumlRelationPositionStereotype}}%\n  %\n  \\pgfmathsetmacro{\\tikzumlRelationWeightT}{1.0-\\tikzumlRelationWeight}%\n  %\n  %\\newcounter{tikzumlControlNodesNum}%\n  %\\setcounter{tikzumlControlNodesNum}{0}%\n  %\n  \\node[inner sep=0] (\\tikzumlRelationName-middle) at (barycentric cs:\\tikzumlSrcClassNodeName=\\tikzumlRelationWeightT,\\tikzumlDestClassNodeName=\\tikzumlRelationWeight) {};%\n  %\n  % straight line\n  \\ifthenelse{\\equal{\\tikzumlRelationGeometry}{--}}%\n  {%\n    \\ifthenelse{\\equal{\\tikzumlSrcClassNodeName}{\\tikzumlDestClassNodeName}}{%\n      \\def\\arcNum{1}%\n      \\def\\arcNumT{1}%\n      %\n      \\ifthenelse{\\equal{\\tikzumlRelationRecursiveMode}{default}}{%\n        \\xdef\\tikzumlLastArc{node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                             node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity}%\n                             node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                             node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT}%\n                             node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype} }%\n        \\xdef\\tikzumlPath{(\\tikzumlSrcClassNodeName) edge[in=\\tikzumlRelationEndAngle, out=\\tikzumlRelationStartAngle, distance=\\tikzumlRelationLoopSize] \\tikzumlLastArc%\n                                                          node[midway, inner sep=0, name=\\tikzumlRelationName-1, anchor=center] {} (\\tikzumlDestClassNodeName) }%\n      }{%\n        \\ifthenelse{\\equal{\\tikzumlRelationRecursiveMode}{transition}}{%\n          \\xdef\\tikzumlFirstArc{node[midway, inner sep=0, name=\\tikzumlRelationName-1, anchor=center] {}}%\n          \\xdef\\tikzumlMidOneArc{node[midway, inner sep=0, name=\\tikzumlRelationName-3, anchor=center] {}}%\n          %\n          \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{\\tikzumlRelationRecursiveDirectionEnd}}{%\n            \\def\\numArcs{3}%\n            \\xdef\\tikzumlLastArc{node[midway, inner sep=0, name=\\tikzumlRelationName-5, anchor=center] {}}%\n            %\n            \\begin{pgfonlayer}{connections}%\n            \\draw (\\tikzumlSrcClassNodeName) edge[in=\\tikzumlRelationEndAngle, out=\\tikzumlRelationStartAngle, distance=\\tikzumlRelationLoopSize, draw=none] %\n                                                  node[midway, inner sep=0, name=\\tikzumlRelationName-tmp, anchor=center] {} (\\tikzumlDestClassNodeName);%\n            \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{right}\\OR\\equal{\\tikzumlRelationRecursiveDirectionStart}{left}}{%\n              \\node[inner sep=0, name=\\tikzumlRelationName-2] at (\\tikzumlSrcClassNodeName.\\tikzumlRelationStartAngle -| \\tikzumlRelationName-tmp) {};%\n              \\node[inner sep=0, name=\\tikzumlRelationName-4] at (\\tikzumlDestClassNodeName.\\tikzumlRelationEndAngle -| \\tikzumlRelationName-tmp) {};%\n            }{%\n              \\node[inner sep=0, name=\\tikzumlRelationName-2] at (\\tikzumlSrcClassNodeName.\\tikzumlRelationStartAngle |- \\tikzumlRelationName-tmp) {};%\n              \\node[inner sep=0, name=\\tikzumlRelationName-4] at (\\tikzumlDestClassNodeName.\\tikzumlRelationEndAngle |- \\tikzumlRelationName-tmp) {};%\n            }%\n            \\end{pgfonlayer}%\n          }{%\n            \\def\\numArcs{4}%\n            \\xdef\\tikzumlMidTwoArc{node[midway, inner sep=0, name=\\tikzumlRelationName-5, anchor=center] {}}%\n            \\xdef\\tikzumlLastArc{node[midway, inner sep=0, name=\\tikzumlRelationName-7, anchor=center] {}}%\n            %\n            \\begin{pgfonlayer}{connections}%\n            \\draw (\\tikzumlSrcClassNodeName) edge[in=\\tikzumlRelationEndAngle, out=\\tikzumlRelationStartAngle, distance=\\tikzumlRelationLoopSize, draw=none] %\n                                                  node[midway, name=\\tikzumlRelationName-4, anchor=center] {} (\\tikzumlDestClassNodeName);%\n            \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{right}\\OR\\equal{\\tikzumlRelationRecursiveDirectionStart}{left}}{%\n              \\node[inner sep=0, name=\\tikzumlRelationName-2] at (\\tikzumlSrcClassNodeName.\\tikzumlRelationStartAngle -| \\tikzumlRelationName-4) {};%\n              \\node[inner sep=0, name=\\tikzumlRelationName-6] at (\\tikzumlDestClassNodeName.\\tikzumlRelationEndAngle |- \\tikzumlRelationName-4) {};%\n            }{%\n              \\node[inner sep=0, name=\\tikzumlRelationName-2] at (\\tikzumlSrcClassNodeName.\\tikzumlRelationStartAngle |- \\tikzumlRelationName-4) {};%\n              \\node[inner sep=0, name=\\tikzumlRelationName-6] at (\\tikzumlDestClassNodeName.\\tikzumlRelationEndAngle -| \\tikzumlRelationName-4) {};%\n            }%\n            \\end{pgfonlayer}%\n          }%\n          %\n          \\ifnum\\numArcs=4%\n            \\ifnum\\theposStereo>300%\n              \\pgfmathsetmacro{\\tikzumlRelationPositionStereotype}{(\\theposStereo-300)/100}%\n              \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype}}%\n            \\else%\n              \\ifnum\\theposStereo<100%\n                \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype}}%\n              \\else%\n                \\ifnum\\theposStereo>200%\n                  \\pgfmathsetmacro{\\tikzumlRelationPositionStereotype}{(\\theposStereo-200)/100}%\n                  \\xdef\\tikzumlMidTwoArc{\\tikzumlMidTwoArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype}}%\n                \\else%\n                  \\pgfmathsetmacro{\\tikzumlRelationPositionStereotype}{(\\theposStereo-100)/100}%\n                  \\xdef\\tikzumlMidOneArc{\\tikzumlMidOneArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype}}%\n                \\fi%\n              \\fi%\n            \\fi%\n            %\n            \\ifthenelse{\\thepos=300\\OR\\thepos=100}{%\n              \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{right}}{%\n                \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{bottom}}{%\n                  \\def\\posAttrName{above right}%\n                  \\def\\posMultiplicity{below left}%\n                }{%\n                  \\def\\posAttrName{above left}%\n                  \\def\\posMultiplicity{below right}%\n                }%\n              }{%\n                \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{left}}{%\n                  \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{bottom}}{%\n                    \\def\\posAttrName{above left}%\n                    \\def\\posMultiplicity{below right}%\n                  }{%\n                    \\def\\posAttrName{above right}%\n                    \\def\\posMultiplicity{below left}%\n                  }%\n                }{%\n                  \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{top}}{%\n                    \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{left}}{%\n                      \\def\\posAttrName{above right}%\n                      \\def\\posMultiplicity{below left}%\n                    }{%\n                      \\def\\posAttrName{above left}%\n                      \\def\\posMultiplicity{below right}%\n                    }%\n                  }{%\n                    \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{left}}{%\n                      \\def\\posAttrName{above left}%\n                      \\def\\posMultiplicity{below right}%\n                    }{%\n                      \\def\\posAttrName{above right}%\n                      \\def\\posMultiplicity{below left}%\n                    }%\n                  }%\n                }%\n              }%\n            }{}%\n            %\n            \\ifthenelse{\\thepos=200}{%\n              \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{right}}{%\n                \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{bottom}}{%\n                  \\def\\posAttrName{above left}%\n                  \\def\\posMultiplicity{below right}%\n                }{%\n                  \\def\\posAttrName{above right}%\n                  \\def\\posMultiplicity{below left}%\n                }%\n              }{%\n                \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{left}}{%\n                  \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{bottom}}{%\n                    \\def\\posAttrName{above right}%\n                    \\def\\posMultiplicity{below left}%\n                  }{%\n                    \\def\\posAttrName{above left}%\n                    \\def\\posMultiplicity{below right}%\n                  }%\n                }{%\n                  \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{top}}{%\n                    \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{left}}{%\n                      \\def\\posAttrName{above left}%\n                      \\def\\posMultiplicity{below right}%\n                    }{%\n                      \\def\\posAttrName{above right}%\n                      \\def\\posMultiplicity{below left}%\n                    }%\n                  }{%\n                    \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{left}}{%\n                      \\def\\posAttrName{above right}%\n                      \\def\\posMultiplicity{below left}%\n                    }{%\n                      \\def\\posAttrName{above left}%\n                      \\def\\posMultiplicity{below right}%\n                    }%\n                  }%\n                }%\n              }%\n            }{}%\n            %\n            \\ifnum\\thepos>300%\n              \\pgfmathsetmacro{\\tikzumlRelationPosition}{(\\thepos-300)/100}%\n              \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                   node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity}%\n                                   }%\n            \\else%\n              \\ifnum\\thepos<100%\n                \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                     node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity}%\n                                     }%\n              \\else%\n                \\ifnum\\thepos>200%\n                  \\pgfmathsetmacro{\\tikzumlRelationPosition}{(\\thepos-200)/100}%\n                  \\xdef\\tikzumlMidTwoArc{\\tikzumlMidTwoArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                         node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity}%\n                                        }%\n                \\else%\n                  \\pgfmathsetmacro{\\tikzumlRelationPosition}{(\\thepos-100)/100}%\n                  \\xdef\\tikzumlMidOneArc{\\tikzumlMidOneArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                         node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity}%\n                                        }%\n                \\fi%\n              \\fi%\n            \\fi%\n            %\n            \\ifthenelse{\\theposT=300\\OR\\theposT=100}{%\n              \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{right}}{%\n                \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{bottom}}{%\n                  \\def\\posAttrNameT{above right}%\n                  \\def\\posMultiplicityT{below left}%\n                }{%\n                  \\def\\posAttrNameT{above left}%\n                  \\def\\posMultiplicityT{below right}%\n                }%\n              }{%\n                \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{left}}{%\n                  \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{bottom}}{%\n                    \\def\\posAttrNameT{above left}%\n                    \\def\\posMultiplicityT{below right}%\n                  }{%\n                    \\def\\posAttrNameT{above right}%\n                    \\def\\posMultiplicityT{below left}%\n                  }%\n                }{%\n                  \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{top}}{%\n                    \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{left}}{%\n                      \\def\\posAttrNameT{above right}%\n                      \\def\\posMultiplicityT{below left}%\n                    }{%\n                      \\def\\posAttrNameT{above left}%\n                      \\def\\posMultiplicityT{below right}%\n                    }%\n                  }{%\n                    \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{left}}{%\n                      \\def\\posAttrNameT{above left}%\n                      \\def\\posMultiplicityT{below right}%\n                    }{%\n                      \\def\\posAttrNameT{above right}%\n                      \\def\\posMultiplicityT{below left}%\n                    }%\n                  }%\n                }%\n              }%\n            }{}%\n            \\ifthenelse{\\theposT=200}{%\n              \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{right}}{%\n                \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{bottom}}{%\n                  \\def\\posAttrNameT{above left}%\n                  \\def\\posMultiplicity{below right}%\n                }{%\n                  \\def\\posAttrNameT{above right}%\n                  \\def\\posMultiplicityT{below left}%\n                }%\n              }{%\n                \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{left}}{%\n                  \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{bottom}}{%\n                    \\def\\posAttrNameT{above right}%\n                    \\def\\posMultiplicityT{below left}%\n                  }{%\n                    \\def\\posAttrNameT{above left}%\n                    \\def\\posMultiplicityT{below right}%\n                  }%\n                }{%\n                  \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{top}}{%\n                    \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{left}}{%\n                      \\def\\posAttrNameT{above left}%\n                      \\def\\posMultiplicityT{below right}%\n                    }{%\n                      \\def\\posAttrNameT{above right}%\n                      \\def\\posMultiplicityT{below left}%\n                    }%\n                  }{%\n                    \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionEnd}{left}}{%\n                      \\def\\posAttrNameT{above right}%\n                      \\def\\posMultiplicityT{below left}%\n                    }{%\n                      \\def\\posAttrNameT{above left}%\n                      \\def\\posMultiplicityT{below right}%\n                    }%\n                  }%\n                }%\n              }%\n            }{}%\n            %\n            \\ifnum\\theposT>300%\n              \\pgfmathsetmacro{\\tikzumlRelationPositionT}{(\\theposT-300)/100}%\n              \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                   node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT}%\n                                   }%\n            \\else%\n              \\ifnum\\theposT<100%\n                \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                     node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT}%\n                                     }%\n              \\else%\n                \\ifnum\\theposT>200%\n                  \\pgfmathsetmacro{\\tikzumlRelationPositionT}{(\\theposT-200)/100}%\n                  \\xdef\\tikzumlMidTwoArc{\\tikzumlMidTwoArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                         node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT}%\n                                        }%\n                \\else%\n                  \\pgfmathsetmacro{\\tikzumlRelationPositionT}{(\\theposT-100)/100}%\n                  \\xdef\\tikzumlMidOneArc{\\tikzumlMidOneArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                         node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT}%\n                                        }%\n                \\fi%\n              \\fi%\n            \\fi%\n          \\else%\n            \\ifnum\\theposStereo>200%\n              \\pgfmathsetmacro{\\tikzumlRelationPositionStereotype}{(\\theposStereo-200)/100}%\n              \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype} }%\n            \\else%\n              \\ifnum\\theposStereo<100%\n                \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype} }%\n              \\else%\n                \\pgfmathsetmacro{\\tikzumlRelationPositionStereotype}{(\\theposStereo-100)/100}%\n                \\xdef\\tikzumlMidOneArc{\\tikzumlMidOneArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype} }%\n              \\fi%\n            \\fi%\n            %\n            \\ifthenelse{\\thepos=100}{%\n              \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{right}}{%\n                \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                  \\def\\posAttrName{above right}%\n                  \\def\\posMultiplicity{below left}%\n                }{%\n                  \\def\\posAttrName{above left}%\n                  \\def\\posMultiplicity{below right}%\n                }%\n              }{%\n                \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{left}}{%\n                  \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                    \\def\\posAttrName{above left}%\n                    \\def\\posMultiplicity{below right}%\n                  }{%\n                    \\def\\posAttrName{above right}%\n                    \\def\\posMultiplicity{below left}%\n                  }%\n                }{%\n                  \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{top}}{%\n                    \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                      \\def\\posAttrName{above right}%\n                      \\def\\posMultiplicity{below left}%\n                    }{%\n                      \\def\\posAttrName{above left}%\n                      \\def\\posMultiplicity{below right}%\n                    }%\n                  }{%\n                    \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                      \\def\\posAttrName{above left}%\n                      \\def\\posMultiplicity{below right}%\n                    }{%\n                      \\def\\posAttrName{above right}%\n                      \\def\\posMultiplicity{below left}%\n                    }%\n                  }%\n                }%\n              }%\n            }{}%\n            %\n            \\ifthenelse{\\thepos=200}{%\n              \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{right}}{%\n                \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                  \\def\\posAttrName{above left}%\n                  \\def\\posMultiplicity{below right}%\n                }{%\n                  \\def\\posAttrName{above right}%\n                  \\def\\posMultiplicity{below left}%\n                }%\n              }{%\n                \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{left}}{%\n                  \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                    \\def\\posAttrName{above right}%\n                    \\def\\posMultiplicity{below left}%\n                  }{%\n                    \\def\\posAttrName{above left}%\n                    \\def\\posMultiplicity{below right}%\n                  }%\n                }{%\n                  \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{top}}{%\n                    \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                      \\def\\posAttrName{above left}%\n                      \\def\\posMultiplicity{below right}%\n                    }{%\n                      \\def\\posAttrName{above right}%\n                      \\def\\posMultiplicity{below left}%\n                    }%\n                  }{%\n                    \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                      \\def\\posAttrName{above right}%\n                      \\def\\posMultiplicity{below left}%\n                    }{%\n                      \\def\\posAttrName{above left}%\n                      \\def\\posMultiplicity{below right}%\n                    }%\n                  }%\n                }%\n              }%\n            }{}%\n            %\n            \\ifnum\\thepos>200%\n              \\pgfmathsetmacro{\\tikzumlRelationPosition}{(\\thepos-200)/100}%\n              \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                   node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity}%\n                                   }%\n            \\else%\n              \\ifnum\\thepos<100%\n                \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                     node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity}%\n                                     }%\n              \\else%\n                \\pgfmathsetmacro{\\tikzumlRelationPosition}{(\\thepos-100)/100}%\n                \\xdef\\tikzumlMidOneArc{\\tikzumlMidOneArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                       node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity}%\n                                      }%\n              \\fi%\n            \\fi%\n            %\n            \\ifthenelse{\\theposT=100}{%\n              \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{right}}{%\n                \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                  \\def\\posAttrNameT{above right}%\n                  \\def\\posMultiplicityT{below left}%\n                }{%\n                  \\def\\posAttrNameT{above left}%\n                  \\def\\posMultiplicityT{below right}%\n                }%\n              }{%\n                \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{left}}{%\n                  \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                    \\def\\posAttrNameT{above left}%\n                    \\def\\posMultiplicityT{below right}%\n                  }{%\n                    \\def\\posAttrNameT{above right}%\n                    \\def\\posMultiplicityT{below left}%\n                  }%\n                }{%\n                  \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{top}}{%\n                    \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                      \\def\\posAttrNameT{above right}%\n                      \\def\\posMultiplicityT{below left}%\n                    }{%\n                      \\def\\posAttrNameT{above left}%\n                      \\def\\posMultiplicityT{below right}%\n                    }%\n                  }{%\n                    \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                      \\def\\posAttrNameT{above left}%\n                      \\def\\posMultiplicityT{below right}%\n                    }{%\n                      \\def\\posAttrNameT{above right}%\n                      \\def\\posMultiplicityT{below left}%\n                    }%\n                  }%\n                }%\n              }%\n            }{}%\n            %\n            \\ifthenelse{\\theposT=200}{%\n              \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{right}}{%\n                \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                  \\def\\posAttrNameT{above left}%\n                  \\def\\posMultiplicityT{below right}%\n                }{%\n                  \\def\\posAttrNameT{above right}%\n                  \\def\\posMultiplicityT{below left}%\n                }%\n              }{%\n                \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{left}}{%\n                  \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                    \\def\\posAttrNameT{above right}%\n                    \\def\\posMultiplicityT{below left}%\n                  }{%\n                    \\def\\posAttrNameT{above left}%\n                    \\def\\posMultiplicityT{below right}%\n                  }%\n                }{%\n                  \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{top}}{%\n                    \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                      \\def\\posAttrNameT{above left}%\n                      \\def\\posMultiplicityT{below right}%\n                    }{%\n                      \\def\\posAttrNameT{above right}%\n                      \\def\\posMultiplicityT{below left}%\n                    }%\n                  }{%\n                    \\ifthenelse{\\tikzumlRelationEndAngle<\\tikzumlRelationStartAngle}{%\n                      \\def\\posAttrNameT{above right}%\n                      \\def\\posMultiplicityT{below left}%\n                    }{%\n                      \\def\\posAttrNameT{above left}%\n                      \\def\\posMultiplicityT{below right}%\n                    }%\n                  }%\n                }%\n              }%\n            }{}%\n            %\n            \\ifnum\\theposT>200%\n              \\pgfmathsetmacro{\\tikzumlRelationPositionT}{(\\theposT-200)/100}%\n              \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                   node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT}%\n                                   }%\n            \\else%\n              \\ifnum\\theposT<100%\n                \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                     node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT}%\n                                     }%\n              \\else%\n                \\pgfmathsetmacro{\\tikzumlRelationPositionT}{(\\theposT-100)/100}%\n                \\xdef\\tikzumlMidOneArc{\\tikzumlMidOneArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                       node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT}%\n                                      }%\n              \\fi%\n            \\fi%\n          \\fi%\n          %\n          \\ifthenelse{\\equal{\\tikzumlRelationRecursiveDirectionStart}{\\tikzumlRelationRecursiveDirectionEnd}}{%\n            \\xdef\\tikzumlPath{(\\tikzumlSrcClassNodeName.\\tikzumlRelationStartAngle) -- \\tikzumlFirstArc (\\tikzumlRelationName-2.center) -- \\tikzumlMidOneArc (\\tikzumlRelationName-4.center) -- \\tikzumlLastArc (\\tikzumlDestClassNodeName.\\tikzumlRelationEndAngle) }%\n            \\ifnum\\thetikzumlStateLevel>0%\n              \\def\\tikzumlStateFitTmp{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n              \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitTmp (\\tikzumlRelationName-1) (\\tikzumlRelationName-2) (\\tikzumlRelationName-3) (\\tikzumlRelationName-4) (\\tikzumlRelationName-5)}%\n            \\fi%\n          }{%\n            \\xdef\\tikzumlPath{(\\tikzumlSrcClassNodeName.\\tikzumlRelationStartAngle) -- \\tikzumlFirstArc (\\tikzumlRelationName-2.center) -- \\tikzumlMidOneArc (\\tikzumlRelationName-4.center) -- \\tikzumlMidTwoArc (\\tikzumlRelationName-6.center) -- \\tikzumlLastArc (\\tikzumlDestClassNodeName.\\tikzumlRelationEndAngle) }%\n            \\ifnum\\thetikzumlStateLevel>0%\n              \\def\\tikzumlStateFitTmp{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n              \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitTmp (\\tikzumlRelationName-1) (\\tikzumlRelationName-2) (\\tikzumlRelationName-3) (\\tikzumlRelationName-4) (\\tikzumlRelationName-5) (\\tikzumlRelationName-6) (\\tikzumlRelationName-7)}%\n            \\fi%\n          }%\n        }{}%\n      }%\n    }{%\n      \\def\\arcNum{1}%\n      \\def\\arcNumT{1}%\n      %\n      \\node[inner sep=0] (\\tikzumlRelationName-1) at (\\tikzumlRelationName-middle) {};%\n      \\xdef\\tikzumlLastArc{node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                           node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity}%\n                           node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                           node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT}%\n                           node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype} }%\n      \\xdef\\tikzumlPath{(\\tikzumlSrcClassNodeName\\tikzumlRelationSrcAnchor) -- \\tikzumlLastArc (\\tikzumlDestClassNodeName\\tikzumlRelationDestAnchor) }%\n      \\ifnum\\thetikzumlStateLevel>0%\n        \\def\\tikzumlStateFitTmp{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n        \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitTmp (\\tikzumlRelationName-1) }%\n      \\fi%\n    }%\n  }{%\n    % first vertical then horizontal line\n    \\ifthenelse{\\equal{\\tikzumlRelationGeometry}{|-}}%\n    {%\n      %\\setcounter{tikzumlControlNodesNum}{1}%\n      %\n      \\def\\tikzumlFirstArc{node[midway, inner sep=0, name=\\tikzumlRelationName-1, anchor=center] {} }%\n      \\def\\tikzumlLastArc{node[midway, inner sep=0, name=\\tikzumlRelationName-3, anchor=center]{} }%\n      %\n      \\begin{pgfonlayer}{connections}%\n      \\node[inner sep=0] (\\tikzumlRelationName-2) at (\\tikzumlSrcClassNodeName\\tikzumlRelationSrcAnchor |- \\tikzumlDestClassNodeName\\tikzumlRelationDestAnchor) {};%\n      \\end{pgfonlayer}%\n      %\n      \\ifnum\\theposStereo>100%\n        \\pgfmathsetmacro{\\tikzumlRelationPositionStereotype}{(\\theposStereo-100)/100}%\n        \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype} }%\n      \\else%\n        \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype} }%\n      \\fi%\n      %\n      \\ifnum\\thepos>100%\n        \\pgfmathsetmacro{\\tikzumlRelationPosition}{(\\thepos-100)/100}%\n        \\def\\arcNum{2}%\n      \\else%\n        \\def\\arcNum{1}%\n        \\ifnum\\thepos=100%\n          \\def\\posAttrName{above left}%\n          \\def\\posMultiplicity{below right}%\n        \\fi%\n      \\fi%\n      %\n      \\ifnum\\arcNum=1%\n        \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                               node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity} }%\n      \\fi%\n      \\ifnum\\arcNum=2%\n        \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                             node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity} }%\n      \\fi%\n      %\n      \\ifnum\\theposT>100%\n        \\pgfmathsetmacro{\\tikzumlRelationPositionT}{(\\theposT-100)/100}%\n        \\def\\arcNumT{2}%\n      \\else%\n        \\def\\arcNumT{1}%\n        \\ifnum\\theposT=100%\n          \\def\\posAttrNameT{above left}%\n          \\def\\posMultiplicityT{below right}%\n        \\fi%\n      \\fi%\n      %\n      \\ifnum\\arcNumT=1%\n        \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                               node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT} }%\n      \\fi%\n      \\ifnum\\arcNumT=2%\n        \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                             node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT} }%\n      \\fi%\n      %\n      \\xdef\\tikzumlPath{(\\tikzumlSrcClassNodeName\\tikzumlRelationSrcAnchor) -- \\tikzumlFirstArc (\\tikzumlRelationName-2.base) -- \\tikzumlLastArc (\\tikzumlDestClassNodeName\\tikzumlRelationDestAnchor) }%\n      \\ifnum\\thetikzumlStateLevel>0%\n        \\def\\tikzumlStateFitTmp{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n        \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitTmp (\\tikzumlRelationName-1) (\\tikzumlRelationName-2) (\\tikzumlRelationName-3) }%\n      \\fi%\n    }{%\n      % first horizontal then vertical line\n      \\ifthenelse{\\equal{\\tikzumlRelationGeometry}{-|}}%\n      {%\n        %\\setcounter{tikzumlControlNodesNum}{1}%\n        %\n        \\def\\tikzumlFirstArc{node[midway, inner sep=0, name=\\tikzumlRelationName-1, anchor=center]{} }%\n        \\def\\tikzumlLastArc{node[midway, inner sep=0, name=\\tikzumlRelationName-3, anchor=center] {} }%\n        %\n        \\begin{pgfonlayer}{connections}%\n        \\node[inner sep=0] (\\tikzumlRelationName-2) at (\\tikzumlSrcClassNodeName\\tikzumlRelationSrcAnchor -| \\tikzumlDestClassNodeName\\tikzumlRelationDestAnchor) {};%\n        \\end{pgfonlayer}%\n        %\n        \\ifnum\\theposStereo>100%\n          \\pgfmathsetmacro{\\tikzumlRelationPositionStereotype}{(\\theposStereo-100)/100}%\n          \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype} }%\n        \\else%\n          \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype} }%\n        \\fi%\n        %\n        \\ifnum\\thepos>100%\n          \\pgfmathsetmacro{\\tikzumlRelationPosition}{(\\thepos-100)/100}%\n          \\def\\arcNum{2}%\n        \\else%\n          \\def\\arcNum{1}%\n          \\ifnum\\thepos=100%\n            \\def\\posAttrName{above left}%\n            \\def\\posMultiplicity{below right}%\n          \\fi%\n        \\fi%\n        %\n        \\ifnum\\arcNum=1%\n          \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                                 node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity} }%\n        \\fi%\n        \\ifnum\\arcNum=2%\n          \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                               node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity} }%\n        \\fi%\n        %\n        \\ifnum\\theposT>100%\n          \\pgfmathsetmacro{\\tikzumlRelationPositionT}{(\\theposT-100)/100}%\n          \\def\\arcNumT{2}%\n        \\else%\n          \\def\\arcNumT{1}%\n          \\ifnum\\theposT=100%\n            \\def\\posAttrNameT{above left}%\n            \\def\\posMultiplicityT{below right}%\n          \\fi%\n        \\fi%\n        %\n        \\ifnum\\arcNumT=1%\n          \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                                 node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT} }%\n        \\fi%\n        \\ifnum\\arcNumT=2%\n          \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                               node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT} }%\n        \\fi%\n        %\n        \\xdef\\tikzumlPath{(\\tikzumlSrcClassNodeName\\tikzumlRelationSrcAnchor) -- \\tikzumlFirstArc (\\tikzumlRelationName-2.base) -- \\tikzumlLastArc (\\tikzumlDestClassNodeName\\tikzumlRelationDestAnchor) }%\n        \\ifnum\\thetikzumlStateLevel>0%\n          \\def\\tikzumlStateFitTmp{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n          \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitTmp (\\tikzumlRelationName-1) (\\tikzumlRelationName-2) (\\tikzumlRelationName-3) }%\n        \\fi%\n      }{%\n        % first vertical, then horizontal, finally vertical line\n        \\ifthenelse{\\equal{\\tikzumlRelationGeometry}{|-|}}%\n        {%\n          %\\setcounter{tikzumlControlNodesNum}{2}%\n          %\n          \\def\\tikzumlFirstArc{node[midway, inner sep=0, name=\\tikzumlRelationName-1, anchor=center] {} }%\n          \\def\\tikzumlLastArc{node[midway, inner sep=0, name=\\tikzumlRelationName-5, anchor=center] {} }%\n          \\def\\tikzumlMidOneArc{ }%\n          %\n          \\begin{pgfonlayer}{connections}%\n          %\n          \\ifthenelse{\\equal{\\tikzumlRelationArmO}{auto}}{%\n            \\ifthenelse{\\equal{\\tikzumlRelationArmT}{auto}}{%\n              \\node[inner sep=0] (\\tikzumlRelationName-3) at (\\tikzumlRelationName-middle) {};%\n              \\node[inner sep=0] (\\tikzumlRelationName-2) at (\\tikzumlSrcClassNodeName\\tikzumlRelationSrcAnchor |- \\tikzumlRelationName-3) {};%\n              \\node[inner sep=0] (\\tikzumlRelationName-4) at (\\tikzumlRelationName-3 -| \\tikzumlDestClassNodeName\\tikzumlRelationDestAnchor) {};%\n            }{%\n              \\draw (\\tikzumlDestClassNodeName\\tikzumlRelationDestAnchor)+(0,\\tikzumlRelationArmT) node[inner sep=0, name=\\tikzumlRelationName-4] {};%\n              \\node[inner sep=0] (\\tikzumlRelationName-2) at (\\tikzumlRelationName-4 -| \\tikzumlSrcClassNodeName\\tikzumlRelationSrcAnchor) {};%\n              \\node[inner sep=0] (\\tikzumlRelationName-3) at (barycentric cs:\\tikzumlRelationName-2=0.5,\\tikzumlRelationName-4=0.5) {};%\n            }%\n          }{%\n            \\draw (\\tikzumlSrcClassNodeName\\tikzumlRelationSrcAnchor)+(0,\\tikzumlRelationArmO) node[inner sep=0, name=\\tikzumlRelationName-2] {};%\n            \\node[inner sep=0] (\\tikzumlRelationName-4) at (\\tikzumlRelationName-2 -| \\tikzumlDestClassNodeName\\tikzumlRelationDestAnchor) {};%\n            \\node[inner sep=0] (\\tikzumlRelationName-3) at (barycentric cs:\\tikzumlRelationName-2=0.5,\\tikzumlRelationName-4=0.5) {};%\n          }%\n          \\end{pgfonlayer}%\n          %\n          \\ifnum\\theposStereo>200%\n            \\pgfmathsetmacro{\\tikzumlRelationPositionStereotype}{(\\theposStereo-200)/100}%\n            \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype} }%\n          \\else%\n            \\ifnum\\theposStereo<100%\n              \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype} }%\n            \\else%\n              \\pgfmathsetmacro{\\tikzumlRelationPositionStereotype}{(\\theposStereo-100)/100}%\n              \\xdef\\tikzumlMidOneArc{\\tikzumlMidOneArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype} }%\n            \\fi%\n          \\fi%\n          %\n          \\ifthenelse{\\thepos=200\\OR\\thepos=100}{%\n            \\def\\posAttrName{above left}%\n            \\def\\posMultiplicity{below right}%\n          }{}%\n          %\n          \\ifthenelse{\\thepos>200}{%\n            \\pgfmathsetmacro{\\tikzumlRelationPosition}{(\\thepos-200)/100}%\n            \\def\\arcNum{3}%\n          }{%\n            \\ifthenelse{\\thepos<100}{%\n              \\def\\arcNum{1}%\n            }{%\n              \\pgfmathsetmacro{\\tikzumlRelationPosition}{(\\thepos-100)/100}%\n              \\def\\arcNum{2}%\n            }%\n          }%\n          %\n          \\ifnum\\arcNum=1%\n            \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                                   node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity} }%\n          \\fi%\n          \\ifnum\\arcNum=2%\n            \\xdef\\tikzumlMidOneArc{\\tikzumlMidOneArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                                     node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity} }%\n          \\fi%\n          \\ifnum\\arcNum=3%\n            \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                                 node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity} }%\n          \\fi%\n          %\n          \\ifthenelse{\\theposT=200\\OR\\theposT=100}{%\n            \\def\\posAttrNameT{above left}%\n            \\def\\posMultiplicityT{below right}%\n          }{}%\n          %\n          \\ifthenelse{\\theposT>200}{%\n            \\pgfmathsetmacro{\\tikzumlRelationPositionT}{(\\theposT-200)/100}%\n            \\def\\arcNumT{3}%\n          }{%\n            \\ifthenelse{\\theposT<100}{%\n              \\def\\arcNumT{1}%\n            }{%\n              \\pgfmathsetmacro{\\tikzumlRelationPositionT}{(\\theposT-100)/100}%\n              \\def\\arcNumT{2}%\n            }%\n          }%\n          %\n          \\ifnum\\arcNumT=1%\n            \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                                   node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT} }%\n          \\fi%\n          \\ifnum\\arcNumT=2%\n            \\xdef\\tikzumlMidOneArc{\\tikzumlMidOneArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                                     node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT} }%\n          \\fi%\n          \\ifnum\\arcNumT=3%\n            \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                                 node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT} }%\n          \\fi%\n          %\n          \\xdef\\tikzumlPath{(\\tikzumlSrcClassNodeName\\tikzumlRelationSrcAnchor) -- \\tikzumlFirstArc (\\tikzumlRelationName-2.base) -- \\tikzumlMidOneArc (\\tikzumlRelationName-4.base) -- \\tikzumlLastArc (\\tikzumlDestClassNodeName\\tikzumlRelationDestAnchor) }%\n          \\ifnum\\thetikzumlStateLevel>0%\n            \\def\\tikzumlStateFitTmp{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n            \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitTmp (\\tikzumlRelationName-1) (\\tikzumlRelationName-2) (\\tikzumlRelationName-3) (\\tikzumlRelationName-4) (\\tikzumlRelationName-5) }%\n          \\fi%\n        }{%\n          % first horizontal, then vertical, finally horizontal line\n          \\ifthenelse{\\equal{\\tikzumlRelationGeometry}{-|-}}%\n          {%\n            %\\setcounter{tikzumlControlNodesNum}{2}%\n            %\n            \\def\\tikzumlFirstArc{node[midway, inner sep=0, name=\\tikzumlRelationName-1, anchor=center] {} }%\n            \\def\\tikzumlLastArc{node[midway, inner sep=0, name=\\tikzumlRelationName-5, anchor=center] {} }%\n            \\def\\tikzumlMidOneArc{}%\n            %\n            \\begin{pgfonlayer}{connections}%\n            %\n            \\ifthenelse{\\equal{\\tikzumlRelationArmO}{auto}}{%\n              \\ifthenelse{\\equal{\\tikzumlRelationArmT}{auto}}{%\n                \\node[inner sep=0] (\\tikzumlRelationName-3) at (\\tikzumlRelationName-middle) {};%\n                \\node[inner sep=0] (\\tikzumlRelationName-2) at (\\tikzumlSrcClassNodeName\\tikzumlRelationSrcAnchor -| \\tikzumlRelationName-3) {};%\n                \\node[inner sep=0] (\\tikzumlRelationName-4) at (\\tikzumlRelationName-3 |- \\tikzumlDestClassNodeName\\tikzumlRelationDestAnchor) {};%\n              }{%\n                \\draw (\\tikzumlDestClassNodeName\\tikzumlRelationDestAnchor)+(\\tikzumlRelationArmT,0) node[inner sep=0, name=\\tikzumlRelationName-4] {};%\n                \\node[inner sep=0] (\\tikzumlRelationName-2) at (\\tikzumlRelationName-4 |- \\tikzumlSrcClassNodeName\\tikzumlRelationSrcAnchor) {};%\n                \\node[inner sep=0] (\\tikzumlRelationName-3) at (barycentric cs:\\tikzumlRelationName-2=0.5,\\tikzumlRelationName-4=0.5) {};%\n              }%\n            }{%\n              \\draw (\\tikzumlSrcClassNodeName\\tikzumlRelationSrcAnchor)+(\\tikzumlRelationArmO,0) node[inner sep=0, name=\\tikzumlRelationName-2] {};%\n              \\node[inner sep=0] (\\tikzumlRelationName-4) at (\\tikzumlRelationName-2 |- \\tikzumlDestClassNodeName\\tikzumlRelationDestAnchor) {};%\n              \\node[inner sep=0] (\\tikzumlRelationName-3) at (barycentric cs:\\tikzumlRelationName-2=0.5,\\tikzumlRelationName-4=0.5) {};%\n            }%\n            \\end{pgfonlayer}%\n            %\n            \\ifnum\\theposStereo>200%\n              \\pgfmathsetmacro{\\tikzumlRelationPositionStereotype}{(\\theposStereo-200)/100}%\n              \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype} }%\n            \\else%\n              \\ifnum\\theposStereo<100%\n                \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype} }%\n              \\else%\n                \\pgfmathsetmacro{\\tikzumlRelationPositionStereotype}{(\\theposStereo-100)/100}%\n                \\xdef\\tikzumlMidOneArc{\\tikzumlMidOneArc node[pos=\\tikzumlRelationPositionStereotype, anchor=center] {\\stereotype} }%\n              \\fi%\n            \\fi%\n            %\n            \\ifthenelse{\\thepos=200\\OR\\thepos=100}{%\n              \\def\\posAttrName{above left}%\n              \\def\\posMultiplicity{below right}%\n            }{}%\n            %\n            \\ifthenelse{\\thepos>200}{%\n              \\pgfmathsetmacro{\\tikzumlRelationPosition}{(\\thepos-200)/100}%\n              \\def\\arcNum{3}%\n            }{%\n              \\ifthenelse{\\thepos<100}{%\n                \\def\\arcNum{1}%\n              }{%\n                \\pgfmathsetmacro{\\tikzumlRelationPosition}{(\\thepos-100)/100}%\n                \\def\\arcNum{2}%\n              }%\n            }%\n            %\n            \\ifnum\\arcNum=1%\n              \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                                     node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity} }%\n            \\fi%\n            \\ifnum\\arcNum=2%\n              \\xdef\\tikzumlMidOneArc{\\tikzumlMidOneArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                                       node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity} }%\n            \\fi%\n            \\ifnum\\arcNum=3%\n              \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlRelationAttrName}%\n                                                   node[pos=\\tikzumlRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlRelationMultiplicity} }%\n            \\fi%\n            %\n            \\ifthenelse{\\theposT=200\\OR\\theposT=100}{%\n              \\def\\posAttrNameT{above left}%\n              \\def\\posMultiplicityT{below right}%\n            }{}%\n            %\n            \\ifthenelse{\\theposT>200}{%\n              \\pgfmathsetmacro{\\tikzumlRelationPositionT}{(\\theposT-200)/100}%\n              \\def\\arcNumT{3}%\n            }{%\n              \\ifthenelse{\\theposT<100}{%\n                \\def\\arcNumT{1}%\n              }{%\n                \\pgfmathsetmacro{\\tikzumlRelationPositionT}{(\\theposT-100)/100}%\n                \\def\\arcNumT{2}%\n              }%\n            }%\n            %\n            \\ifnum\\arcNumT=1%\n              \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                                     node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT} }%\n            \\fi%\n            \\ifnum\\arcNumT=2%\n              \\xdef\\tikzumlMidOneArc{\\tikzumlMidOneArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                                       node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT} }%\n            \\fi%\n            \\ifnum\\arcNumT=3%\n              \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlRelationAttrNameT}%\n                                                   node[pos=\\tikzumlRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlRelationMultiplicityT} }%\n            \\fi%\n            %\n            \\xdef\\tikzumlPath{(\\tikzumlSrcClassNodeName\\tikzumlRelationSrcAnchor) -- \\tikzumlFirstArc (\\tikzumlRelationName-2.base) -- \\tikzumlMidOneArc (\\tikzumlRelationName-4.base) -- \\tikzumlLastArc (\\tikzumlDestClassNodeName\\tikzumlRelationDestAnchor) }%\n            \\ifnum\\thetikzumlStateLevel>0%\n              \\def\\tikzumlStateFitTmp{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n              \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitTmp (\\tikzumlRelationName-1) (\\tikzumlRelationName-2) (\\tikzumlRelationName-3) (\\tikzumlRelationName-4) (\\tikzumlRelationName-5) }%\n            \\fi%\n          }{%\n            \\errmessage{TIKZUML ERROR : Unknown geometry value !!! It should be in the following list : --, |-, -|, |-|, -|-}%\n          }%\n        }%\n      }%\n    }%\n  }%\n  %\n  \\begin{pgfonlayer}{connections}%\n  \\ifthenelse{\\equal{\\tikzumlRelationStyle}{tikzuml nesting style}}{%\n    \\pgfarrowsdeclare{nested}{nested}{...}\n    {\n      \\tikzumlNestingSymbolSize=0.2pt%\n      \\advance\\tikzumlNestingSymbolSize by .5\\pgflinewidth%\n      \\pgfsetdash{}{0pt} %  do not dash\n      \\pgfsetroundjoin   %  fix join\n      \\pgfsetroundcap    %  fix cap\n      \\pgfpathmoveto{\\pgfpoint{-16*\\tikzumlNestingSymbolSize}{0pt}}%\n      \\pgfpatharc{180}{90}{8*\\tikzumlNestingSymbolSize}%\n      \\pgfpatharc{90}{0}{8*\\tikzumlNestingSymbolSize}%\n      \\pgfpatharc{0}{-90}{8*\\tikzumlNestingSymbolSize}%\n      \\pgfpatharc{-90}{-180}{8*\\tikzumlNestingSymbolSize}%\n      \\pgfpathmoveto{\\pgfpoint{-8*\\tikzumlNestingSymbolSize}{8*\\tikzumlNestingSymbolSize}}%\n      \\pgfpathlineto{\\pgfpoint{-8*\\tikzumlNestingSymbolSize}{-8*\\tikzumlNestingSymbolSize}}%\n      \\pgfusepathqstroke%\n    }%\n    \\draw[auto, nested-, font=\\tikzumlDefaultFont, \\tikzumlRelationStyle, /tikzuml/relation/style2] \\tikzumlPath ;%\n  }{\n    \\draw[auto, font=\\tikzumlDefaultFont, \\tikzumlRelationStyle, /tikzuml/relation/style2] \\tikzumlPath ;%\n  }\n  \\end{pgfonlayer}%\n  %\n  \\stepcounter{tikzumlRelationNum}%\n}%\n%\n% shortcuts of \\umlrelation\n\\newcommand{\\umlHVrelation}[3][]{%\n  \\pgfkeys{/tikzuml/HVrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n               \\errmessage{TIKZUML ERROR : in umlHVrelation, forbidden option geometry}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/HVrelation/.cd, #1}%\n  \\umlrelation[geometry=-|, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlVHrelation}[3][]{%\n  \\pgfkeys{/tikzuml/VHrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n               \\errmessage{TIKZUML ERROR : in umlVHrelation, forbidden option geometry}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/VHrelation/.cd, #1}%\n  \\umlrelation[geometry=|-, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlHVHrelation}[3][]{%\n  \\pgfkeys{/tikzuml/HVHrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n               \\errmessage{TIKZUML ERROR : in umlHVHrelation, forbidden option geometry}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/HVHrelation/.cd, #1}%\n  \\umlrelation[geometry=-|-, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlVHVrelation}[3][]{%\n  \\pgfkeys{/tikzuml/VHVrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n               \\errmessage{TIKZUML ERROR : in umlVHVrelation, forbidden option geometry}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/VHVrelation/.cd, #1}%\n  \\umlrelation[geometry=|-|, #1]{#2}{#3}%\n}%\n%\n%\n% shortcuts for relations\n\\newcommand{\\umlinherit}[3][]{\\umlrelation[style={tikzuml inherit style}, #1]{#2}{#3}}%\n\\newcommand{\\umlimpl}[3][]{\\umlrelation[style={tikzuml implements style}, #1]{#2}{#3}}%\n\\newcommand{\\umlreal}[3][]{\\umlrelation[style={tikzuml implements style}, #1]{#2}{#3}}%\n\\newcommand{\\umlassoc}[3][]{\\umlrelation[style={tikzuml association style}, #1]{#2}{#3}}%\n\\newcommand{\\umlbiassoc}[3][]{\\umlrelation[style={tikzuml bidirectional association style}, #1]{#2}{#3}}%\n\\newcommand{\\umluniassoc}[3][]{\\umlrelation[style={tikzuml unidirectional association style}, #1]{#2}{#3}}%\n\\newcommand{\\umlaggreg}[3][]{\\umlrelation[style={tikzuml aggregation style}, #1]{#2}{#3}}%\n\\newcommand{\\umluniaggreg}[3][]{\\umlrelation[style={tikzuml unidirectional aggregation style}, #1]{#2}{#3}}%\n\\newcommand{\\umlcompo}[3][]{\\umlrelation[style={tikzuml composition style}, #1]{#2}{#3}}%\n\\newcommand{\\umlunicompo}[3][]{\\umlrelation[style={tikzuml unidirectional composition style}, #1]{#2}{#3}}%\n\\newcommand{\\umlimport}[3][]{\\umlrelation[style={tikzuml import style}, #1]{#2}{#3}}%\n\\newcommand{\\umlnest}[3][]{\\umlrelation[style={tikzuml nesting style}, #1]{#2}{#3}}%\n\\newcommand{\\umldep}[3][]{\\umlrelation[style={tikzuml dependency style}, #1]{#2}{#3}}%\n\\newcommand{\\umlfriend}[3][]{%\n  \\pgfkeys{/tikzuml/friendrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlfriend, forbidden option stereo}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/friendrelation/.cd, #1}%\n  \\umlrelation[stereo=friend, style={tikzuml dependency style}, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlHVinherit}[3][]{\\umlHVrelation[style={tikzuml inherit style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVimpl}[3][]{\\umlHVrelation[style={tikzuml implements style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVreal}[3][]{\\umlHVrelation[style={tikzuml implements style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVassoc}[3][]{\\umlHVrelation[style={tikzuml association style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVuniassoc}[3][]{\\umlHVrelation[style={tikzuml unidirectional association style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVaggreg}[3][]{\\umlHVrelation[style={tikzuml aggregation style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVuniaggreg}[3][]{\\umlHVrelation[style={tikzuml unidirectional aggregation style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVcompo}[3][]{\\umlHVrelation[style={tikzuml composition style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVunicompo}[3][]{\\umlHVrelation[style={tikzuml unidirectional composition style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVimport}[3][]{\\umlHVrelation[style={tikzuml import style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVnest}[3][]{\\umlHVrelation[style={tikzuml nesting style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVdep}[3][]{\\umlHVrelation[style={tikzuml dependency style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVfriend}[3][]{%\n  \\pgfkeys{/tikzuml/friendrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlHVfriend, forbidden option stereo}%\n             }{%\n               \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n                 \\errmessage{TIKZUML ERROR : in umlHVfriend, forbidden option geometry}%\n               }{}%\n             }%\n           }}%\n  \\pgfkeys{/tikzuml/friendrelation/.cd, #1}%\n  \\umlrelation[geometry=-|, stereo=friend, style={tikzuml dependency style}, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlVHinherit}[3][]{\\umlVHrelation[style={tikzuml inherit style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHimpl}[3][]{\\umlVHrelation[style={tikzuml implements style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHreal}[3][]{\\umlVHrelation[style={tikzuml implements style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHassoc}[3][]{\\umlVHrelation[style={tikzuml association style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHuniassoc}[3][]{\\umlVHrelation[style={tikzuml unidirectional association style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHaggreg}[3][]{\\umlVHrelation[style={tikzuml aggregation style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHuniaggreg}[3][]{\\umlVHrelation[style={tikzuml unidirectional aggregation style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHcompo}[3][]{\\umlVHrelation[style={tikzuml composition style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHunicompo}[3][]{\\umlVHrelation[style={tikzuml unidirectional composition style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHimport}[3][]{\\umlVHrelation[style={tikzuml import style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHnest}[3][]{\\umlVHrelation[style={tikzuml nesting style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHdep}[3][]{\\umlVHrelation[style={tikzuml dependency style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHfriend}[3][]{%\n  \\pgfkeys{/tikzuml/friendrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlVHfriend, forbidden option stereo}%\n             }{%\n               \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n                 \\errmessage{TIKZUML ERROR : in umlVHfriend, forbidden option geometry}%\n               }{}%\n             }%\n           }}%\n  \\pgfkeys{/tikzuml/friendrelation/.cd, #1}%\n  \\umlrelation[geometry=|-, stereo=friend, style={tikzuml dependency style}, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlHVHinherit}[3][]{\\umlHVHrelation[style={tikzuml inherit style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVHimpl}[3][]{\\umlHVHrelation[style={tikzuml implements style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVHreal}[3][]{\\umlHVHrelation[style={tikzuml implements style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVHassoc}[3][]{\\umlHVHrelation[style={tikzuml association style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVHuniassoc}[3][]{\\umlHVHrelation[style={tikzuml unidirectional association style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVHaggreg}[3][]{\\umlHVHrelation[style={tikzuml aggregation style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVHuniaggreg}[3][]{\\umlHVHrelation[style={tikzuml unidirectional aggregation style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVHcompo}[3][]{\\umlHVHrelation[style={tikzuml composition style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVHunicompo}[3][]{\\umlHVHrelation[style={tikzuml unidirectional composition style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVHimport}[3][]{\\umlHVHrelation[style={tikzuml import style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVHnest}[3][]{\\umlHVHrelation[style={tikzuml nesting style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVHdep}[3][]{\\umlHVHrelation[style={tikzuml dependency style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVHfriend}[3][]{%\n  \\pgfkeys{/tikzuml/friendrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlHVHfriend, forbidden option stereo}%\n             }{%\n               \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n                 \\errmessage{TIKZUML ERROR : in umlHVHfriend, forbidden option geometry}%\n               }{}%\n             }%\n           }}%\n  \\pgfkeys{/tikzuml/friendrelation/.cd, #1}%\n  \\umlrelation[geometry=-|-, stereo=friend, style={tikzuml dependency style}, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlVHVinherit}[3][]{\\umlVHVrelation[style={tikzuml inherit style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHVimpl}[3][]{\\umlVHVrelation[style={tikzuml implements style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHVreal}[3][]{\\umlVHVrelation[style={tikzuml implements style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHVassoc}[3][]{\\umlVHVrelation[style={tikzuml association style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHVuniassoc}[3][]{\\umlVHVrelation[style={tikzuml unidirectional association style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHVaggreg}[3][]{\\umlVHVrelation[style={tikzuml aggregation style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHVuniaggreg}[3][]{\\umlVHVrelation[style={tikzuml unidirectional aggregation style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHVcompo}[3][]{\\umlVHVrelation[style={tikzuml composition style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHVunicompo}[3][]{\\umlVHVrelation[style={tikzuml unidirectional composition style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHVimport}[3][]{\\umlVHVrelation[style={tikzuml import style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHVnest}[3][]{\\umlVHVrelation[style={tikzuml nesting style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHVdep}[3][]{\\umlVHVrelation[style={tikzuml dependency style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHVfriend}[3][]{%\n  \\pgfkeys{/tikzuml/friendrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlVHVfriend, forbidden option stereo}%\n             }{%\n               \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n                 \\errmessage{TIKZUML ERROR : in umlVHVfriend, forbidden option geometry}%\n               }{}%\n             }%\n           }}%\n  \\pgfkeys{/tikzuml/friendrelation/.cd, #1}%\n  \\umlrelation[geometry=|-|, stereo=friend, style={tikzuml dependency style}, #1]{#2}{#3}%\n}%\n%\n% define a node\n\\newcommand{\\umlnode}[2]{%\n  \\node (#2) at (#1) {};%\n}%\n%\n% main command to define a relation between two classes through a control node\n% args : src class\n%        control node\n%        dest class\n% optional : arg1, arg2, arg: name of the src/dest/dest side class type attribute defined by the relation\n%            mult1, mult2, mult: multiplicity of the src/dest/dest side class type attribute defined by the relation\n%            pos1, pos2, pos: position of the src/dest/dest side class type attribute defined by the relation\n%            align1, align2, align: text justification of the src/dest/dest side class type attribute defined by the relation\n%            anchor1, anchor2: src/dest anchors on linked classes\n%            stereo: stereotype of the relation\n%            pos stereo: position of the stereotype on the relation\n%            style: style of the relation (association, aggregation, composition, inherit, ...)\n%            name: rootname used for naming nodes of the relation\n\\newcommand{\\umlCNrelation}[4][]{%\n  \\pgfkeys{/tikzuml/relation/.cd, arg1/.initial={}, arg2/.initial={}, arg/.initial={},%\n                                  mult1/.initial={}, mult2/.initial={}, mult/.initial={},%\n                                  pos1/.initial=0.2, pos2/.initial=0.8, pos/.initial=tikzumlEmpty,%\n                                  align1/.initial={}, align2/.initial={}, align/.initial={},%\n                                  anchor1/.initial=tikzumlEmpty, anchor2/.initial=tikzumlEmpty,%\n                                  stereo/.initial={}, pos stereo/.initial=1,%\n                                  style/.initial=->, name/.initial=relation-\\thetikzumlRelationNum,%\n                                  .unknown/.code={%\n                                    \\let\\keyname=\\pgfkeyscurrentname%\n                                    \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                    \\errmessage{TIKZUML ERROR : in umlCNrelation, invalid option \\keyname}%\n                                  }%\n  }%\n  \\pgfkeys{/tikzuml/relation/.cd,#1}%\n  \\pgfkeys{/tikzuml/relation/.cd, arg1/.get=\\tikzumlCNRelationAttrName, arg2/.get=\\tikzumlCNRelationAttrNameTO, arg/.get=\\tikzumlCNRelationAttrNameTT,%\n                                  mult1/.get=\\tikzumlCNRelationMultiplicity, mult2/.get=\\tikzumlCNRelationMultiplicityTO, mult/.get=\\tikzumlCNRelationMultiplicityTT,%\n                                  pos1/.get=\\tikzumlCNRelationPosition, pos2/.get=\\tikzumlCNRelationPositionTO, pos/.get=\\tikzumlCNRelationPositionTT,%\n                                  align1/.get=\\tikzumlCNRelationAlign, align2/.get=\\tikzumlCNRelationAlignTO, align/.get=\\tikzumlCNRelationAlignTT,%\n                                  anchor1/.get=\\tikzumlCNRelationSrcAnchor, anchor2/.get=\\tikzumlCNRelationDestAnchor,%\n                                  stereo/.get=\\tikzumlCNRelationStereoType, pos stereo/.get=\\tikzumlCNRelationPositionStereotype,%\n                                  style/.get=\\tikzumlCNRelationStyle, name/.get=\\tikzumlCNRelationName%\n  }%\n  %\n  % managing \\_ in class names for node names\n  \\def\\tikzumlSrcClassName{#2}%\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlSrcClassNodeName{\\tikzumlSrcClassName}}\\x%\n  %\n  \\StrSubstitute{\\tikzumlSrcClassNodeName}{:}{@COLON@}[\\tikzumlSrcClassNodeName]%\n  \\StrSubstitute{\\tikzumlSrcClassNodeName}{\\_}{@UNDERSCORE@}[\\tikzumlSrcClassNodeName]%\n  %\n  \\def\\tikzumlDestClassName{#4}%\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlDestClassNodeName{\\tikzumlDestClassName}}\\x%\n  %\n  \\StrSubstitute{\\tikzumlDestClassNodeName}{:}{@COLON@}[\\tikzumlDestClassNodeName]%\n  \\StrSubstitute{\\tikzumlDestClassNodeName}{\\_}{@UNDERSCORE@}[\\tikzumlDestClassNodeName]%\n  %\n  % managing alias keys\n  \\def\\tikzumlCNRelationAttrNameT{\\tikzumlCNRelationAttrNameTO\\tikzumlCNRelationAttrNameTT}%\n  \\def\\tikzumlCNRelationMultiplicityT{\\tikzumlCNRelationMultiplicityTO\\tikzumlCNRelationMultiplicityTT}%\n  \\def\\tikzumlCNRelationAlignT{\\tikzumlCNRelationAlignTO\\tikzumlCNRelationAlignTT}%\n  \\def\\orientationT{\\orientationTO\\orientationTT}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlCNRelationPositionTT}{tikzumlEmpty}}{%\n    \\def\\tikzumlCNRelationPositionT{\\tikzumlCNRelationPositionTO}%\n  }{%\n    \\def\\tikzumlCNRelationPositionT{\\tikzumlCNRelationPositionTT}%\n  }%\n  %\n  \\def\\attrAlign{}%\n  \\def\\multAlign{}%\n  \\def\\attrAlignT{}%\n  \\def\\multAlignT{}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlCNRelationAlign}{left}}{%\n    \\def\\attrAlign{above right}%\n    \\def\\multAlign{below right}%\n  }{%\n    \\ifthenelse{\\equal{\\tikzumlCNRelationAlign}{right}}{%\n      \\def\\attrAlign{above left}%\n      \\def\\multAlign{below left}%\n    }{}%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlCNRelationAlignT}{left}}{%\n    \\def\\attrAlignT{above right}%\n    \\def\\multAlignT{below right}%\n  }{%\n    \\ifthenelse{\\equal{\\tikzumlCNRelationAlignT}{right}}{%\n      \\def\\attrAlignT{above left}%\n      \\def\\multAlignT{below left}%\n    }{}%\n  }%\n  %\n  % def stereotype\n  \\ifthenelse{\\equal{\\tikzumlCNRelationStereoType}{}}{%\n    \\def\\stereotype{}%\n  }{%\n    \\def\\stereotype{$\\ll$\\tikzumlCNRelationStereoType$\\gg$}%\n  }%\n  %\n  % def anchors macros\n  \\ifthenelse{\\equal{\\tikzumlCNRelationSrcAnchor}{tikzumlEmpty}}{%\n    \\def\\tikzumlCNRelationSrcAnchor{}%\n  }{%\n    \\let\\tikzumlCNRelationSrcAnchorold\\tikzumlCNRelationSrcAnchor%\n    \\def\\tikzumlCNRelationSrcAnchor{.\\tikzumlCNRelationSrcAnchorold}%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlCNRelationDestAnchor}{tikzumlEmpty}}{%\n    \\def\\tikzumlCNRelationDestAnchor{}%\n  }{%\n    \\let\\tikzumlCNRelationDestAnchorold\\tikzumlCNRelationDestAnchor%\n    \\def\\tikzumlCNRelationDestAnchor{.\\tikzumlCNRelationDestAnchorold}%\n  }%\n  %\n  \\setcounter{pos}{100*\\real{\\tikzumlCNRelationPosition}}%\n  \\setcounter{posT}{100*\\real{\\tikzumlCNRelationPositionT}}%\n  \\setcounter{posStereo}{100*\\real{\\tikzumlCNRelationPositionStereotype}}%\n  %\n  % straight line\n  %\\setcounter{tikzumlControlNodesNum}{1}%\n  %\n  \\def\\tikzumlFirstArc{node[midway, name=\\tikzumlCNRelationName-1, anchor=center] {} }%\n  \\def\\tikzumlLastArc{node[midway, name=\\tikzumlCNRelationName-3, anchor=center]{} }%\n  \\def\\posAttrName{}%\n  \\def\\posMultiplicity{}%\n  \\def\\posAttrNameT{}%\n  \\def\\posMultiplicityT{}%\n  %\n  \\begin{pgfonlayer}{connections}%\n  \\node (\\tikzumlCNRelationName-2) at (#3) {};%\n  \\end{pgfonlayer}%\n  %\n  \\ifnum\\theposStereo>100%\n    \\pgfmathsetmacro{\\tikzumlCNRelationPositionStereotype}{(\\theposStereo-100)/100}%\n    \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlCNRelationPositionStereotype, anchor=center] {\\stereotype} }%\n  \\else%\n    \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlCNRelationPositionStereotype, anchor=center] {\\stereotype} }%\n  \\fi%\n  %\n  \\ifnum\\thepos>100%\n    \\pgfmathsetmacro{\\tikzumlCNRelationPosition}{(\\thepos-100)/100}%\n    \\def\\arcNum{2}%\n  \\else%\n    \\def\\arcNum{1}%\n    \\ifnum\\thepos=100%\n      \\def\\posAttrName{above left}%\n      \\def\\posMultiplicity{below right}%\n    \\fi%\n  \\fi%\n  %\n  \\ifnum\\arcNum=1%\n    \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlCNRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlCNRelationAttrName}%\n                                           node[pos=\\tikzumlCNRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlCNRelationMultiplicity} }%\n  \\fi%\n  \\ifnum\\arcNum=2%\n    \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlCNRelationPosition, \\posAttrName, \\attrAlign] {\\tikzumlCNRelationAttrName}%\n                                         node[pos=\\tikzumlCNRelationPosition, swap, \\posMultiplicity, \\multAlign] {\\tikzumlCNRelationMultiplicity} }%\n  \\fi%\n  %\n  \\ifnum\\theposT>100%\n    \\pgfmathsetmacro{\\tikzumlCNRelationPositionT}{(\\theposT-100)/100}%\n    \\def\\arcNumT{2}%\n  \\else%\n    \\def\\arcNumT{1}%\n    \\ifnum\\theposT=100%\n      \\def\\posAttrNameT{above left}%\n      \\def\\posMultiplicityT{below right}%\n    \\fi%\n  \\fi%\n  %\n  \\ifnum\\arcNumT=1%\n    \\xdef\\tikzumlFirstArc{\\tikzumlFirstArc node[pos=\\tikzumlCNRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlCNRelationAttrNameT}%\n                                           node[pos=\\tikzumlCNRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlCNRelationMultiplicityT} }%\n  \\fi%\n  \\ifnum\\arcNumT=2%\n    \\xdef\\tikzumlLastArc{\\tikzumlLastArc node[pos=\\tikzumlCNRelationPositionT, \\posAttrNameT, \\attrAlignT] {\\tikzumlCNRelationAttrNameT}%\n                                         node[pos=\\tikzumlCNRelationPositionT, swap, \\posMultiplicityT, \\multAlignT] {\\tikzumlCNRelationMultiplicityT} }%\n  \\fi%\n  %\n  \\xdef\\tikzumlPath{(\\tikzumlSrcClassNodeName\\tikzumlCNRelationSrcAnchor) -- \\tikzumlFirstArc (\\tikzumlCNRelationName-2.base) -- \\tikzumlLastArc (\\tikzumlDestClassNodeName\\tikzumlCNRelationDestAnchor) }%\n  \n  \\begin{pgfonlayer}{connections}%\n  \\ifthenelse{\\equal{\\tikzumlCNRelationStyle}{tikzuml nesting style}}{%\n    \\pgfarrowsdeclare{nested}{nested}{...}\n    {\n      \\tikzumlNestingSymbolSize=0.2pt%\n      \\advance\\tikzumlNestingSymbolSize by .5\\pgflinewidth%\n      \\pgfsetdash{}{0pt} %  do not dash\n      \\pgfsetroundjoin   %  fix join\n      \\pgfsetroundcap    %  fix cap\n      \\pgfpathmoveto{\\pgfpoint{-16*\\tikzumlNestingSymbolSize}{0pt}}%\n      \\pgfpatharc{180}{90}{8*\\tikzumlNestingSymbolSize}%\n      \\pgfpatharc{90}{0}{8*\\tikzumlNestingSymbolSize}%\n      \\pgfpatharc{0}{-90}{8*\\tikzumlNestingSymbolSize}%\n      \\pgfpatharc{-90}{-180}{8*\\tikzumlNestingSymbolSize}%\n      \\pgfpathmoveto{\\pgfpoint{-8*\\tikzumlNestingSymbolSize}{8*\\tikzumlNestingSymbolSize}}%\n      \\pgfpathlineto{\\pgfpoint{-8*\\tikzumlNestingSymbolSize}{-8*\\tikzumlNestingSymbolSize}}%\n      \\pgfusepathqstroke%\n    }%\n    \\draw[auto, \\tikzumlCNRelationStyle, nested-, font=\\tikzumlDefaultFont] \\tikzumlPath ;%\n  }{\n    \\draw[auto, \\tikzumlCNRelationStyle, font=\\tikzumlDefaultFont] \\tikzumlPath ;%\n  }\n  \\end{pgfonlayer}%\n  %\n  \\stepcounter{tikzumlRelationNum}%\n}%\n%\n% shortcuts for cnrelations\n\\newcommand{\\umlCNinherit}[4][]{\\umlCNrelation[style={tikzuml inherit style}, #1]{#2}{#3}{#4}}%\n\\newcommand{\\umlCNimpl}[4][]{\\umlCNrelation[style={tikzuml implements style}, #1]{#2}{#3}{#4}}%\n\\newcommand{\\umlCNreal}[4][]{\\umlCNrelation[style={tikzuml implements style}, #1]{#2}{#3}{#4}}%\n\\newcommand{\\umlCNassoc}[4][]{\\umlCNrelation[style={tikzuml association style}, #1]{#2}{#3}{#4}}%\n\\newcommand{\\umlCNuniassoc}[4][]{\\umlCNrelation[style={tikzuml unidirectional association style}, #1]{#2}{#3}{#4}}%\n\\newcommand{\\umlCNaggreg}[4][]{\\umlCNrelation[style={tikzuml aggregation style}, #1]{#2}{#3}{#4}}%\n\\newcommand{\\umlCNuniaggreg}[4][]{\\umlCNrelation[style={tikzuml unidirectional aggregation style}, #1]{#2}{#3}{#4}}%\n\\newcommand{\\umlCNcompo}[4][]{\\umlCNrelation[style={tikzuml composition style}, #1]{#2}{#3}{#4}}%\n\\newcommand{\\umlCNunicompo}[4][]{\\umlCNrelation[style={tikzuml unidirectional composition style}, #1]{#2}{#3}{#4}}%\n\\newcommand{\\umlCNimport}[4][]{\\umlCNrelation[style={tikzuml import style}, #1]{#2}{#3}{#4}}%\n\\newcommand{\\umlCNnest}[4][]{\\umlCNrelation[style={tikzuml nesting style}, #1]{#2}{#3}{#4}}%\n\\newcommand{\\umlCNdep}[4][]{\\umlCNrelation[style={tikzuml dependency style}, #1]{#2}{#3}{#4}}%\n\\newcommand{\\umlCNfriend}[4][]{%\n  \\pgfkeys{/tikzuml/friendrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlCNfriend, forbidden option stereo}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/friendrelation/.cd, #1}%\n  \\umlCNrelation[stereo=friend, style={tikzuml dependency style}, #1]{#2}{#3}{#4}%\n}%\n%\n% define a note\n% arg : attached class\n%       label of the note\n% optional : x,y: coordinates of the note\n%            width: width of the note\n%            geometry: geometry of the relation between the note and what it is about\n%            weight: barycentric weight for a 3-line relation\n%            arm: length of the first arm\n%            anchor1, anchor2: anchors of the relation\n%            draw, fill, text: colors\n%            style: to manage every default TikZ option\n%            no coords: to tell that the note position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newcommand{\\umlnote}[3][]{%\n  \\pgfkeys{/tikzuml/note/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, width/.initial=\\tikzumlNoteDefaultWidth,%\n                              geometry/.initial=\\tikzumlRelationDefaultGeometry,%\n                              weight/.initial=\\tikzumlRelationDefaultWeight, arm/.initial=auto, style/.style={},%\n                              anchor1/.initial=tikzumlEmpty, anchor2/.initial=tikzumlEmpty,%\n                              draw/.initial=\\tikzumlDefaultDrawColor, fill/.initial=\\tikzumlNoteDefaultFillColor,%\n                              text/.initial=\\tikzumlDefaultTextColor,%\n                              no coords/.is if=tikzumlnoteWithoutCoords,%\n                              no coords=false,%\n                              .unknown/.code={%\n                                \\let\\keyname=\\pgfkeyscurrentname%\n                                \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                            \\equal{\\keyname}{left}\\OR%\n                                            \\equal{\\keyname}{below}\\OR%\n                                            \\equal{\\keyname}{right}\\OR%\n                                            \\equal{\\keyname}{above left}\\OR%\n                                            \\equal{\\keyname}{above right}\\OR%\n                                            \\equal{\\keyname}{below left}\\OR%\n                                            \\equal{\\keyname}{below right}}{%\n                                  \\IfSubStr{\\keyvalue}{ of }{%\n                                    \\pgfkeys{/tikzuml/note/.cd, no coords}%\n                                  }{}%\n                                }{}%\n                                \\ifx\\keyvalue\\pgfkeysnovalue%\n                                  \\pgfkeys{/tikzuml/note/.cd, style/.append style/.expand once={\\keyname}}%\n                                \\else%\n                                  \\pgfkeys{/tikzuml/note/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                \\fi%\n                                %\\errmessage{TIKZUML ERROR : in umlnote, invalid option \\keyname}%\n                              }%\n  }%\n  \\pgfkeys{/tikzuml/note/.cd, #1}%\n  \\pgfkeys{/tikzuml/note/.cd, x/.get=\\tikzumlNoteX, y/.get=\\tikzumlNoteY, width/.get=\\tikzumlNoteTextWidth,%\n                              geometry/.get=\\tikzumlNoteGeometry,%\n                              weight/.get=\\tikzumlNoteWeight, arm/.get=\\tikzumlNoteArm,%\n                              anchor1/.get=\\tikzumlNoteSrcAnchor, anchor2/.get=\\tikzumlNoteDestAnchor,%\n                              draw/.get=\\tikzumlNoteDrawColor, fill/.get=\\tikzumlNoteFillColor,%\n                              text/.get=\\tikzumlNoteTextColor%\n  }%\n  %\n  \\def\\tikzumlClassName{#2}%\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlClassNodeName{\\tikzumlClassName}}\\x%\n  %\n  % def anchors macros\n  \\ifthenelse{\\equal{\\tikzumlNoteSrcAnchor}{tikzumlEmpty}}{%\n    \\def\\tikzumlNoteSrcAnchor{}%\n  }{%\n    \\let\\tikzumlNoteSrcAnchorold\\tikzumlNoteSrcAnchor%\n    \\def\\tikzumlNoteSrcAnchor{.\\tikzumlNoteSrcAnchorold}%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlNoteDestAnchor}{tikzumlEmpty}}{%\n    \\def\\tikzumlNoteDestAnchor{}%\n  }{%\n    \\let\\tikzumlNoteDestAnchorold\\tikzumlNoteDestAnchor%\n    \\def\\tikzumlNoteDestAnchor{.\\tikzumlNoteDestAnchorold}%\n  }%\n  %\n  \\iftikzumlnoteWithoutCoords%\n    \\node[text=\\tikzumlNoteTextColor, text width=\\tikzumlNoteTextWidth, font=\\tikzumlDefaultFont, outer sep=0, inner xsep=1ex, inner ysep=3ex, /tikzuml/note/style] (note-\\thetikzumlNoteNum-coord) {#3};%\n  \\else%\n    \\node[text=\\tikzumlNoteTextColor, text width=\\tikzumlNoteTextWidth, font=\\tikzumlDefaultFont, outer sep=0, inner xsep=1ex, inner ysep=3ex, /tikzuml/note/style] (note-\\thetikzumlNoteNum-coord) at (\\tikzumlNoteX, \\tikzumlNoteY) {#3};%\n  \\fi%\n  \\draw (note-\\thetikzumlNoteNum-coord.north east) node[name=note-\\thetikzumlNoteNum-right-top, below=2ex, coordinate] {};%\n  \\draw (note-\\thetikzumlNoteNum-coord.north east) node[name=note-\\thetikzumlNoteNum-top-right, left=2ex, coordinate] {};%\n  \\draw[draw=\\tikzumlNoteDrawColor, fill=\\tikzumlNoteFillColor] (note-\\thetikzumlNoteNum-coord.south west) -- (note-\\thetikzumlNoteNum-coord.south east) -- (note-\\thetikzumlNoteNum-right-top.base) -- (note-\\thetikzumlNoteNum-top-right.base) -- (note-\\thetikzumlNoteNum-coord.north west) -- cycle;%\n  \\node[text=\\tikzumlNoteTextColor, text width=\\tikzumlNoteTextWidth, outer sep=0, inner xsep=1ex, inner ysep=3ex, font=\\tikzumlDefaultFont] (note-\\thetikzumlNoteNum) at (note-\\thetikzumlNoteNum-coord) {#3};%\n  \\draw[draw=\\tikzumlNoteDrawColor] (note-\\thetikzumlNoteNum-right-top) -| (note-\\thetikzumlNoteNum-top-right);%\n  %\n  \\pgfmathsetmacro{\\tikzumlNoteWeightT}{1.0-\\tikzumlNoteWeight}%\n  \\node (note-\\thetikzumlNoteNum-middle) at (barycentric cs:note-\\thetikzumlNoteNum-coord=\\tikzumlNoteWeight,\\tikzumlClassNodeName=\\tikzumlNoteWeightT) {};%\n  %\n  \\ifthenelse{\\equal{\\tikzumlNoteGeometry}{--}%\n           \\OR\\equal{\\tikzumlNoteGeometry}{-|}%\n           \\OR\\equal{\\tikzumlNoteGeometry}{|-}}{%\n    \\edef\\tikzumlnotepath{\\tikzumlNoteGeometry}\n  }{%\n    \\ifthenelse{\\equal{\\tikzumlNoteGeometry}{-|-}}{%\n      \\ifthenelse{\\equal{\\tikzumlNoteArm}{auto}}{%\n        \\edef\\tikzumlnotepath{-- (note-\\thetikzumlNoteNum-coord\\tikzumlNoteSrcAnchor -| note-\\thetikzumlNoteNum-middle.center) -- (note-\\thetikzumlNoteNum-middle.center) -- (note-\\thetikzumlNoteNum-middle.center |- \\tikzumlClassNodeName\\tikzumlNoteDestAnchor) --}%\n      }{%\n        \\draw (note-\\thetikzumlNoteNum-coord\\tikzumlNoteSrcAnchor)+(\\tikzumlNoteArm,0) node[name=note-\\thetikzumlNoteNum-tmp] {};\n        \\edef\\tikzumlnotepath{-- (note-\\thetikzumlNoteNum-tmp.center) |-}%\n      }%\n    }{%\n      \\ifthenelse{\\equal{\\tikzumlNoteGeometry}{|-|}}{%\n        \\ifthenelse{\\equal{\\tikzumlNoteArm}{auto}}{%\n        \\edef\\tikzumlnotepath{-- (note-\\thetikzumlNoteNum-coord\\tikzumlNoteSrcAnchor |- note-\\thetikzumlNoteNum-middle.center) -- (note-\\thetikzumlNoteNum-middle.center) -- (note-\\thetikzumlNoteNum-middle.center -| \\tikzumlClassNodeName\\tikzumlNoteDestAnchor) --}%\n      }{%\n        \\draw (note-\\thetikzumlNoteNum-coord\\tikzumlNoteSrcAnchor)+(0,\\tikzumlNoteArm) node[name=note-\\thetikzumlNoteNum-tmp] {};\n        \\edef\\tikzumlnotepath{-- (note-\\thetikzumlNoteNum-tmp.center) -|}%\n      }%\n      \n      }{%\n        \\errmessage{TIKZUML ERROR : Unknown geometry value !!! It should be in the following list : --, |-, -|, |-|, -|-}%\n      }%\n    }%\n  }%\n  %\n  \\begin{pgfonlayer}{connections}%\n  \\draw[dashed] (note-\\thetikzumlNoteNum-coord\\tikzumlNoteSrcAnchor) \\tikzumlnotepath (\\tikzumlClassNodeName\\tikzumlNoteDestAnchor);%\n  \\end{pgfonlayer}%\n  %\n  \\stepcounter{tikzumlNoteNum}%\n}%\n%\n% shortcuts for note with geometry\n\\newcommand{\\umlHVnote}[3][]{%\n  \\pgfkeys{/tikzuml/note/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n               \\errmessage{TIKZUML ERROR : in umlHVnote, forbidden option geometry}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/note/.cd, #1}%\n  \\umlnote[geometry=-|, #1]{#2}{#3}%\n}%\n\\newcommand{\\umlVHnote}[3][]{%\n  \\pgfkeys{/tikzuml/note/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n               \\errmessage{TIKZUML ERROR : in umlVHnote, forbidden option geometry}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/note/.cd, #1}%\n  \\umlnote[geometry=|-, #1]{#2}{#3}%\n}%\n\\newcommand{\\umlVHVnote}[3][]{%\n  \\pgfkeys{/tikzuml/note/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n               \\errmessage{TIKZUML ERROR : in umlVHVnote, forbidden option geometry}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/note/.cd, #1}%\n  \\umlnote[geometry=|-|, #1]{#2}{#3}%\n}%\n\\newcommand{\\umlHVHnote}[3][]{%\n  \\pgfkeys{/tikzuml/note/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n               \\errmessage{TIKZUML ERROR : in umlHVHnote, forbidden option geometry}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/note/.cd, #1}%\n  \\umlnote[geometry=-|-, #1]{#2}{#3}%\n}%\n%\n% define a uml association class (command)\n% args : name of the class\n%        attributes of the class\n%        operations of the class\n% optional : x,y: coordinates of the class\n%            width: width of the class node\n%            type: type of of class (class, interface, typedef, enum)\n%            template: template parameters\n%            name: name of the class node\n%            geometry: geometry of the line\n%            weight: barycentric weight of the middle part when geometry is a 3-line\n%            arm: length of first part when geometry id a 3-line\n%            anchor1, anchor2: src/dest anchors on linked classes\n%            style: style of the association class (association, aggregation, composition, inherit, ...)\n%            draw, fill, fill template, text: colors\n%            style: to manage every default TikZ option\n%            no coords: to tell that the class position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newcommand{\\umlassocclass}[5][]{%\n  \\pgfkeys{/tikzuml/assocclass/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX,\n                                    width/.initial=\\tikzumlClassDefaultWidth, type/.initial=\\tikzumlClassDefaultType, style/.style={},%\n                                    template/.initial={}, name/.initial=tikzumlEmpty, geometry/.initial=\\tikzumlRelationDefaultGeometry,%\n                                    weight/.initial=\\tikzumlRelationDefaultWeight, arm/.initial=auto,%\n                                    anchor1/.initial=tikzumlEmpty, anchor2/.initial=tikzumlEmpty,%\n                                    draw/.initial=\\tikzumlDefaultDrawColor,%\n                                    fill template/.initial=\\tikzumlClassTemplateFillColorDefaultFillColor,%\n                                    fill/.initial=\\tikzumlClassDefaultFillColor,%\n                                    text/.initial=\\tikzumlDefaultTextColor,%\n                                    no coords/.is if=tikzumlassocclassWithoutCoords,%\n                                    no coords=false,%\n                                    .unknown/.code={%\n                                      \\let\\keyname=\\pgfkeyscurrentname%\n                                      \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                      \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                                  \\equal{\\keyname}{left}\\OR%\n                                                  \\equal{\\keyname}{below}\\OR%\n                                                  \\equal{\\keyname}{right}\\OR%\n                                                  \\equal{\\keyname}{above left}\\OR%\n                                                  \\equal{\\keyname}{above right}\\OR%\n                                                  \\equal{\\keyname}{below left}\\OR%\n                                                  \\equal{\\keyname}{below right}}{%\n                                        \\IfSubStr{\\keyvalue}{ of }{%\n                                          \\pgfkeys{/tikzuml/assocclass/.cd, no coords}%\n                                        }{}%\n                                      }{}%\n                                      \\ifx\\keyvalue\\pgfkeysnovalue%\n                                        \\pgfkeys{/tikzuml/assocclass/.cd, style/.append style/.expand once={\\keyname}}%\n                                      \\else%\n                                        \\pgfkeys{/tikzuml/assocclass/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                      \\fi%\n                                      %\\errmessage{TIKZUML ERROR : in umlassocclass, invalid option \\keyname}%\n                                    }%\n  }%\n  %\n  \\pgfkeys{/tikzuml/assocclass/.cd,#1}%\n  \\pgfkeys{/tikzuml/assocclass/.cd, x/.get=\\tikzumlAssocClassX, y/.get=\\tikzumlAssocClassY,%\n                                    width/.get=\\tikzumlAssocClassMinimumWidth, type/.get=\\tikzumlAssocClassTypeTmp,%\n                                    template/.get=\\tikzumlAssocClassTemplateParam,%\n                                    name/.get=\\tikzumlAssocClassName, geometry/.get=\\tikzumlAssocClassGeometry,%\n                                    weight/.get=\\tikzumlAssocClassWeight, arm/.get=\\tikzumlAssocClassArm,%\n                                    anchor1/.get=\\tikzumlAssocClassSrcAnchor,%\n                                    anchor2/.get=\\tikzumlAssocClassDestAnchor,%\n                                    draw/.get=\\tikzumlAssocClassDrawColor, fill/.get=\\tikzumlAssocClassFillColor,%\n                                    text/.get=\\tikzumlAssocClassTextColor, fill template/.get=\\tikzumlAssocClassTemplateFillColor%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlAssocClassTypeTmp}{class}\\OR\\equal{\\tikzumlAssocClassTypeTmp}{abstract}}{%\n    \\def\\tikzumlAssocClassType{}%\n  }{%\n    \\def\\tikzumlAssocClassType{$\\ll$\\tikzumlAssocClassTypeTmp$\\gg$ \\\\}%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlAssocClassTemplateParam}{}}{%\n    \\def\\tikzumlAssocClassVPadding{}%\n    \\def\\tikzumlAssocClassHPadding{}%\n  }{%\n    \\def\\tikzumlAssocClassVPadding{\\vspace{0.1em} \\\\}%\n    \\def\\tikzumlAssocClassHPadding{\\hspace{0.5ex} $ $}%\n  }%\n  %\n  \\def\\tikzumlAssocClassName{#2}%\n  \\def\\tikzumlAssocClassRelationName{#3}%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlAssocClassNodeName{\\tikzumlAssocClassName}}\\x%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlAssocClassRelationNodeName{\\tikzumlAssocClassRelationName}}\\x%\n  %\n  \\ifthenelse{\\equal{\\tikzumlAssocClassName}{tikzumlEmpty}}{}{%\n    \\def\\tikzumlAssocClassNodeName{\\tikzumlAssocClassName}%\n  }%\n  %\n  \\StrSubstitute{\\tikzumlAssocClassNodeName}{:}{@COLON@}[\\tikzumlAssocClassNodeName]%\n  \\StrSubstitute{\\tikzumlAssocClassNodeName}{\\_}{@UNDERSCORE@}[\\tikzumlAssocClassNodeName]%\n  %\n  \\ifthenelse{\\equal{\\tikzumlAssocClassTypeTmp}{abstract}}{%\n    \\let\\tikzumlAssocClassNameOld\\tikzumlAssocClassName%\n    \\def\\tikzumlAssocClassName{{\\it \\tikzumlAssocClassNameOld}}%\n  }{}%\n  %\n  \\def\\tikzumlAssocClassPos{\\tikzumlAssocClassX,\\tikzumlAssocClassY}%\n  \\def\\tikzumlAssocClassAttributes{#4}%\n  \\def\\tikzumlAssocClassOperations{#5}%\n  %\n  % def anchors macros\n  \\ifthenelse{\\equal{\\tikzumlAssocClassSrcAnchor}{tikzumlEmpty}}{%\n    \\def\\tikzumlAssocClassSrcAnchor{}%\n  }{%\n    \\let\\tikzumlAssocClassSrcAnchorold\\tikzumlAssocClassSrcAnchor%\n    \\def\\tikzumlAssocClassSrcAnchor{.\\tikzumlAssocClassSrcAnchorold}%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlAssocClassDestAnchor}{tikzumlEmpty}}{%\n    \\def\\tikzumlAssocClassDestAnchor{}%\n  }{%\n    \\let\\tikzumlAssocClassDestAnchorold\\tikzumlAssocClassDestAnchor%\n    \\def\\tikzumlAssocClassDestAnchor{.\\tikzumlAssocClassDestAnchorold}%\n  }%\n  %\n  \\iftikzumlassocclassWithoutCoords%\n    \\node[tikzuml class style, draw=\\tikzumlAssocClassDrawColor, fill=\\tikzumlAssocClassFillColor, text=\\tikzumlAssocClassTextColor, font=\\tikzumlDefaultFont, minimum width=\\tikzumlAssocClassMinimumWidth, /tikzuml/assocclass/style] (\\tikzumlAssocClassNodeName) {\\begin{tabular}{c}\\tikzumlAssocClassVPadding \\tikzumlAssocClassType \\tikzumlAssocClassHPadding \\textbf{\\tikzumlAssocClassName} \\tikzumlAssocClassHPadding \\end{tabular}%\n    \\nodepart{second}%\n    \\begin{tabular}{l}%\n    \\tikzumlAssocClassAttributes%\n    \\end{tabular}%\n    \\nodepart{third}%\n    \\begin{tabular}{l}%\n    \\tikzumlAssocClassOperations%\n    \\end{tabular}%\n    };%\n  \\else%\n    \\node[tikzuml class style, draw=\\tikzumlAssocClassDrawColor, fill=\\tikzumlAssocClassFillColor, text=\\tikzumlAssocClassTextColor, font=\\tikzumlDefaultFont, minimum width=\\tikzumlAssocClassMinimumWidth, /tikzuml/assocclass/style] (\\tikzumlAssocClassNodeName) at (\\tikzumlAssocClassPos) {\\begin{tabular}{c}\\tikzumlAssocClassVPadding \\tikzumlAssocClassType \\tikzumlAssocClassHPadding \\textbf{\\tikzumlAssocClassName} \\tikzumlAssocClassHPadding \\end{tabular}%\n    \\nodepart{second}%\n    \\begin{tabular}{l}%\n    \\tikzumlAssocClassAttributes%\n    \\end{tabular}%\n    \\nodepart{third}%\n    \\begin{tabular}{l}%\n    \\tikzumlAssocClassOperations%\n    \\end{tabular}%\n    };%\n  \\fi%\n  %\n  \\ifthenelse{\\equal{\\tikzumlAssocClassTemplateParam}{}}{}{%\n    \\draw (\\tikzumlAssocClassNodeName.north east) node[tikzuml template style, name=\\tikzumlAssocClassNodeName-template, draw=\\tikzumlAssocClassDrawColor, fill=\\tikzumlAssocClassTemplateFillColor, text=\\tikzumlAssocClassTextColor, font=\\tikzumlDefaultFont] {\\tikzumlAssocClassTemplateParam};%\n  }%\n  %\n  \\pgfmathsetmacro{\\tikzumlAssocClassWeightT}{1.0-\\tikzumlAssocClassWeight}\n  \\node (\\tikzumlAssocClassNodeName-middle) at (barycentric cs:\\tikzumlAssocClassNodeName=\\tikzumlAssocClassWeight,\\tikzumlAssocClassRelationNodeName=\\tikzumlAssocClassWeightT) {};%\n  %\n  \\ifthenelse{\\equal{\\tikzumlAssocClassGeometry}{--}\\OR\\equal{\\tikzumlAssocClassGeometry}{-|}\\OR\\equal{\\tikzumlAssocClassGeometry}{|-}}{%\n    \\edef\\tikzumlassocclasspath{\\tikzumlAssocClassGeometry}\n  }{%\n    \\ifthenelse{\\equal{\\tikzumlAssocClassGeometry}{-|-}}{%\n      \\ifthenelse{\\equal{\\tikzumlAssocClassArm}{auto}}{%\n        \\edef\\tikzumlassocclasspath{-- (\\tikzumlAssocClassNodeName\\tikzumlAssocClassSrcAnchor -| \\tikzumlAssocClassNodeName-middle.center) -- (\\tikzumlAssocClassNodeName-middle.center) -- (\\tikzumlAssocClassNodeName-middle.center |- \\tikzumlAssocClassRelationNodeName\\tikzumlAssocClassDestAnchor) --}%\n      }{%\n        \\draw (\\tikzumlAssocClassNodeName\\tikzumlAssocClassSrcAnchor)+(\\tikzumlAssocClassArm,0) node[name=\\tikzumlAssocClassNodeName-tmp] {};\n        \\edef\\tikzumlnotepath{-- (\\tikzumlAssocClassNodeName-tmp.center) |-}%\n      }%\n    }{%\n      \\ifthenelse{\\equal{\\tikzumlAssocClassGeometry}{|-|}}{%\n        \\ifthenelse{\\equal{\\tikzumlAssocClassArm}{auto}}{%\n        \\edef\\tikzumlassocclasspath{-- (\\tikzumlAssocClassNodeName\\tikzumlAssocClassSrcAnchor |- \\tikzumlAssocClassNodeName-middle.center) -- (\\tikzumlAssocClassNodeName-middle.center) -- (\\tikzumlAssocClassNodeName-middle.center -| \\tikzumlAssocClassRelationNodeName\\tikzumlAssocClassDestAnchor) --}%\n      }{%\n        \\draw (\\tikzumlAssocClassNodeName\\tikzumlAssocClassSrcAnchor)+(0,\\tikzumlAssocClassArm) node[name=\\tikzumlAssocClassNodeName-tmp] {};\n        \\edef\\tikzumlassocclasspath{-- (\\thetikzumlAssocClassNodeName-tmp.center) -|}%\n      }%\n      \n      }{%\n        \\errmessage{TIKZUML ERROR : Unknown geometry value !!! It should be in the following list : --, |-, -|, |-|, -|-}%\n      }%\n    }%\n  }%\n  %\n  \\begin{pgfonlayer}{connections}%\n  \\draw[dashed] (\\tikzumlAssocClassNodeName\\tikzumlAssocClassSrcAnchor) \\tikzumlassocclasspath (\\tikzumlAssocClassRelationNodeName\\tikzumlAssocClassDestAnchor);%\n  \\end{pgfonlayer}%\n  %\n  % add to fit\n  \\ifnum\\c@tikzumlPackageLevel>0%\n    \\edef\\tikzumlPackageFitOld{\\csname tikzumlPackageFit\\tikzumlPackage@parent @@\\tikzumlPackage@fitname\\endcsname}%\n    \\ifthenelse{\\equal{\\tikzumlAssocClassTemplateParam}{}}{%\n      \\expandafter\\xdef\\csname tikzumlPackageFit\\tikzumlPackage@parent @@\\tikzumlPackage@fitname\\endcsname{\\tikzumlPackageFitOld (\\tikzumlAssocClassNodeName)(\\tikzumlAssocClassNodeName-middle)}%\n    }{%\n      \\expandafter\\xdef\\csname tikzumlPackageFit\\tikzumlPackage@parent @@\\tikzumlPackage@fitname\\endcsname{\\tikzumlPackageFitOld (\\tikzumlAssocClassNodeName) (\\tikzumlAssocClassNodeName-template)(\\tikzumlAssocClassNodeName-middle)}%\n    }%\n    \\stepcounter{tikzumlPackageClassNum}%\n  \\fi%\n}%\n%\n%\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%                     use case diagrams                   %\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%\n\\tikzstyle{tikzuml usecase style}=[ellipse, text centered]%\n\\tikzstyle{tikzuml actor style}=[ellipse, inner sep=0, outer sep=0]%\n%\n\\newcounter{tikzumlSystemUseCaseNum}%\n\\newcounter{tikzumlSystemLevel}%\n\\newcounter{tikzumlUseCaseNum}%\n\\newcounter{tikzumlActorNum}%\n%\n\\newif\\iftikzumlusecaseWithoutCoords%\n\\newif\\iftikzumlactorWithoutCoords%\n%\n% define a system\n% arg : name\n% optional : x, y: coordinates of the system\n%            draw, fill, text: colors\n\\newenvironment{umlsystem}[2][]{%\n  \\gdef\\tikzumlSystemFit{}%\n  \\def\\tikzumlSystemName{#2}%\n  \\setcounter{tikzumlSystemUseCaseNum}{0}%\n  %\n  \\pgfkeys{/tikzuml/system/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX,%\n                                draw/.initial=\\tikzumlDefaultDrawColor, fill/.initial=\\tikzumlSystemDefaultFillColor,%\n                                text/.initial=\\tikzumlDefaultTextColor,%\n                                .unknown/.code={%\n                                  \\let\\keyname=\\pgfkeyscurrentname%\n                                  \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                  \\errmessage{TIKZUML ERROR : in umlsystem, invalid option \\keyname}%\n                                }%\n  }%\n  %\n  \\pgfkeys{/tikzuml/system/.cd, #1}%\n  \\pgfkeys{/tikzuml/system/.cd, x/.get=\\tikzumlSystemXShift, y/.get=\\tikzumlSystemYShift,%\n                                draw/.get=\\tikzumlSystemDrawColor, fill/.get=\\tikzumlSystemFillColor,%\n                                text/.get=\\tikzumlSystemTextColor}%\n  %\n  \\stepcounter{tikzumlSystemLevel}%\n  %\n  \\begin{scope}[xshift=\\tikzumlSystemXShift cm, yshift=\\tikzumlSystemYShift cm]%\n}{%\n  \\addtocounter{tikzumlSystemLevel}{-1}%\n  % if contains no usecase, one define a fictive node to enable the fit option\n  \\ifnum\\c@tikzumlSystemUseCaseNum=0%\n    \\node[inner xsep=10ex, inner ysep=1em] (\\tikzumlSystemName-root) at (0,0) {};%\n    \\xdef\\tikzumlSystemFit{(\\tikzumlSystemName-root)}%\n  \\fi%\n  %\n  \\begin{pgfonlayer}{background}%\n  \\node[inner ysep=1em, inner xsep=2ex, fit = \\tikzumlSystemFit] (\\tikzumlSystemName-tmp) {};%\n  \\node[text=\\tikzumlSystemTextColor, font=\\tikzumlDefaultFont] (\\tikzumlSystemName-caption-tmp) at (\\tikzumlSystemName-tmp.north) {\\tikzumlSystemName};%\n  \\node[draw=\\tikzumlSystemDrawColor, fill=\\tikzumlSystemFillColor, text=\\tikzumlSystemTextColor, font=\\tikzumlDefaultFont, inner ysep=1em, inner xsep=2ex, fit = (\\tikzumlSystemName-tmp) (\\tikzumlSystemName-caption-tmp)] (\\tikzumlSystemName) {};%\n  \\node[text=\\tikzumlSystemTextColor, font=\\tikzumlDefaultFont] (\\tikzumlSystemName-caption) at (\\tikzumlSystemName-caption-tmp.north) {\\tikzumlSystemName};%\n  \\end{pgfonlayer}%\n  \\end{scope}%\n  %\n}%\n%\n% define a use case\n% arg : label of the use case\n% optional : x, y: coordinates of the use case\n%            name: name of the node\n%            width: node width\n%            draw, fill, text: colors\n%            style: to manage every default TikZ option\n%            no coords: to tell that the use case position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newcommand{\\umlusecase}[2][]{%\n  \\stepcounter{tikzumlUseCaseNum}%\n  \\pgfkeys{/tikzuml/usecase/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, width/.initial=auto,%\n                                 name/.initial=usecase-\\thetikzumlUseCaseNum,%\n                                 draw/.initial=\\tikzumlDefaultDrawColor, fill/.initial=\\tikzumlUseCaseDefaultFillColor,%\n                                 text/.initial=\\tikzumlDefaultTextColor, style/.style={},%\n                                 no coords/.is if=tikzumlusecaseWithoutCoords,%\n                                 no coords=false,%\n                                 .unknown/.code={%\n                                   \\let\\keyname=\\pgfkeyscurrentname%\n                                   \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                   \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                               \\equal{\\keyname}{left}\\OR%\n                                               \\equal{\\keyname}{below}\\OR%\n                                               \\equal{\\keyname}{right}\\OR%\n                                               \\equal{\\keyname}{above left}\\OR%\n                                               \\equal{\\keyname}{above right}\\OR%\n                                               \\equal{\\keyname}{below left}\\OR%\n                                               \\equal{\\keyname}{below right}}{%\n                                     \\IfSubStr{\\keyvalue}{ of }{%\n                                       \\pgfkeys{/tikzuml/usecase/.cd, no coords}%\n                                     }{}%\n                                   }{}%\n                                   \\ifx\\keyvalue\\pgfkeysnovalue%\n                                     \\pgfkeys{/tikzuml/usecase/.cd, style/.append style/.expand once={\\keyname}}%\n                                   \\else%\n                                     \\pgfkeys{/tikzuml/usecase/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                   \\fi%\n                                   %\\errmessage{TIKZUML ERROR : in umlusecase, invalid option \\keyname}%\n                                 }%\n  }%\n  \\pgfkeys{/tikzuml/usecase/.cd, #1}%\n  \\pgfkeys{/tikzuml/usecase/.cd, x/.get=\\tikzumlUseCaseX, y/.get=\\tikzumlUseCaseY, width/.get=\\tikzumlUseCaseTextWidth,%\n                                 name/.get=\\tikzumlUseCaseName,%\n                                 draw/.get=\\tikzumlUseCaseDrawColor, fill/.get=\\tikzumlUseCaseFillColor,%\n                                 text/.get=\\tikzumlUseCaseTextColor%\n  }%\n  %\n  \\def\\tikzumlUseCaseText{#2}%\n  %\n  \\def\\tikzumlUseCasePos{\\tikzumlUseCaseX,\\tikzumlUseCaseY}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlUseCaseTextWidth}{auto}}{%\n    \\iftikzumlusecaseWithoutCoords%\n      \\node[tikzuml usecase style, draw=\\tikzumlUseCaseDrawColor, fill=\\tikzumlUseCaseFillColor, text=\\tikzumlUseCaseTextColor, font=\\tikzumlDefaultFont, /tikzuml/usecase/style] (\\tikzumlUseCaseName) {\\tikzumlUseCaseText};%\n    \\else%\n      \\node[tikzuml usecase style, draw=\\tikzumlUseCaseDrawColor, fill=\\tikzumlUseCaseFillColor, text=\\tikzumlUseCaseTextColor, font=\\tikzumlDefaultFont, /tikzuml/usecase/style] (\\tikzumlUseCaseName) at (\\tikzumlUseCasePos) {\\tikzumlUseCaseText};%\n    \\fi%\n  }{%\n    \\iftikzumlusecaseWithoutCoords%\n      \\node[tikzuml usecase style, draw=\\tikzumlUseCaseDrawColor, fill=\\tikzumlUseCaseFillColor, text=\\tikzumlUseCaseTextColor, font=\\tikzumlDefaultFont, text width=\\tikzumlUseCaseTextWidth, /tikzuml/usecase/style] (\\tikzumlUseCaseName) {\\tikzumlUseCaseText};%\n    \\else%\n      \\node[tikzuml usecase style, draw=\\tikzumlUseCaseDrawColor, fill=\\tikzumlUseCaseFillColor, text=\\tikzumlUseCaseTextColor, font=\\tikzumlDefaultFont, text width=\\tikzumlUseCaseTextWidth, /tikzuml/usecase/style] (\\tikzumlUseCaseName) at (\\tikzumlUseCasePos) {\\tikzumlUseCaseText};%\n    \\fi%\n  }%\n  %\n  % add to fit\n  \\ifnum\\c@tikzumlSystemLevel>0%\n    \\let\\tikzumlSystemFitOld\\tikzumlSystemFit%\n    \\xdef\\tikzumlSystemFit{\\tikzumlSystemFitOld (\\tikzumlUseCaseName)}%\n    \\stepcounter{tikzumlSystemUseCaseNum}%\n  \\fi%\n}%\n%\n% define the actor symbol\n% optional : global tikzpicture styles\n\\newcommand{\\picturedactor}[1]{%\n  \\pgfkeys{/tikzuml/picactor/.cd, scale/.initial=1, .unknown/.code={}}%\n  \\pgfkeys{/tikzuml/picactor/.cd,#1}%\n  \\pgfkeys{/tikzuml/picactor/.cd, scale/.get=\\tikzumlPicturedActorScale}%\n  %\n  \\begin{tikzpicture}[#1]%\n  \\coordinate (head) at (0,4ex);%\n  \\coordinate (left-hand) at (-2ex,2ex);%\n  \\coordinate (right-hand) at (2ex,2ex);%\n  \\coordinate (left-foot) at (-2ex,-2ex);%\n  \\coordinate (right-foot) at (2ex,-2ex);%\n  \\coordinate (empty) at (0,-3ex);%\n  \\draw (empty) (0,0) -- (head);%\n  \\draw (left-hand) -- (right-hand);%\n  \\draw (0,0) -- (left-foot) (0,0) -- (right-foot);%\n  \\node[fill, draw, circle, inner sep=\\tikzumlPicturedActorScale*0.3333ex, minimum size=\\tikzumlPicturedActorScale*2ex, anchor=base] at (head) {};%\n  \\end{tikzpicture}%\n}%\n%\n% define an actor\n% arg : var name\n% optional : x, y: coordinates of the actor\n%            scale: scale factor of the actor symbol\n%            below: distance between the actor symbol and its name below\n%            draw, text: colors\n%            style: to manage every default TikZ option\n%            no coords: to tell that the actor position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newcommand{\\umlactor}[2][]{%\n  \\stepcounter{tikzumlActorNum}%\n  \\pgfkeys{/tikzuml/actor/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, scale/.initial=1, below/.initial=\\tikzumlActorDefaultBelow,%\n                               draw/.initial=\\tikzumlDefaultDrawColor, text/.initial=\\tikzumlDefaultTextColor,%\n                               style/.style={},%\n                               no coords/.is if=tikzumlactorWithoutCoords,%\n                               no coords=false,%\n                               .unknown/.code={%\n                                 \\let\\keyname=\\pgfkeyscurrentname%\n                                 \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                 \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                             \\equal{\\keyname}{left}\\OR%\n                                             \\equal{\\keyname}{below}\\OR%\n                                             \\equal{\\keyname}{right}\\OR%\n                                             \\equal{\\keyname}{above left}\\OR%\n                                             \\equal{\\keyname}{above right}\\OR%\n                                             \\equal{\\keyname}{below left}\\OR%\n                                             \\equal{\\keyname}{below right}}{%\n                                   \\IfSubStr{\\keyvalue}{ of }{%\n                                     \\pgfkeys{/tikzuml/actor/.cd, no coords}%\n                                   }{}%\n                                 }{}%\n                                 \\ifx\\keyvalue\\pgfkeysnovalue%\n                                   \\pgfkeys{/tikzuml/actor/.cd, style/.append style/.expand once={\\keyname}}%\n                                 \\else%\n                                   \\pgfkeys{/tikzuml/actor/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                 \\fi%\n                                 %\\errmessage{TIKZUML ERROR : in umlactor, invalid option \\keyname}%\n                               }%\n  }%\n  \\pgfkeys{/tikzuml/actor/.cd, #1}%\n  \\pgfkeys{/tikzuml/actor/.cd,%\n           x/.get=\\tikzumlActorX, y/.get=\\tikzumlActorY, scale/.get=\\tikzumlActorScale,%\n           below/.get=\\tikzumlActorBelow,%\n           draw/.get=\\tikzumlActorDrawColor, text/.get=\\tikzumlActorTextColor}%\n  %\n  \\def\\tikzumlActorName{#2}%\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlActorNodeName{\\tikzumlActorName}}\\x%\n  %\n  \\def\\tikzumlActorPos{\\tikzumlActorX,\\tikzumlActorY}%\n  %\n  \\iftikzumlactorWithoutCoords%\n    \\node[tikzuml actor style, text=\\tikzumlActorTextColor, font=\\tikzumlDefaultFont, /tikzuml/actor/style] (\\tikzumlActorNodeName) {\\picturedactor{scale=\\tikzumlActorScale, fill=white, draw=\\tikzumlActorDrawColor, thick}};%\n  \\else%\n    \\node[tikzuml actor style, text=\\tikzumlActorTextColor, font=\\tikzumlDefaultFont, /tikzuml/actor/style] (\\tikzumlActorNodeName) at (\\tikzumlActorPos) {\\picturedactor{scale=\\tikzumlActorScale, fill=white, draw=\\tikzumlActorDrawColor, thick}};%\n  \\fi%\n  \\node[text=\\tikzumlActorTextColor, font=\\tikzumlDefaultFont, below=\\tikzumlActorScale*\\tikzumlActorBelow] at (\\tikzumlActorNodeName) {\\tikzumlActorName};%\n  %\n}%\n\n% shortcuts for include and extend relation\n\\newcommand{\\umlinclude}[3][]{%\n  \\pgfkeys{/tikzuml/includerelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlinclude, forbidden option stereo}%\n             }{%\n               \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n                 \\errmessage{TIKZUML ERROR : in umlinclude, forbidden option geometry}%\n               }{}%\n             }%\n           }}%\n  \\pgfkeys{/tikzuml/includerelation/.cd, #1}%\n  \\umlrelation[stereo=include, style={tikzuml dependency style}, #1]{#2}{#3}%\n}%\n\\newcommand{\\umlextend}[3][]{%\n  \\pgfkeys{/tikzuml/extendrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlextend, forbidden option stereo}%\n             }{%\n               \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n                 \\errmessage{TIKZUML ERROR : in umlextend, forbidden option geometry}%\n               }{}%\n             }%\n           }}%\n  \\pgfkeys{/tikzuml/extendrelation/.cd, #1}%\n  \\umlrelation[stereo=extend, style={tikzuml dependency style}, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlHVinclude}[3][]{%\n  \\pgfkeys{/tikzuml/includerelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlHVinclude, forbidden option stereo}%\n             }{%\n               \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n                 \\errmessage{TIKZUML ERROR : in umlHVinclude, forbidden option geometry}%\n               }{}%\n             }%\n           }}%\n  \\pgfkeys{/tikzuml/includerelation/.cd, #1}%\n  \\umlrelation[geometry=-|, stereo=include, style={tikzuml dependency style}, #1]{#2}{#3}%\n}%\n\\newcommand{\\umlHVextend}[3][]{%\n  \\pgfkeys{/tikzuml/extendrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlHVextend, forbidden option stereo}%\n             }{%\n               \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n                 \\errmessage{TIKZUML ERROR : in umlHVextend, forbidden option geometry}%\n               }{}%\n             }%\n           }}%\n  \\pgfkeys{/tikzuml/extendrelation/.cd, #1}%\n  \\umlrelation[geometry=-|, stereo=extend, style={tikzuml dependency style}, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlVHinclude}[3][]{%\n  \\pgfkeys{/tikzuml/includerelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlVHinclude, forbidden option stereo}%\n             }{%\n               \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n                 \\errmessage{TIKZUML ERROR : in umlVHinclude, forbidden option geometry}%\n               }{}%\n             }%\n           }}%\n  \\pgfkeys{/tikzuml/includerelation/.cd, #1}%\n  \\umlrelation[geometry=|-, stereo=include, style={tikzuml dependency style}, #1]{#2}{#3}%\n}%\n\\newcommand{\\umlVHextend}[3][]{%\n  \\pgfkeys{/tikzuml/extendrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR :in umlVHextend,  forbidden option stereo}%\n             }{%\n               \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n                 \\errmessage{TIKZUML ERROR : in umlVHextend, forbidden option geometry}%\n               }{}%\n             }%\n           }}%\n  \\pgfkeys{/tikzuml/extendrelation/.cd, #1}%\n  \\umlrelation[geometry=|-, stereo=extend, style={tikzuml dependency style}, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlHVHinclude}[3][]{%\n  \\pgfkeys{/tikzuml/includerelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlHVHinclude, forbidden option stereo}%\n             }{%\n               \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n                 \\errmessage{TIKZUML ERROR : in umlHVHinclude, forbidden option geometry}%\n               }{}%\n             }%\n           }}%\n  \\pgfkeys{/tikzuml/includerelation/.cd, #1}%\n  \\umlrelation[geometry=-|-, stereo=include, style={tikzuml dependency style}, #1]{#2}{#3}%\n}%\n\\newcommand{\\umlHVHextend}[3][]{%\n  \\pgfkeys{/tikzuml/extendrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlHVHextend, forbidden option stereo}%\n             }{%\n               \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n                 \\errmessage{TIKZUML ERROR : in umlHVHextend, forbidden option geometry}%\n               }{}%\n             }%\n           }}%\n  \\pgfkeys{/tikzuml/extendrelation/.cd, #1}%\n  \\umlrelation[geometry=-|-, stereo=extend, style={tikzuml dependency style}, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlVHVinclude}[3][]{%\n  \\pgfkeys{/tikzuml/includerelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlVHVinclude, forbidden option stereo}%\n             }{%\n               \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n                 \\errmessage{TIKZUML ERROR : in umlVHVinclude, forbidden option geometry}%\n               }{}%\n             }%\n           }}%\n  \\pgfkeys{/tikzuml/includerelation/.cd, #1}%\n  \\umlrelation[geometry=|-|, stereo=include, style={tikzuml dependency style}, #1]{#2}{#3}%\n}%\n\\newcommand{\\umlVHVextend}[3][]{%\n  \\pgfkeys{/tikzuml/extendrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlVHVextend, forbidden option stereo}%\n             }{%\n               \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n                 \\errmessage{TIKZUML ERROR : in umlVHVextend, forbidden option geometry}%\n               }{}%\n             }%\n           }}%\n  \\pgfkeys{/tikzuml/extendrelation/.cd, #1}%\n  \\umlrelation[geometry=|-|, stereo=extend, style={tikzuml dependency style}, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlCNinclude}[4][]{%\n  \\pgfkeys{/tikzuml/includerelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlCNinclude, forbidden option stereo}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/includerelation/.cd, #1}%\n  \\umlCNrelation[stereo=include, style={tikzuml dependency style}, #1]{#2}{#3}{#4}%\n}%\n\\newcommand{\\umlCNextend}[4][]{%\n  \\pgfkeys{/tikzuml/extendrelation/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlCNextend, forbidden option stereo}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/extendrelation/.cd, #1}%\n  \\umlCNrelation[stereo=extend, style={tikzuml dependency style}, #1]{#2}{#3}{#4}%\n}%\n%\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%                      state diagrams                     %\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%\n\\tikzstyle{tikzuml state style}=[rectangle split, rectangle split parts=2, rounded corners, inner xsep=1.5ex]%\n\\tikzstyle{tikzuml transition style}=[color=\\tikzumlDefaultDrawColor, rounded corners, -angle 45]%\n%\n\\newcounter{tikzumlStateJoinNum}%\n\\newcounter{tikzumlStateDecisionNum}%\n\\newcounter{tikzumlStateInitialNum}%\n\\newcounter{tikzumlStateFinalNum}%\n\\newcounter{tikzumlStateEnterNum}%\n\\newcounter{tikzumlStateExitNum}%\n\\newcounter{tikzumlStateEndNum}%\n\\newcounter{tikzumlStateHistoryNum}%\n\\newcounter{tikzumlStateDeepHistoryNum}%\n\\newcounter{tikzumlStateLevel}%\n\\newcounter{tikzumlStateSubStateNum}%\n\\newcounter{tikzumlStateText}%\n%\n\\newif\\iftikzumlstatejoinWithoutCoords%\n\\newif\\iftikzumlstatedecisionWithoutCoords%\n\\newif\\iftikzumlstateinitialWithoutCoords%\n\\newif\\iftikzumlstatefinalWithoutCoords%\n\\newif\\iftikzumlstateenterWithoutCoords%\n\\newif\\iftikzumlstateexitWithoutCoords%\n\\newif\\iftikzumlstateendWithoutCoords%\n\\newif\\iftikzumlstatehistoryWithoutCoords%\n\\newif\\iftikzumlstatedeephistoryWithoutCoords%\n\\newif\\iftikzumlstateWithoutCoords%\n%\n% define a uml join state\n% args : name of the state\n% optional : x,y: coordinates of the state\n%            width: width of the state node\n%            name: name of the state node\n%            color: color of the join symbol\n%            style: to manage every default TikZ option\n%            no coords: to tell that the state position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newcommand{\\umlstatejoin}[1][]{%\n  \\pgfkeys{/tikzuml/statejoin/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, width/.initial=\\tikzumlStateJoinDefaultWidth,%\n                                   name/.initial=statejoin-\\thetikzumlStateJoinNum,%\n                                   color/.initial=\\tikzumlDefaultDrawColor, style/.style={},%\n                                   no coords/.is if=tikzumlstatejoinWithoutCoords,%\n                                   no coords=false,%\n                                   .unknown/.code={%\n                                     \\let\\keyname=\\pgfkeyscurrentname%\n                                     \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                     \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                                 \\equal{\\keyname}{left}\\OR%\n                                                 \\equal{\\keyname}{below}\\OR%\n                                                 \\equal{\\keyname}{right}\\OR%\n                                                 \\equal{\\keyname}{above left}\\OR%\n                                                 \\equal{\\keyname}{above right}\\OR%\n                                                 \\equal{\\keyname}{below left}\\OR%\n                                                 \\equal{\\keyname}{below right}}{%\n                                       \\IfSubStr{\\keyvalue}{ of }{%\n                                         \\pgfkeys{/tikzuml/statejoin/.cd, no coords}%\n                                       }{}%\n                                     }{}%\n                                     \\ifx\\keyvalue\\pgfkeysnovalue%\n                                       \\pgfkeys{/tikzuml/statejoin/.cd, style/.append style/.expand once={\\keyname}}%\n                                     \\else%\n                                       \\pgfkeys{/tikzuml/statejoin/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                     \\fi%\n                                     %\\errmessage{TIKZUML ERROR : in umlstatejoin, invalid option \\keyname}%\n                                   }%\n  }%\n  \\pgfkeys{/tikzuml/statejoin/.cd, #1}%\n  \\pgfkeys{/tikzuml/statejoin/.cd, x/.get=\\tikzumlStateJoinX, y/.get=\\tikzumlStateJoinY, width/.get=\\tikzumlStateJoinMinimumWidth,%\n                                   name/.get=\\tikzumlStateJoinName, color/.get=\\tikzumlStateJoinColor%\n  }%\n  %\n  \\def\\tikzumlStateJoinPos{\\tikzumlStateJoinX,\\tikzumlStateJoinY}%\n  %\n  \\iftikzumlstatejoinWithoutCoords%\n    \\node[circle, minimum size=\\tikzumlStateJoinMinimumWidth, draw=\\tikzumlStateJoinColor, fill=\\tikzumlStateJoinColor, /tikzuml/statejoin/style] (\\tikzumlStateJoinName) {};%\n  \\else%\n    \\node[circle, minimum size=\\tikzumlStateJoinMinimumWidth, draw=\\tikzumlStateJoinColor, fill=\\tikzumlStateJoinColor, /tikzuml/statejoin/style] (\\tikzumlStateJoinName) at (\\tikzumlStateJoinPos) {};%\n  \\fi%\n  %\n  % add to fit\n  \\ifnum\\c@tikzumlStateLevel>0%\n    \\edef\\tikzumlStateFitOld{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitOld (\\tikzumlStateJoinName)}%\n    \\stepcounter{tikzumlStateSubStateNum}%\n  \\fi%\n  \\stepcounter{tikzumlStateJoinNum}%\n}%\n%\n% define a uml decision state\n% args : name of the state\n% optional : x,y: coordinates of the state\n%            width: width of the state node\n%            name: name of the state node\n%            color: color of the join symbol\n%            style: to manage every default TikZ option\n%            no coords: to tell that the state position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newcommand{\\umlstatedecision}[1][]{%\n  \\pgfkeys{/tikzuml/statedecision/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, width/.initial=\\tikzumlStateDecisionDefaultWidth,%\n                                       name/.initial=statedecision-\\thetikzumlStateDecisionNum,%\n                                       color/.initial=\\tikzumlDefaultDrawColor, style/.style={},%\n                                       no coords/.is if=tikzumlstatedecisionWithoutCoords,%\n                                       no coords=false,%\n                                       .unknown/.code={%\n                                         \\let\\keyname=\\pgfkeyscurrentname%\n                                         \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                         \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                                     \\equal{\\keyname}{left}\\OR%\n                                                     \\equal{\\keyname}{below}\\OR%\n                                                     \\equal{\\keyname}{right}\\OR%\n                                                     \\equal{\\keyname}{above left}\\OR%\n                                                     \\equal{\\keyname}{above right}\\OR%\n                                                     \\equal{\\keyname}{below left}\\OR%\n                                                     \\equal{\\keyname}{below right}}{%\n                                           \\IfSubStr{\\keyvalue}{ of }{%\n                                             \\pgfkeys{/tikzuml/statedecision/.cd, no coords}%\n                                           }{}%\n                                         }{}%\n                                         \\ifx\\keyvalue\\pgfkeysnovalue%\n                                           \\pgfkeys{/tikzuml/statedecision/.cd, style/.append style/.expand once={\\keyname}}%\n                                         \\else%\n                                           \\pgfkeys{/tikzuml/statedecision/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                         \\fi%\n                                         %\\errmessage{TIKZUML ERROR : in umlstatedecision, invalid option \\keyname}%\n                                       }%\n  }%\n  \\pgfkeys{/tikzuml/statedecision/.cd, #1}%\n  \\pgfkeys{/tikzuml/statedecision/.cd, x/.get=\\tikzumlStateDecisionX, y/.get=\\tikzumlStateDecisionY, width/.get=\\tikzumlStateDecisionMinimumWidth,%\n                                       name/.get=\\tikzumlStateDecisionName, color/.get=\\tikzumlStateDecisionColor%\n  }%\n  %  \n  \\def\\tikzumlStateDecisionPos{\\tikzumlStateDecisionX,\\tikzumlStateDecisionY}%\n  %\n  \\iftikzumlstatedecisionWithoutCoords%\n    \\node[rectangle, rotate=45, minimum size=\\tikzumlStateDecisionMinimumWidth, draw=\\tikzumlStateDecisionColor, /tikzuml/statedecision/style] (\\tikzumlStateDecisionName) {};%\n  \\else%\n    \\node[rectangle, rotate=45, minimum size=\\tikzumlStateDecisionMinimumWidth, draw=\\tikzumlStateDecisionColor, /tikzuml/statedecision/style] (\\tikzumlStateDecisionName) at (\\tikzumlStateDecisionPos) {};%\n  \\fi%\n  %\n  % add to fit\n  \\ifnum\\c@tikzumlStateLevel>0%\n    \\edef\\tikzumlStateFitOld{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitOld (\\tikzumlStateDecisionName)}%\n    \\stepcounter{tikzumlStateSubStateNum}%\n  \\fi%\n  \\stepcounter{tikzumlStateDecisionNum}%\n}%\n%\n% define a uml initial state\n% args : name of the state\n% optional : x,y: coordinates of the state\n%            width: width of the state node\n%            name: name of the state node\n%            entry, do, exit: entry/do/exit action of the state\n%            color: color of the join symbol\n%            style: to manage every default TikZ option\n%            no coords: to tell that the state position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newcommand{\\umlstateinitial}[1][]{%\n  \\pgfkeys{/tikzuml/stateinitial/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, width/.initial=\\tikzumlStateInitialDefaultWidth,%\n                                      name/.initial=stateinitial-\\thetikzumlStateInitialNum,%\n                                      color/.initial=\\tikzumlDefaultDrawColor, style/.style={},%\n                                      no coords/.is if=tikzumlstateinitialWithoutCoords,%\n                                      no coords=false,%\n                                      .unknown/.code={%\n                                        \\let\\keyname=\\pgfkeyscurrentname%\n                                        \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                        \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                                    \\equal{\\keyname}{left}\\OR%\n                                                    \\equal{\\keyname}{below}\\OR%\n                                                    \\equal{\\keyname}{right}\\OR%\n                                                    \\equal{\\keyname}{above left}\\OR%\n                                                    \\equal{\\keyname}{above right}\\OR%\n                                                    \\equal{\\keyname}{below left}\\OR%\n                                                    \\equal{\\keyname}{below right}}{%\n                                          \\IfSubStr{\\keyvalue}{ of }{%\n                                            \\pgfkeys{/tikzuml/stateinitial/.cd, no coords}%\n                                          }{}%\n                                        }{}%\n                                        \\ifx\\keyvalue\\pgfkeysnovalue%\n                                          \\pgfkeys{/tikzuml/stateinitial/.cd, style/.append style/.expand once={\\keyname}}%\n                                        \\else%\n                                          \\pgfkeys{/tikzuml/stateinitial/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                        \\fi%\n                                        %\\errmessage{TIKZUML ERROR : in umlstateinitial, invalid option \\keyname}%\n                                      }%\n  }%\n  \\pgfkeys{/tikzuml/stateinitial/.cd, #1}%\n  \\pgfkeys{/tikzuml/stateinitial/.cd, x/.get=\\tikzumlStateInitialX, y/.get=\\tikzumlStateInitialY, width/.get=\\tikzumlStateInitialMinimumWidth,%\n                                      name/.get=\\tikzumlStateInitialName, color/.get=\\tikzumlStateInitialColor%\n  }%\n  %  \n  \\def\\tikzumlStateInitialPos{\\tikzumlStateInitialX,\\tikzumlStateInitialY}%\n  %\n  \\iftikzumlstateinitialWithoutCoords%\n    \\node[circle, minimum size=\\tikzumlStateInitialMinimumWidth, fill=\\tikzumlStateInitialColor, /tikzuml/stateinitial/style] (\\tikzumlStateInitialName) {};%\n  \\else%\n    \\node[circle, minimum size=\\tikzumlStateInitialMinimumWidth, fill=\\tikzumlStateInitialColor, /tikzuml/stateinitial/style] (\\tikzumlStateInitialName) at (\\tikzumlStateInitialPos) {};%\n  \\fi%\n  %\n  % add to fit\n  \\ifnum\\c@tikzumlStateLevel>0%\n    \\edef\\tikzumlStateFitOld{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitOld (\\tikzumlStateInitialName)}%\n    \\stepcounter{tikzumlStateSubStateNum}%\n  \\fi%\n  \\stepcounter{tikzumlStateInitialNum}%\n}%\n%\n% define a uml final state\n% args : name of the state\n% optional : x,y: coordinates of the state\n%            width: width of the state node\n%            name: name of the state node\n%            color: color of the join symbol\n%            style: to manage every default TikZ option\n%            no coords: to tell that the state position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newcommand{\\umlstatefinal}[1][]{%\n  \\pgfkeys{/tikzuml/statefinal/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, width/.initial=\\tikzumlStateFinalDefaultWidth,%\n                                    name/.initial=statefinal-\\thetikzumlStateFinalNum,%\n                                    color/.initial=\\tikzumlDefaultDrawColor, style/.style={},%\n                                    no coords/.is if=tikzumlstatefinalWithoutCoords,%\n                                    no coords=false,%\n                                    .unknown/.code={%\n                                      \\let\\keyname=\\pgfkeyscurrentname%\n                                      \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                      \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                                  \\equal{\\keyname}{left}\\OR%\n                                                  \\equal{\\keyname}{below}\\OR%\n                                                  \\equal{\\keyname}{right}\\OR%\n                                                  \\equal{\\keyname}{above left}\\OR%\n                                                  \\equal{\\keyname}{above right}\\OR%\n                                                  \\equal{\\keyname}{below left}\\OR%\n                                                  \\equal{\\keyname}{below right}}{%\n                                        \\IfSubStr{\\keyvalue}{ of }{%\n                                          \\pgfkeys{/tikzuml/statefinal/.cd, no coords}%\n                                        }{}%\n                                      }{}%\n                                      \\ifx\\keyvalue\\pgfkeysnovalue%\n                                        \\pgfkeys{/tikzuml/statefinal/.cd, style/.append style/.expand once={\\keyname}}%\n                                      \\else%\n                                        \\pgfkeys{/tikzuml/statefinal/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                      \\fi%\n                                      %\\errmessage{TIKZUML ERROR : in umlstatefinal, invalid option \\keyname}%\n                                    }%\n  }%\n  \\pgfkeys{/tikzuml/statefinal/.cd, #1}%\n  \\pgfkeys{/tikzuml/statefinal/.cd, x/.get=\\tikzumlStateFinalX, y/.get=\\tikzumlStateFinalY, width/.get=\\tikzumlStateFinalMinimumWidth,%\n                                       name/.get=\\tikzumlStateFinalName, color/.get=\\tikzumlStateFinalColor%\n  }%\n  %  \n  \\def\\tikzumlStateFinalPos{\\tikzumlStateFinalX,\\tikzumlStateFinalY}%\n  %\n  \\iftikzumlstatefinalWithoutCoords%\n    \\node[circle, minimum size=\\tikzumlStateFinalMinimumWidth, draw=\\tikzumlStateFinalColor, fill=\\tikzumlStateFinalColor, double, double distance=0.1cm, /tikzuml/statefinal/style] (\\tikzumlStateFinalName) {};%\n  \\else%\n    \\node[circle, minimum size=\\tikzumlStateFinalMinimumWidth, draw=\\tikzumlStateFinalColor, fill=\\tikzumlStateFinalColor, double, double distance=0.1cm, /tikzuml/statefinal/style] (\\tikzumlStateFinalName) at (\\tikzumlStateFinalPos) {};%\n  \\fi%\n  %\n  % add to fit\n  \\ifnum\\c@tikzumlStateLevel>0%\n    \\edef\\tikzumlStateFitOld{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitOld (\\tikzumlStateFinalName)}%\n    \\stepcounter{tikzumlStateSubStateNum}%\n  \\fi%\n  \\stepcounter{tikzumlStateFinalNum}%\n}%\n%\n% define a uml enter state\n% args : name of the state\n% optional : x,y: coordinates of the state\n%            width: width of the state node\n%            name: name of the state node\n%            color: color of the join symbol\n%            style: to manage every default TikZ option\n%            no coords: to tell that the state position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newcommand{\\umlstateenter}[1][]{%\n  \\pgfkeys{/tikzuml/stateenter/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, width/.initial=\\tikzumlStateEnterDefaultWidth,%\n                                    name/.initial=stateenter-\\thetikzumlStateEnterNum,%\n                                    color/.initial=\\tikzumlDefaultDrawColor, style/.style={},%\n                                    no coords/.is if=tikzumlstateenterWithoutCoords,%\n                                    no coords=false,%\n                                    .unknown/.code={%\n                                      \\let\\keyname=\\pgfkeyscurrentname%\n                                      \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                      \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                                  \\equal{\\keyname}{left}\\OR%\n                                                  \\equal{\\keyname}{below}\\OR%\n                                                  \\equal{\\keyname}{right}\\OR%\n                                                  \\equal{\\keyname}{above left}\\OR%\n                                                  \\equal{\\keyname}{above right}\\OR%\n                                                  \\equal{\\keyname}{below left}\\OR%\n                                                  \\equal{\\keyname}{below right}}{%\n                                        \\IfSubStr{\\keyvalue}{ of }{%\n                                          \\pgfkeys{/tikzuml/stateenter/.cd, no coords}%\n                                        }{}%\n                                      }{}%\n                                      \\ifx\\keyvalue\\pgfkeysnovalue%\n                                        \\pgfkeys{/tikzuml/stateenter/.cd, style/.append style/.expand once={\\keyname}}%\n                                      \\else%\n                                        \\pgfkeys{/tikzuml/stateenter/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                      \\fi%\n                                      %\\errmessage{TIKZUML ERROR : in umlstateenter, invalid option \\keyname}%\n                                    }%\n  }%\n  \\pgfkeys{/tikzuml/stateenter/.cd, #1}%\n  \\pgfkeys{/tikzuml/stateenter/.cd, x/.get=\\tikzumlStateEnterX, y/.get=\\tikzumlStateEnterY, width/.get=\\tikzumlStateEnterMinimumWidth,%\n                                    name/.get=\\tikzumlStateEnterName, color/.get=\\tikzumlStateEnterColor%\n  }%\n  %  \n  \\def\\tikzumlStateEnterPos{\\tikzumlStateEnterX,\\tikzumlStateEnterY}%\n  %\n  \\iftikzumlstateenterWithoutCoords%\n    \\node[circle, minimum size=\\tikzumlStateEnterMinimumWidth, draw=\\tikzumlStateEnterColor, /tikzuml/stateenter/style] (\\tikzumlStateEnterName) {};%\n  \\else%\n    \\node[circle, minimum size=\\tikzumlStateEnterMinimumWidth, draw=\\tikzumlStateEnterColor, /tikzuml/stateenter/style] (\\tikzumlStateEnterName) at (\\tikzumlStateEnterPos) {};%\n  \\fi%\n  %\n  % add to fit\n  \\ifnum\\c@tikzumlStateLevel>0%\n    \\edef\\tikzumlStateFitOld{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitOld (\\tikzumlStateEnterName)}%\n    \\stepcounter{tikzumlStateSubStateNum}%\n  \\fi%\n  \\stepcounter{tikzumlStateEnterNum}%\n}%\n%\n% define a uml exit state\n% args : name of the state\n% optional : x,y: coordinates of the state\n%            width: width of the state node\n%            name: name of the state node\n%            color: color of the join symbol\n%            style: to manage every default TikZ option\n%            no coords: to tell that the state position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newcommand{\\umlstateexit}[1][]{%\n  \\pgfkeys{/tikzuml/stateexit/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, width/.initial=\\tikzumlStateExitDefaultWidth,%\n                                   name/.initial=stateexit-\\thetikzumlStateExitNum,%\n                                   color/.initial=\\tikzumlDefaultDrawColor, style/.style={},%\n                                   no coords/.is if=tikzumlstateexitWithoutCoords,%\n                                   no coords=false,%\n                                   .unknown/.code={%\n                                     \\let\\keyname=\\pgfkeyscurrentname%\n                                     \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                     \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                                 \\equal{\\keyname}{left}\\OR%\n                                                 \\equal{\\keyname}{below}\\OR%\n                                                 \\equal{\\keyname}{right}\\OR%\n                                                 \\equal{\\keyname}{above left}\\OR%\n                                                 \\equal{\\keyname}{above right}\\OR%\n                                                 \\equal{\\keyname}{below left}\\OR%\n                                                 \\equal{\\keyname}{below right}}{%\n                                       \\IfSubStr{\\keyvalue}{ of }{%\n                                         \\pgfkeys{/tikzuml/stateexit/.cd, no coords}%\n                                       }{}%\n                                     }{}%\n                                     \\ifx\\keyvalue\\pgfkeysnovalue%\n                                       \\pgfkeys{/tikzuml/stateexit/.cd, style/.append style/.expand once={\\keyname}}%\n                                     \\else%\n                                       \\pgfkeys{/tikzuml/stateexit/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                     \\fi%\n                                     %\\errmessage{TIKZUML ERROR : in umlstateexit, invalid option \\keyname}%\n                                   }%\n  }%\n  \\pgfkeys{/tikzuml/stateexit/.cd, #1}%\n  \\pgfkeys{/tikzuml/stateexit/.cd, x/.get=\\tikzumlStateExitX, y/.get=\\tikzumlStateExitY, width/.get=\\tikzumlStateExitMinimumWidth,%\n                                   name/.get=\\tikzumlStateExitName, color/.get=\\tikzumlStateExitColor%\n  }%\n  %  \n  \\def\\tikzumlStateExitPos{\\tikzumlStateExitX,\\tikzumlStateExitY}%\n  %\n  \\iftikzumlstateexitWithoutCoords%\n    \\node[circle, minimum size=\\tikzumlStateExitMinimumWidth, draw=\\tikzumlStateExitColor, /tikzuml/stateexit/style] (\\tikzumlStateExitName) {};%\n  \\else%\n    \\node[circle, minimum size=\\tikzumlStateExitMinimumWidth, draw=\\tikzumlStateExitColor, /tikzuml/stateexit/style] (\\tikzumlStateExitName) at (\\tikzumlStateExitPos) {};%\n  \\fi%\n  \\draw[draw=\\tikzumlStateExitColor] (\\tikzumlStateExitName.north east) -- (\\tikzumlStateExitName.south west) (\\tikzumlStateExitName.north west) -- (\\tikzumlStateExitName.south east);\n  %\n  % add to fit\n  \\ifnum\\c@tikzumlStateLevel>0%\n    \\edef\\tikzumlStateFitOld{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitOld (\\tikzumlStateExitName)}%\n    \\stepcounter{tikzumlStateSubStateNum}%\n  \\fi%\n  \\stepcounter{tikzumlStateExitNum}%\n}%\n%\n% define a uml end state\n% args : name of the state\n% optional : x,y: coordinates of the state\n%            width: width of the state node\n%            name: name of the state node\n%            color: color of the join symbol\n%            style: to manage every default TikZ option\n%            no coords: to tell that the state position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newcommand{\\umlstateend}[1][]{%\n  \\pgfkeys{/tikzuml/stateend/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, width/.initial=\\tikzumlStateEndDefaultWidth,%\n                                  name/.initial=stateend-\\thetikzumlStateEndNum,%\n                                  color/.initial=\\tikzumlDefaultDrawColor, style/.style={},%\n                                  no coords/.is if=tikzumlstateendWithoutCoords,%\n                                  no coords=false,%\n                                  .unknown/.code={%\n                                    \\let\\keyname=\\pgfkeyscurrentname%\n                                    \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                    \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                                \\equal{\\keyname}{left}\\OR%\n                                                \\equal{\\keyname}{below}\\OR%\n                                                \\equal{\\keyname}{right}\\OR%\n                                                \\equal{\\keyname}{above left}\\OR%\n                                                \\equal{\\keyname}{above right}\\OR%\n                                                \\equal{\\keyname}{below left}\\OR%\n                                                \\equal{\\keyname}{below right}}{%\n                                      \\IfSubStr{\\keyvalue}{ of }{%\n                                        \\pgfkeys{/tikzuml/stateend/.cd, no coords}%\n                                      }{}%\n                                    }{}%\n                                    \\ifx\\keyvalue\\pgfkeysnovalue%\n                                      \\pgfkeys{/tikzuml/stateend/.cd, style/.append style/.expand once={\\keyname}}%\n                                    \\else%\n                                      \\pgfkeys{/tikzuml/stateend/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                    \\fi%\n                                    %\\errmessage{TIKZUML ERROR : in umlstateend, invalid option \\keyname}%\n                                  }%\n  }%\n  \\pgfkeys{/tikzuml/stateend/.cd, #1}%\n  \\pgfkeys{/tikzuml/stateend/.cd, x/.get=\\tikzumlStateEndX, y/.get=\\tikzumlStateEndY, width/.get=\\tikzumlStateEndMinimumWidth,%\n                                  name/.get=\\tikzumlStateEndName, color/.get=\\tikzumlStateEndColor%\n  }%\n  %  \n  \\def\\tikzumlStateEndPos{\\tikzumlStateEndX,\\tikzumlStateEndY}%\n  %\n  \\iftikzumlstateendWithoutCoords%\n    \\node[circle, minimum size=\\tikzumlStateEndMinimumWidth, /tikzuml/stateend/style] (\\tikzumlStateEndName) {};%\n  \\else%\n    \\node[circle, minimum size=\\tikzumlStateEndMinimumWidth, /tikzuml/stateend/style] (\\tikzumlStateEndName) at (\\tikzumlStateEndPos) {};%\n  \\fi%\n  \\draw[draw=\\tikzumlStateEndColor] (\\tikzumlStateEndName.north east) -- (\\tikzumlStateEndName.south west) (\\tikzumlStateEndName.north west) -- (\\tikzumlStateEndName.south east);\n  %\n  % add to fit\n  \\ifnum\\c@tikzumlStateLevel>0%\n    \\edef\\tikzumlStateFitOld{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitOld (\\tikzumlStateEndName)}%\n    \\stepcounter{tikzumlStateSubStateNum}%\n  \\fi%\n  \\stepcounter{tikzumlStateEndNum}%\n}%\n%\n\\newcommand{\\picturedhistory}[1]{%\n  \\begin{tikzpicture}[#1]%\n  \\draw[thick] (-0.1cm,-0.15cm) -- (-0.1cm,0.15cm)\n               (-0.1cm,0) -- (0.1cm,0)\n               (0.1cm,-0.15cm) -- (0.1cm,0.15cm);%\n  \\end{tikzpicture}%\n}%\n%\n% define a uml history state\n% args : name of the state\n% optional : x,y: coordinates of the state\n%            width: width of the state node\n%            name: name of the state node\n%            color: color of the join symbol\n%            style: to manage every default TikZ option\n%            no coords: to tell that the state position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newcommand{\\umlstatehistory}[1][]{%\n  \\pgfkeys{/tikzuml/statehistory/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, width/.initial=\\tikzumlStateHistoryDefaultWidth,%\n                                      name/.initial=statehistory-\\thetikzumlStateHistoryNum,%\n                                      color/.initial=\\tikzumlDefaultDrawColor, style/.style={},%\n                                      no coords/.is if=tikzumlstatehistoryWithoutCoords,%\n                                      no coords=false,%\n                                      .unknown/.code={%\n                                        \\let\\keyname=\\pgfkeyscurrentname%\n                                        \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                        \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                                    \\equal{\\keyname}{left}\\OR%\n                                                    \\equal{\\keyname}{below}\\OR%\n                                                    \\equal{\\keyname}{right}\\OR%\n                                                    \\equal{\\keyname}{above left}\\OR%\n                                                    \\equal{\\keyname}{above right}\\OR%\n                                                    \\equal{\\keyname}{below left}\\OR%\n                                                    \\equal{\\keyname}{below right}}{%\n                                          \\IfSubStr{\\keyvalue}{ of }{%\n                                            \\pgfkeys{/tikzuml/statehistory/.cd, no coords}%\n                                          }{}%\n                                        }{}%\n                                        \\ifx\\keyvalue\\pgfkeysnovalue%\n                                          \\pgfkeys{/tikzuml/statehistory/.cd, style/.append style/.expand once={\\keyname}}%\n                                        \\else%\n                                          \\pgfkeys{/tikzuml/statehistory/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                        \\fi%\n                                        %\\errmessage{TIKZUML ERROR : in umlstatehistory, invalid option \\keyname}%\n                                      }%\n  }%\n  \\pgfkeys{/tikzuml/statehistory/.cd, #1}%\n  \\pgfkeys{/tikzuml/statehistory/.cd, x/.get=\\tikzumlStateHistoryX, y/.get=\\tikzumlStateHistoryY, width/.get=\\tikzumlStateHistoryMinimumWidth,%\n                                      name/.get=\\tikzumlStateHistoryName, color/.get=\\tikzumlStateHistoryColor%\n  }%\n  %\n  \\def\\tikzumlStateHistoryPos{\\tikzumlStateHistoryX,\\tikzumlStateHistoryY}%\n  %\n  \\iftikzumlstatehistoryWithoutCoords%\n    \\node[circle, minimum size=\\tikzumlStateHistoryMinimumWidth, draw=\\tikzumlStateHistoryColor, /tikzuml/statehistory/style] (\\tikzumlStateHistoryName) {\\picturedhistory{draw=\\tikzumlStateHistoryColor}};%\n  \\else%\n    \\node[circle, minimum size=\\tikzumlStateHistoryMinimumWidth, draw=\\tikzumlStateHistoryColor, /tikzuml/statehistory/style] (\\tikzumlStateHistoryName) at (\\tikzumlStateHistoryPos) {\\picturedhistory{draw=\\tikzumlStateHistoryColor}};%\n  \\fi%\n  %\n  % add to fit\n  \\ifnum\\c@tikzumlStateLevel>0%\n    \\edef\\tikzumlStateFitOld{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitOld (\\tikzumlStateHistoryName)}%\n    \\stepcounter{tikzumlStateSubStateNum}%\n  \\fi%\n  \\stepcounter{tikzumlStateHistoryNum}%\n}%\n%\n\\newcommand{\\pictureddeephistory}[1]{%\n  \\begin{tikzpicture}[#1]%\n  \\draw[thick] (-0.1cm,-0.15cm) -- (-0.1cm,0.15cm)\n               (-0.1cm,0) -- (0.1cm,0)\n               (0.1cm,-0.15cm) -- (0.1cm,0.15cm)\n               (0.23cm,0.19cm) -- (0.23cm,0.11cm)\n               (0.20cm,0.17cm) -- (0.26cm,0.13cm)\n               (0.20cm,0.13cm) -- (0.26cm,0.17cm);%\n  \\end{tikzpicture}%\n}%\n%\n% define a uml deep-history state\n% args : name of the state\n% optional : x,y: coordinates of the state\n%            width: width of the state node\n%            name: name of the state node\n%            color: color of the join symbol\n%            style: to manage every default TikZ option\n%            no coords: to tell that the state position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newcommand{\\umlstatedeephistory}[1][]{%\n  \\pgfkeys{/tikzuml/statedeephistory/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, width/.initial=\\tikzumlStateDeepHistoryDefaultWidth,%\n                                          name/.initial=statedeephistory-\\thetikzumlStateDeepHistoryNum,%\n                                          color/.initial=\\tikzumlDefaultDrawColor, style/.style={},%\n                                          no coords/.is if=tikzumlstatedeephistoryWithoutCoords,%\n                                          no coords=false,%\n                                          .unknown/.code={%\n                                            \\let\\keyname=\\pgfkeyscurrentname%\n                                            \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                            \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                                        \\equal{\\keyname}{left}\\OR%\n                                                        \\equal{\\keyname}{below}\\OR%\n                                                        \\equal{\\keyname}{right}\\OR%\n                                                        \\equal{\\keyname}{above left}\\OR%\n                                                        \\equal{\\keyname}{above right}\\OR%\n                                                        \\equal{\\keyname}{below left}\\OR%\n                                                        \\equal{\\keyname}{below right}}{%\n                                              \\IfSubStr{\\keyvalue}{ of }{%\n                                                \\pgfkeys{/tikzuml/statedeephistory/.cd, no coords}%\n                                              }{}%\n                                            }{}%\n                                            \\ifx\\keyvalue\\pgfkeysnovalue%\n                                              \\pgfkeys{/tikzuml/statedeephistory/.cd, style/.append style/.expand once={\\keyname}}%\n                                            \\else%\n                                              \\pgfkeys{/tikzuml/statedeephistory/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                            \\fi%\n                                            %\\errmessage{TIKZUML ERROR : in umlstatedeephistory, invalid option \\keyname}%\n                                          }%\n  }%\n  \\pgfkeys{/tikzuml/statedeephistory/.cd, #1}%\n  \\pgfkeys{/tikzuml/statedeephistory/.cd, x/.get=\\tikzumlStateDeepHistoryX, y/.get=\\tikzumlStateDeepHistoryY, width/.get=\\tikzumlStateDeepHistoryMinimumWidth,%\n                                          name/.get=\\tikzumlStateDeepHistoryName, color/.get=\\tikzumlStateDeepHistoryColor%\n  }%\n  %  \n  \\def\\tikzumlStateDeepHistoryPos{\\tikzumlStateDeepHistoryX,\\tikzumlStateDeepHistoryY}%\n  %\n  \\iftikzumlstatedeephistoryWithoutCoords%\n    \\node[circle, minimum size=\\tikzumlStateDeepHistoryMinimumWidth, draw=\\tikzumlStateDeepHistoryColor, /tikzuml/statedeephistory/style] (\\tikzumlStateDeepHistoryName) {\\pictureddeephistory{draw=\\tikzumlStateDeepHistoryColor}};%\n  \\else%\n    \\node[circle, minimum size=\\tikzumlStateDeepHistoryMinimumWidth, draw=\\tikzumlStateDeepHistoryColor, /tikzuml/statedeephistory/style] (\\tikzumlStateDeepHistoryName) at (\\tikzumlStateDeepHistoryPos) {\\pictureddeephistory{draw=\\tikzumlStateDeepHistoryColor}};%\n  \\fi%\n  %\n  % add to fit\n  \\ifnum\\c@tikzumlStateLevel>0%\n    \\edef\\tikzumlStateFitOld{\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{\\tikzumlStateFitOld (\\tikzumlStateDeepHistoryName)}%\n    \\stepcounter{tikzumlStateSubStateNum}%\n  \\fi%\n  \\stepcounter{tikzumlStateDeepHistoryNum}%\n}%\n%\n% define a uml state\n% args : name of the state\n%         content of the state\n% optional : x,y: coordinates of the state\n%            width: width of the state node\n%            name: name of the state node\n%            entry, do, exit: entry/do/exit action of the state\n%            draw, fill, text: colors\n%            style: to manage every default TikZ option\n%            no coords: to tell that the state position is defined relatively\n%                       to another node (automatically used with TikZ options above, below, left, right, below left, ...)\n\\newenvironment{umlstate}[2][]{%\n  \\ifnum\\thetikzumlStateLevel>0%\n    \\let\\tikzumlState@nameold\\tikzumlState@fitname%\n    \\let\\tikzumlState@parentold\\tikzumlState@parent%\n    \\edef\\tikzumlState@parent{\\tikzumlState@parentold @@\\tikzumlState@nameold}%\n  \\else%\n    \\def\\tikzumlState@parent{}%\n  \\fi%\n  %\n  \\stepcounter{tikzumlStateLevel}%\n  %\n  \\pgfkeys{/tikzuml/state/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, width/.initial=\\tikzumlStateDefaultWidth,%\n                               name/.initial={},%\n                               entry/.initial={}, do/.initial={}, exit/.initial={},%\n                               draw/.initial=\\tikzumlDefaultDrawColor, fill/.initial=\\tikzumlStateDefaultFillColor,%\n                               text/.initial=\\tikzumlDefaultTextColor, style/.style={},%\n                               no coords/.is if=tikzumlstateWithoutCoords,%\n                               no coords=false,%\n                               .unknown/.code={%\n                                 \\let\\keyname=\\pgfkeyscurrentname%\n                                 \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                 \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                             \\equal{\\keyname}{left}\\OR%\n                                             \\equal{\\keyname}{below}\\OR%\n                                             \\equal{\\keyname}{right}\\OR%\n                                             \\equal{\\keyname}{above left}\\OR%\n                                             \\equal{\\keyname}{above right}\\OR%\n                                             \\equal{\\keyname}{below left}\\OR%\n                                             \\equal{\\keyname}{below right}}{%\n                                   \\IfSubStr{\\keyvalue}{ of }{%\n                                     \\pgfkeys{/tikzuml/state/.cd, no coords}%\n                                   }{}%\n                                 }{}%\n                                 \\ifx\\keyvalue\\pgfkeysnovalue%\n                                   \\pgfkeys{/tikzuml/state/.cd, style/.append style/.expand once={\\keyname}}%\n                                 \\else%\n                                   \\pgfkeys{/tikzuml/state/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                 \\fi%\n                    %             \\errmessage{TIKZUML ERROR : in umlstate, invalid option \\keyname}%\n                               }%\n  }%\n  \\pgfkeys{/tikzuml/state/.cd, #1}%\n  \\pgfkeys{/tikzuml/state/.cd, x/.get=\\tikzumlStateXShift, y/.get=\\tikzumlStateYShift, width/.get=\\tikzumlStateMinimumWidth, name/.get=\\tikzumlStateName,%\n                               entry/.get=\\tikzumlStateEntry, do/.get=\\tikzumlStateDo, exit/.get=\\tikzumlStateExit,%\n                               draw/.get=\\tikzumlStateDrawColor, fill/.get=\\tikzumlStateFillColor,%\n                               text/.get=\\tikzumlStateTextColor%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlStateName}{}}{%\n    \\edef\\tikzumlState@name{#2}%\n  }{%\n    \\edef\\tikzumlState@name{\\tikzumlStateName}%\n  }%\n  %\n  \\begingroup%\n    \\def\\_{@}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlState@fitname{\\tikzumlState@name}}\\x%\n  %\n  \\let\\tikzumlState@nodeNameold\\tikzumlState@nodeName%\n  \\def\\tikzumlState@caption{#2}%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlState@nodeName{\\tikzumlState@name}}\\x%\n  %\n  \\expandafter\\gdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{}%\n  %\n  \\setcounter{tikzumlStateSubStateNum}{0}%\n  \\setcounter{tikzumlStateText}{0}%\n  %\n  \\def\\tikzumlStateText{tikzumlEmpty}%\n  \\begin{scope}[xshift=\\tikzumlStateXShift cm, yshift=\\tikzumlStateYShift cm]%\n}{%\n  %  \n  \\def\\tikzumlstaterootlabel{\\phantom{\\tikzumlState@nodeName}}%\n  %\n  \\def\\tikzumlstaterootinnerysep{0.5ex}%\n  \\def\\tikzumlstatebodyinnerysep{2ex}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlStateEntry}{}}{}{%\n    \\ifnum\\c@tikzumlStateText=0%\n      \\def\\tikzumlStateText{entry/\\tikzumlStateEntry}%\n    \\else%\n      \\let\\tikzumlStateTextOld\\tikzumlStateText%\n      \\ifthenelse{\\equal{\\tikzumlStateText}{tikzumlEmpty}}{%\n        \\def\\tikzumlStateText{entry/\\tikzumlStateEntry}%\n      }{%\n        \\expandafter\\def\\expandafter\\tikzumlStateText\\expandafter{\\tikzumlStateTextOld \\\\ entry/\\tikzumlStateEntry}%\n      }%\n    \\fi%\n    \\setcounter{tikzumlStateText}{1}%\n    \\ifnum\\c@tikzumlStateSubStateNum=0%\n      \\def\\tikzumlstatebodyinnerysep{0}%\n      \\def\\tikzumlstaterootinnerysep{0}%\n    \\fi%\n  }%\n  \\ifthenelse{\\equal{\\tikzumlStateDo}{}}{}{%\n    \\ifnum\\c@tikzumlStateText=0%\n      \\def\\tikzumlStateText{do/\\tikzumlStateDo}%\n    \\else%\n      \\let\\tikzumlStateTextOld\\tikzumlStateText%\n      \\ifthenelse{\\equal{\\tikzumlStateText}{tikzumlEmpty}}{%\n        \\def\\tikzumlStateText{do/\\tikzumlStateDo}%\n      }{%\n        \\expandafter\\def\\expandafter\\tikzumlStateText\\expandafter{\\tikzumlStateTextOld \\\\ do/\\tikzumlStateDo}%\n      }%\n    \\fi%\n    \\setcounter{tikzumlStateText}{1}%\n    \\ifnum\\c@tikzumlStateSubStateNum=0%\n      \\def\\tikzumlstatebodyinnerysep{0}%\n      \\def\\tikzumlstaterootinnerysep{0}%\n    \\fi%\n  }%\n  \\ifthenelse{\\equal{\\tikzumlStateExit}{}}{}{%\n    \\ifnum\\c@tikzumlStateText=0%\n      \\def\\tikzumlStateText{exit/\\tikzumlStateExit}%\n    \\else%\n      \\let\\tikzumlStateTextOld\\tikzumlStateText%\n      \\ifthenelse{\\equal{\\tikzumlStateText}{tikzumlEmpty}}{%\n        \\def\\tikzumlStateText{exit/\\tikzumlStateExit}%\n      }{%\n        \\expandafter\\def\\expandafter\\tikzumlStateText\\expandafter{\\tikzumlStateTextOld \\\\ exit/\\tikzumlStateExit}%\n      }%\n    \\fi%\n    \\setcounter{tikzumlStateText}{1}%\n    \\ifnum\\c@tikzumlStateSubStateNum=0%\n      \\def\\tikzumlstatebodyinnerysep{0}%\n      \\def\\tikzumlstaterootinnerysep{0}%\n    \\fi%\n  }%\n  %\n  \\addtocounter{tikzumlStateLevel}{-1}%\n  \\begin{pgfonlayer}{state\\thetikzumlStateLevel}%\n  %\n  % if contains nothing, one define a fictive node to enable the fit option\n  \\ifnum\\c@tikzumlStateSubStateNum=0%\n    \\iftikzumlstateWithoutCoords%\n      \\node[inner ysep=\\tikzumlstaterootinnerysep, minimum width=\\tikzumlStateMinimumWidth, /tikzuml/state/style] (\\tikzumlState@nodeName-root) {\\tikzumlstaterootlabel};%\n    \\else%\n      \\node[inner ysep=\\tikzumlstaterootinnerysep, minimum width=\\tikzumlStateMinimumWidth, /tikzuml/state/style] (\\tikzumlState@nodeName-root) at (0,0) {\\tikzumlstaterootlabel};%\n    \\fi%\n    \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname{(\\tikzumlState@nodeName-root)}%\n  \\fi%\n  %\n  \\ifnum\\c@tikzumlStateLevel>0%\n    \\def\\tikzumlStateFitTmp{\\csname tikzumlStateFit\\tikzumlState@parent\\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlStateFit\\tikzumlState@parent\\endcsname{\\tikzumlStateFitTmp (\\tikzumlState@nodeName-body) (\\tikzumlState@nodeName-caption)}%\n    \\stepcounter{tikzumlStateSubStateNum}%\n  \\fi%\n  %\n  \\node[inner xsep=2ex, inner ysep=\\tikzumlstatebodyinnerysep, fit = \\csname tikzumlStateFit\\tikzumlState@parent @@\\tikzumlState@fitname\\endcsname, /tikzuml/state/style ] (\\tikzumlState@nodeName-body) {};%\n  \\def\\tikzumlState@orig{body}%\n  \\ifnum\\c@tikzumlStateText=1%\n    \\node[above=0] (\\tikzumlState@nodeName-texttmp) at (\\tikzumlState@nodeName-\\tikzumlState@orig.north) {\\begin{tabular}{l}\\tikzumlStateText \\end{tabular}};%\n    \\def\\tikzumlState@orig{texttmp}%\n  \\fi%\n  \\node[above] (\\tikzumlState@nodeName-captiontmp) at (\\tikzumlState@nodeName-\\tikzumlState@orig.north) {\\tikzumlState@caption};%\n  \\ifnum\\c@tikzumlStateText=1%\n    \\node[rounded corners, draw=\\tikzumlStateDrawColor, fill=\\tikzumlStateFillColor, name=\\tikzumlState@nodeName, fit=(\\tikzumlState@nodeName-body) (\\tikzumlState@nodeName-texttmp) (\\tikzumlState@nodeName-captiontmp)] {};%\n  \\else%\n    \\node[rounded corners, draw=\\tikzumlStateDrawColor, fill=\\tikzumlStateFillColor, name=\\tikzumlState@nodeName, fit=(\\tikzumlState@nodeName-body) (\\tikzumlState@nodeName-captiontmp)] {};%\n  \\fi%\n  \\ifnum\\c@tikzumlStateText=1%\n    \\node (\\tikzumlState@nodeName-text) at (\\tikzumlState@nodeName-texttmp) {\\begin{tabular}{l}\\tikzumlStateText \\end{tabular}};%\n  \\fi%\n  \\node (\\tikzumlState@nodeName-caption) at (\\tikzumlState@nodeName-captiontmp) {\\tikzumlState@caption};%\n  \\draw (\\tikzumlState@nodeName-caption.south -| \\tikzumlState@nodeName.north west) -- (\\tikzumlState@nodeName-caption.south -| \\tikzumlState@nodeName.north east);%\n  \\end{pgfonlayer}%\n  \\end{scope}%\n}%\n%\n% shortcut for empty state\n\\newcommand{\\umlbasicstate}[2][]{\\begin{umlstate}[#1]{#2}\\end{umlstate}}%\n%\n% command to add text in a state, to be used inside umlstate environment\n\\newcommand{\\umlstatetext}[1]{%\n  \\def\\tikzumlStateText{#1}%\n  \\setcounter{tikzumlStateText}{1}%\n}%\n%\n% shortcuts for state transitions macros\n\\newcommand{\\umltrans}[3][]{%\n  \\ifthenelse{\\equal{#2}{#3}}{%\n    \\umlrelation[style={tikzuml transition style}, recursive mode=transition, #1]{#2}{#3}%\n  }{%\n    \\umlrelation[style={tikzuml transition style}, #1]{#2}{#3}%\n  }%\n}%\n\\newcommand{\\umlHVtrans}[3][]{\\umlHVrelation[style={tikzuml transition style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHtrans}[3][]{\\umlVHrelation[style={tikzuml transition style}, #1]{#2}{#3}}%\n\\newcommand{\\umlVHVtrans}[3][]{\\umlVHVrelation[style={tikzuml transition style}, #1]{#2}{#3}}%\n\\newcommand{\\umlHVHtrans}[3][]{\\umlHVHrelation[style={tikzuml transition style}, #1]{#2}{#3}}%\n\\newcommand{\\umlCNtrans}[4][]{\\umlCNrelation[style={tikzuml transition style}, #1]{#2}{#3}{#4}}%\n%\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%                     sequence diagrams                   %\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%\n\\tikzstyle{tikzuml synchron-msg style}=[color=\\tikzumlDefaultDrawColor, -triangle 45]%\n\\tikzstyle{tikzuml asynchron-msg style}=[color=\\tikzumlDefaultDrawColor, -angle 45]%\n\\tikzstyle{tikzuml return-msg style}=[color=\\tikzumlDefaultDrawColor, dashed, -angle 45]%\n\\tikzstyle{tikzuml call return style}=[color=\\tikzumlDefaultDrawColor, dashed, -angle 45]%\n\\tikzstyle{tikzuml activity style}=[inner xsep=1ex, inner ysep=1ex]%\n%\n\\newcounter{tikzumlObjectNum}%\n\\newcounter{tikzumlCallLevel}%\n\\newcounter{tikzumlCallNum}%\n\\newcounter{tikzumlFragmentLevel}%\n\\newcounter{tikzumlFragmentLevelNum}%\n\\newcounter{tikzumlFragmentNum}%\n\\newcounter{tikzumlFragmentPartNum}%\n\\newcounter{tikzumlCallStartFragmentNum}%\n\\newcounter{tikzumlCallEndFragmentNum}%\n%\n\\newif\\iftikzumlobjectNoDDots%\n\\newif\\iftikzumlcreatecallNoDDots%\n%\n% define a sequence diagram\n% \n\\newenvironment{umlseqdiag}{%\n  \\gdef\\tikzumlInCreateCall{0}%\n  \\setcounter{tikzumlObjectNum}{0}%\n  \\setcounter{tikzumlCallLevel}{0}%\n  \\setcounter{tikzumlCallNum}{0}%\n  \\setcounter{tikzumlFragmentLevel}{0}%\n  \\setcounter{tikzumlFragmentLevelNum}{0}%\n  \\setcounter{tikzumlFragmentNum}{0}%\n  \\setcounter{tikzumlFragmentPartNum}{0}%\n  \\setcounter{tikzumlCallStartFragmentNum}{0}%\n  \\setcounter{tikzumlCallEndFragmentNum}{0}%\n  %\n  \\ifx \\@umlactor \\@empty\n    \\newcommand{\\umlactor}[2][]{%\n      \\pgfkeys{/tikzuml/actorobj/.cd, .unknown/.code={%\n                                        \\let\\keyname=\\pgfkeyscurrentname%\n                                        \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                        \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n                                          \\errmessage{TIKZUML ERROR : in umlactor, forbidden option stereo}%\n                                        }{}%\n                                      }%\n      }%\n      %\n      \\pgfkeys{/tikzuml/actorobj/.cd, ##1}%\n      \\umlobject[stereo=actor, ##1]{##2}%\n    }%\n  \\else%\n    \\renewcommand{\\umlactor}[2][]{%\n      \\pgfkeys{/tikzuml/actorobj/.cd, .unknown/.code={%\n                                        \\let\\keyname=\\pgfkeyscurrentname%\n                                        \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                        \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n                                          \\errmessage{TIKZUML ERROR : in umlactor, forbidden option stereo}%\n                                        }{}%\n                                      }%\n      }%\n      %\n      \\pgfkeys{/tikzuml/actorobj/.cd, ##1}%\n      \\umlobject[stereo=actor, ##1]{##2}%\n    }%\n  \\fi%\n  \\begin{scope}[font=\\tikzumlDefaultFont]%\n}{%\n  % draw lifelines of each object\n  \\begin{pgfonlayer}{lifelines}%\n  \\foreach \\id in \\tikzumlIdList {%\n    \\draw (\\csname tikzumlLastChild@\\id \\endcsname)+(0,-2.5ex) node[inner sep=0, name=end-\\id] {};%\n    \\draw[dotted] (\\id) -- (end-\\id);%\n  }%\n  \\end{pgfonlayer}%\n  \\end{scope}%\n}%\n%\n% define the database symbol\n% optional : global tikzpicture styles\n\\newcommand{\\pictureddatabase}[1]{%\n  \\pgfkeys{/tikzuml/database/.cd, scale/.initial=1, .unknown/.code={}}%\n  \\pgfkeys{/tikzuml/database/.cd,#1}%\n  \\pgfkeys{/tikzuml/database/.cd, scale/.get=\\tikzumlDatabaseScale}%\n  %\n  \\begin{tikzpicture}[#1]%\n  \\node[fill, draw, ellipse, minimum width=\\tikzumlDatabaseScale*4ex, minimum height=\\tikzumlDatabaseScale*2ex, inner sep=0] (bottom) at (0,-2ex) {};%\n  \\node[fill, draw, ellipse, minimum width=\\tikzumlDatabaseScale*4ex, minimum height=\\tikzumlDatabaseScale*2ex, inner sep=0] (top) at (0,4ex) {};%\n  \\fill (bottom.west) rectangle (top.east);%\n  \\begin{scope}%\n  \\clip (-3.5ex,-0.5ex) rectangle (3.5ex,2.5ex);%\n  \\node[draw, dashed, ellipse, minimum width=\\tikzumlDatabaseScale*4ex, minimum height=\\tikzumlDatabaseScale*2ex, inner sep=0] (bottom2) at (0,-2ex) {};%\n  \\end{scope}%\n  \\node[draw, ellipse, minimum width=\\tikzumlDatabaseScale*4ex, minimum height=\\tikzumlDatabaseScale*2ex, inner sep=0] (top2) at (0,4ex) {};%\n  \\draw (bottom.west) -- (top.west) (bottom.east) -- (top.east);%\n  \\end{tikzpicture}%\n}%\n%\n% define the entity symbol\n% optional : global tikzpicture styles\n\\newcommand{\\picturedentity}[1]{%\n  \\pgfkeys{/tikzuml/entity/.cd, scale/.initial=1, .unknown/.code={}}%\n  \\pgfkeys{/tikzuml/entity/.cd,#1}%\n  \\pgfkeys{/tikzuml/entity/.cd, scale/.get=\\tikzumlEntityScale}%\n  %\n  \\begin{tikzpicture}[#1]%\n  \\node[fill, draw, circle, inner sep=0, minimum size=\\tikzumlEntityScale*5ex] (center) at (0,0) {};%\n  \\draw (center.south) node[coordinate, name=bottom] {};%\n  \\draw (bottom)+(-2ex,0) node[coordinate, name=bottom-left] {};%\n  \\draw (bottom)+(2ex,0) node[coordinate, name=bottom-right] {};%\n  \\draw (center) -- (bottom);%\n  \\draw (bottom-left) -- (bottom-right);%\n  \\end{tikzpicture}%\n}%\n%\n% define the boundary symbol\n% optional : global tikzpicture styles\n\\newcommand{\\picturedboundary}[1]{%\n  \\pgfkeys{/tikzuml/boundary/.cd, scale/.initial=1, .unknown/.code={}}%\n  \\pgfkeys{/tikzuml/boundary/.cd,#1}%\n  \\pgfkeys{/tikzuml/boundary/.cd, scale/.get=\\tikzumlBoundaryScale}%\n  %\n  \\begin{tikzpicture}[#1]\n  \\node[fill, draw, circle, inner sep=0, minimum size=\\tikzumlBoundaryScale*5ex] (center) at (0,0) {};\n  \\draw (center.west)+(-0.8ex,0) node[coordinate, name=left] {};\n  \\draw (left)+(0,0.2ex) node[coordinate, name=left-top] {};\n  \\draw (left)+(0,-0.2ex) node[coordinate, name=left-bottom] {};\n  \\draw (center) -- (left);\n  \\draw (left-top) -- (left-bottom);\n  \\end{tikzpicture}\n}%\n%\n% define the control symbol\n% optional : global tikzpicture styles\n\\newcommand{\\picturedcontrol}[1]{%\n  \\pgfkeys{/tikzuml/control/.cd, scale/.initial=1, .unknown/.code={}}%\n  \\pgfkeys{/tikzuml/control/.cd,#1}%\n  \\pgfkeys{/tikzuml/control/.cd, scale/.get=\\tikzumlControlScale}%\n  %\n  \\begin{tikzpicture}[#1, decoration={markings, mark=at position 0.25 with {\\arrow{>}}}]\n  \\node[fill, draw, circle, inner sep=0, minimum size=\\tikzumlControlScale*5ex, postaction={decorate}] (center) at (0,0) {};\n  \\end{tikzpicture}\n}% \n%\n% define a uml object for a sequence diagram\n% args : name of the object\n% optional : x, y: coordinates of the object\n%            stereo: stereotype of the object (object, actor, database, boundary, control, entity, multiobject)\n%            class: class of the object\n%            scale: scale factor of the object symbol\n%            draw, fill, text; colors\n%            no ddots: when used, disable printing of double dots\n\\newcommand{\\umlobject}[2][]{\n  \\stepcounter{tikzumlObjectNum}%\n  %\n  \\edef\\tikzumlobject@ddot{:}%\n  \\pgfkeys{/tikzuml/obj/.cd, x/.initial=tikzumlEmpty, y/.initial=\\tikzumlDefaultX, stereo/.initial=\\tikzumlObjectDefaultStereo,%\n                             class/.initial={}, scale/.initial=1,%\n                             draw/.initial=\\tikzumlDefaultDrawColor, fill/.initial=\\tikzumlObjectDefaultFillColor,%\n                             text/.initial=\\tikzumlDefaultTextColor,%\n                             no ddots/.is if=tikzumlobjectNoDDots,%\n                             no ddots=false,%\n                             .unknown/.code={%\n                               \\let\\keyname=\\pgfkeyscurrentname%\n                               \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                               \\errmessage{TIKZUML ERROR : in umlobject, invalid option \\keyname}%\n                             }%\n  }%\n  \\pgfkeys{/tikzuml/obj/.cd, #1}%\n  \\pgfkeys{/tikzuml/obj/.cd, x/.get=\\tikzumlObjectX, y/.get=\\tikzumlObjectY,%\n                             stereo/.get=\\tikzumlObjectStereo, class/.get=\\tikzumlObjectClass,%\n                             scale/.get=\\tikzumlObjectScale,%\n                             draw/.get=\\tikzumlObjectDrawColor, fill/.get=\\tikzumlObjectFillColor,%\n                             text/.get=\\tikzumlObjectTextColor%\n  }%\n  %\n  \\iftikzumlobjectNoDDots%\n    \\edef\\tikzumlobject@ddot{}%\n  \\fi%\n  %\n  \\ifthenelse{\\equal{\\tikzumlObjectX}{tikzumlEmpty}}{%\n    \\pgfmathsetmacro{\\tikzumlObjectX}{4*(\\thetikzumlObjectNum-1)}%\n  }{}%\n  %\n  \\def\\tikzumlObjectName{#2}%\n  \\expandafter\\xdef\\csname tikzumlLastChild@\\tikzumlObjectName \\endcsname{\\tikzumlObjectName}%\n  %\n  \\ifnum\\thetikzumlObjectNum=1%\n    \\xdef\\tikzumlIdList{\\tikzumlObjectName}%\n  \\else%\n    \\let\\tikzumlIdListOld\\tikzumlIdList%\n    \\expandafter\\xdef\\expandafter\\tikzumlIdList\\expandafter{\\tikzumlIdListOld,\\tikzumlObjectName}%\n  \\fi%\n  %\n  \\tikzstyle{tikzuml object box style}=[rectangle, text=\\tikzumlObjectTextColor, font=\\tikzumlDefaultFont]%\n  %\n  \\ifthenelse{\\equal{\\tikzumlObjectStereo}{object}}{%\n    \\tikzstyle{tikzuml object box style}+=[draw=\\tikzumlObjectDrawColor, fill=\\tikzumlObjectFillColor]%\n  }{%\n    \\ifthenelse{\\equal{\\tikzumlObjectStereo}{multi}}{%\n      \\tikzstyle{tikzuml object box style}+=[fill=\\tikzumlObjectFillColor]%\n    }{}%\n  }%\n  %\n  \\ifnum\\tikzumlInCreateCall=1%\n    \\draw (\\tikzumlCreateCallObjectSrc -| \\tikzumlObjectX,0) node[tikzuml object box style] (\\tikzumlObjectName) {\\tikzumlObjectName\\tikzumlobject@ddot\\tikzumlObjectClass};%\n  \\else%\n    \\node[tikzuml object box style] (\\tikzumlObjectName) at (\\tikzumlObjectX,\\tikzumlObjectY) {\\tikzumlObjectName\\tikzumlobject@ddot\\tikzumlObjectClass};%\n  \\fi%\n  %\n  \\ifthenelse{\\equal{\\tikzumlObjectStereo}{multi}}{%\n    \\draw (\\tikzumlObjectName.north east)+(0.4ex,0.4ex) node[name=\\tikzumlObjectName-tr, coordinate] {};\n    \\draw (\\tikzumlObjectName.north west)+(0.4ex,0.4ex) node[name=\\tikzumlObjectName-tl, coordinate] {};\n    \\draw (\\tikzumlObjectName.south east)+(0.4ex,0.4ex) node[name=\\tikzumlObjectName-br, coordinate] {};\n    \\draw (\\tikzumlObjectName-tr)+(0.4ex,0.4ex) node[name=\\tikzumlObjectName-ttr, coordinate] {};\n    \\draw (\\tikzumlObjectName-tl)+(0.4ex,0.4ex) node[name=\\tikzumlObjectName-ttl, coordinate] {};\n    \\draw (\\tikzumlObjectName-br)+(0.4ex,0.4ex) node[name=\\tikzumlObjectName-tbr, coordinate] {};\n    \\fill[fill=\\tikzumlObjectFillColor] (\\tikzumlObjectName-ttl |- \\tikzumlObjectName.north) -- (\\tikzumlObjectName-ttl) -- (\\tikzumlObjectName-ttr) -- (\\tikzumlObjectName-tbr) -- (\\tikzumlObjectName-tbr -| \\tikzumlObjectName.east) -- (\\tikzumlObjectName.north east) -- (\\tikzumlObjectName-ttl |- \\tikzumlObjectName.north);\n    \\draw[draw=\\tikzumlObjectDrawColor] (\\tikzumlObjectName-ttl |- \\tikzumlObjectName.north) -- (\\tikzumlObjectName-ttl) -- (\\tikzumlObjectName-ttr) -- (\\tikzumlObjectName-tbr) -- (\\tikzumlObjectName-tbr -| \\tikzumlObjectName.east);\n    \\fill[fill=\\tikzumlObjectFillColor] (\\tikzumlObjectName-tl |- \\tikzumlObjectName.north) -- (\\tikzumlObjectName-tl) -- (\\tikzumlObjectName-tr) -- (\\tikzumlObjectName-br) -- (\\tikzumlObjectName-br -| \\tikzumlObjectName.east) -- (\\tikzumlObjectName.north east) -- (\\tikzumlObjectName-tl |- \\tikzumlObjectName.north);\n    \\draw[draw=\\tikzumlObjectDrawColor] (\\tikzumlObjectName-tl |- \\tikzumlObjectName.north) -- (\\tikzumlObjectName-tl) -- (\\tikzumlObjectName-tr) -- (\\tikzumlObjectName-br) -- (\\tikzumlObjectName-br -| \\tikzumlObjectName.east);\n    \\draw[draw=\\tikzumlObjectDrawColor] (\\tikzumlObjectName.north west) rectangle (\\tikzumlObjectName.south east);\n  }{%\n    \\ifthenelse{\\equal{\\tikzumlObjectStereo}{object}}{}{%\n      \\node[above=1ex, name=\\tikzumlObjectName-picture] at (\\tikzumlObjectName) {\\csname pictured\\tikzumlObjectStereo \\endcsname{draw=\\tikzumlObjectDrawColor, fill=\\tikzumlObjectFillColor, scale=\\tikzumlObjectScale}};\n    }%\n  }%\n}%\n%\n% shortcuts for objects\n\\newcommand{\\umlbasicobject}[2][]{%\n  \\pgfkeys{/tikzuml/basicobj/.cd, .unknown/.code={%\n                                    \\let\\keyname=\\pgfkeyscurrentname%\n                                    \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                    \\ifthenelse{\\equal{\\keyname}{no ddots}}{%\n                                      \\errmessage{TIKZUML ERROR : in umlbasicobject, forbidden option no ddots}%\n                                    }{}%\n                                  }%\n  }%\n  \\pgfkeys{/tikzuml/basicobj/.cd, #1}%\n  \\umlobject[no ddots, #1]{#2}%\n}%\n%\n\\newcommand{\\umldatabase}[2][]{%\n  \\pgfkeys{/tikzuml/databaseobj/.cd, .unknown/.code={%\n                                       \\let\\keyname=\\pgfkeyscurrentname%\n                                       \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                       \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n                                         \\errmessage{TIKZUML ERROR : in umldatabase, forbidden option stereo}%\n                                       }{}%\n                                     }%\n  }%\n  \\pgfkeys{/tikzuml/databaseobj/.cd, #1}%\n  \\umlobject[stereo=database, #1]{#2}%\n}%\n\\newcommand{\\umlentity}[2][]{%\n  \\pgfkeys{/tikzuml/entityobj/.cd, .unknown/.code={%\n                                     \\let\\keyname=\\pgfkeyscurrentname%\n                                     \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                     \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n                                       \\errmessage{TIKZUML ERROR : in umlentity, forbidden option stereo}%\n                                     }{}%\n                                   }%\n  }%\n  \\pgfkeys{/tikzuml/entityobj/.cd, #1}%\n  \\umlobject[stereo=entity, #1]{#2}%\n}%\n\\newcommand{\\umlcontrol}[2][]{%\n  \\pgfkeys{/tikzuml/controlobj/.cd, .unknown/.code={%\n                                      \\let\\keyname=\\pgfkeyscurrentname%\n                                      \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                      \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n                                        \\errmessage{TIKZUML ERROR : in umlcontrol, forbidden option stereo}%\n                                      }{}%\n                                    }%\n  }%\n  \\pgfkeys{/tikzuml/controlobj/.cd, #1}%\n  \\umlobject[stereo=control, #1]{#2}%\n}%\n\\newcommand{\\umlboundary}[2][]{%\n  \\pgfkeys{/tikzuml/boundaryobj/.cd, .unknown/.code={%\n                                       \\let\\keyname=\\pgfkeyscurrentname%\n                                       \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                       \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n                                         \\errmessage{TIKZUML ERROR : in umlboundary, forbidden option stereo}%\n                                       }{}%\n                                     }%\n  }%\n  \\pgfkeys{/tikzuml/boundaryobj/.cd, #1}%\n  \\umlobject[stereo=boundary, #1]{#2}%\n}%\n\\newcommand{\\umlmulti}[2][]{%\n  \\pgfkeys{/tikzuml/multiobj/.cd, .unknown/.code={%\n                                    \\let\\keyname=\\pgfkeyscurrentname%\n                                    \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                    \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n                                      \\errmessage{TIKZUML ERROR : in umlmulti, forbidden option stereo}%\n                                    }{}%\n                                  }%\n  }%\n  \\pgfkeys{/tikzuml/multiobj/.cd, #1}%\n  \\umlobject[stereo=multi, #1]{#2}%\n}%\n%\n\\newcounter{tikzumlSDNodeNum}%\n%\n% define a hidden node to lengthen lifeline of a object\n% args : object node\n% optional : dt: distance between the sdnode and the last call defined on the lifeline of the object\n%            name: name of the sdnode\n\\newcommand{\\umlsdnode}[2][]{%\n  \\pgfkeys{/tikzuml/sdnode/.cd, dt/.initial=0, name/.initial=tikzumlEmpty}%\n  \\pgfkeys{/tikzuml/sdnode/.cd, #1}%\n  \\pgfkeys{/tikzuml/sdnode/.cd, dt/.get=\\tikzumlSDNodeDT, name/.get=\\tikzumlSDNodeName}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlSDNodeName}{tikzumlEmpty}}{%\n    \\expandafter\\def\\expandafter\\tikzumlSDNode@nodeName{sdnode-\\thetikzumlSDNodeNum}%\n  }{%\n    \\expandafter\\def\\expandafter\\tikzumlSDNode@nodeName{\\tikzumlSDNodeName}%\n  }%\n  %\n  \\stepcounter{tikzumlSDNodeNum}%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlSDNode@objnodeName{#2}}\\x%\n  %\n  \\draw (\\expandafter\\csname tikzumlLastChild@\\tikzumlSDNode@objnodeName \\endcsname)+(0,-\\tikzumlSDNodeDT ex) node[name=\\tikzumlSDNode@nodeName,coordinate] {};%\n  %\n  % update last node drawn on sender lifeline\n  \\expandafter\\xdef\\csname tikzumlLastChild@\\tikzumlSDNode@objnodeName \\endcsname{\\tikzumlSDNode@nodeName}%\n}%\n%\n\\newlength{\\tikzumlCall@xa}%\n\\newlength{\\tikzumlCall@xb}%\n%\n% define a uml operation call for sequence diagrams\n% args : call sender\n%        call receiver\n% optional : dt: time delay from precedent event end\n%            name: name of the call\n%            op: operation name and input args\n%            return: return value\n%            type: type of the call (synchron, asynchron)\n%            draw, fill, text: colors\n%            padding: time padding from call start and to call end\n\\newenvironment{umlcall}[3][]{%\n  \\stepcounter{tikzumlCallNum}%\n  \\def\\tikzumlCallWithReturn{tikzumlFalse}%\n  \\edef\\tikzumlCall@lastchildNum{\\thetikzumlCallNum}% for testing presence of sub-calls\n  \\gdef\\tikzumlCallBottom{0}%\n  %\n  \\pgfkeys{/tikzuml/call/.cd, dt/.initial=\\tikzumlCallDefaultDT, name/.initial={call-\\thetikzumlCallNum},%\n                              op/.initial={}, return/.initial={}, type/.initial=\\tikzumlCallDefaultType,%\n                              draw/.initial=\\tikzumlDefaultDrawColor, fill/.initial=\\tikzumlCallDefaultFillColor,%\n                              text/.initial=\\tikzumlDefaultTextColor,%\n                              padding/.initial=\\tikzumlCallDefaultPadding,%\n                              .unknown/.code={%\n                                \\let\\keyname=\\pgfkeyscurrentname%\n                                \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                \\ifthenelse{\\equal{\\keyname}{with return}}{%\n                                  \\def\\tikzumlCallWithReturn{tikzumlTrue}%\n                                }{%\n                                  \\errmessage{TIKZUML ERROR : in umlcall,  invalid option \\keyname}%\n                                }%\n                              }%\n  }%\n  \\pgfkeys{/tikzuml/call/.cd, #1}%\n  \\pgfkeys{/tikzuml/call/.cd, dt/.get=\\tikzumlCallDT, name/.get=\\tikzumlCallName, op/.get=\\tikzumlCallOp,%\n                              return/.get=\\tikzumlCallReturn, type/.get=\\tikzumlCallType,%\n                              padding/.get=\\tikzumlCallPadding,%\n                              draw/.get=\\tikzumlCallDrawColor, fill/.get=\\tikzumlCallFillColor,%\n                              text/.get=\\tikzumlCallTextColor%\n  }%\n  %\n  \\edef\\tikzumlfillcall{\\tikzumlCallFillColor}%\n  \\edef\\tikzumldrawcall{\\tikzumlCallDrawColor}%\n  \\edef\\tikzumltextcall{\\tikzumlCallTextColor}%\n  \\edef\\tikzumltypecall{\\tikzumlCallType}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlCallDT}{tikzumlEmpty}}{%\n    \\ifnum\\thetikzumlCallNum=1%\n      \\def\\tikzumlCallDT{2}%\n      \\def\\tikzumlcallSrc{2}%\n    \\else%\n      \\def\\tikzumlCallDT{2}%\n      \\def\\tikzumlcallSrc{1}%\n    \\fi%\n  }{%\n    \\def\\tikzumlcallSrc{0}%\n  }%\n  %\n  \\let\\tikzumlCallStartNodeNameold\\tikzumlCallStartNodeName%\n  \\def\\tikzumlCallStartNodeName{#2}%\n  \\let\\tikzumlCallEndNodeNameold\\tikzumlCallEndNodeName%\n  \\def\\tikzumlCallEndNodeName{#3}%\n  \\def\\tikzumlcallheight{\\tikzumlCallPadding}%\n  %\n  % managing time delays from previous/parent fragments \n  \\ifnum\\thetikzumlCallStartFragmentNum>0%\n    \\let\\tikzumlCallDTold\\tikzumlCallDT%\n    \\pgfmathparse{0.5*\\tikzumlFragment@paddingy+\\tikzumlCallDTold}%\n    \\edef\\tikzumlCallDT{\\pgfmathresult}%\n    \\addtocounter{tikzumlCallStartFragmentNum}{-1}\n  \\fi%\n  \\ifnum\\thetikzumlCallEndFragmentNum>0%\n    \\let\\tikzumlCallDTold\\tikzumlCallDT%\n    \\pgfmathparse{0.5*\\tikzumlFragment@paddingy+\\tikzumlCallDTold}%\n    \\edef\\tikzumlCallDT{\\pgfmathresult}%\n    \\addtocounter{tikzumlCallEndFragmentNum}{-1}\n  \\fi%\n  \\ifnum\\thetikzumlFragmentPartNum>0%\n    \\let\\tikzumlCallDTold\\tikzumlCallDT%\n    \\pgfmathparse{0.5*\\tikzumlFragment@paddingy+\\tikzumlCallDTold}%\n    \\edef\\tikzumlCallDT{\\pgfmathresult}%\n  \\fi%\n  %\n  % managing parent-child structure\n  \\ifnum\\thetikzumlCallLevel>0%\n    \\let\\tikzumlCall@nameold\\tikzumlCall@name%\n    \\edef\\tikzumlCall@name{\\tikzumlCallName}%\n    \\let\\tikzumlCall@parentold\\tikzumlCall@parent%\n    \\edef\\tikzumlCall@parent{\\tikzumlCall@parentold @@\\tikzumlCall@nameold}%\n  \\else%\n    \\edef\\tikzumlCall@parent{}%\n    \\edef\\tikzumlCall@parentold{}%\n    \\edef\\tikzumlCall@nameold{}\n    \\edef\\tikzumlCall@name{\\tikzumlCallName}%\n  \\fi%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlCall@nodeName{\\tikzumlCall@name}}\\x%\n  %\n  \\let\\tikzumlCall@nodeNameold\\tikzumlCall@nodeName%\n  %\n  \\def\\tikzumlcallstyle{tikzuml \\tikzumlCallType-msg style}%\n  %\n  % top node of activity period of call sender\n  \\begin{pgfonlayer}{connections}%\n  \\pgfmathparse{\\tikzumlCallDT+\\tikzumlcallSrc}%\n  \\draw (\\csname tikzumlLastChild@\\tikzumlCallStartNodeName \\endcsname)+(0,-\\pgfmathresult ex) node[coordinate, name=tikzumlTmpNode] {};%\n  \\node[tikzuml activity style] (st-\\tikzumlCall@nodeName) at (\\tikzumlCallStartNodeName |- tikzumlTmpNode) {};%\n  %\n  % update last node drawn on sender lifeline\n  \\expandafter\\xdef\\csname tikzumlLastChild@\\tikzumlCallStartNodeName \\endcsname{st-\\tikzumlCall@nodeName}%\n  %\n  % top node of activity period of call receiver\n  \\ifthenelse{\\equal{\\tikzumlCallStartNodeName}{\\tikzumlCallEndNodeName}}{%\n    \\draw (st-\\tikzumlCall@nodeName)+(0,-0.75*\\tikzumlCallPadding ex) node[coordinate, name=tikzumlTmpNode] {};%\n    \\node[tikzuml activity style] (et-\\tikzumlCall@nodeName) at (\\tikzumlCallStartNodeName |- tikzumlTmpNode) {};%\n  }{%\n    \\node[tikzuml activity style] (et-\\tikzumlCall@nodeName) at (\\tikzumlCallEndNodeName |- st-\\tikzumlCall@nodeName) {};%\n  }%\n  %\n  % update last node drawn on receiver lifeline\n  \\expandafter\\xdef\\csname tikzumlLastChild@\\tikzumlCallEndNodeName \\endcsname{et-\\tikzumlCall@nodeName}%\n  \\xdef\\tikzumlCallBottomSrc{et-\\tikzumlCall@nodeName}%\n  \\end{pgfonlayer}%\n  %\n  \\stepcounter{tikzumlCallLevel}%\n}{%\n  \\addtocounter{tikzumlCallLevel}{-1}%\n  %\n  % bottom nodes of activity periods of call sender and receiver\n  \\begin{pgfonlayer}{connections}%\n  \\ifnum\\tikzumlCall@lastchildNum=\\thetikzumlCallNum%\n    %\n    % this test occurs a bug with latex package preview\n    \\ifthenelse{\\equal{\\tikzumlCallStartNodeName}{\\tikzumlCallEndNodeName}}{%\n      \\draw (\\tikzumlCallBottomSrc)+(0,-\\tikzumlCallPadding ex) node[coordinate, name=tikzumlTmpNode] {};%\n      \\node[tikzuml activity style] (eb-\\tikzumlCall@nodeName) at (\\tikzumlCallEndNodeName |- tikzumlTmpNode) {};% \n      \\draw (eb-\\tikzumlCall@nodeName)+(0,-0.75*\\tikzumlCallPadding ex) node[coordinate, name=tikzumlTmpNode] {};%\n      \\node[tikzuml activity style] (sb-\\tikzumlCall@nodeName) at (\\tikzumlCallStartNodeName |- tikzumlTmpNode) {};% \n    }{%\n      \\ifthenelse{\\equal{\\tikzumlCallReturn}{tikzumlEmpty}}{%\n        \\pgfmathsetmacro{\\tikzumlCallPaddingd}{0.5*\\tikzumlCallPadding}%\n      }{%\n        \\pgfmathsetmacro{\\tikzumlCallPaddingd}{1.2*\\tikzumlCallPadding}%\n      }%\n      \\draw (\\tikzumlCallBottomSrc)+(0,-\\tikzumlCallPaddingd ex) node[coordinate, name=tikzumlTmpNode] {};%\n      \\node[tikzuml activity style] (eb-\\tikzumlCall@nodeName) at (\\tikzumlCallEndNodeName |- tikzumlTmpNode) {};%\n      \\node[tikzuml activity style] (sb-\\tikzumlCall@nodeName) at (\\tikzumlCallStartNodeName |- eb-\\tikzumlCall@nodeName) {};%\n    }%\n    \\xdef\\tikzumlCallBottomSrc{sb-\\tikzumlCall@nodeName}%\n  \\else%\n    %\n    % managing time delays from previous/parent fragments\n    \\ifnum\\thetikzumlCallStartFragmentNum>0%\n      \\let\\tikzumlcallheightold\\tikzumlCallPadding%\n      \\pgfmathparse{\\tikzumlcallheightold+0.5*\\tikzumlFragment@paddingy}%\n      \\edef\\tikzumlcallheight{\\pgfmathresult}%\n      \\addtocounter{tikzumlCallStartFragmentNum}{-1}%\n    \\fi%\n    \\ifnum\\thetikzumlCallEndFragmentNum>0%\n      \\let\\tikzumlcallheightold\\tikzumlCallPadding%\n      \\pgfmathparse{\\tikzumlcallheightold+0.5*\\tikzumlFragment@paddingy}%\n      \\edef\\tikzumlcallheight{\\pgfmathresult}%\n      \\addtocounter{tikzumlCallEndFragmentNum}{-1}%\n    \\fi%\n    %\n    \\ifthenelse{\\equal{\\tikzumlCallStartNodeName}{\\tikzumlCallEndNodeName}}{%\n      \\draw (\\tikzumlCallBottomSrc)+(0,-\\tikzumlcallheight ex) node[coordinate, name=tikzumlTmpNode] {};%\n      \\node[tikzuml activity style] (eb-\\tikzumlCall@nodeName) at (\\tikzumlCallEndNodeName |- tikzumlTmpNode) {};%\n      \\draw (eb-\\tikzumlCall@nodeName)+(0,-0.75*\\tikzumlCallPadding ex) node[coordinate, name=tikzumlTmpNode] {};%\n      \\node[tikzuml activity style] (sb-\\tikzumlCall@nodeName) at (\\tikzumlCallStartNodeName |- tikzumlTmpNode) {};%\n    }{%\n      \\draw (\\tikzumlCallBottomSrc)+(0,-\\tikzumlcallheight ex) node[coordinate, name=tikzumlTmpNode] {};%\n      \\node[tikzuml activity style] (eb-\\tikzumlCall@nodeName) at (\\tikzumlCallEndNodeName |- tikzumlTmpNode) {};%\n      \\node[tikzuml activity style] (sb-\\tikzumlCall@nodeName) at (\\tikzumlCallStartNodeName |- eb-\\tikzumlCall@nodeName) {};%\n    }%\n    %\n    \\xdef\\tikzumlCallBottomSrc{sb-\\tikzumlCall@nodeName}%\n  \\fi%\n  \\end{pgfonlayer}%\n  %\n  % draw activity periods\n  \\begin{pgfonlayer}{activity}%\n  \\ifthenelse{\\equal{\\tikzumlCallStartNodeName}{\\tikzumlCallEndNodeName}}{%\n    % draw root activity period only\n    \\ifnum\\thetikzumlCallLevel=0%\n      \\draw[draw=\\tikzumldrawcall, fill=\\tikzumlfillcall] (st-\\tikzumlCall@nodeName.north west) rectangle (sb-\\tikzumlCall@nodeName.south east);%\n    \\else%\n      % draw root activity from inner call\n      \\ifthenelse{\\equal{\\tikzumlCallStartNodeName}{\\tikzumlCallEndNodeNameold}}{}{%\n        \\draw[draw=\\tikzumldrawcall, fill=\\tikzumlfillcall] (st-\\tikzumlCall@nodeName.north west) rectangle (sb-\\tikzumlCall@nodeName.south east);%\n      }%\n    \\fi%\n  }{%\n    % draw root activity period\n    \\ifnum\\thetikzumlCallLevel=0%\n      \\draw[draw=\\tikzumldrawcall, fill=\\tikzumlfillcall] (st-\\tikzumlCall@nodeName.north west) rectangle (sb-\\tikzumlCall@nodeName.south east);%\n    \\else%\n      % draw root activity from inner call\n      \\ifthenelse{\\equal{\\tikzumlCallStartNodeName}{\\tikzumlCallEndNodeNameold}}{}{%\n        \\draw[draw=\\tikzumldrawcall, fill=\\tikzumlfillcall] (st-\\tikzumlCall@nodeName.north west) rectangle (sb-\\tikzumlCall@nodeName.south east);%\n      }%\n    \\fi%\n    % draw receiver activity period\n    \\draw[draw=\\tikzumldrawcall, fill=\\tikzumlfillcall] (et-\\tikzumlCall@nodeName.north west) rectangle (eb-\\tikzumlCall@nodeName.south east);%\n  }%\n  \\end{pgfonlayer}%\n  \\ifthenelse{\\equal{\\tikzumlCallDefaultFillColor}{\\tikzumlCallFillColor}}{}{%\n    \\fill[\\tikzumlfillcall] (st-\\tikzumlCall@nodeName.north west) rectangle (sb-\\tikzumlCall@nodeName.south east);%\n    \\draw[\\tikzumldrawcall] (st-\\tikzumlCall@nodeName.north west) rectangle (sb-\\tikzumlCall@nodeName.south west) (st-\\tikzumlCall@nodeName.north east) rectangle (sb-\\tikzumlCall@nodeName.south east);%\n  }%\n  %\n  % update last nodes drawn on sender and receiver lifelines\n  \\expandafter\\xdef\\csname tikzumlLastChild@\\tikzumlCallEndNodeName \\endcsname{eb-\\tikzumlCall@nodeName}%\n  \\expandafter\\xdef\\csname tikzumlLastChild@\\tikzumlCallStartNodeName \\endcsname{sb-\\tikzumlCall@nodeName}%\n  %\n  % draw call arrows\n  \\begin{pgfonlayer}{connections}%\n  \\ifthenelse{\\equal{\\tikzumlCallStartNodeName}{\\tikzumlCallEndNodeName}}{%\n    \\draw[\\tikzumlcallstyle, \\tikzumldrawcall] (st-\\tikzumlCall@nodeName.east) -- ++(2.5*\\tikzumlCallPadding ex,0) %\n                                               -- ++(0,-0.75*\\tikzumlCallPadding ex) %\n                                               node[font=\\tikzumlDefaultFont, text=\\tikzumltextcall, midway, right, name=\\tikzumlCall@nodeName-op] {\\tikzumlCallOp} %\n                                               -- (et-\\tikzumlCall@nodeName.east);%\n    %\n    % draw return arrow and update fit for parent fragment\n    \\ifthenelse{\\equal{\\tikzumltypecall}{synchron}}{%\n      \\ifthenelse{\\NOT\\equal{\\tikzumlCallReturn}{}\\OR\\equal{\\tikzumlCallWithReturn}{tikzumlTrue}}{%\n        \\ifnum\\c@tikzumlFragmentLevel>0%\n          \\edef\\tikzumlFragmentFitOld{\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname}%\n          \\expandafter\\xdef\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname{\\tikzumlFragmentFitOld (st-\\tikzumlCall@nodeName) (et-\\tikzumlCall@nodeName) (eb-\\tikzumlCall@nodeName) (sb-\\tikzumlCall@nodeName) (\\tikzumlCall@nodeName-op) (\\tikzumlCall@nodeName-return)}%\n        \\fi%\n        %\n        \\draw[tikzuml call return style, \\tikzumldrawcall] (eb-\\tikzumlCall@nodeName.east) -- ++(2.5*\\tikzumlCallPadding ex,0) \n                                                           -- ++(0,-0.75*\\tikzumlCallPadding ex) %\n                                         node[font=\\tikzumlDefaultFont, text=\\tikzumltextcall, midway, right, name=\\tikzumlCall@nodeName-return] {\\tikzumlCallReturn} %\n                                         -- (sb-\\tikzumlCall@nodeName.east);%\n      }{%\n        \\ifnum\\c@tikzumlFragmentLevel>0%\n          \\edef\\tikzumlFragmentFitOld{\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname}%\n          \\expandafter\\xdef\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname{\\tikzumlFragmentFitOld (st-\\tikzumlCall@nodeName) (et-\\tikzumlCall@nodeName) (eb-\\tikzumlCall@nodeName) (sb-\\tikzumlCall@nodeName) (\\tikzumlCall@nodeName-op)}%\n        \\fi%\n      }%\n    }{%\n      \\ifnum\\c@tikzumlFragmentLevel>0%\n        \\edef\\tikzumlFragmentFitOld{\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname}%\n        \\expandafter\\xdef\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname{\\tikzumlFragmentFitOld (st-\\tikzumlCall@nodeName) (et-\\tikzumlCall@nodeName) (eb-\\tikzumlCall@nodeName) (sb-\\tikzumlCall@nodeName) (\\tikzumlCall@nodeName-op)}%\n      \\fi%\n    }%\n  }{%\n    % draw call arrows\n    \\pgfextractx{\\tikzumlCall@xa}{\\pgfpointanchor{\\tikzumlCallStartNodeName}{center}}%\n    \\pgfextractx{\\tikzumlCall@xb}{\\pgfpointanchor{\\tikzumlCallEndNodeName}{center}}%\n    %\n    \\ifthenelse{\\tikzumlCall@xb>\\tikzumlCall@xa}{%\n      \\draw[\\tikzumlcallstyle, \\tikzumldrawcall] (st-\\tikzumlCall@nodeName.east) -- (et-\\tikzumlCall@nodeName.west) %\n                                                 node[font=\\tikzumlDefaultFont, text=\\tikzumltextcall, midway, above=-0.4ex, name=\\tikzumlCall@nodeName-op] {\\tikzumlCallOp};%\n    }{%\n      \\draw[\\tikzumlcallstyle, \\tikzumldrawcall] (st-\\tikzumlCall@nodeName.west) -- (et-\\tikzumlCall@nodeName.east) %\n                                                 node[font=\\tikzumlDefaultFont, text=\\tikzumltextcall, midway, above=-0.4ex, name=\\tikzumlCall@nodeName-op] {\\tikzumlCallOp};%\n    }%\n    %\n    % draw return arrow and update fit for parent fragment\n    \\ifthenelse{\\equal{\\tikzumltypecall}{synchron}}{%\n      \\ifthenelse{\\NOT\\equal{\\tikzumlCallReturn}{}\\OR\\equal{\\tikzumlCallWithReturn}{tikzumlTrue}}{%\n        \\ifnum\\c@tikzumlFragmentLevel>0%\n          \\edef\\tikzumlFragmentFitOld{\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname}%\n          \\expandafter\\xdef\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname{\\tikzumlFragmentFitOld (st-\\tikzumlCall@nodeName) (et-\\tikzumlCall@nodeName) (eb-\\tikzumlCall@nodeName) (sb-\\tikzumlCall@nodeName) (\\tikzumlCall@nodeName-op) (\\tikzumlCall@nodeName-return)}%\n        \\fi%\n        %\n        \\ifthenelse{\\tikzumlCall@xb>\\tikzumlCall@xa}{%\n          \\draw[tikzuml call return style, \\tikzumldrawcall] (eb-\\tikzumlCall@nodeName.west) -- (sb-\\tikzumlCall@nodeName.east) %\n                                     node[font=\\tikzumlDefaultFont, text=\\tikzumltextcall, midway, above=-0.4ex, name=\\tikzumlCall@nodeName-return] {\\tikzumlCallReturn};%\n        }{%\n          \\draw[tikzuml call return style, \\tikzumldrawcall] (eb-\\tikzumlCall@nodeName.east) -- (sb-\\tikzumlCall@nodeName.west) %\n                                     node[font=\\tikzumlDefaultFont, text=\\tikzumltextcall, midway, above=-0.4ex, name=\\tikzumlCall@nodeName-return] {\\tikzumlCallReturn};%\n        }%\n      }{%\n        \\ifnum\\c@tikzumlFragmentLevel>0%\n          \\edef\\tikzumlFragmentFitOld{\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname}%\n          \\expandafter\\xdef\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname{\\tikzumlFragmentFitOld (st-\\tikzumlCall@nodeName) (et-\\tikzumlCall@nodeName) (eb-\\tikzumlCall@nodeName) (sb-\\tikzumlCall@nodeName) (\\tikzumlCall@nodeName-op)}%\n        \\fi%\n      }%\n    }{%\n      \\ifnum\\c@tikzumlFragmentLevel>0%\n        \\edef\\tikzumlFragmentFitOld{\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname}%\n        \\expandafter\\xdef\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname{\\tikzumlFragmentFitOld (st-\\tikzumlCall@nodeName) (et-\\tikzumlCall@nodeName) (eb-\\tikzumlCall@nodeName) (sb-\\tikzumlCall@nodeName) (\\tikzumlCall@nodeName-op)}%\n      \\fi%\n    }%\n  }%\n  \\end{pgfonlayer}%\n}%\n%\n% alias for function self call\n\\newenvironment{umlcallself}[2][]{\\begin{umlcall}[#1]{#2}{#2} }{\\end{umlcall}}%\n%\n% define a combined fragment\n% optional : name: name of fragment\n%            type: type of fragment (opt, alt, break, loop, par, critical, ignore, consider, assert, neg, weak, strict, ref)\n%            label: label of fragment (ex : condition for opt, iterator for loop, ...)\n%            inner xsep, inner ysep: padding of the fragment box\n%            draw, fill, text: colors\n\\newenvironment{umlfragment}[1][]{%\n  % define a fragment separator\n  % optional : label of the fragment part (ex : else for alt)\n  \\providecommand{\\umlfpart}[1][]{%\n    \\stepcounter{tikzumlFragmentPartNum}%\n    %\n    \\node[outer sep=0, inner xsep=\\tikzumlFragmentXSep ex, inner ysep=\\tikzumlFragmentYSep ex, fit=\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname, name=\\tikzumlFragment@name-Part-tmp] {};%\n    \\node[anchor=east, name=\\tikzumlFragment@name-PartType-\\thetikzumlFragmentPartNum] at (\\tikzumlFragment@name-Part-tmp.north west |- \\tikzumlCallBottomSrc) {\\phantom{\\tikzumlFragmentType}};%\n    \\draw (\\tikzumlFragment@name-PartType-\\thetikzumlFragmentPartNum.north west |- \\tikzumlCallBottomSrc)+(0,-0.4*\\tikzumlFragment@paddingy ex) node[name=\\tikzumlFragment@name-PartWest-\\thetikzumlFragmentPartNum] {};%\n    \\draw (\\tikzumlFragment@name-Part-tmp.north east |- \\tikzumlCallBottomSrc)+(0,-0.4*\\tikzumlFragment@paddingy ex) node[name=\\tikzumlFragment@name-PartEast-\\thetikzumlFragmentPartNum] {};%\n    \\draw[dashed] (\\tikzumlFragment@name-PartWest-\\thetikzumlFragmentPartNum) -- (\\tikzumlFragment@name-PartEast-\\thetikzumlFragmentPartNum);\n    \\draw (\\tikzumlFragment@name-PartType-\\thetikzumlFragmentPartNum)+(0,-0.4*\\tikzumlFragment@paddingy ex) node[name=tikzumlTmpNode] {\\phantom{\\tikzumlFragmentType}};%\n    \\node[anchor=north west] at (tikzumlTmpNode.south west) {[##1]};%\n  }%\n  %\n  \\stepcounter{tikzumlFragmentNum}%\n  %\n  \\pgfkeys{/tikzuml/fragment/.cd, name/.initial=fragment@\\alph{tikzumlFragmentNum}, type/.initial=\\tikzumlFragmentDefaultType,%\n                                  label/.initial=tikzumlEmpty,%\n                                  inner xsep/.initial=\\tikzumlFragmentDefaultXSep, inner ysep/.initial=\\tikzumlFragmentDefaultYSep,%\n                                  draw/.initial=\\tikzumlDefaultDrawColor, fill/.initial=\\tikzumlFragmentDefaultFillColor,%\n                                  text/.initial=\\tikzumlDefaultTextColor,%\n                                  .unknown/.code={%\n                                    \\let\\keyname=\\pgfkeyscurrentname%\n                                    \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                    \\errmessage{TIKZUML ERROR : in umlfragment, invalid option \\keyname}%\n                                  }%\n  }%\n  \\pgfkeys{/tikzuml/fragment/.cd, #1}%\n  \\pgfkeys{/tikzuml/fragment/.cd, name/.get=\\tikzumlFragmentName, type/.get=\\tikzumlFragmentType,%\n                                  label/.get=\\tikzumlFragmentLabel,%\n                                  inner xsep/.get=\\tikzumlFragmentXSep, inner ysep/.get=\\tikzumlFragmentYSep,%\n                                  draw/.get=\\tikzumlFragmentDrawColor, fill/.get=\\tikzumlFragmentFillColor,%\n                                  text/.get=\\tikzumlFragmentTextColor%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlFragmentLabel}{tikzumlEmpty}}{%\n    \\def\\tikzumlFragmentLabel{}%\n  }{%\n    \\let\\tikzumlFragmentLabelold\\tikzumlFragmentLabel%\n    \\def\\tikzumlFragmentLabel{[\\tikzumlFragmentLabelold]}%\n  }%\n  %\n  \\ifnum\\thetikzumlFragmentLevel>0%\n    \\let\\tikzumlFragment@parentold\\tikzumlFragment@parent%\n    \\let\\tikzumlFragment@nameold\\tikzumlFragment@name%\n    \\edef\\tikzumlFragment@parent{\\tikzumlFragment@nameold}%\n  \\else%\n    \\setcounter{tikzumlFragmentPartNum}{0}%\n    \\edef\\tikzumlFragment@parent{}%\n    \\edef\\tikzumlFragment@parentold{}%\n    \\edef\\tikzumlFragment@nameold{}%\n  \\fi%\n  %\n  \\edef\\tikzumlFragment@name{\\tikzumlFragmentName}%\n  \\expandafter\\gdef\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname{}%\n  %\n  \\stepcounter{tikzumlFragmentLevel}%\n  %\n  \\ifnum\\thetikzumlCallLevel>0%\n    \\stepcounter{tikzumlCallStartFragmentNum}%\n  \\fi%\n  %\n  \\pgfmathparse{6*\\tikzumlFragmentYSep}%\n  \\xdef\\tikzumlFragment@paddingy{\\pgfmathresult}%\n  \\if\\c@tikzumlFragmentLevelNum=0%\n    \\setcounter{tikzumlFragmentLevelNum}{\\thetikzumlFragmentLevel}%\n  \\fi%\n  %\n  % time delay adjustment for two consecutive fragments\n  \\ifnum\\thetikzumlCallEndFragmentNum>0%\n    \\addtocounter{tikzumlCallEndFragmentNum}{-1}\n  \\fi%\n}{%\n  %\n  \\addtocounter{tikzumlFragmentLevel}{-1}%\n  %\n  \\ifnum\\thetikzumlFragmentLevel>0%\n    \\edef\\tikzumlFragmentFitOld{\\csname tikzumlFragmentFit\\tikzumlFragment@parent \\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlFragmentFit\\tikzumlFragment@parent \\endcsname{\\tikzumlFragmentFitOld (\\tikzumlFragment@name)}%\n  \\fi%\n  %\n  % draw working fragment box\n  \\begin{pgfonlayer}{fragment\\thetikzumlFragmentLevel}%\n  \\node[outer sep=0, inner xsep=\\tikzumlFragmentXSep ex, inner ysep=\\tikzumlFragmentYSep ex, fit=\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname, name=\\tikzumlFragment@name-back] {};%\n  \\end{pgfonlayer}%\n  %\n  % draw type and label\n  \\node[text=\\tikzumlFragmentTextColor, font=\\tikzumlDefaultFont, anchor=north east, name=\\tikzumlFragment@name-type] %\n                                   at (\\tikzumlFragment@name-back.north west) {\\tikzumlFragmentType};%\n  \\node[text=\\tikzumlFragmentTextColor, font=\\tikzumlDefaultFont, anchor=north west, name=\\tikzumlFragment@name-label] %\n                                   at (\\tikzumlFragment@name-type.south west) {\\tikzumlFragmentLabel};%\n  %\n  % draw final fragment box\n  \\begin{pgfonlayer}{fragment\\thetikzumlFragmentLevel}%\n  \\node[draw=\\tikzumlFragmentDrawColor, fill=\\tikzumlFragmentFillColor, outer sep=0, inner sep=0, font=\\tikzumlDefaultFont, fit=(\\tikzumlFragment@name-back) (\\tikzumlFragment@name-type) (\\tikzumlFragment@name-label), name=\\tikzumlFragment@name] {};%\n  \\end{pgfonlayer}%\n  %\n  \\draw[draw=\\tikzumlFragmentDrawColor] (\\tikzumlFragment@name.north west) rectangle (\\tikzumlFragment@name.south east);%\n  \\draw (\\tikzumlFragment@name-type.south east)+(0,1ex) node[name=\\tikzumlFragment@name-typetop, inner sep=0] {};%\n  \\draw (\\tikzumlFragment@name-type.south east)+(-1ex,0) node[name=\\tikzumlFragment@name-typeleft, inner sep=0] {};%\n  \\draw (\\tikzumlFragment@name.north west) -| (\\tikzumlFragment@name-typetop.center) -- (\\tikzumlFragment@name-typeleft.center) -| (\\tikzumlFragment@name.north west);%\n  %\n  \\ifnum\\thetikzumlCallLevel>0%\n    \\stepcounter{tikzumlCallEndFragmentNum}%\n  \\fi%\n}%\n%\n% define a constructor call\n% arg : call sender\n%       name of constructed object\n% optional : x: coordinate of the new object\n%            stereo: stereotype of the new object\n%            class: class type of the new object\n%            dt: time delay from last event\n%            name: name of the call\n%            draw, fill, text: colors\n%            no ddots: when used, disable printing of double dots\n\\newcommand{\\umlcreatecall}[3][]{%\n  \\stepcounter{tikzumlCallNum}%\n  \\edef\\tikzumlCall@lastchildNum{\\thetikzumlCallNum}% for testing presence of sub-calls\n  \\gdef\\tikzumlInCreateCall{1}%\n  \\pgfkeys{/tikzuml/createcall/.cd, x/.initial=tikzumlEmpty, stereo/.initial=\\tikzumlObjectDefaultStereo, class/.initial={},%\n                                    dt/.initial=\\tikzumlCreateCallDefaultDT, name/.initial=call-\\thetikzumlCallNum,%\n                                    draw/.initial=\\tikzumlDefaultDrawColor, fill/.initial=\\tikzumlCallDefaultFillColor,%\n                                    text/.initial=\\tikzumlDefaultTextColor,%\n                                    draw obj/.initial=\\tikzumlDefaultDrawColor, fill obj/.initial=\\tikzumlObjectDefaultFillColor,%\n                                    text obj/.initial=\\tikzumlDefaultTextColor,%\n                                    no ddots/.is if=tikzumlcreatecallNoDDots,%\n                                    no ddots=false,%\n                                    .unknown/.code={%\n                                      \\let\\keyname=\\pgfkeyscurrentname%\n                                      \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                      \\errmessage{TIKZUML ERROR : in umlcreatecall, invalid option \\keyname}%\n                                    }%\n  }%\n  \\pgfkeys{/tikzuml/createcall/.cd, #1}%\n  \\pgfkeys{/tikzuml/createcall/.cd, x/.get=\\tikzumlCreateCallX, stereo/.get=\\tikzumlCreateCallStereo,%\n                                    class/.get=\\tikzumlCreateCallClass,%\n                                    dt/.get=\\tikzumlCreateCallDT, name/.get=\\tikzumlCreateCallName,%\n                                    draw/.get=\\tikzumlCreateCallDrawColor, fill/.get=\\tikzumlCreateCallFillColor,%\n                                    text/.get=\\tikzumlCreateCallTextColor,%\n                                    draw obj/.get=\\tikzumlCreateCallObjectDrawColor, fill obj/.get=\\tikzumlCreateCallObjectFillColor,%\n                                    text obj/.get=\\tikzumlCreateCallObjectTextColor%\n  }%\n  %\n  \\def\\tikzumlCreateCallSrc@name{#2}%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlCreateCallSrc@nodeName{\\tikzumlCreateCallSrc@name}}\\x%\n  %\n  % managing time delays from previous/parent fragments \n  \\ifnum\\thetikzumlCallStartFragmentNum>0%\n    \\let\\tikzumlCreateCallDTold\\tikzumlCreateCallDT%\n    \\pgfmathparse{0.5*\\tikzumlFragment@paddingy+\\tikzumlCreateCallDTold}%\n    \\edef\\tikzumlCreateCallDT{\\pgfmathresult}%\n    \\addtocounter{tikzumlCallStartFragmentNum}{-1}\n  \\fi%\n  \\ifnum\\thetikzumlCallEndFragmentNum>0%\n    \\let\\tikzumlCreateCallDTold\\tikzumlCreateCallDT%\n    \\pgfmathparse{0.5*\\tikzumlFragment@paddingy+\\tikzumlCreateCallDTold}%\n    \\edef\\tikzumlCreateCallDT{\\pgfmathresult}%\n    \\addtocounter{tikzumlCallEndFragmentNum}{-1}\n  \\fi%\n  \\ifnum\\thetikzumlFragmentPartNum>0%\n    \\let\\tikzumlCreateCallDTold\\tikzumlCreateCallDT%\n    \\pgfmathparse{0.5*\\tikzumlFragment@paddingy+\\tikzumlCreateCallDTold}%\n    \\edef\\tikzumlCreateCallDT{\\pgfmathresult}%\n  \\fi%\n  %\n  % managing parent-child structure\n  \\ifnum\\thetikzumlCallLevel>0%\n    \\let\\tikzumlCall@nameold\\tikzumlCall@name%\n    \\def\\tikzumlCall@name{\\tikzumlCreateCallName}%\n    \\let\\tikzumlCall@parentold\\tikzumlCall@parent%\n    \\edef\\tikzumlCall@parent{\\tikzumlCall@parentold @@\\tikzumlCall@nameold}%\n  \\else%\n    \\edef\\tikzumlCall@parent{}%\n    \\edef\\tikzumlCall@parentold{}%\n    \\edef\\tikzumlCall@nameold{}\n    \\edef\\tikzumlCall@name{\\tikzumlCreateCallName}%\n  \\fi%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlCreateCall@nodeName{\\tikzumlCall@name}}\\x%\n  %\n  \\draw (\\csname tikzumlLastChild@\\tikzumlCreateCallSrc@nodeName \\endcsname)+(0,-\\tikzumlCreateCallDT ex) node[name=st-\\tikzumlCreateCall@nodeName, tikzuml activity style] {};%\n  %\n  \\xdef\\tikzumlCreateCallObjectSrc{st-\\tikzumlCreateCall@nodeName}%\n  %\n  \\iftikzumlcreatecallNoDDots%\n    \\umlobject[x=\\tikzumlCreateCallX, stereo=\\tikzumlCreateCallStereo, class=\\tikzumlCreateCallClass, draw=\\tikzumlCreateCallObjectDrawColor, fill=\\tikzumlCreateCallObjectFillColor, text=\\tikzumlCreateCallObjectTextColor, no ddots]{#3}%\n  \\else\n    \\umlobject[x=\\tikzumlCreateCallX, stereo=\\tikzumlCreateCallStereo, class=\\tikzumlCreateCallClass, draw=\\tikzumlCreateCallObjectDrawColor, fill=\\tikzumlCreateCallObjectFillColor, text=\\tikzumlCreateCallObjectTextColor]{#3}%\n  \\fi\n  %\n  \\draw (\\csname tikzumlLastChild@\\tikzumlCreateCallSrc@nodeName \\endcsname |- #3)+(0,-0.5*\\tikzumlCreateCallDT ex) node[name=sb-\\tikzumlCreateCall@nodeName, tikzuml activity style] {};%\n  %\n  \\expandafter\\xdef\\csname tikzumlLastChild@\\tikzumlCreateCallSrc@nodeName \\endcsname{sb-\\tikzumlCreateCall@nodeName}%\n  \\xdef\\tikzumlCallBottomSrc{sb-\\tikzumlCreateCall@nodeName}%\n  %\n  \\begin{pgfonlayer}{connections}%\n  \\draw[tikzuml synchron-msg style, \\tikzumlCreateCallDrawColor] (st-\\tikzumlCreateCall@nodeName) -- (#3) node[midway, above, font=\\tikzumlDefaultFont, text=\\tikzumlCreateCallTextColor, name=\\tikzumlCreateCall@nodeName-op] {create};%\n  \\end{pgfonlayer}%\n  %\n  \\ifnum\\thetikzumlCallLevel=0%\n    \\begin{pgfonlayer}{activity}%\n    \\draw[draw=\\tikzumlCreateCallDrawColor, fill=\\tikzumlCreateCallFillColor] (st-\\tikzumlCreateCall@nodeName.north west) rectangle (sb-\\tikzumlCreateCall@nodeName.south east);%\n    \\end{pgfonlayer}%\n  \\fi%\n  % add to fit fragment\n  \\ifnum\\c@tikzumlFragmentLevel>0%\n    \\edef\\tikzumlFragmentFitOld{\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlFragmentFit\\tikzumlFragment@name \\endcsname{\\tikzumlFragmentFitOld (st-\\tikzumlCreateCall@nodeName) (sb-\\tikzumlCreateCall@nodeName) (\\tikzumlCreateCall@nodeName-op) (#3) }%\n  \\fi%\n}\n%\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%                     component diagrams                  %\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%\n\\tikzstyle{tikzuml connector style}=[color=\\tikzumlDefaultDrawColor, -]%\n%\n\\newcounter{tikzumlComponentLevel}%\n\\newcounter{tikzumlComponentSubComponentNum}%\n\\newcounter{tikzumlConnectorNum}%\n\\setcounter{tikzumlConnectorNum}{1}%\n%\n\\newif\\iftikzumlcomponentWithoutCoords%\n%\n\\newcommand{\\picturedcomponent}[1]{%\n  \\pgfkeys{/tikzuml/component/picture/.cd, scale/.initial=1, .unknown/.code={}}%\n  \\pgfkeys{/tikzuml/component/picture/.cd,#1}%\n  \\pgfkeys{/tikzuml/component/picture/.cd, scale/.get=\\tikzumlComponentScale}%\n  \\begin{tikzpicture}[#1]%\n  \\filldraw (0,0) rectangle (1ex,1.5ex);%\n  \\filldraw (-0.2ex,0.4ex) rectangle (0.2ex,0.6ex);%\n  \\filldraw (-0.2ex,0.9ex) rectangle (0.2ex,1.1ex);%\n  \\end{tikzpicture}%\n}%\n%\n% define a uml component\n% args : name of the component\n%         content of the component\n% optional args : x,y coordinates of the component\n%                 width of the component node\n\\newenvironment{umlcomponent}[2][]{%\n  \\ifnum\\thetikzumlComponentLevel>0%\n    \\let\\tikzumlComponent@nameold\\tikzumlComponent@fitname%\n    \\let\\tikzumlComponent@parentold\\tikzumlComponent@parent%\n    \\edef\\tikzumlComponent@parent{\\tikzumlComponent@parentold @@\\tikzumlComponent@nameold}%\n  \\else%\n    \\def\\tikzumlComponent@parent{}%\n  \\fi%\n  %\n  \\stepcounter{tikzumlComponentLevel}%\n  %\n  \\pgfkeys{/tikzuml/component/.cd, x/.initial=\\tikzumlDefaultX, y/.initial=\\tikzumlDefaultX, width/.initial=\\tikzumlComponentDefaultWidth, name/.initial={},%\n                                   draw/.initial=\\tikzumlDefaultDrawColor, fill/.initial=\\tikzumlComponentDefaultFillColor,%\n                                   text/.initial=\\tikzumlDefaultTextColor, style/.style={},%\n                                   no coords/.is if=tikzumlcomponentWithoutCoords,%\n                                   no coords=false,%\n                                   .unknown/.code={%\n                                     \\let\\keyname=\\pgfkeyscurrentname%\n                                     \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                     \\ifthenelse{\\equal{\\keyname}{above}\\OR%\n                                                 \\equal{\\keyname}{left}\\OR%\n                                                 \\equal{\\keyname}{below}\\OR%\n                                                 \\equal{\\keyname}{right}\\OR%\n                                                 \\equal{\\keyname}{above left}\\OR%\n                                                 \\equal{\\keyname}{above right}\\OR%\n                                                 \\equal{\\keyname}{below left}\\OR%\n                                                 \\equal{\\keyname}{below right}}{%\n                                       \\IfSubStr{\\keyvalue}{ of }{%\n                                         \\pgfkeys{/tikzuml/component/.cd, no coords}%\n                                       }{}%\n                                     }{}%\n                                     \\ifx\\keyvalue\\pgfkeysnovalue%\n                                       \\pgfkeys{/tikzuml/component/.cd, style/.append style/.expand once={\\keyname}}%\n                                     \\else%\n                                       \\pgfkeys{/tikzuml/component/.cd, style/.append style/.expand twice={\\expandafter\\keyname\\expandafter=\\keyvalue}}%\n                                     \\fi%\n                                     %\\errmessage{TIKZUML ERROR : in umlcomponent, invalid option \\keyname}%\n                                   }%\n  }%\n  \\pgfkeys{/tikzuml/component/.cd, #1}%\n  \\pgfkeys{/tikzuml/component/.cd, x/.get=\\tikzumlComponentXShift, y/.get=\\tikzumlComponentYShift,%\n                                   width/.get=\\tikzumlComponentMinimumWidth, name/.get=\\tikzumlComponentName,%\n                                   draw/.get=\\tikzumlComponentDrawColor, fill/.get=\\tikzumlComponentFillColor,%\n                                   text/.get=\\tikzumlComponentTextColor%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlComponentName}{}}{%\n    \\edef\\tikzumlComponent@name{#2}%\n  }{%\n    \\edef\\tikzumlComponent@name{\\tikzumlComponentName}%\n  }%\n  %\n  \\begingroup%\n    \\def\\_{@}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlComponent@fitname{\\tikzumlComponent@name}}\\x%\n  %\n  \\let\\tikzumlComponent@nodeNameold\\tikzumlComponent@nodeName%\n  \\def\\tikzumlComponent@caption{#2}%\n  %  \n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlComponent@nodeName{\\tikzumlComponent@name}}\\x%\n  %\n  \\expandafter\\gdef\\csname tikzumlComponentFit\\tikzumlComponent@parent @@\\tikzumlComponent@fitname\\endcsname{}%\n  %\n  \\setcounter{tikzumlComponentSubComponentNum}{0}%\n  %\n  \\begin{scope}[xshift=\\tikzumlComponentXShift cm, yshift=\\tikzumlComponentYShift cm]%\n}{%\n  \\addtocounter{tikzumlComponentLevel}{-1}%\n  \\begin{pgfonlayer}{component\\thetikzumlComponentLevel}%\n  %\n  % if contains nothing, one define a fictive node to enable the fit option\n  \\ifnum\\c@tikzumlComponentSubComponentNum=0%\n    \\iftikzumlcomponentWithoutCoords%\n      \\node[inner ysep=0.5ex, minimum width=\\tikzumlComponentMinimumWidth, font=\\tikzumlDefaultFont, /tikzuml/component/style] (\\tikzumlComponent@nodeName-root)  {\\phantom{\\tikzumlComponent@nodeName}};%\n    \\else%\n      \\node[inner ysep=0.5ex, minimum width=\\tikzumlComponentMinimumWidth, font=\\tikzumlDefaultFont, /tikzuml/component/style] (\\tikzumlComponent@nodeName-root) at (0,0) {\\phantom{\\tikzumlComponent@nodeName}};%\n    \\fi%\n    \\expandafter\\xdef\\csname tikzumlComponentFit\\tikzumlComponent@parent @@\\tikzumlComponent@fitname\\endcsname{(\\tikzumlComponent@nodeName-root)}%\n  \\fi%\n  %\n  \\ifnum\\c@tikzumlComponentLevel>0%\n    \\def\\tikzumlComponentFitTmp{\\csname tikzumlComponentFit\\tikzumlComponent@parent\\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlComponentFit\\tikzumlComponent@parent\\endcsname{\\tikzumlComponentFitTmp (\\tikzumlComponent@nodeName-body) (\\tikzumlComponent@nodeName-caption)}%\n    \\stepcounter{tikzumlComponentSubComponentNum}%\n  \\fi%\n  %\n  \\node[inner sep=2ex, font=\\tikzumlDefaultFont, fit = \\csname tikzumlComponentFit\\tikzumlComponent@parent @@\\tikzumlComponent@fitname\\endcsname] (\\tikzumlComponent@nodeName-body) {};%\n  \\node[above, font=\\tikzumlDefaultFont] (\\tikzumlComponent@nodeName-captiontmp) at (\\tikzumlComponent@nodeName-body.north) {\\tikzumlComponent@caption};%\n  \\node (\\tikzumlComponent@nodeName-logotmp) at (\\tikzumlComponent@nodeName-captiontmp.north -| \\tikzumlComponent@nodeName-body.east) {\\picturedcomponent{draw=\\tikzumlComponentDrawColor, fill=\\tikzumlComponentFillColor, font=\\tikzumlDefaultFont} };%\n  \\node[draw=\\tikzumlComponentDrawColor, fill=\\tikzumlComponentFillColor, name=\\tikzumlComponent@nodeName, /tikzuml/component/style, fit=(\\tikzumlComponent@nodeName-body) (\\tikzumlComponent@nodeName-captiontmp)] {};%\n  \\node[font=\\tikzumlDefaultFont] (\\tikzumlComponent@nodeName-caption) at (\\tikzumlComponent@nodeName-captiontmp) {\\tikzumlComponent@caption};%\n  \\draw (\\tikzumlComponent@nodeName-caption.north -| \\tikzumlComponent@nodeName.east) node[font=\\tikzumlDefaultFont, xshift=-1ex, below=-1ex, name=\\tikzumlComponent@nodeName-logo] {\\picturedcomponent{draw=\\tikzumlComponentDrawColor, fill=\\tikzumlComponentFillColor, font=\\tikzumlDefaultFont} };%\n  \\draw (\\tikzumlComponent@nodeName-caption.south -| \\tikzumlComponent@nodeName.north west) -- (\\tikzumlComponent@nodeName-caption.south -| \\tikzumlComponent@nodeName.north east);%\n  \\coordinate (\\tikzumlComponent@nodeName-west-port) at (\\tikzumlComponent@nodeName.west);\n  \\coordinate (\\tikzumlComponent@nodeName-east-port) at (\\tikzumlComponent@nodeName.east);\n  \\coordinate (\\tikzumlComponent@nodeName-south-port) at (\\tikzumlComponent@nodeName.south);\n  \\coordinate (\\tikzumlComponent@nodeName-north-port) at (\\tikzumlComponent@nodeName.north);\n  \\end{pgfonlayer}%\n  \\end{scope}%\n  %\n  % add to fit\n  \\ifnum\\c@tikzumlPackageLevel>0%\n    \\edef\\tikzumlPackageFitOld{\\csname tikzumlPackageFit\\tikzumlPackage@parent @@\\tikzumlPackage@fitname\\endcsname}%\n    \\expandafter\\xdef\\csname tikzumlPackageFit\\tikzumlPackage@parent @@\\tikzumlPackage@fitname\\endcsname{\\tikzumlPackageFitOld (\\tikzumlComponent@nodeName)}%\n    \\stepcounter{tikzumlPackageClassNum}%\n  \\fi%\n}%\n%\n% shortcut for empty component\n\\newcommand{\\umlbasiccomponent}[2][]{\\begin{umlcomponent}[#1]{#2} \\end{umlcomponent}}%\n%\n\\newcommand{\\umlrequiredinterface}[2][]{%\n  \\def\\tikzumlInterfaceWithPort{tikzumlFalse}%\n  \\pgfkeys{/tikzuml/requiredinterfacerelation/.cd, interface/.initial={}, distance/.initial=\\tikzumlRequiredInterfaceDefaultDistance,%\n                                                   name/.initial=tikzumlEmpty, width/.initial=\\tikzumlRequiredInterfaceDefaultWidth,%\n                                                   padding/.initial=\\tikzumlRequiredInterfaceDefaultPadding,%\n                                                   draw/.initial=\\tikzumlDefaultDrawColor, fill/.initial=\\tikzumlComponentDefaultFillColor,%\n                                                   .unknown/.code={%\n                                                     \\let\\keyname=\\pgfkeyscurrentname%\n                                                     \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                                     \\ifthenelse{\\equal{\\keyname}{with port}}{%\n                                                       \\def\\tikzumlInterfaceWithPort{tikzumlTrue}%\n                                                     }{}%\n                                                   }%\n  }%\n  \\pgfkeys{/tikzuml/requiredinterfacerelation/.cd, #1}%\n  \\pgfkeys{/tikzuml/requiredinterfacerelation/.cd, interface/.get=\\tikzumlRequiredInterfaceLabel,%\n                                                   distance/.get=\\tikzumlRequiredInterfaceDistance,%\n                                                   name/.get=\\tikzumlRequiredInterfaceName,%\n                                                   width/.get=\\tikzumlRequiredInterfaceWidth,%\n                                                   padding/.get=\\tikzumlRequiredInterfacePadding,%\n                                                   draw/.get=\\tikzumlRequiredInterfaceDrawColor,%\n                                                   fill/.get=\\tikzumlRequiredInterfaceFillColor%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlRequiredInterfaceName}{tikzumlEmpty}}{%\n    \\edef\\tikzumlRequiredInterface@interfacename{#2-east-interface}%\n    \\edef\\tikzumlRequiredInterface@portname{#2-east-port}%\n    \\edef\\tikzumlRequiredInterface@paddingname{#2-east-padding}%\n  }{%\n    \\edef\\tikzumlRequiredInterface@interfacename{\\tikzumlRequiredInterfaceName}%\n    \\edef\\tikzumlRequiredInterface@portname{\\tikzumlRequiredInterfaceName-port}%\n    \\edef\\tikzumlRequiredInterface@paddingname{\\tikzumlRequiredInterfaceName-padding}%\n  }%\n  %\n  \\edef\\tikzumlRequiredInterface@name{#2}%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlRequiredInterface@nodeName{\\tikzumlRequiredInterface@name}}\\x%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlRequiredInterface@interfacenodeName{\\tikzumlRequiredInterface@interfacename}}\\x%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlRequiredInterface@portnodeName{\\tikzumlRequiredInterface@portname}}\\x%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlRequiredInterface@paddingnodeName{\\tikzumlRequiredInterface@paddingname}}\\x%\n  %\n  \\ifthenelse{\\equal{\\tikzumlInterfaceWithPort}{tikzumlTrue}}{%\n    \\node[inner sep=0.5*\\tikzumlRequiredInterfaceWidth, rectangle, draw=\\tikzumlRequiredInterfaceDrawColor, fill=\\tikzumlRequiredInterfaceFillColor] (\\tikzumlRequiredInterface@portnodeName) at (\\tikzumlRequiredInterface@nodeName.east) {};%\n  }{%\n    \\node[inner sep=0] (\\tikzumlRequiredInterface@nodeName-east-port) at (\\tikzumlRequiredInterface@nodeName.east) {};%\n  }%\n  \\begin{scope}%\n  \\draw (\\tikzumlRequiredInterface@nodeName)+(\\tikzumlRequiredInterfaceDistance,0) node[inner sep=0, text width=\\tikzumlRequiredInterfaceWidth, circle, name=\\tikzumlRequiredInterface@interfacenodeName-tmp] {};%\n  \\clip (\\tikzumlRequiredInterface@interfacenodeName-tmp.north) rectangle (\\tikzumlRequiredInterface@interfacenodeName-tmp.south -| \\tikzumlRequiredInterface@interfacenodeName-tmp.west);%\n  \\node[inner sep=0, text width=\\tikzumlRequiredInterfaceWidth, circle, draw=\\tikzumlRequiredInterfaceDrawColor] (\\tikzumlRequiredInterface@interfacenodeName) at (\\tikzumlRequiredInterface@interfacenodeName-tmp) {};%\n  \\end{scope}%\n  \\node[above] at (\\tikzumlRequiredInterface@interfacenodeName.north) {\\tikzumlRequiredInterfaceLabel};%\n  %\n  \\umlrelation[style={tikzuml connector style}, #1]{\\tikzumlRequiredInterface@portnodeName}{\\tikzumlRequiredInterface@interfacenodeName}%\n  %\n  \\draw (\\tikzumlRequiredInterface@interfacenodeName)+(\\tikzumlRequiredInterfacePadding,0) node[name=\\tikzumlRequiredInterface@paddingnodeName] {};%\n  %\n  % add to fit\n  \\ifnum\\c@tikzumlComponentLevel>0%\n        \\def\\tikzumlComponentFitTmp{\\csname tikzumlComponentFit\\tikzumlComponent@parent @@\\tikzumlComponent@fitname\\endcsname}%\n        \\expandafter\\xdef\\csname tikzumlComponentFit\\tikzumlComponent@parent @@\\tikzumlComponent@fitname\\endcsname{\\tikzumlComponentFitTmp (\\tikzumlRequiredInterface@paddingnodeName) (\\tikzumlRequiredInterface@portnodeName) }%\n  \\fi%\n}%\n%\n\\newcommand{\\umlprovidedinterface}[2][]{%\n  \\def\\tikzumlInterfaceWithPort{tikzumlFalse}%\n  \\pgfkeys{/tikzuml/providedinterfacerelation/.cd, interface/.initial={}, distance/.initial=\\tikzumlProvidedInterfaceDefaultDistance,%\n                                                   name/.initial=tikzumlEmpty, width/.initial=\\tikzumlProvidedInterfaceDefaultWidth,%\n                                                   padding/.initial=\\tikzumlProvidedInterfaceDefaultPadding,%\n                                                   draw/.initial=\\tikzumlDefaultDrawColor, fill/.initial=\\tikzumlComponentDefaultFillColor,%\n                                                   .unknown/.code={%\n                                                     \\let\\keyname=\\pgfkeyscurrentname%\n                                                     \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                                     \\ifthenelse{\\equal{\\keyname}{with port}}{%\n                                                       \\def\\tikzumlInterfaceWithPort{tikzumlTrue}%\n                                                     }{}%\n                                                   }%\n  }%\n  \\pgfkeys{/tikzuml/providedinterfacerelation/.cd, #1}%\n  \\pgfkeys{/tikzuml/providedinterfacerelation/.cd, interface/.get=\\tikzumlProvidedInterfaceLabel,%\n                                                   distance/.get=\\tikzumlProvidedInterfaceDistance,%\n                                                   name/.get=\\tikzumlProvidedInterfaceName,%\n                                                   width/.get=\\tikzumlProvidedInterfaceWidth,%\n                                                   padding/.get=\\tikzumlProvidedInterfacePadding,%\n                                                   draw/.get=\\tikzumlProvidedInterfaceDrawColor,%\n                                                   fill/.get=\\tikzumlProvidedInterfaceFillColor%\n  }%\n  %\n  \\ifthenelse{\\equal{\\tikzumlProvidedInterfaceName}{tikzumlEmpty}}{%\n    \\edef\\tikzumlProvidedInterface@interfacename{#2-west-interface}%\n    \\edef\\tikzumlProvidedInterface@portname{#2-west-port}%\n    \\edef\\tikzumlProvidedInterface@paddingname{#2-west-padding}%\n  }{%\n    \\edef\\tikzumlProvidedInterface@interfacename{\\tikzumlProvidedInterfaceName}%\n    \\edef\\tikzumlProvidedInterface@portname{\\tikzumlProvidedInterfaceName-port}%\n    \\edef\\tikzumlProvidedInterface@paddingname{\\tikzumlProvidedInterfaceName-padding}%\n  }%\n  %\n  \\edef\\tikzumlProvidedInterface@name{#2}%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlProvidedInterface@nodeName{\\tikzumlProvidedInterface@name}}\\x%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlProvidedInterface@interfacenodeName{\\tikzumlProvidedInterface@interfacename}}\\x%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlProvidedInterface@portnodeName{\\tikzumlProvidedInterface@portname}}\\x%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlProvidedInterface@paddingnodeName{\\tikzumlProvidedInterface@paddingname}}\\x%\n  %\n  \\ifthenelse{\\equal{\\tikzumlInterfaceWithPort}{tikzumlTrue}}{%\n    \\node[inner sep=0.5*\\tikzumlProvidedInterfaceWidth, rectangle, draw=\\tikzumlProvidedInterfaceDrawColor, fill=\\tikzumlProvidedInterfaceFillColor] (\\tikzumlProvidedInterface@portnodeName) at (\\tikzumlProvidedInterface@nodeName.west) {};%\n  }{%\n    \\node[inner sep=0] (\\tikzumlProvidedInterface@portnodeName) at (\\tikzumlProvidedInterface@nodeName.west) {};%\n  }%\n  \\draw (\\tikzumlProvidedInterface@nodeName)+(-\\tikzumlProvidedInterfaceDistance,0) node[inner sep=0, text width=\\tikzumlProvidedInterfaceWidth, circle, draw=\\tikzumlProvidedInterfaceDrawColor, fill=\\tikzumlProvidedInterfaceFillColor, name=\\tikzumlProvidedInterface@interfacenodeName] {};%\n  \\node[above] at (\\tikzumlProvidedInterface@interfacenodeName.north)\n {\\tikzumlProvidedInterfaceLabel};%\n  %\n  \\umlrelation[style={tikzuml connector style}, #1]{\\tikzumlProvidedInterface@portnodeName}{\\tikzumlProvidedInterface@interfacenodeName}%\n  %\n  \\draw (\\tikzumlProvidedInterface@interfacenodeName)+(-\\tikzumlProvidedInterfacePadding,0) node[name=\\tikzumlProvidedInterface@paddingnodeName] {};%\n  %\n  % add to fit\n  \\ifnum\\thetikzumlComponentLevel>0%\n        \\def\\tikzumlComponentFitTmp{\\csname tikzumlComponentFit\\tikzumlComponent@parent @@\\tikzumlComponent@fitname\\endcsname}%\n        \\expandafter\\xdef\\csname tikzumlComponentFit\\tikzumlComponent@parent @@\\tikzumlComponent@fitname\\endcsname{\\tikzumlComponentFitTmp (\\tikzumlProvidedInterface@paddingnodeName) (\\tikzumlProvidedInterface@portnodeName) }%\n      \\fi%\n}%\n%\n\\newlength{\\tikzuml@AC@xa}%\n\\newlength{\\tikzuml@AC@ya}%\n\\newlength{\\tikzuml@AC@xb}%\n\\newlength{\\tikzuml@AC@yb}%\n\\newlength{\\tikzuml@AC@xi}%\n\\newlength{\\tikzuml@AC@yi}%\n\\newlength{\\tikzuml@AC@xic}%\n\\newlength{\\tikzuml@AC@yic}%\n\\newlength{\\tikzuml@AC@xio}%\n\\newlength{\\tikzuml@AC@yio}%\n\\newlength{\\tikzuml@AC@AB}%\n\\newlength{\\tikzuml@AC@lambda}%\n\\newlength{\\tikzuml@AC@xtrc}%\n\\newlength{\\tikzuml@AC@ytrc}%\n\\newlength{\\tikzuml@AC@xtlc}%\n\\newlength{\\tikzuml@AC@ytlc}%\n\\newlength{\\tikzuml@AC@xblc}%\n\\newlength{\\tikzuml@AC@yblc}%\n\\newlength{\\tikzuml@AC@xbrc}%\n\\newlength{\\tikzuml@AC@ybrc}%\n\\newlength{\\tikzuml@AC@middleArm}%\n%\n\\newcommand{\\umlassemblyconnectorsymbol}[2]{%\n  \\ifthenelse{\\NOT\\equal{\\tikzumlAssemblyConnectorLabel}{}}{%\n  \\edef\\tikzuml@ACStart@name{#1}%\n  \\edef\\tikzuml@ACEnd@name{#2}%\n  \\edef\\tikzuml@AC@width{\\tikzumlAssemblyConnectorWidth}%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzuml@ACStart@nodeName{\\tikzuml@ACStart@name}}\\x%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzuml@ACEnd@nodeName{\\tikzuml@ACEnd@name}}\\x%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzuml@ACInterface@nodeName{\\tikzumlAssemblyConnectorSymbolName}}\\x%\n  %\n  \\pgfextractx{\\tikzuml@AC@xa}{\\pgfpointanchor{\\tikzuml@ACStart@nodeName}{\\tikzumlAssemblyConnectorStartAnchor}}%\n  \\pgfextracty{\\tikzuml@AC@ya}{\\pgfpointanchor{\\tikzuml@ACStart@nodeName}{\\tikzumlAssemblyConnectorStartAnchor}}%\n  \\pgfextractx{\\tikzuml@AC@xb}{\\pgfpointanchor{\\tikzuml@ACEnd@nodeName}{\\tikzumlAssemblyConnectorEndAnchor}}%\n  \\pgfextracty{\\tikzuml@AC@yb}{\\pgfpointanchor{\\tikzuml@ACEnd@nodeName}{\\tikzumlAssemblyConnectorEndAnchor}}%\n  \\pgfmathsetlength{\\tikzuml@AC@xi}{0.5*\\tikzuml@AC@xa+0.5*\\tikzuml@AC@xb}%\n  \\pgfmathsetlength{\\tikzuml@AC@yi}{0.5*\\tikzuml@AC@ya+0.5*\\tikzuml@AC@yb}%\n  \\pgfmathsetlength{\\tikzuml@AC@AB}{veclen(\\tikzuml@AC@xa-\\tikzuml@AC@xb,\\tikzuml@AC@ya-\\tikzuml@AC@yb)}%\n  \\pgfmathsetlength{\\tikzuml@AC@lambda}{0.25*\\tikzuml@AC@width/\\tikzuml@AC@AB}%\n  \\pgfmathsetlength{\\tikzuml@AC@xic}{\\tikzuml@AC@xi-\\tikzuml@AC@lambda*(\\tikzuml@AC@xb-\\tikzuml@AC@xa)}%\n  \\pgfmathsetlength{\\tikzuml@AC@yic}{\\tikzuml@AC@yi-\\tikzuml@AC@lambda*(\\tikzuml@AC@yb-\\tikzuml@AC@ya)}%\n  \\pgfmathsetlength{\\tikzuml@AC@xio}{\\tikzuml@AC@xi+\\tikzuml@AC@lambda*(\\tikzuml@AC@xb-\\tikzuml@AC@xa)}%\n  \\pgfmathsetlength{\\tikzuml@AC@yio}{\\tikzuml@AC@yi+\\tikzuml@AC@lambda*(\\tikzuml@AC@yb-\\tikzuml@AC@ya)}%\n  \\node[inner sep=0.5*\\tikzuml@AC@width] (\\tikzuml@ACInterface@nodeName-interface) at (\\tikzuml@AC@xi,\\tikzuml@AC@yi) {};%\n  \\node[inner sep=0, text width=\\tikzuml@AC@width, circle, draw=\\tikzumlAssemblyConnectorDrawColor, fill=\\tikzumlAssemblyConnectorFillColor] (\\tikzuml@ACInterface@nodeName-io) at (\\tikzuml@AC@xio,\\tikzuml@AC@yio) {};%\n  \\begin{scope}%\n  \\pgfmathsetlength{\\tikzuml@AC@xtrc}{\\tikzuml@AC@xic-2*\\tikzuml@AC@lambda*(\\tikzuml@AC@yb-\\tikzuml@AC@ya)}%\n  \\pgfmathsetlength{\\tikzuml@AC@ytrc}{\\tikzuml@AC@yic+2*\\tikzuml@AC@lambda*(\\tikzuml@AC@xb-\\tikzuml@AC@xa)}%\n  \\pgfmathsetlength{\\tikzuml@AC@xbrc}{\\tikzuml@AC@xic+2*\\tikzuml@AC@lambda*(\\tikzuml@AC@yb-\\tikzuml@AC@ya)}%\n  \\pgfmathsetlength{\\tikzuml@AC@ybrc}{\\tikzuml@AC@yic-2*\\tikzuml@AC@lambda*(\\tikzuml@AC@xb-\\tikzuml@AC@xa)}%\n  \\pgfmathsetlength{\\tikzuml@AC@xtlc}{\\tikzuml@AC@xic-3*\\tikzuml@AC@lambda*(\\tikzuml@AC@yb-\\tikzuml@AC@ya+\\tikzuml@AC@xb-\\tikzuml@AC@xa)}%\n  \\pgfmathsetlength{\\tikzuml@AC@ytlc}{\\tikzuml@AC@yic+3*\\tikzuml@AC@lambda*(\\tikzuml@AC@xb-\\tikzuml@AC@xa+\\tikzuml@AC@ya-\\tikzuml@AC@yb)}%\n  \\pgfmathsetlength{\\tikzuml@AC@xblc}{\\tikzuml@AC@xic+3*\\tikzuml@AC@lambda*(\\tikzuml@AC@yb-\\tikzuml@AC@ya+\\tikzuml@AC@xa-\\tikzuml@AC@xb)}%\n  \\pgfmathsetlength{\\tikzuml@AC@yblc}{\\tikzuml@AC@yic-3*\\tikzuml@AC@lambda*(\\tikzuml@AC@xb-\\tikzuml@AC@xa+\\tikzuml@AC@yb-\\tikzuml@AC@ya)}%\n  \\coordinate (\\tikzuml@ACInterface@nodeName-trc) at (\\tikzuml@AC@xtrc,\\tikzuml@AC@ytrc);%\n  \\coordinate (\\tikzuml@ACInterface@nodeName-brc) at (\\tikzuml@AC@xbrc,\\tikzuml@AC@ybrc);%\n  \\coordinate (\\tikzuml@ACInterface@nodeName-tlc) at (\\tikzuml@AC@xtlc,\\tikzuml@AC@ytlc);%\n  \\coordinate (\\tikzuml@ACInterface@nodeName-blc) at (\\tikzuml@AC@xblc,\\tikzuml@AC@yblc);%\n  \\clip (\\tikzuml@ACInterface@nodeName-trc) --  (\\tikzuml@ACInterface@nodeName-tlc) -- (\\tikzuml@ACInterface@nodeName-blc) -- (\\tikzuml@ACInterface@nodeName-brc) -- cycle;%\n  \\node[inner sep=0, text width=\\tikzuml@AC@width, circle, draw=\\tikzumlAssemblyConnectorDrawColor, fill=\\tikzumlAssemblyConnectorFillColor] (\\tikzuml@ACInterface@nodeName-ic) at (\\tikzuml@AC@xic,\\tikzuml@AC@yic) {};%\n  \\end{scope}%\n  \\node[above, font=\\tikzumlDefaultFont] at (\\tikzuml@ACInterface@nodeName-interface.north)\n {\\tikzumlAssemblyConnectorLabel};%\n  }{}%\n}%\n%\n\\newcommand{\\umlassemblyconnector}[3][]{%\n  \\def\\tikzumlAssemblyConnectorWithPort{tikzumlFalse}%\n  \\def\\tikzumlAssemblyConnectorFirstArm{tikzumlFalse}%\n  \\def\\tikzumlAssemblyConnectorSecondArm{tikzumlFalse}%\n  \\def\\tikzumlAssemblyConnectorMiddleArm{tikzumlFalse}%\n  \\def\\tikzumlAssemblyConnectorLastArm{tikzumlFalse}%\n  \\pgfkeys{/tikzuml/assemblyconnectorrelation/.cd, geometry/.initial=--, interface/.initial={},%\n                                                   arm1/.initial={auto}, arm2/.initial={auto},%\n                                                   name/.initial=connector-\\thetikzumlConnectorNum, width/.initial=1em,%\n                                                   anchor1/.initial={}, anchor2/.initial={},%\n                                                   draw/.initial=\\tikzumlDefaultDrawColor,%\n                                                   fill assembly connector/.initial=\\tikzumlAssemblyConnectorDefaultFillColor,%\n                                                   fill port/.initial=\\tikzumlPortDefaultFillColor,%\n                                                   .unknown/.code={%\n                                                     \\let\\keyname=\\pgfkeyscurrentname%\n                                                     \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                                     \\ifthenelse{\\equal{\\keyname}{with port}}{%\n                                                       \\def\\tikzumlAssemblyConnectorWithPort{tikzumlTrue}%\n                                                     }{%\n                                                       \\ifthenelse{\\equal{\\keyname}{first arm}}{%\n                                                         \\def\\tikzumlAssemblyConnectorFirstArm{tikzumlTrue}%\n                                                       }{%\n                                                         \\ifthenelse{\\equal{\\keyname}{second arm}}{%\n                                                           \\def\\tikzumlAssemblyConnectorSecondArm{tikzumlTrue}%\n                                                         }{%\n                                                           \\ifthenelse{\\equal{\\keyname}{middle arm}}{%\n                                                             \\def\\tikzumlAssemblyConnectorMiddleArm{tikzumlTrue}%\n                                                           }{%\n                                                             \\ifthenelse{\\equal{\\keyname}{last arm}}{%\n                                                               \\def\\tikzumlAssemblyConnectorLastArm{tikzumlTrue}%\n                                                             }{%\n                                                             }%\n                                                           }%\n                                                         }%\n                                                       }%\n                                                     }%\n                                                   }%\n  }%\n  \\pgfkeys{/tikzuml/assemblyconnectorrelation/.cd, #1}%\n  \\pgfkeys{/tikzuml/assemblyconnectorrelation/.cd, geometry/.get=\\tikzumlAssemblyConnectorGeometry,%\n                                                   name/.get=\\tikzumlAssemblyConnectorName,%\n                                                   interface/.get=\\tikzumlAssemblyConnectorLabel,%\n                                                   width/.get=\\tikzumlAssemblyConnectorWidth,%\n                                                   arm1/.get=\\tikzumlAssemblyConnectorStartArm,%\n                                                   arm2/.get=\\tikzumlAssemblyConnectorEndArm,%\n                                                   anchor1/.get=\\tikzumlAssemblyConnectorStartAnchorTmp,%\n                                                   anchor2/.get=\\tikzumlAssemblyConnectorEndAnchorTmp,%\n                                                   draw/.get=\\tikzumlAssemblyConnectorDrawColor,%\n                                                   fill assembly connector/.get=\\tikzumlAssemblyConnectorFillColor,%\n                                                   fill port/.get=\\tikzumlAssemblyConnectorPortFillColor%\n  }%\n  %\n  \\edef\\tikzumlAssemblyConnectorStart@name{#2}%\n  \\edef\\tikzumlAssemblyConnectorEnd@name{#3}%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlAssemblyConnectorStart@nodeName{\\tikzumlAssemblyConnectorStart@name}}\\x%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlAssemblyConnectorEnd@nodeName{\\tikzumlAssemblyConnectorEnd@name}}\\x%\n  %\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlAssemblyConnectorLabel@nodeName{\\tikzumlAssemblyConnectorLabel}}\\x%\n  %\n  \\pgfextractx{\\tikzuml@AC@xa}{\\pgfpointanchor{\\tikzumlAssemblyConnectorStart@nodeName}{center}}%\n  \\pgfextracty{\\tikzuml@AC@ya}{\\pgfpointanchor{\\tikzumlAssemblyConnectorStart@nodeName}{center}}%\n  \\pgfextractx{\\tikzuml@AC@xb}{\\pgfpointanchor{\\tikzumlAssemblyConnectorEnd@nodeName}{center}}%\n  \\pgfextracty{\\tikzuml@AC@yb}{\\pgfpointanchor{\\tikzumlAssemblyConnectorEnd@nodeName}{center}}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorGeometry}{--}}{%\n    \\ifthenelse{\\tikzuml@AC@xb>\\tikzuml@AC@xa}{%\n      \\def\\tikzumlAssemblyConnectorStartAnchor{east}%\n      \\def\\tikzumlAssemblyConnectorEndAnchor{west}%\n    }{%\n      \\def\\tikzumlAssemblyConnectorStartAnchor{west}%\n      \\def\\tikzumlAssemblyConnectorEndAnchor{east}%\n    }\n  }{}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorGeometry}{-|}}{%\n    \\ifthenelse{\\tikzuml@AC@xb>\\tikzuml@AC@xa}{%\n      \\def\\tikzumlAssemblyConnectorStartAnchor{east}%\n    }{%\n      \\def\\tikzumlAssemblyConnectorStartAnchor{west}%\n    }\n    \\ifthenelse{\\tikzuml@AC@yb>\\tikzuml@AC@ya}{%\n      \\def\\tikzumlAssemblyConnectorEndAnchor{south}%\n    }{%\n      \\def\\tikzumlAssemblyConnectorEndAnchor{north}%\n    }\n  }{}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorGeometry}{|-}}{%\n    \\ifthenelse{\\tikzuml@AC@xb>\\tikzuml@AC@xa}{%\n      \\def\\tikzumlAssemblyConnectorEndAnchor{west}%\n    }{%\n      \\def\\tikzumlAssemblyConnectorEndAnchor{east}%\n    }\n    \\ifthenelse{\\tikzuml@AC@yb>\\tikzuml@AC@ya}{%\n      \\def\\tikzumlAssemblyConnectorStartAnchor{north}%\n    }{%\n      \\def\\tikzumlAssemblyConnectorStartAnchor{south}%\n    }\n  }{}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorGeometry}{-|-}}{%\n    \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorStartArm}{auto}}{%\n      \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorEndArm}{auto}}{%\n\t\\pgfmathsetlength{\\tikzuml@AC@middleArm}{0.5 * \\tikzuml@AC@xa + 0.5 * \\tikzuml@AC@xb}%\n      }{%\n        \\pgfmathsetlength{\\tikzuml@AC@middleArm}{\\tikzuml@AC@xb+\\tikzumlAssemblyConnectorEndArm}%\n      }%\n    }{%\n      \\pgfmathsetlength{\\tikzuml@AC@middleArm}{\\tikzuml@AC@xa+\\tikzumlAssemblyConnectorStartArm}%\n    }%\n    \\pgfmathparse{\\tikzuml@AC@middleArm>\\tikzuml@AC@xa}\n    \\pgfmathparse{\\tikzuml@AC@middleArm>\\tikzuml@AC@xb}\n    \\ifthenelse{\\lengthtest{\\tikzuml@AC@middleArm>\\tikzuml@AC@xa}}{%\n      \\def\\tikzumlAssemblyConnectorStartAnchor{east}%\n    }{%\n      \\def\\tikzumlAssemblyConnectorStartAnchor{west}%\n    }\n    \\ifthenelse{\\lengthtest{\\tikzuml@AC@middleArm>\\tikzuml@AC@xb}}{%\n      \\def\\tikzumlAssemblyConnectorEndAnchor{east}%\n    }{%\n      \\def\\tikzumlAssemblyConnectorEndAnchor{west}%\n    }\n  }{}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorGeometry}{|-|}}{%\n    \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorStartArm}{auto}}{%\n      \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorEndArm}{auto}}{%\n\t\\pgfmathsetlength{\\tikzuml@AC@middleArm}{0.5 * \\tikzuml@AC@ya + 0.5 * \\tikzuml@AC@yb}%\n      }{%\n        \\pgfmathsetlength{\\tikzuml@AC@middleArm}{\\tikzuml@AC@yb+\\tikzumlAssemblyConnectorEndArm}%\n      }%\n    }{%\n      \\pgfmathsetlength{\\tikzuml@AC@middleArm}{\\tikzuml@AC@ya+\\tikzumlAssemblyConnectorStartArm}%\n    }%\n    \\ifthenelse{\\tikzuml@AC@middleArm>\\tikzuml@AC@ya}{%\n      \\def\\tikzumlAssemblyConnectorStartAnchor{north}%\n    }{%\n      \\def\\tikzumlAssemblyConnectorStartAnchor{south}%\n    }\n    \\ifthenelse{\\tikzuml@AC@middleArm>\\tikzuml@AC@yb}{%\n      \\def\\tikzumlAssemblyConnectorEndAnchor{north}%\n    }{%\n      \\def\\tikzumlAssemblyConnectorEndAnchor{south}%\n    }\n  }{}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorStartAnchorTmp}{}}{%\n  }{%\n    \\def\\tikzumlAssemblyConnectorStartAnchor{\\tikzumlAssemblyConnectorStartAnchorTmp}%\n  }%\n  \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorEndAnchorTmp}{}}{%\n  }{%\n    \\def\\tikzumlAssemblyConnectorEndAnchor{\\tikzumlAssemblyConnectorEndAnchorTmp}%\n  }%\n  %\n  \\node[inner sep=0] (\\tikzumlAssemblyConnectorStart@nodeName-\\tikzumlAssemblyConnectorLabel@nodeName-port-tmp) at (\\tikzumlAssemblyConnectorStart@nodeName.\\tikzumlAssemblyConnectorStartAnchor) {};%\n  \\node[inner sep=0] (\\tikzumlAssemblyConnectorEnd@nodeName-\\tikzumlAssemblyConnectorLabel@nodeName-port-tmp) at (\\tikzumlAssemblyConnectorEnd@nodeName.\\tikzumlAssemblyConnectorEndAnchor) {};%\n  %\n  \\umlrelation[style={tikzuml connector style}, #1]{\\tikzumlAssemblyConnectorStart@nodeName-\\tikzumlAssemblyConnectorLabel@nodeName-port-tmp}{\\tikzumlAssemblyConnectorEnd@nodeName-\\tikzumlAssemblyConnectorLabel@nodeName-port-tmp}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorWithPort}{tikzumlTrue}}{%\n    \\node[inner sep=0.5*\\tikzumlAssemblyConnectorWidth, rectangle, draw=\\tikzumlAssemblyConnectorDrawColor, fill=\\tikzumlAssemblyConnectorPortFillColor] (\\tikzumlAssemblyConnectorStart@nodeName-\\tikzumlAssemblyConnectorLabel@nodeName-port) at (\\tikzumlAssemblyConnectorStart@nodeName-\\tikzumlAssemblyConnectorLabel@nodeName-port-tmp) {};%\n    \\node[inner sep=0.5*\\tikzumlAssemblyConnectorWidth, rectangle, draw=\\tikzumlAssemblyConnectorDrawColor, fill=\\tikzumlAssemblyConnectorPortFillColor] (\\tikzumlAssemblyConnectorEnd@nodeName-\\tikzumlAssemblyConnectorLabel@nodeName-port) at (\\tikzumlAssemblyConnectorEnd@nodeName-\\tikzumlAssemblyConnectorLabel@nodeName-port-tmp) {};%\n  }{%\n    \\node[inner sep=0] (\\tikzumlAssemblyConnectorStart@nodeName-\\tikzumlAssemblyConnectorLabel@nodeName-port) at (\\tikzumlAssemblyConnectorStart@nodeName.\\tikzumlAssemblyConnectorStartAnchor) {};%\n    \\node[inner sep=0] (\\tikzumlAssemblyConnectorEnd@nodeName-\\tikzumlAssemblyConnectorLabel@nodeName-port) at (\\tikzumlAssemblyConnectorEnd@nodeName.\\tikzumlAssemblyConnectorEndAnchor) {};%\n  }%\n  %\n  \\addtocounter{tikzumlRelationNum}{-1}%\n  \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorName}{connector-\\thetikzumlConnectorNum}}{%\n    \\edef\\tikzumlAssemblyConnectorName{relation-\\thetikzumlRelationNum}%\n    \\edef\\tikzumlAssemblyConnectorSymbolName{\\tikzumlAssemblyConnectorLabel@nodeName}%\n  }{%\n    \\edef\\tikzumlAssemblyConnectorSymbolName{\\tikzumlAssemblyConnectorName}%\n  }%\n  %\n  \\stepcounter{tikzumlRelationNum}%\n  %\n  \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorGeometry}{--}}{%\n    \\umlassemblyconnectorsymbol{\\tikzumlAssemblyConnectorStart@nodeName}{\\tikzumlAssemblyConnectorEnd@nodeName}%\n  }{%\n    \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorGeometry}{-|}}{%\n      \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorFirstArm}{tikzumlTrue}}{%\n        \\umlassemblyconnectorsymbol{\\tikzumlAssemblyConnectorStart@nodeName}{\\tikzumlAssemblyConnectorName-2}%\n      }{%\n        \\umlassemblyconnectorsymbol{\\tikzumlAssemblyConnectorName-2}{\\tikzumlAssemblyConnectorEnd@nodeName}%\n      }%\n    }{%\n      \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorGeometry}{|-}}{%\n        \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorFirstArm}{tikzumlTrue}}{%\n          \\umlassemblyconnectorsymbol{\\tikzumlAssemblyConnectorStart@nodeName}{\\tikzumlAssemblyConnectorName-2}%\n        }{%\n          \\umlassemblyconnectorsymbol{\\tikzumlAssemblyConnectorName-2}{\\tikzumlAssemblyConnectorEnd@nodeName}%\n        }%\n      }{%\n        \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorGeometry}{-|-}}{%\n          \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorFirstArm}{tikzumlTrue}}{%\n            \\umlassemblyconnectorsymbol{\\tikzumlAssemblyConnectorStart@nodeName}{\\tikzumlAssemblyConnectorName-2}%\n          }{%\n            \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorLastArm}{tikzumlTrue}}{%\n              \\umlassemblyconnectorsymbol{\\tikzumlAssemblyConnectorName-4}{\\tikzumlAssemblyConnectorEnd@nodeName}%\n            }{%\n              \\umlassemblyconnectorsymbol{\\tikzumlAssemblyConnectorName-2}{\\tikzumlAssemblyConnectorName-4}%\n            }%\n          }%\n        }{%\n          \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorGeometry}{|-|}}{%\n            \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorFirstArm}{tikzumlTrue}}{%\n              \\umlassemblyconnectorsymbol{\\tikzumlAssemblyConnectorStart@nodeName}{\\tikzumlAssemblyConnectorName-2}%\n            }{%\n              \\ifthenelse{\\equal{\\tikzumlAssemblyConnectorLastArm}{tikzumlTrue}}{%\n                \\umlassemblyconnectorsymbol{\\tikzumlAssemblyConnectorName-4}{\\tikzumlAssemblyConnectorEnd@nodeName}%\n              }{%\n                \\umlassemblyconnectorsymbol{\\tikzumlAssemblyConnectorName-2}{\\tikzumlAssemblyConnectorName-4}%\n              }%\n            }%\n          }{}%\n        }%\n      }%\n    }%\n  }%\n  \\stepcounter{tikzumlConnectorNum}%\n}%\n%\n% shortcuts of \\umlassemblyconnector\n\\newcommand{\\umlHVassemblyconnector}[3][]{%\n  \\pgfkeys{/tikzuml/HVassemblyconnector/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n               \\errmessage{TIKZUML ERROR : in umlHVassemblyconnector, forbidden option geometry}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/HVassemblyconnector/.cd, #1}%\n  \\umlassemblyconnector[geometry=-|, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlVHassemblyconnector}[3][]{%\n  \\pgfkeys{/tikzuml/VHassemblyconnector/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n        \\errmessage{TIKZUML ERROR : in umlVHassemblyconnector, forbidden option geometry}%\n      }{}%\n    }%\n  }%\n  \\pgfkeys{/tikzuml/VHassemblyconnector/.cd, #1}%\n  \\umlassemblyconnector[geometry=|-, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlHVHassemblyconnector}[3][]{%\n  \\pgfkeys{/tikzuml/HVHassemblyconnector/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n               \\errmessage{TIKZUML ERROR : in umlHVHassemblyconnector, forbidden option geometry}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/HVHassemblyconnector/.cd, #1}%\n  \\umlassemblyconnector[geometry=-|-, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlVHVassemblyconnector}[3][]{%\n  \\pgfkeys{/tikzuml/VHVassemblyconnector/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}}{%\n               \\errmessage{TIKZUML ERROR : in umlVHVassemblyconnector, forbidden option geometry}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/VHVassemblyconnector/.cd, #1}%\n  \\umlassemblyconnector[geometry=|-|, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlport}[3][]{%\n  \\pgfkeys{/tikzuml/port/.cd, draw/.initial=\\tikzumlDefaultDrawColor, fill/.initial=\\tikzumlPortDefaultFillColor,%\n                              width/.initial=\\tikzumlPortDefaultWidth,%\n                              .unknown/.code={%\n                                \\let\\keyname=\\pgfkeyscurrentname%\n                                \\let\\keyvalue=\\pgfkeyscurrentvalue%\n                                \\errmessage{TIKZUML ERROR : in umlport forbidden option \\keyname}%\n                              }%\n  }%\n  \\pgfkeys{/tikzuml/port/.cd, #1}%\n  \\pgfkeys{/tikzuml/port/.cd, width/.get=\\tikzumlPortWidth,%\n                              draw/.get=\\tikzumlPortDrawColor, fill/.get=\\tikzumlPortFillColor}%\n  \\edef\\tikzumlPort@name{#2}%\n  \\edef\\tikzumlPort@anchor{#3}%\n  \\begingroup%\n    \\def\\_{_}\\edef\\x{\\endgroup%\n      \\def\\noexpand\\tikzumlPort@nodeName{\\tikzumlPort@name}}\\x%\n  %\n  \\node[inner sep=0.5*\\tikzumlPortWidth, rectangle, draw=\\tikzumlPortDrawColor, fill=\\tikzumlPortFillColor] (\\tikzumlPort@nodeName-\\tikzumlPort@anchor-port) at (\\tikzumlPort@nodeName.\\tikzumlPort@anchor) {};%\n}%\n%\n\\newcommand{\\umldelegateconnector}[3][]{%\n  \\def\\tikzumlDelegateConnectorWithStartPort{tikzumlFalse}%\n  \\def\\tikzumlDelegateConnectorWithEndPort{tikzumlFalse}%\n  \\pgfkeys{/tikzuml/delegateconnector/.cd,\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umldelegateconnector, forbidden option stereo}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/delegateconnector/.cd, #1}%\n  \\umlrelation[style={tikzuml connector style}, stereo=delegate, #1]{#2}{#3}%\n}%\n%\n% shortcuts of \\umldelegateconnector\n\\newcommand{\\umlHVdelegateconnector}[3][]{%\n  \\pgfkeys{/tikzuml/HVdelegateconnector/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}\\OR\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlHVdelegateconnector, forbidden option \\keyname}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/HVdelegateconnector/.cd, #1}%\n  \\umldelegateconnector[geometry=-|, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlVHdelegateconnector}[3][]{%\n  \\pgfkeys{/tikzuml/VHdelegateconnector/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}\\OR\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlVHdelegateconnector, forbidden option \\keyname}%\n             }{}%\n            }}%\n  \\pgfkeys{/tikzuml/VHdelegateconnector/.cd, #1}%\n  \\umldelegateconnector[geometry=|-, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlHVHdelegateconnector}[3][]{%\n  \\pgfkeys{/tikzuml/HVHdelegateconnector/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}\\OR\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlHVHdelegateconnector, forbidden option \\keyname}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/HVHdelegateconnector/.cd, #1}%\n  \\umldelegateconnector[geometry=-|-, #1]{#2}{#3}%\n}%\n%\n\\newcommand{\\umlVHVdelegateconnector}[3][]{%\n  \\pgfkeys{/tikzuml/VHVdelegateconnector/.cd,%\n           .unknown/.code={%\n             \\let\\keyname=\\pgfkeyscurrentname%\n             \\let\\keyvalue=\\pgfkeyscurrentvalue%\n             \\ifthenelse{\\equal{\\keyname}{geometry}\\OR\\equal{\\keyname}{stereo}}{%\n               \\errmessage{TIKZUML ERROR : in umlVHVdelegateconnector, forbidden option \\keyname}%\n             }{}%\n           }}%\n  \\pgfkeys{/tikzuml/VHVdelegateconnector/.cd, #1}%\n  \\umldelegateconnector[geometry=|-|, #1]{#2}{#3}%\n}%\n%%% End of tikz-uml.sty\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
  },
  {
    "path": "vscode.settings.json",
    "content": "{\n    \"editor.wordWrap\": \"on\",\n    \"latex-workshop.view.pdf.viewer\": \"tab\",\n    \"latex-workshop.view.pdf.backgroundColor\": \"#cccccc\",\n    \"editor.renderWhitespace\": \"all\",\n    \"latex-workshop.latex.autoBuild.run\": \"onSave\",\n    \"latex-workshop.latex.recipes\": [\n        {\n            \"name\": \"lualatex ➞ biblatex ➞ lualatex × 2 🔃\",\n            \"tools\": [\n                \"pdflatex\",\n                \"bibtex\",\n                \"pdflatex\",\n                \"pdflatex\"\n            ]\n        },\n        {\n            \"name\": \"pdflatex ➞ biblatex ➞ pdflatex × 2 🔃\",\n            \"tools\": [\n                \"pdflatex\",\n                \"bibtex\",\n                \"pdflatex\",\n                \"pdflatex\"\n            ]\n        }\n    ],\n    \"latex-workshop.latex.tools\": [\n        {\n            \"name\": \"latexmk\",\n            \"command\": \"latexmk\",\n            \"args\": [\n                \"%DOC%\"\n            ],\n            \"env\": {}\n        },\n        {\n            \"name\": \"pdflatex\",\n            \"command\": \"pdflatex\",\n            \"args\": [\n                \"-synctex=1\",\n                \"-interaction=nonstopmode\",\n                \"-file-line-error\",\n                \"%DOC%\"\n            ],\n            \"env\": {}\n        },\n        {\n            \"name\": \"lualatex\",\n            \"command\": \"lualatex\",\n            \"args\": [\n                \"-synctex=1\",\n                \"-interaction=nonstopmode\",\n                \"-file-line-error\",\n                \"%DOC%\"\n            ],\n            \"env\": {}\n        },\n        {\n            \"name\": \"biblatex\",\n            \"command\": \"biblatex\",\n            \"args\": [\n                \"%DOCFILE%\"\n            ],\n            \"env\": {}\n        },\n        {\n            \"name\": \"rnw2tex\",\n            \"command\": \"Rscript\",\n            \"args\": [\n                \"-e\",\n                \"knitr::opts_knit$set(concordance = TRUE); knitr::knit('%DOCFILE_EXT%')\"\n            ],\n            \"env\": {}\n        },\n        {\n            \"name\": \"jnw2tex\",\n            \"command\": \"julia\",\n            \"args\": [\n                \"-e\",\n                \"using Weave; weave(\\\"%DOC_EXT%\\\", doctype=\\\"tex\\\")\"\n            ],\n            \"env\": {}\n        },\n        {\n            \"name\": \"jnw2texmintex\",\n            \"command\": \"julia\",\n            \"args\": [\n                \"-e\",\n                \"using Weave; weave(\\\"%DOC_EXT%\\\", doctype=\\\"texminted\\\")\"\n            ],\n            \"env\": {}\n        },\n        {\n            \"name\": \"tectonic\",\n            \"command\": \"tectonic\",\n            \"args\": [\n                \"--synctex\",\n                \"--keep-logs\",\n                \"%DOC%.tex\"\n            ],\n            \"env\": {}\n        }\n    ]\n}\n"
  }
]