
\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}
Dieses Beispiel zeigt alle möglichen Verknüpfungen zwischen Klassen/Schnittstellen, wie sie auf Seite 9 von metauml beschrieben sind.Dokumentation
Alle Links werden korrekt angezeigt, bis auf einen. Es ist „Realisierung“. Dieser Link erscheint nicht.
Jetzt sieht es so aus:
Wie kann das Problem behoben werden?
Ich verwende MetaPost, Version 1.504 (MiKTeX 2.9)
Das ist, was ich bekomme, wenn ich die Lösung von egreg kompiliere:
HierSie finden ein Protokoll von Metapost, das versucht, einen Realisierungslink zu generieren.
BEARBEITEN:
Ich habe festgestellt, dass ich eine Version älter als 0.2.4 habe, da die Datei C:\Program Files (x86)\MiKTeX 2.9\metapost\generic\metauml\metauml_class_relations.mp
keine Definition von enthielt realization
. Unterstützung für die Realisierung wurde in 0.2.4 hinzugefügt.
Ich habe nur eines gemacht. Ich habe die neueste Version heruntergeladen und alle Dateien in ersetzt C:\Program Files (x86)\MiKTeX 2.9\metapost\generic\metauml
. Das hat ein "kleines" Problem verursacht.
In den Protokollen ( tmp+mp000X.log
) steht:
! 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)
Ich habe nachgesehen und festgestellt, dass die Datei existiert. Was soll ich als Nächstes tun?
Antwort1
So geben Sie die Metapost-Snippets richtig ein:
\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
Ich habe die unwesentlichen Bildunterschriften und Umgebungen weggelassen . Dies ist das Ergebnis.
Überprüfen Sie die Version Ihres MetaUML-Pakets. Mit Version 0.2.5 funktioniert es: siehe
<texroot>/doc/metapost/metauml/README
zur Überprüfung der Versionsnummer. Verwenden Sie tlmgr
zum Aktualisieren Ihren Paketmanager (MiKTeX oder für TeX Live).