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ページで説明されているクラス/インターフェース間のすべての可能なリンクを示しています。ドキュメンテーション

1 つを除いてすべてのリンクが正しく表示されます。それは「実現」です。そのリンクは表示されません。

今は次のようになっています:

クラス

どうすれば直せますか?

私はMetaPostバージョン1.504(MiKTeX 2.9)を使用しています

egreg のソリューションをコンパイルすると、次のようになります。

ここに画像の説明を入力してください

ここ実現リンクを生成しようとしているメタポストからのログを見つけることができます。

編集:

C:\Program Files (x86)\MiKTeX 2.9\metapost\generic\metauml\metauml_class_relations.mpファイルに の定義が含まれていなかったため、バージョンが 0.2.4 より古いことがわかりました。realization実現化のサポートは 0.2.4 で追加されました。

私がやったことは 1 つだけです。最新バージョンをダウンロードし、 内のすべてのファイルを置き換えました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 の場合) を使用してください。

関連情報