我正在尝试使用 MetaUML 为我的 LaTeX 文档绘制 UML 图。不幸的是,我对布局有点不满意,因为具有长签名(即许多参数)的函数会变成相当长的线,因此会过度加宽它们所在类的绘制框,所以我想让 MetaUML 拆分这些长线。
有没有办法将换行符放入 MetaUMLclass
对象的属性中?
手册对此只字未提。我需要合并方法签名,但如果没有换行符,我的类就会变得太宽,无法阅读图表。下面是一个简短的例子 (笔记:LaTeX 构建器必须使用以下-shell-escape
选项运行):
\documentclass{article}
\usepackage[shellescape]{gmp}
\begin{document}
\begin{mpost}[mpsettings={input metauml;},use]
Class.Config("Config")
("-key1:char*","-value1:char*","-key2:char*","-value2:char*","-key3:char*","-value3:char*","-key4:char*","-value4:char*","-key5:char*","-value5:char*")
("+setValues(key1:char*,value1:char*, key2:char*,value2:char*, key3:char*,value3:char*,key4:char*,value4:char*,key5:char*,value5:char*)");
drawObjects(Config);
\end{mpost}
\end{document}
这样做的话,函数的行setvalues()
会变得很长,因此,类在图中绘制的会变得过宽。我想在 key3 和 value3 之间放置一个\newline
或之类的东西\\
,以便函数分布在两条线上,绘图会变得更紧凑一些。虽然从语义上讲,这当然不是一个合理的示例,但我认为它表达了我的观点:我基本上想在 UML 图的类中分割过长的行。
答案1
可以将属性和方法放在多行上,例如:
Class.A("Point")
("#x:int",
"#y:int")
("+set(x:int, y:int)",
"+getX():int",
"+getY():int",
"-debug():void",
"test():void");
drawObject(A);
可以使用 Metapost 字符串连接运算符“&”从其各个部分构建一个长方法字符串,如“f(" & ")”。
https://github.com/ogheorghies/MetaUML/blob/master/manual/fig/class.mp#L21