在外部应用中插入MetaPost图形

在外部应用中插入MetaPost图形

John D. Hobby

MetaPost生成的图形很容易就可以插入到第三方的应用中,比如文本文档,演示文档和web,MetaPost生成的图形是向量格式的,可以质量无损地延展。然而,实际上,向量图形也最好有一个大致的目标大小。延展图形必然会不成比例地延展一些技术参数,比如线条宽度,箭头大小和字体。否则,延展系数越大,图形将改变它的视觉特性。另外,在插入主文档时,它们经常会失败,比如文档的笔画宽度。像这样,最好少或者不要在插入文档的时候对向量图形执行延展变换。


TeX类
MetaPost图形的ps格式可以轻松地集成到TeX类的文档中。MetaPost的输出是PostScript语言的一个低特性的方言,称为提炼的EPS(purified EPS),可以轻松变换到pdf格式。这样,外部的MetaPost图形有两种使用方式:
a) 使用传统的TeX驱动和外部的PostScript输出驱动;
b) 使用较新的TeX驱动,例如pdfTeX或者LuaTeX,内置了pdf输出驱动。
LuaTeX能够处理嵌入的MetaPost代码,内置mplib库。
在TeX源文件中有宏包提供帮助插入图形文件。在排版的时候,宏只是读入边界盒子信息,在页面上预留下需要的空间,就是一个空盒子。最后,图形文件指针传给输出驱动,这时,图形才插入文档。自由软件dvips就是这个驱动。

在外部应用中插入MetaPost图形



原始TeX格式
原始TeX格式和传统TeX驱动的用户,epsf宏包提供插入图形的功能。
\epsfbox{filename}
例如,\epsfbox{fig.1}.
使用LuaTeX,插入图形与pdfTeX是一样的。另外,LuaTeX用户可以直接把MetaPost代码插入原始TeX文档中。LuaTeX内置了mplib库。注意,mplib不支持verbatimtex/btex...etex形式。这里有一个例子:

\input luamplib.sty
\mplibcode
beginfig(1)
endfig;
\endmplibcode
\bye


LaTeX格式
LaTeX的用户使用graphics或者graphicx宏包。这个宏包支持不同的驱动,自动推理出正确的驱动,然后调用,并且可以处理几种图形格式。
\includegraphics{filename}
在dvi输出模式下,graphics认为所有的图形文件带有未知的后缀,比如.1等EPS格式。所以可以处理MetaPost默认的数字后缀文件。
在使用pdfTeX的时候,pdf驱动是内置的。只有.mps后缀的文件才能被识别为提炼的EPS,才能转换到pdf格式。推荐的方法是,改变MetaPost的输出文件后缀,设置outputtemplate(例如,outputtemplate:="%j-%c.mps";)。
\includegraphics{fig-1.mps}
即使在dvips驱动下,.mps格式的图形文件也是可以的,只是后缀同样被忽略。
LuaTeX下,用户可以直接嵌入MetaPost代码到LaTeX文档。

\dcumentclass{article}
\usepackage{luamplib}
\begin{mplibcode}
beginfig(1)
...
endfig;
\end{mplibcode}
\end{document}


Web
SVG图形文件可以轻松地插入HTML文档:

<p>
<object data="fig.svg" type="image/svg+xml"></object>
</p>

备注:

本文摘自 "METAPOST A User's Manual" 第14章第四小节,主要讲metapost生成的ps文件如何插入TeX文档。

你可能感兴趣的:(post)