码迷,mamicode.com
首页 > 其他好文 > 详细

在LaTeX中使用tikz宏包及其扩展包共同绘制UML图

时间:2018-12-29 13:42:21      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:页面   ubuntu   数值   注意   现在   uml   img   RoCE   line   

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提供的命令,这里使用起来比较简单方便。
  8) 名称换行后显然比全部排在一行要好看,大家可以和我前面发的博客比较。

在LaTeX中使用tikz宏包及其扩展包共同绘制UML图

标签:页面   ubuntu   数值   注意   现在   uml   img   RoCE   line   

原文地址:http://blog.51cto.com/14013986/2336815

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!