我开始为最终的 Java 项目绘制一个简单的 UML 图。我首先阅读了大量 metauml github 存储库,然后这个例子尤其如此。如您在所附图片中所见,衬线字体在 UML 图中看起来确实不合适。我能够突出显示并复制文档中的文本,因此我认为我可以更改字体。您建议我如何执行此操作?
TLDR:如何更改\includegraphics{...}
语句中的字体?
我的 metapost 文档:
input metauml;
beginfig(1);
Class.U("User")
("- userId : int")
("+ getUserId : int");
Class.A("App")
("- appId : int")
("+ getAppId : int");
topToBottom(45)(U, A);
drawObject(U);
drawObject(A);
endfig;
end;
我的乳胶文档:
\documentclass{article}
\usepackage[pdftex]{graphicx}
\DeclareGraphicsRule{*}{mps}{*}{}
\begin{document}
\includegraphics{example.1}
\end{document}
输出mpost example.mp && pdflatex example.tex
:
答案1
您可以在加载之前设置 MetaUML 使用的字体。
string metauml_defaultFont;
metauml_defaultFont := "texnansi-lmr10";
input metauml;
这将使用拉丁现代语而不是默认的时代语。
答案2
我很开心尝试更改 mwe 中的设置,您可以轻松地将第一个“Class”行更改为任何合适的字体,就像左边我选择的是 SANS serif(Helvetica)在 Henri 回答之前,我曾通过简单快速而肮脏的查找和粘贴在 ps 文件中来轻松更改字体,在右侧看到结果
我擅自将这两种方法结合起来(前两行是 Henri 建议的,因此他的回答对于您的问题是“正确的”。
string metauml_defaultFont;
metauml_defaultFont := "phvb8rn";
input metauml;
beginfig(1);
Class.U("User")
("- userId : int")
("+ getUserId : int");
U.info.foreColor := (.9, .7, .7);
U.info.iName.iFont.name := "phvb8rn";
Class.A("App")
("- appId : int")
("+ getAppId : int");
A.info.foreColor := (.7, .7, .9);
A.info.iName.iFont.name := "phvb8rn";
topToBottom(45)(U, A);
drawObject(U);
drawObject(A);
endfig;
end;
答案3
如果对您来说这是一个选择,您可以通过直接将图表包含在 LaTeX 文档中来 lualatex
获得更简单的工作流程,以及metaUML
输出与文档其余部分之间更好的一致性。luamplib
下面是一个示例,其中包含一些虚拟文本,并使用Fira Sans以显示图形和文本的一致性。
\documentclass{article}
\usepackage{luamplib, luatex85}
\usepackage{fontspec}
\usepackage{lipsum}
\setmainfont{Fira Sans}
\mplibtextextlabel{enable}
\everymplib{input metauml; beginfig(0);}
\everyendmplib{endfig;}
\begin{document}
\section{UML diagrams}
\lipsum[1]
\begin{figure}
\[
\begin{mplibcode}
Class.U("User")
("- userId : int")
("+ getUserId : int");
Class.A("App")
("- appId : int")
("+ getAppId : int");
topToBottom(45)(U, A);
drawObject(U);
drawObject(A);
\end{mplibcode}
\]
\caption{My UML diagram}
\end{figure}
\end{document}
在我的系统上编译这个lualatex
得到:
笔记
包括
luamplib
强制你编译lualatex
并使用 来
fontspec
改变字体。您可以使用任何系统安装的字体
该
\mplibtextextlabel{enable}
行至关重要;此选项告诉底层 MP 引擎传递luamplib
任何string
内容textext()
,以便它在与文档的其余部分相同的环境中进行编译。使用
\everymplib
和\everyendmplib
选项可以让你减少每张图片中的样板。环境
mblibcode
会产生一个 LaTeX 框(对 TeX 来说,本质上看起来像一个大字符),因此为了使其在环境中很好地居中并隔开figure
,您可以将其放在数学显示环境中,正如我所展示的那样。