LaTeX宏包TikZ-UML使用備忘一

  TikZ-UML宏包是用於繪製UML圖形的,相較於我以前使用的pgf-umlcd宏包而言,他支持的圖形種類更多,二者都是由tikz擴展而來。這裏把使用方法與繪圖例子記錄下來,以備忘。
 
下載與安裝
  TikZ-UML宏包並沒有包含在texlive中,需要自己去官網下載,地址是:TikZ-UML官網下載。我把官網2016年3月29日發佈的版本(目前最新版)已經傳入51CTO,下載地址是:TikZ-UML51CTO下載。下載的壓縮包裏面有宏包文件與說明文檔。
  下載解壓後,可以把其中的文件tikz-uml.sty放到自己定義的文件夾內,或者按照你用的LaTeX編輯工具來放置。我是放在自定義的文件夾內,下面的代碼中大家會看到,這種方式需要在調用時,也就是\usepackage{}命令中把文件所在的完整路徑列出。
 
文件頭
  我所舉例子的文件頭部內容都是一樣的,所以單獨列在這裏。

% 51CTO陸巍的博客
\documentclass[oneside, AutoFakeBold]{article}

\usepackage{geometry}          % 用於頁面設置
% 設置爲A4紙,並按照MSOffice的默認尺寸設置四周邊距
\geometry{
  a4paper,
  left = 3.17cm,
  right = 3.17cm,
  top = 2.54cm,
  bottom = 2.54cm
}

% 顏色支持
\usepackage[dvipsnames, svgnames, x11names]{xcolor}

% 漢字支持
\usepackage{xeCJK}
% 設置字體。注意順序,第一個定義的就是默認字體
\setCJKfamilyfont{song}{方正書宋簡體}
\newcommand{\song}{\CJKfamily{song}}
\setCJKfamilyfont{kaiti}{方正楷體簡體}
\newcommand{\kaiti}{\CJKfamily{kaiti}}
\setCJKfamilyfont{heiti}{方正黑體簡體}
\newcommand{\heiti}{\CJKfamily{heiti}}

% 繪圖支持
\usepackage{tikz}
\usetikzlibrary{arrows}

% UML繪圖支持
% tikz-uml宏包並不在texlive中,需要單獨下載
% 下載後可放在自己定義的文件夾內,並在調用時指明完整路徑
\usepackage{/mydata/latex_package/tikzuml/tikz-uml}

% 設置斷字參數,數值越大,出現斷字的情況越少
\hyphenpenalty = 1000

% ------------------ 開始 -------------------

\begin{document}
  ...  % 正文
\end{document}

  下面的示例代碼放在正文部分即可。
 
示例一

\begin{center}
    \begin{tikzpicture}
      \umlsimpleclass[x = -4, y = 2, draw = purple]{Mock CheckWriter}{}{}
      \umlsimpleclass[x = 0, y = 2, draw = purple]{PayrollTest}{}{}
      \umlsimpleclass[x = 4, y = 2, draw = purple]{Mock Employee}{}{}
      \umlinterface[x = -4, y = 0, draw = purple]{CheckWriter}{}{
        + writeCheck()
      }
      \umlsimpleclass[x = 0, y = 0, draw = purple]{Payroll}{}{}
      \umlinterface[x = 4, y = 0, draw = purple]{Employee}{}{
        + claculatePay()\\
        + postPayment()
      }
      \umlinterface[x = 0, y = -3, draw = purple]{Employee Database}{}{
        + getEmployee()\\
        + putEmployee()
      }
      \umlsimpleclass[x = 0, y = -6, draw = purple]{Mock Employee Database}{}{}

      \umluniassoc[draw = purple]{PayrollTest}{Mock CheckWriter}
      \umluniassoc[draw = purple]{PayrollTest}{Mock Employee}
      \umluniassoc[draw = purple]{PayrollTest}{Payroll}
      \draw[draw = purple, -angle 45](PayrollTest.north) -- ++(0, 0.3) -- ++(6, 0) |- (Mock Employee Database);
      \umluniassoc[draw = purple]{Payroll}{CheckWriter}
      \umluniassoc[draw = purple]{Payroll}{Employee}
      \umluniassoc[draw = purple]{Payroll}{Employee Database}
      \umlinherit[draw = purple]{Mock CheckWriter}{CheckWriter}
      \umlinherit[draw = purple]{Mock Employee}{Employee}
      \umlHVdep[draw = purple]{Employee Database}{Employee}
      \umlinherit[draw = purple]{Mock Employee Database}{Employee Database}
    \end{tikzpicture}
    \heiti\\[0.4cm] 圖4.2 使用Mock Objects測試方法,解除了耦合的薪水支付應用模型\song
  \end{center}

效果如下:
LaTeX宏包TikZ-UML使用備忘一
說明:
  1) 配色方案:底色默認就是淡黃,邊框色與線段顏色是用命令:draw=purple來設置的(默認是黑色),之所以選用這樣的配色是受Rational Rose的影響。
  2) 目前沒有找到類名稱自動換行的設置方法,只能是全部放在一行中了。(設置text width與雙斜槓均無效。)
  3) TikZ-UML是由tikz擴展而來,所以tikz中的很多功能在這裏也可以用,例如上述例子中從PayrollTest到Mock Employee Database的線段繪製方式。
  
示例二

\begin{center}
    \begin{tikzpicture}
      \umlsimpleclass[x = 0, y = 0, draw = purple, template = {   }]{Set}
      \umlsimpleclass[x = 2, y = -3, draw = purple, template = {   }]{Unbounded Set}
      \umlsimpleclass[x = 8, y = -3, draw = purple, template = {   }]{Third Party Unbounded Set}
      \umlsimpleclass[width = 3cm, x = -2, y = -6, draw = purple, template = {   }]{Bounded Set}
      \umlsimpleclass[x = 8, y = -6, draw = purple, template = {   }]{Third Party Bounded Set}

      %\umlVHVinherit[arm1 = 1.3cm, draw = purple]{Unbounded set}{Set}
      \draw[draw = purple, -open triangle 45]++(0, -1.7) -- (Set);
      \umlVHVassoc[arm1 = 4.3cm, draw = purple]{Bounded Set}{Unbounded Set}
      \umluniassoc[draw = purple]{Unbounded Set}{Third Party Unbounded Set}
      \umluniassoc[draw = purple]{Bounded Set}{Third Party Bounded Set}
    \end{tikzpicture}
    \\[0.4cm]\heiti 圖10.2 容器類適配器層\song
  \end{center}

效果如下:
LaTeX宏包TikZ-UML使用備忘一
說明:
  1) template={}的大括號中填充的是全角符號的空格;
  2) 注意繪製inherit線時有兩種方式,都已列在代碼中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章