在LaTeX中使用tikz宏包及其扩展包共同绘制UML图
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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}{方正书宋简体}
ewcommand{song}{CJKfamily{song}}
setCJKfamilyfont{kaiti}{方正楷体简体}
ewcommand{kaiti}{CJKfamily{kaiti}}
setCJKfamilyfont{heiti}{方正黑体简体}
ewcommand{heiti}{CJKfamily{heiti}}
% 绘图支持
usepackage{tikz}
usetikzlibrary{arrows, positioning, shapes}
% UML绘图支持
% tikz-uml宏包并不在texlive中,需要单独下载
% 下载后可放在自己定义的文件夹内,并在调用时指明完整路径
usepackage{/mydata/latex_package/tikzuml/tikz-uml}
% 设置断字参数,数值越大,出现断字的情况越少
hyphenpenalty = 1000
% 定义uml基本图形
ikzstyle{basic_class} = [rectangle split, draw = purple, fill = umlyellow, text width = 3cm, rectangle split parts = 1, text centered]
% ------------------ 开始 -------------------
egin{document}
heitilarge 示例一song
ormalsize
egin{center}
egin{tikzpicture}
ode(AddEmployee)[basic_class, rectangle split parts = 2]{
AddEmployee Transaction
odepart{second}
egin{flushleft}
- Name - EmployeeId - Address
end{flushleft}
};
ode(AddHourly)[below left = of AddEmployee, basic_class]{
AddHourly Employee Transaction
};
ode(AddCommissioned)[below = of AddEmployee, basic_class]{
AddCommissioned Employee Transaction
};
ode(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内的文字会居中排列,所以这里单独对属性进行左对齐处理。多行时使用egin{flushleft}来处理,如果只有一行的话可以使用leftline{}命令。与leftline相对应的对齐命令还有centerline{}与
ightline{},这三个命令都有一个特点,就是只能处理一行,不能在里面换行,强制换行也不行,会出错。估计tikz-uml宏包中的umlclass使用的是centerline命令来居中排列名称,所以造成无法换行。
7) 箭头线段使用的是tikz-uml提供的命令,这里使用起来比较简单方便。
8) 名称换行后显然比全部排在一行要好看,大家可以和我前面发的博客比较。
以上是关于在LaTeX中使用tikz宏包及其扩展包共同绘制UML图的主要内容,如果未能解决你的问题,请参考以下文章