标签:valueof tencent 使用方法 name shadow .com 获取 分享图片 无效
因为工作需要,我在使用LaTeX编辑文件时经常要绘制UML图形。虽然目前LaTeX有一些宏包支持绘制UML图形,但总有这样那样的小问题,使用起来不是那么满意,所以想自己创建一个专门的宏包来绘制UML图形。一方面可以加深对LaTeX的了解,另一方面也给工作上带来便利。\NeedsTeXFormat{LaTeX2e}[2007/10/19]%
\ProvidesPackage{lakeside-tikz-uml}[2019/01/01]%
% 需求的宏包
\RequirePackage{tikz}% 绘图包
\RequirePackage{xcolor}% 色彩包
\RequirePackage{calc}% 计算包
\RequirePackage{ifthen}% 条件包
...
一开始我习惯性的在日期中使用减号,结果报错,后面才注意到是日期分隔符的问题。宏包文件的扩展名是sty。
2. 灵活使用pgfkeys功能
通过在网上看别人写的代码,了解到pgfkeys的使用方法。目前,我就是把pgfkeys当作字符串函数来用,使用方法是先定义关键字(可设置默认值),然后读取用户输入的字符流,再从中提取指定关键字的内容,示例如下:
\pgfkeys{%
/keys/.cd,%
name/.initial = #2,% 类名,默认与显示名称一样
attr/.initial =,% 属性
meth/.initial =,% 方法
...
}
这个是存放需要使用的关键字,其中/keys/.cd这一行是默认起始代码,并不是要使用的关键字,必须有,keys可以用其他名字代替。
% ------ 定义key设置命令 ------
\newcommand{\setKeys}[1]{%
\pgfkeys{/keys/.cd,#1}%
}%
这里定义一个命令(我更愿意把其称为函数):\setKeys。作用就是读取用户输入的字符串,例如:\setKeys{name = employee}。
% ------ 定义key获取命令 ------
\newcommand{\getKeys}[1]{%
\pgfkeysvalueof{/keys/#1}%
}%
这里定义命令:\getKeys。实际上就是从前面读入的字符串中提取指定的关键字对应的内容,例如:\getKeys{name}。结果就是把employee提取出来了。
3. 灵活使用ifthen宏包
有了这个宏包,我们就可以进行逻辑判断了,内容请看相关参考文档,这里发一份示例:
\ifthenelse{\equal{}{\getKeys{above right}}}{}{\renewcommand{\relativePosion}{above right}}%
4. rectangle split形状的最小高度问题
rectangle split形状分为横排与竖排两种方式,默认是竖排。竖排情况下,最小高度参数minimum height无效。一般情况下,我们只是在简单类下需要设定最小高度,这种情况下图形只有一层,所以我的处理办法就是把排列方式设置成横排,然后最小高度参数就有效了。
5. 默认配色方案
我选用的默认配色方案是参照Rational Rose上面的,但在使用中可以完全自己设置,例如下面示例中的代码与效果。
现在只是写完了类图的绘制代码,下面放上示例代码与效果图:
% 51CTO 陆巍的博客
\documentclass{article}%
\usepackage{geometry}%
% 汉字支持
\usepackage{xeCJK}%
% 我的UML绘图宏包
\usepackage{/mydata/my_opensource/lakeside-tikz-uml/lakeside-tikz-uml}%
%
%
\begin{document}%
\begin{tikzpicture}%
\umlClass[%
draw = red,%
text color = red!50!black,%
part1 fill = red!30!white,%
part2 fill = red!20!white,%
part3 fill = red!10!white,%
name = employee,%
attr = - name\\ - age,%
meth = + setName()\\ + getName()\\ + setAge()\\ + getAge(),%
]{Development Employee}%
\umlClass[%
right = 2cm of employee,%
draw = green,%
text color = green!50!black,%
part1 fill = green!30!white,%
part2 fill = green!20!white,%
part3 fill = green!10!white,%
name = addEmployee,%
attr = - name\\ - address,%
meth = + validate()\\ + execute(),%
]{AddEmployee Transaction}%
\umlInterface[%
x = 3cm,%
y = -4cm,%
draw = blue,%
text color = blue!50!black,%
part1 fill = blue!30!white,%
part2 fill = blue!20!white,%
part3 fill = blue!10!white,%
name = addEmployee1,%
meth = + validate()\\ + execute(),%
]{AddEmployee Transaction}%
\umlClass[%
below right = 2cm of addEmployee,%
type = <<anonymous>>\\,%
name = listener,%
]{Document Listener}%
\end{tikzpicture}%
\end{document}%
效果如下:
目前,\umlClass类图绘制命令有22个参数可用,以后慢慢完善。在我的代码托管仓库中有说明文档(也是用LaTeX写的)。接下来的工作就是编写关系表示线段的绘制命令。
标签:valueof tencent 使用方法 name shadow .com 获取 分享图片 无效
原文地址:http://blog.51cto.com/14013986/2339021