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