
\documentclass{article}
\usepackage[shellescape]{gmp}
\begin{document}
\begin{figure}
\begin{mpost}[use]
input metauml;
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(association)(B, A);
\end{mpost}
\caption{association}
\end{figure}
\begin{figure}
\begin{mpost}[use]
input metauml;
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(associationUni)(B, A);
\end{mpost}
\caption{associationUni}
\end{figure}
\begin{figure}
\begin{mpost}[use]
input metauml;
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(inheritance)(B, A);
\end{mpost}
\caption{inheritance}
\end{figure}
\begin{figure}
\begin{mpost}[use]
input metauml;
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(realization)(B, A);
\end{mpost}
\caption{realization}
\end{figure}
\begin{figure}
\begin{mpost}[use]
input metauml;
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(aggregation)(B, A);
\end{mpost}
\caption{aggregation}
\end{figure}
\begin{figure}
\begin{mpost}[use]
input metauml;
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(aggregationUni)(B, A);
\end{mpost}
\caption{aggregationUni}
\end{figure}
\begin{figure}
\begin{mpost}[use]
input metauml;
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(composition)(B, A);
\end{mpost}
\caption{composition}
\end{figure}
\begin{figure}
\begin{mpost}[use]
input metauml;
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(compositionUni)(B, A);
\end{mpost}
\caption{compositionUni}
\end{figure}
\begin{figure}
\begin{mpost}[use]
input metauml;
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(dependency)(B, A);
\end{mpost}
\caption{dependency}
\end{figure}
\end{document}
В этом примере показаны все возможные связи между классами/интерфейсами, как описано на странице 9 metauml.документация
Все ссылки отображаются правильно, кроме одной. Это "реализация". Эта ссылка не отображается.
Теперь это выглядит так:
Как это можно исправить?
Я использую MetaPost версии 1.504 (MiKTeX 2.9)
Вот что я получаю, когда компилирую решение egreg:
Здесьвы можете найти журнал из metapost, пытающийся сгенерировать ссылку на реализацию.
РЕДАКТИРОВАТЬ:
Я обнаружил, что у меня версия старше 0.2.4, потому что файл C:\Program Files (x86)\MiKTeX 2.9\metapost\generic\metauml\metauml_class_relations.mp
не содержал определения realization
. Поддержка реализации была добавлена в 0.2.4.
Я сделал только одно. Я скачал последнюю версию и заменил каждый файл в C:\Program Files (x86)\MiKTeX 2.9\metapost\generic\metauml
. Это вызвало "небольшую" проблему.
В логах ( tmp+mp000X.log
) говорится следующее:
! I can't open file `metauml_component'.
l.77 input metauml_component
;
Please type another input file name
! Emergency stop.
l.77 input metauml_component
;
*** (job aborted, file error in nonstop mode)
Я проверил и указанный файл существует. Что мне делать дальше?
решение1
Вот правильный способ ввода фрагментов Metapost:
\documentclass{article}
\usepackage[shellescape]{gmp}
\begin{document}
\begin{mpost}[use,mpsettings={input metauml;}]
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(association)(B, A);
\end{mpost}
\begin{mpost}[use,mpsettings={input metauml;}]
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(associationUni)(B, A);
\end{mpost}
\begin{mpost}[use,mpsettings={input metauml;}]
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(inheritance)(B, A);
\end{mpost}
\begin{mpost}[use,mpsettings={input metauml;}]
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(realization)(B, A);
\end{mpost}
\begin{mpost}[use,mpsettings={input metauml;}]
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(aggregation)(B, A);
\end{mpost}
\begin{mpost}[use,mpsettings={input metauml;}]
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(aggregationUni)(B, A);
\end{mpost}
\begin{mpost}[use,mpsettings={input metauml;}]
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(composition)(B, A);
\end{mpost}
\begin{mpost}[use,mpsettings={input metauml;}]
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(compositionUni)(B, A);
\end{mpost}
\begin{mpost}[use,mpsettings={input metauml;}]
Interface.A("Interface")
();
A.info.iAttributeStack.top := 0;
A.info.iAttributeStack.bottom := 0;
Class.B("Class")
()
();
A.w = B.e + (50, 0);
drawObjects(A, B);
clink(dependency)(B, A);
\end{mpost}
\end{document}
Я исключил ненужные подписи и figure
окружение. Вот результат.
Проверьте версию вашего пакета MetaUML. С версией 0.2.5 работает: см.
<texroot>/doc/metapost/metauml/README
для проверки номера версии. Используйте ваш менеджер пакетов (MiKTeX или tlmgr
TeX Live) для обновления.