metauml 中的下划线

metauml 中的下划线
\documentclass{article}
\usepackage[shellescape]{gmp}
\begin{document}
\begin{figure}
\begin{mpost}[use]
input metauml;

Class.A("A")
       ("-instance: A")
       ("-A()",
        "+instance(): A");

drawObjects(A);
\end{mpost}
\caption{Class \texttt{A} as a singleton}
\label{fig:uml-a}
\end{figure}
\end{document}

我如何加+instance(): A下划线来将其标记为静态方法?

是否可以禁用转换+-图形?

下面的 Egreg 解决方案有效,但是有没有办法绘制“真正的”下划线?例如,如果我在下划线部分下方添加一些内容,我必须手动移动线条。我想避免这种情况。

答案1

您应该使用mpsettings={input metauml;};然后您可以使用 Metapost 画一条线。

\documentclass{article}
\usepackage[shellescape]{gmp}
\begin{document}
\begin{figure}
\begin{mpost}[use,mpsettings={input metauml;}]

Class.A("A")
       ("-instance: A")
       ("-A()",
        "+instance(): A");

drawObjects(A);

draw A.sw+(13,1.5) -- A.se+(-4,1.5);

\end{mpost}
\caption{Class \texttt{A} as a singleton}
\label{fig:uml-a}
\end{figure}
\end{document}

在此处输入图片描述

为了将+和更改-为默认值以外的值,应该详细研究源代码metauml.mp

答案2

在“属性”标签下画线的想法。(声誉受损的图像)

+---------------------+
|      Singleton      |
+---------------------+
| -  static Instance  |
|   ----------------- |
+---------------------+
|                     |
+---------------------+

这是 egreg 答案的变体。可能存在更准确的答案...

input metauml;

beginfig(1);
    Class.SingletonLite("Singleton")("- static Instance")();

    drawObject(SingletonLite);

    draw SingletonLite.attributeStack.pict[0].sw -- SingletonLite.attributeStack.pict[0].se ;
endfig;

end.

答案3

以下建议适用于MetaUML 的主分支,但不适用于 MetaUML 0.2.5。

可以明确地将类特征标记为抽象或静态:

metaUML 类图:在抽象类中将一些方法设置为抽象

文本可以按如下方式加下划线:

Picture.a("foo");
a.info.textDecoration := "underline";

不再使用锁作为可见性标记,而是采用标准 UML 符号。

相关内容