
\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의 솔루션을 컴파일하면 다음과 같은 결과가 나옵니다.
여기실현 링크를 생성하려는 메타포스트의 로그를 찾을 수 있습니다.
편집하다:
파일 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용)를 사용하세요.