metauml安裝與使用錯誤

metauml安裝與使用錯誤

這個問題有點廣泛,但我正在嘗試安裝metauml(我正在使用Mac和texlive)。我下載了該軟體包並運行了安裝腳本,該腳本將一個metauml 目錄放在metapost 目錄下(這是我所期望的)。但是,我無法讓它運行。我有這個代碼:

\documentclass[a4paper,12pt]{article}
\usepackage{amssymb} % needed for math
\usepackage{amsmath} % needed for math
\usepackage[utf8]{inputenc} % this is needed for german umlauts
\usepackage[ngerman]{babel} % this is needed for german umlauts
\usepackage[T1]{fontenc}    % this is needed for correct output of umlauts in pdf
\usepackage[margin=1.5cm]{geometry} %layout

% this is needed for forms and links within the text
\usepackage{hyperref}  

% The following is needed in order to make the code compatible
% with both latex/dvips and pdflatex.
\ifx\pdftexversion\undefined
\usepackage[dvips]{graphicx}
\else
\usepackage[pdftex]{graphicx}
\DeclareGraphicsRule{*}{mps}{*}{}
\fi

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% THE DOCUMENT BEGINS                                                %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\section{Class diagram}
\includegraphics{metadiagram.mp}
\end{document}

metadiagram.mp 位於同一資料夾中,定義如下:

input metauml;
beginfig(1);
Class.World("World")
       ("-age: int",
        "#ressources: List") 
       ("+sayHello(): void");

Class.NoHuman("Human")
       ("-birthday: Date",
        "-nickname: String",
        "-secret: String") 
       ("+code(language: Language): Program");

leftToRight(50)(World, NoHuman);
drawObjects(World, NoHuman);

link(aggregation)(NoHuman.w -- World.e);
item(iAssoc)("1")(obj.n     = .2[World.e,NoHuman.w]);
item(iAssoc)("has >")(obj.n = .5[World.e,NoHuman.w]);
item(iAssoc)("0..*")(obj.n  = .8[World.e,NoHuman.w]);

endfig;
end

我收到錯誤:無法確定 metadiagram.mp 中圖形的大小(無 BoundingBox)

有人可以幫忙嗎?

答案1

您不能包含.mp文件,該文件應事先由 Metapost 處理。

如何運行 Metapost 取決於您的作業系統和 TeX 發行版; TeXShop 和 TeXworks 可能有用於此目的的選單項目。一般來說,您可以打開一個終端機窗口,cd進入包含該文件的目錄並執行以下操作

mpost metadiagram.mp

這將產生一個文件metadiagram.1,因為你說的beginfig(1)

\includegraphics{metadiagram.1}

會做。

請注意,您用於加載的內容graphicx是錯誤的。它應該是

\usepackage{ifpdf}
\usepackage{graphicx}
\ifpdf
  \DeclareGraphicsRule{*}{mps}{*}{}
\fi

還有另一種方法可以繼續進行,就是使用gmp套件。對於您的情況,輸入應該是

\documentclass[a4paper,12pt]{article}
\usepackage{amssymb} % needed for math
\usepackage{amsmath} % needed for math
\usepackage[utf8]{inputenc} % this is needed for german umlauts
\usepackage[ngerman]{babel} % this is needed for german umlauts
\usepackage[T1]{fontenc}    % this is needed for correct output of umlauts in pdf
\usepackage[margin=1.5cm]{geometry} %layout

\usepackage[shellescape]{gmp}

\usepackage{ifpdf}
\ifpdf
\DeclareGraphicsRule{*}{mps}{*}{}
\fi

% this is needed for forms and links within the text
\usepackage{hyperref}  

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% THE DOCUMENT BEGINS                                                %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\section{Class diagram}

\begin{mpost}[mpsettings={input metauml;},use]
Class.World("World")
       ("-age: int",
        "#ressources: List") 
       ("+sayHello(): void");

Class.NoHuman("Human")
       ("-birthday: Date",
        "-nickname: String",
        "-secret: String") 
       ("+code(language: Language): Program");

leftToRight(50)(World, NoHuman);
drawObjects(World, NoHuman);

link(aggregation)(NoHuman.w -- World.e);
item(iAssoc)("1")(obj.n     = .2[World.e,NoHuman.w]);
item(iAssoc)("has >")(obj.n = .5[World.e,NoHuman.w]);
item(iAssoc)("0..*")(obj.n  = .8[World.e,NoHuman.w]);
\end{mpost}

\end{document}

如果您使用開關(TeXShop 中的首選項允許您啟用它)處理此文件(請注意其中嵌入了 Metapost 來源)-shell-escape,則 Metapost 運行將自動執行。

在此輸入影像描述

相關內容