如何更改乳胶中图形的字体?

如何更改乳胶中图形的字体?

我开始为最终的 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

Latex 中的简单 UML 图

答案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;  

字体名称可以在http://tug.org/fontname/fontname.pdf

答案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,您可以将其放在数学显示环境中,正如我所展示的那样。

相关内容