Unterstreichen in Metauml

Unterstreichen in 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}

Wie kann ich es +instance(): Aunterstreichen, um es als statische Methode zu kennzeichnen?

Ist es möglich, die Konvertierung in Grafiken zu +deaktivieren -?

Die folgende Lösung von Egreg funktioniert, aber gibt es eine Möglichkeit, eine „echte“ Unterstreichung zu zeichnen? Wenn ich beispielsweise etwas unter den unterstrichenen Teil einfüge, müsste ich die Linie manuell verschieben. Das möchte ich vermeiden.

Antwort1

Sie sollten verwenden mpsettings={input metauml;}; anschließend können Sie Metapost zum Zeichnen einer Linie verwenden.

\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}

Bildbeschreibung hier eingeben

Um das +und -in etwas anderes als die Standardeinstellung zu ändern, sollte man die Quelle im Detail studierenmetauml.mp

Antwort2

Idee beim Zeichnen einer Linie unter der Bezeichnung „Attribut“. (Bild wurde durch Reputation zerstört)

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

Dies ist eine Variante von Egregs Antwort. Es ist möglich, dass es eine genauere Antwort gibt ...

input metauml;

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

    drawObject(SingletonLite);

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

end.

Antwort3

Die folgenden Vorschläge funktionieren mit dem Code in derMaster-Zweig von MetaUML, aber nicht mit MetaUML 0.2.5.

Es ist möglich, Klassenfunktionen explizit als abstrakt oder statisch zu markieren:

metaUML-Klassendiagramm: Einige Methoden in einer abstrakten Klasse als abstrakt festlegen

Text kann wie folgt unterstrichen werden:

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

Die Verwendung von Schlössern als Sichtbarkeitsmarkierungen wurde zugunsten der einheitlichen UML-Notation eingestellt.

verwandte Informationen