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

因为工作需要,我在使用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写的)。接下来的工作就是编写关系表示线段的绘制命令。

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

时间: 2024-08-25 21:46:43

LaTeX绘制UML图形宏包开发过程记录001的相关文章

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

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

[Tool] 使用Astah绘制UML图形

[Tool] 使用Astah绘制UML图形 前言 在软件开发的过程中,开发人员可以绘制UML图形来将分析设计内容转化为图形化文件,方便在团队之间传递分析设计结果.但在团队经费有限的情景中,可能没办法为每个项目成员都配置专业的UML绘制工具,例如Visual Studio Ultimate,来绘制UML图形,这时可以选择一些免费版本的绘制工具,做为团队间绘制UML图形的工具. 本篇文章介绍Astah这个提供免费版本的UML绘制工具,用来在团队经费有限的状况下,为每个成员配置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

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中使用tikz宏包及其扩展包共同绘制UML图

LaTeX宏包tikz的绘图功能很强,完全可以绘制UML的各种图形,并且在tikz的基础上扩展出不少这方面的宏包.前面我介绍过宏包tikz-uml,这个宏包功能不错,只是外观上略微有些不足.所以我现在还是立足于tikz的基础功能,结合tikz-uml宏包一起绘制UML图. 下面直接给出示例代码.效果图与说明. 操作系统:Ubuntu 16.04 64位桌面版LaTeX工具:TeXstudio 2.10.8 示例一 % 51CTO陆巍的博客 \documentclass[oneside, Auto

用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宏包TikZ-UML使用备忘一

TikZ-UML宏包是用于绘制UML图形的,相较于我以前使用的pgf-umlcd宏包而言,他支持的图形种类更多,二者都是由tikz扩展而来.这里把使用方法与绘图例子记录下来,以备忘. 下载与安装 TikZ-UML宏包并没有包含在texlive中,需要自己去官网下载,地址是:TikZ-UML官网下载.我把官网2016年3月29日发布的版本(目前最新版)已经传入51CTO,下载地址是:TikZ-UML51CTO下载.下载的压缩包里面有宏包文件与说明文档. 下载解压后,可以把其中的文件tikz-uml

利用TikZ 宏包在 LaTeX 中绘制流程图

发现用TikZ画流程图其实挺方便的,对于简单的图应该比visio简单. 使用的宏包: \usepackage{tikz,mathpazo} \usetikzlibrary{shapes.geometric, arrows} \usetikzlibrary{calc} 结果示例: 具体代码为: % 流程图定义基本形状 \tikzstyle{startstop} = [rectangle, rounded corners, minimum width = 2cm, minimum height=1c

[原创][LaTex]LaTex学习笔记之框架及宏包

0. 简介 LaTex在书写文档时的最基本单元就是首部的写作,变相的也可以说是头文件.本文章就来总结一下文档的基本格式和常用宏包. 1. 基本单元 基本单元需要对LaTex语法有一定的了解,这个很简单,找本书或者网上的教程看看已大家学习LaTex的劲头来说都是简简单单的.下面直接写出来,请往下看. \documentclass[a4paper]{article} \begin{document} Hello World! \end{document} 其中\documentclass是声明文档的