LaTeX繪制UML類圖備忘
阿新 • • 發佈:2018-12-05
enter 註釋 left 第一個 分享 左右 center tcl nes 這幾天編輯LaTeX文檔時需要繪制UML類圖,這裏把方法代碼記錄下來,以備忘。
繪制UML類圖,我們將使用宏包pgf-umlcd。示例代碼中有兩個例子,已經運行檢測過,下面列出代碼、效果圖與說明。
環境:Ubuntu 16.04 64位桌面版
工具:TeXstudio 5. 註意“-|”與“|-”的區別,請在使用中自行體會。
6. 示例代碼中沒有列出類屬性的代碼,方式與添加方法的差不多,只不過命令不一樣,例如:
繪制UML類圖,我們將使用宏包pgf-umlcd。示例代碼中有兩個例子,已經運行檢測過,下面列出代碼、效果圖與說明。
環境:Ubuntu 16.04 64位桌面版
工具:TeXstudio
% 51CTO陸巍的博客LaTeX繪制UML類圖示例 \documentclass[oneside, AutoFakeBold]{article} \usepackage{geometry} % 用於頁面設置 % 設置為A4紙,並按照MSOffice的默認尺寸設置四周邊距 \geometry{ a4paper, left = 3.17cm, right = 3.17cm, top = 2.54cm, bottom = 2.54cm } \usepackage{xeCJK} % 設置字體。註意順序,第一個定義的就是默認字體 \setCJKfamilyfont{song}{方正書宋簡體} \newcommand{\song}{\CJKfamily{song}} \setCJKfamilyfont{kaiti}{方正楷體簡體} \newcommand{\kaiti}{\CJKfamily{kaiti}} \setCJKfamilyfont{heiti}{方正黑體簡體} \newcommand{\heiti}{\CJKfamily{heiti}} % 支持繪制UML \usepackage[simplified]{pgf-umlcd} \begin{document} \centerline{\huge UML繪制示例} \quad\\\\heiti\large 示例一:\normalsize \begin{center} \begin{tikzpicture} \begin{class}[text width = 3cm]{CheckWriter}{0, 0} \operation{+ writeCheck()} \end{class} \begin{class}[text width = 3cm]{Payroll}{4.5, 0} \end{class} \begin{class}[text width = 3cm]{Employee}{9, 0} \operation{+ calculatePay()} \operation{+ postPayment()} \end{class} \begin{class}[text width = 3cm]{Employee Database}{4.5, -2} %\implement{Employee} \operation{+ getEmployee()} \operation{+ putEmployee()} \end{class} \unidirectionalAssociation{Payroll}{}{}{CheckWriter} \unidirectionalAssociation{Payroll}{}{}{Employee} \unidirectionalAssociation{Payroll}{}{}{Employee Database} %\draw[umlcd style dashed line, ->](Employee Database.east) -- ++(2.9, 0) -- (Employee.south); \draw[umlcd style dashed line, ->](Employee Database) -| (Employee); \end{tikzpicture} \\ 圖4.1 耦合在一起的薪水支付應用模型 \end{center} \quad\\\ \large 示例二:\normalsize \begin{center} \begin{tikzpicture} \begin{interface}[text width = 2.7cm]{CheckWriter}{0, -2} \operation{+ writeCheck()} \end{interface} \begin{class}[text width = 2.7cm]{Mock CheckWriter}{0, 0} \inherit{CheckWriter} \end{class} \begin{class}[text width = 2.7cm]{PayrollTest}{4, 0} \end{class} \begin{interface}[text width = 2.7cm]{Employee}{8, -2} \operation{+ calculatePay()} \operation{+ postPayment()} \end{interface} \begin{class}[text width = 2.7cm]{Mock Employee}{8, 0} \inherit{Employee} \end{class} \begin{class}[text width = 2.7cm]{Payroll}{4, -2} \end{class} \begin{interface}[text width = 2.7cm]{Employee Database}{4, -4.5} \operation{+ getEmployee()} \operation{+ putEmployee()} \end{interface} \begin{class}[text width = 2.7cm]{Mock Employee Database}{4, -8} \inherit{Employee Database} \end{class} \unidirectionalAssociation{PayrollTest}{}{}{Mock CheckWriter} \unidirectionalAssociation{PayrollTest}{}{}{Mock Employee} \unidirectionalAssociation{PayrollTest}{}{}{Payroll} \unidirectionalAssociation{Payroll}{}{}{CheckWriter} \unidirectionalAssociation{Payroll}{}{}{Employee} \unidirectionalAssociation{Payroll}{}{}{Employee Database} \draw [umlcd style dashed line, ->] (Employee Database) -| (Employee); \draw [->](PayrollTest.north) -- ++(0, 0.3) -- ++(6, 0) |- (Mock Employee Database); \end{tikzpicture} \heiti\\ 圖4.2 使用Mock Objects測試方法,解除了耦合的薪水支付應用模型\song \end{center} \end{document}
效果如下:
這份代碼還是比較容易看懂的,繪制過程大概就是先繪制類,再繪制邊線。說明如下:
1. 繪制類時先繪制父類,否則表示繼承關系的線指示會出問題,,其他類型的線也同理;
2. 在第一個例子中,繪制虛線時列出了兩種方式,大家註意觀察比較。註釋掉的方法實際上就是使用節點來轉折;
3. 註意畫線時節點的坐標,這個坐標是相對坐標,是相對於上一個節點的坐標。例如第二個例子中的“-- ++(0, 0.3) -- ++(6, 0) |-”,(0, 0.3)表示的是相對於PayrollTest.North的坐標位置,而(6, 0)則是相對於(0, 0.3)的位置。
4. 節點的四個方向是用英文的東南西北表示,不要弄成上下左右了;
6. 示例代碼中沒有列出類屬性的代碼,方式與添加方法的差不多,只不過命令不一樣,例如:
\attribute{owner : String}
LaTeX繪制UML類圖備忘