在LaTeX中使用tikz宏包及其擴展包共同繪制UML圖
阿新 • • 發佈:2018-12-29
fine 基礎 str vpd 比較 排列 off 並且 ima LaTeX宏包tikz的繪圖功能很強,完全可以繪制UML的各種圖形,並且在tikz的基礎上擴展出不少這方面的宏包。前面我介紹過宏包tikz-uml,這個宏包功能不錯,只是外觀上略微有些不足。所以我現在還是立足於tikz的基礎功能,結合tikz-uml宏包一起繪制UML圖。
下面直接給出示例代碼、效果圖與說明。
操作系統:Ubuntu 16.04 64位桌面版
LaTeX工具:TeXstudio 2.10.8
示例一 6) 因為在定義basic_class時使用了text centered語句,node內的文字會居中排列,所以這裏單獨對屬性進行左對齊處理。多行時使用\begin{flushleft}來處理,如果只有一行的話可以使用\leftline{}命令。與\leftline相對應的對齊命令還有\centerline{}與\rightline{},這三個命令都有一個特點,就是只能處理一行,不能在裏面換行,強制換行也不行,會出錯。估計tikz-uml宏包中的\umlclass使用的是\centerline命令來居中排列名稱,所以造成無法換行。
7) 箭頭線段使用的是tikz-uml提供的命令,這裏使用起來比較簡單方便。
8) 名稱換行後顯然比全部排在一行要好看,大家可以和我前面發的博客比較。
下面直接給出示例代碼、效果圖與說明。
操作系統: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語句,沒有的話系統會自動對英文單詞斷字,那樣就不好看了。
7) 箭頭線段使用的是tikz-uml提供的命令,這裏使用起來比較簡單方便。
在LaTeX中使用tikz宏包及其擴展包共同繪制UML圖