metauml:實作連結不起作用

metauml:實作連結不起作用
\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 或tlmgrTeX Live)進行更新。

相關內容