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 表示法。

相關內容