Подчеркивание в мета-файле

Подчеркивание в мета-файле
\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.

Связанный контент