在LaTeX中使用tikz巨集包及其擴充套件包共同繪製UML圖
LaTeX巨集包tikz的繪圖功能很強,完全可以繪製UML的各種圖形,並且在tikz的基礎上擴展出不少這方面的巨集包。前面我介紹過巨集包tikz-uml,這個巨集包功能不錯,只是外觀上略微有些不足。所以我現在還是立足於tikz的基礎功能,結合tikz-uml巨集包一起繪製UML圖。
下面直接給出示例程式碼、效果圖與說明。
作業系統:Ubuntu 16.04 64位桌面版
LaTeX工具:TeXstudio 2.10.8
示例一
% 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} % 定義uml圖形底色.注意:內建pdf閱讀器的色彩顯示不準確,要以外部的pdf閱讀器為準. % uml圖形的邊框、線段的顏色使用基礎色中的purple。 \definecolor{umlyellow}{RGB}{255, 251, 214} % 漢字支援 \usepackage{xeCJK} % 設定字型。注意順序,第一個定義的就是預設字型 \setCJKfamilyfont{song}{方正書宋簡體} \newcommand{\song}{\CJKfamily{song}} \setCJKfamilyfont{kaiti}{方正楷體簡體} \newcommand{\kaiti}{\CJKfamily{kaiti}} \setCJKfamilyfont{heiti}{方正黑體簡體} \newcommand{\heiti}{\CJKfamily{heiti}} % 繪圖支援 \usepackage{tikz} \usetikzlibrary{arrows, positioning, shapes} % UML繪圖支援 % tikz-uml巨集包並不在texlive中,需要單獨下載 % 下載後可放在自己定義的資料夾內,並在呼叫時指明完整路徑 \usepackage{/mydata/latex_package/tikzuml/tikz-uml} % 設定斷字引數,數值越大,出現斷字的情況越少 \hyphenpenalty = 1000 % 定義uml基本圖形 \tikzstyle{basic_class} = [rectangle split, draw = purple, fill = umlyellow, text width = 3cm, rectangle split parts = 1, text centered] % ------------------ 開始 ------------------- \begin{document} \heiti\large 示例一\song\normalsize \begin{center} \begin{tikzpicture} \node(AddEmployee)[basic_class, rectangle split parts = 2]{ AddEmployee Transaction \nodepart{second} \begin{flushleft} - Name\\ - Employeeid\\ - Address \end{flushleft} }; \node(AddHourly)[below left = of AddEmployee, basic_class]{ AddHourly Employee Transaction }; \node(AddCommissioned)[below = of AddEmployee, basic_class]{ AddCommissioned Employee Transaction }; \node(AddSalaried)[below right = of AddEmployee, basic_class]{ AddSalaried Employee Transaction }; \umlVHVinherit[arm1 = 1.2cm, draw = purple]{AddHourly}{AddEmployee} \umlinherit[draw = purple]{AddCommissioned}{AddEmployee} \umlVHVinherit[arm1 = 1.2cm, draw = purple]{AddSalaried}{AddEmployee} \end{tikzpicture} \\[0.4cm]\heiti 圖18.1 AddEmployeeTransaction類層次結構\song \end{center} \end{document}
效果如下:
說明:
1) 這個示例中使用了tikz的擴充套件巨集包tikz-uml,相關的下載在前面的部落格中有介紹,這裡不再贅述。
2) 這裡的類圖並未使用tikz-uml中的\umlclass來繪製,這是因為在名稱上umlclass繪製方法不能換行,這樣就造成長名稱的class圖不好看。
3) 名稱basic_class中的下劃線在TeXstudio中會提示錯誤,但在編譯時不會有問題。之所以用下劃線是受我在C++程式設計中使用的Google風格的影響,已經習慣這樣命名了。
4) 注意basic_class定義語句中的rectangle split,這個用來分欄。
5) 注意\hyphenpenalty = 1000語句,沒有的話系統會自動對英文單詞斷字,那樣就不好看了。
6) 因為在定義basic_class時使用了text centered語句,所以node內的文字會居中排列,所以這裡單獨對屬性進行左對齊處理。多行時使用\begin{flushleft}來處理,如果只有一行的話可以使用\leftline{}命令。與\leftline相對應的對齊命令還有\centerline{}與\rightline{},這三個命令都有一個特點,就是隻能處理一行,不能在裡面換行,強制換行也不行,會出錯。估計tikz-uml巨集包中的\umlclass使用的是\centerline命令來居中排列名稱,所以造成無法換行。
7) 箭頭線段使用的是tikz-uml提供的命令,這裡使用起來比較簡單方便。