
Esta pregunta es un poco amplia pero estoy intentando instalar metauml (estoy usando Mac y texlive). Descargué el paquete y ejecuté el script de instalación que colocaba un directorio metauml en el directorio metapost (que esperaba). Sin embargo, no puedo hacer que se ejecute. Tengo este código:
\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}
El metadiagram.mp está en la misma carpeta y se define de la siguiente manera:
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
Recibo el error: No se puede determinar el tamaño del gráfico en metadiagram.mp (sin BoundingBox)
Alguien puede ayudar ?
Respuesta1
No puedes incluir un .mp
archivo, que Metapost debería procesar de antemano.
La forma de ejecutar Metapost depende de su sistema operativo y de la distribución de TeX; posiblemente TeXShop y TeXworks tengan elementos de menú para esto. En general, puede abrir una ventana de Terminal, cd
al directorio que contiene el archivo y hacer
mpost metadiagram.mp
Esto producirá un archivo metadiagram.1
, porque estás diciendo beginfig(1)
y
\includegraphics{metadiagram.1}
servirá.
Tenga en cuenta que lo que está utilizando para cargar graphicx
es incorrecto. Debería ser
\usepackage{ifpdf}
\usepackage{graphicx}
\ifpdf
\DeclareGraphicsRule{*}{mps}{*}{}
\fi
Hay otra manera de proceder, con el gmp
paquete. Para su caso, la entrada debe ser
\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}
Si procesa este documento (observe que la fuente Metapost está incrustada en él) con el -shell-escape
interruptor (una preferencia en TeXShop le permite habilitarlo), entonces la ejecución de Metapost se realizará automáticamente.