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

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

时间: 2024-10-12 15:29:33

在LaTeX中使用tikz宏包及其扩展包共同绘制UML图的相关文章

在LaTeX中利用preview宏包和tikz宏包生成单图pdf

有时候我们利用tikz宏包画出的图片后,只想生成一个单图pdf,而且pdf的页面大小与图片相同,以便于以后再次用latex插入. 可以与preview宏包进行搭配,页面大小由图像大小决定,可以通过改变\PreviewBorder的值来改变页边界的空白大小. 效果如下: 代码如下: 1 \documentclass{beamer} 2 \usepackage{tikz} 3 \usetikzlibrary{arrows,snakes,backgrounds} 4 \usepackage[activ

Windows下用Composer引入官方GitHub扩展包

Windows下用Composer引入官方GitHub扩展包 1. 当你打开威武RC4版本的链接的时候,往下拉你可以看到这个,然后你要做的就是想到,百度Composer,看看是个什么鬼,别想太多,跟着我走.接下来点击Composer中文文档,再点击下载你会看到下载完后,点开如图所示点击next后发现不知道怎么继续,正常,这里是提示你选择php文件夹下面的php.exe文件,这里我选好再截图如下:到这里一般再点击下一步等上三分钟左右就没什么问题啦,这个随便你个人喜好,我是没有点直接一直next到f

如何开发、本地测试、发布 Laravel 扩展包?

 Laravel/ 1年前/  4022 /  11 现在已经有了很多,关于如何开发 Laravel 扩展包的文章.但是大多文章写的太过片面,不够完整,而且我在实际进行开发扩展包的时候,还是遇到了很多的问题,我把自己的开发经验,以及遇到的问题记录下来,分享给大家. 扩展包开发 1. 创建新项目,初始化扩展包配置 首先创建一个新的 Laravel 项目: composer create-project laravel/laravel laradmin -vvv 接下来在此项目中,创建目录 pack

LaTeX绘制UML图形宏包开发过程记录001

因为工作需要,我在使用LaTeX编辑文件时经常要绘制UML图形.虽然目前LaTeX有一些宏包支持绘制UML图形,但总有这样那样的小问题,使用起来不是那么满意,所以想自己创建一个专门的宏包来绘制UML图形.一方面可以加深对LaTeX的了解,另一方面也给工作上带来便利. LaTeX宏包中的TikZ绘图宏包,功能很强大,LaTeX编辑的文档中很多都用其来绘制图形,所以我自然也以此宏包为基础来编写.本项目是从2019年1月1日在电脑上开始的,传入腾讯云开发者平台是2019年1月3日开始,地址是lakes

LaTeX绘制UML图形宏包开发过程记录002

自定义类 ? LaTeX中自定义类与自定义宏包几乎是一样的,区别就是扩展名,类文件的扩展名是cls,宏包文件的扩展名是sty.在文件内容格式上也差不多,类文件中内容的样式举例如下: \NeedsTeXFormat{LaTeX2e}% \ProvidesClass{lua-general}[2019/01/01]% % \LoadClass{book}% 载入book类 % % 需求的宏包 \RequirePackage{geometry}% 用于页面设置 \RequirePackage{tikz

LaTeX技巧012:LaTeX 插图加载宏包

LaTeX 插图加载宏包.支持 LaTeX - DVIPDFMx; pdfLaTeX; XeLaTeX 三种编译方式,支持 eps/pdf/jpg/png 等图片格式. 1 % Put this snippet in your preamble. 2 \usepackage{ifpdf, ifxetex} 3 \ifxetex 4 \usepackage{graphicx} 5 \else 6 \ifpdf 7 \usepackage{graphicx} 8 \usepackage{epstop

用LaTeX的pstricks绘图宏包制作一幅图片

现在Geogebra中作一个宏,把重复绘制五角星的动作简化;然后绘制完毕之后导出为pstricks代码: \documentclass[10pt]{article} \usepackage{pstricks-add} \pagestyle{empty} \begin{document} \psset{xunit=0.2cm,yunit=0.2cm,algebraic=true,dimen=middle,dotstyle=o,dotsize=3pt 0,linewidth=0.8pt,arrows

在 LaTeX 中实现缩印效果

https://liam.page/ 近日大概重拾了一点对 LaTeX 的兴趣,遇见这样一个问题:如何在 LaTeX 中实现缩印效果(即,将两页或更多页排版在一页纸上),并且实现水印效果的页码? 缩印 以朴素的办法实现缩印效果并不困难.例如,可以先以 LaTeX 正常输出文档,再以 pdfpages 宏包将生成的文档载入进来排版.不过,这样的做法扩展性太差,并且需要至少编译两份文档--一份是原始文档,一份是缩印框架文档. 更有技巧的办法,需要深入到 TeX 构建页面输出的过程中去.基本上来说,我

如何在latex 中插入EPS格式图片

如何在latex 中插入EPS格式图片 第一步:生成.eps格式的图片 1.利用visio画图,另存为pdf格式的图片 利用Adobe Acrobat裁边,使图片大小合适 另存为.eps格式,如下图所示: 注:这一步必须按照图示方式另存为,不能直接强行改后缀名,否则插入后无法显示. 2.利用matlab画图,直接另存为eps格式即可 第二步:插入代码 1.添加宏包   \usepackage{graphicx}     \usepackage{epstopdf} 2.将.eps图片和.tex文件