
\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}
這個例子顯示了類別/介面之間所有可能的鏈接,如metauml第9頁所述文件
除一個連結外,所有連結均正確顯示。這就是「實現」。該連結不會出現。
現在看起來像這樣:
如何解決?
我使用 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)進行更新。