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

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

时间:2019-01-05 10:49:29      阅读:462      评论:0      收藏:0      [点我收藏+]

标签:valueof   tencent   使用方法   name   shadow   .com   获取   分享图片   无效   

因为工作需要,我在使用LaTeX编辑文件时经常要绘制UML图形。虽然目前LaTeX有一些宏包支持绘制UML图形,但总有这样那样的小问题,使用起来不是那么满意,所以想自己创建一个专门的宏包来绘制UML图形。一方面可以加深对LaTeX的了解,另一方面也给工作上带来便利。
  LaTeX宏包中的TikZ绘图宏包,功能很强大,LaTeX编辑的文档中很多都用其来绘制图形,所以我自然也以此宏包为基础来编写。本项目是从2019年1月1日在电脑上开始的,传入腾讯云开发者平台是2019年1月3日开始,地址是lakeside-tikz-uml项目。有兴趣的朋友可以去看看。我学习使用LaTeX的时间还很短,所以在编写中会存在许多不足之处,请予指正。
  从今天开始我将陆续在51CTO博客中记录下开发过程中遇到的问题、解决办法,以及一些心得体会。有兴趣的朋友可以发邮件与我一起交流,
  
1. 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写的)。接下来的工作就是编写关系表示线段的绘制命令。

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

标签:valueof   tencent   使用方法   name   shadow   .com   获取   分享图片   无效   

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

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