TeX 中的“冒险 UML”

TeX 中的“冒险 UML”

我是 TeX 领域的新手,我想知道如何创建类似的东西

我是 Windows 用户;什么工具是更好的选择,我可以使用哪些库,在哪里可以阅读教程来开始创建这样的图表。

谢谢你!

答案1

我认为卡拉姆迪尔的权利—除非您打算将 TeX 用于其他用途,否则单独的 UML 绘图程序可能是一个更好的主意。如果您确实想使用 TeX,那么您需要使用 TikZ。这是一个工作示例(使用 LaTeX),它主要模仿详细视图:

\documentclass[landscape]{article}
\usepackage[margin=.5cm]{geometry}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{chains}
\usetikzlibrary{arrows}

\tikzset{
    every adventure uml/.style = { draw, thin
                                 , minimum height = 2cm, text width = 4cm }
  , adventure uml icon/.style  = { label={[shift={(-1cm,.5cm)}]335:#1 } }
  %
  , overview/.style = {every adventure uml, fill = violet, text = white}
  , goal/.style     = {every adventure uml, fill = cyan!50}
  , problem/.style  = { every adventure uml, adventure uml icon = problem-#1
                      , fill = magenta!50 }
  , solution/.style = { every adventure uml, adventure uml icon = solution-#1
                      , fill = green!50 }
  %
  , sequence/.style   = { chain default direction = going below
                        , start chain = #1, node distance = -.4pt
                        , every adventure uml/.append style = {on chain=#1} }
  , sequence/.default = {problem sequence}
  %
  , right angle/.style = {
      to path={ -- ($(\tikztostart)!.5!(\tikztostart -| \tikztotarget)$)
                |- (\tikztotarget) \tikztonodes }
    }
  %
  , terminal/.style = { circle, draw=black, fill=#1
                      , line width=.2cm, inner sep=0pt, minimum size=.6cm}}

\begin{document}
  \begin{center}\begin{tikzpicture}
    \node [terminal=black,   label=below:Start] (start) at (-6,0)  {} ;
    \node [terminal=cyan!25, label=below:End]   (end)   at (+16,0) {} ;

    \node [below=of start, overview]
          {You need to know that the transporter belongs to the motel.} ;
    \node [below=of end, overview]
          {They drive to the professor's aparetment.} ;

    \begin{scope}[sequence]
      \node[goal]              (goal-transporter)
                               {Use the transporter to drive to the city.} ;
      \node[problem=NPC]       {Can't drive with manual gearshift.} ;
      \node[solution=convince] (sol-convince) {Convince female reporter.} ;
      \node[problem=key]       {No key for the truck.} ;
      \node[solution=obtain]   (sol-get key) {Get the key from the office.} ;
    \end{scope}

    \begin{scope}[xshift=8cm, sequence]
      \node[goal]             (goal-ask) {Ask reporter.} ;
      \node[problem=want]     {Not motivated to help you.} ;
      \node[solution=obvious] (sol-amulet) {Show the amulet.} ;
    \end{scope}

    \begin{scope}[xshift=8cm, yshift=-10cm, sequence]
      \node[goal]            (goal-find key) {Find the key.} ;
      \node[problem=guard]   {Housekeeper guards it.} ;
      \node[solution=puzzle] (sol-solve 1-2) {Puzzle 1.2.} ;
    \end{scope}

    \begin{scope}[-triangle 45, every to/.style={right angle}]
      \draw (start)              to (goal-transporter.west) ;
      \draw (sol-convince)       to (goal-ask) ;
      \draw (sol-get key)        to (goal-find key) ;
      \draw (sol-solve 1-2.east) to (end) ;
    \end{scope}
  \end{tikzpicture}\end{center}
\end{document}

这将产生以下输出。需要注意的是:我没有在右下角使用小图标,而只是文本,因此会溢出。使用图标可以避免这种情况。

冒险 UML 图。

因此,既然您不了解 TikZ,下面介绍它的工作原理。我要做的第一件事是加载一堆正确设置的包:横向模式、小边距、TikZ 包和 TikZ 的相关功能。接下来,我设置了一些样式。这些基本上是预定义的绘制方式。例如,every adventure uml用细线绘制,尺寸为 2cm x 4cm。样式adventure uml icon排版图像,其中节点的右下角。 #1是样式的参数;我会\includegraphics{#1}在您的代码中将其替换为类似的东西,然后确保您problem-key.png在工作的目录中有命名的图形。

接下来的四种样式是特定类型的节点:深紫色表示概览;蓝色表示目标;粉色表示问题;绿色表示解决方案。problem和都接受一个参数,然后分别solution将文本problem-ARG和传递给。因此,如果您写入,您将得到,根据我提议的更改,它将运行并查找、或类似的东西。solution-ARGadventure UML icon\node[problem=key] ...adventure UML icon=problem-key\includegraphics{problem-key}problem-key.pngproblem-key.pdf

下一个样式sequence,用于创建单个拼图所用的垂直节点列。它创建一个节点“链”,TikZ 将为您布局,然后添加选项on chainevery adventure uml撤消node distance=-.4pt线宽,因此每个块的中心与下一个块的中心相距 2 厘米(除非您添加更多文本);该参数只是命名链,大多数情况下可以忽略。

接下来,我们告诉 TikZ 如何绘制这些漂亮的直角线。坐标($(\tikztostart)!.5!(\tikztostart -| \tikztotarget)$)很复杂,所以让我们分解一下。($...$)语法告诉我们正在进行某种计算。在本例中,计算结果为(pt-a)!frac!(pt-b),结果为和frac之间的一个点。在本例中,它位于起点和 的中间。第二个坐标只是计算一个点,它是从起点延伸的水平线和从终点延伸的垂直线的交点。换句话说,这个(pt-a)(pt-b)(\tikztostart -| \tikztotarget)所有的坐标表示“水平移动到起点和终点之间的一半”。然后,|- (\tikztotarget)通过先向上移动,再向右移动,绘制一条线到终点。

最后,样式只绘制用于和 的terminal圆圈。应该非常清晰。startend

呼!好了,搞定这些之后,让我们开始实际绘制图表。前两个节点只是绘制起点和终点。标签可让您将另一个节点附加到您正在绘制的节点;在这里,我使用它向圆圈添加“起点”和“终点”文本。然后,我将概览框放置在终端下方;below = of NODE正如您可能已经猜到的那样,这就是它的作用 :-) 您还可以执行诸如above = of NODE等操作。

现在我们来看看这三个序列。每个序列都包含在一个 中scope,它仅设置一些参数(在本例中是序列的一部分)以应用于其中的所有内容。在每个序列中,都有一堆节点命令。在本例中,该命令的语法为\node[STYLE] (LABEL) {TEXT} ;(LABEL)是可选的,并提供一种稍后引用事物的方式。STYLE在本例中, 指的是goalproblem=TYPE或之一solution=TYPE,我在上面定义了 。而TEXT,不出所料, 就是将在节点内打印的内容。每个序列看起来都像这样;xshiftyshift以简单的方式移动它们。

最后,我们绘制边。我们创建一个范围,其中每条线都用箭头和直角绘制;箭头规范为-triangle 45,表示使用 45 度等腰三角形作为箭头。然后我们连接相关节点,就完成了!

我没有做的一件大事是添加对“问题:密钥请求“行。我不确定最好的方法是什么;可能是一些引用参数的命令problemsolution,这样你就可以编写\node[problem=key] {\auml{Some text}}\auml完成繁重的工作。但我不确定最好的方法是什么。也就是说,它应该可以在 TeX/TikZ 中完成。

答案2

当然,使用 TeX(LaTeX、ConTeX)创建这样的图表是可能的。我从未使用 TeX 创建过 UML 图表,但正如 Maciej 指出的那样,已经有了关于 UML 图排版的问题。如果预制包不能满足您的需求,那么使用 TikZ 创建这些类型的图表应该很简单。texample.net 上的几个小例子

对于学习 *TeX,请参见例如标记为学习的问题。通常,LaTeX 包都有很好的手册(我不知道 UML 包的情况),而 TikZ 有一个很棒的手册和几个很好的教程。

然而选择正确的工具你想要做什么。正如 JCL 指出的那样很多工具专为创建 UML 图表而设计。甚至很多免费的。我并不是想阻止你学习 TeX,但如果你只是想创建这些类型的图表,专用的图表绘制程序可能会更高效。

答案3

我会看看普斯特里克或者蒂克兹

相关内容