我已经在 TEX SE 上阅读了几个与 metapost 和 latex 相关的问题,但我仍然无法解决我自己的问题。
所以这是一个非常基本的问题。我试图在我的 .tex 文件中包含一个 metapost 图形。我所做的就是保存另一个包含此代码的 .mp 文件
beginfig (1);
% draw a line
draw (1cm,2cm) -- (3cm,5cm);
endfig;
end.
然后在我的.tex 代码中,我使用包 graphicx,然后写入 \includegraphics{trial.mp},其中 trial 是我的 .mp 文件的名称。
但它没有起作用。
接下来我尝试将代码更改为 \includegraphics{trial.mps},它打印了图表,但顶部带有文件名 (trial)。我不想要那样,我只想要图片。
- 我的问题是 .mp 和 .mps 有什么区别?
不满意,我尝试使用 mpgraphics 包立即在我的 .tex 文件上写入代码
\begin{mpdisplay}
draw (1cm,2cm) -- (5cm,3cm) ;
\end{mpdisplay}
但它没有起作用。
- 我的下一个问题是,有什么方法可以将 metapost 代码写入我的 .tex 代码中,这样我就不必从其他文件导入了?
非常感谢您的帮助!
答案1
我希望不会来得太晚......关于您的第二个问题,我经常使用两种解决方案将 MetaPost 代码直接集成到 LaTeX 文档中。
第一种方法是使用gmp
包裹dgoodmaniii 已经提到过。
\documentclass{article}
\usepackage[shellescape]{gmp}
\begin{document}
\begin{mpost*}
beginfig(1);
$ := 1;
for i = -.3cm step .6cm until 3.6cm:
% draw a line
draw (1cm,2cm) -- (3cm,5cm);
endfor;
endfig;
\end{mpost*}
\end{document}
shell-escape
如果您想直接生成绘图,则必须在其上运行 LaTeX、pdfLaTeX、XeLaTeX 或 LuaLaTeX,并选择此项,如本例所示( pdflatex
):
pdflatex --shell-escape mypic.tex
mypic+mp0001.mp
在这种情况下,会创建一个 MetaPost 文件,然后对其进行编译以生成mypic+mp0001.mps
最终包含在 LaTeX 程序中的文件。所有这些都是“即时”进行的。
否则(没有shellescape
包选项gmp
,或者没有--shell-escape
命令选项pdflatex
),第一次运行将只生成 MetaPost 文件 mypic+mp0001.mp
。您必须处理它,然后包含生成的.mps
图像,所有这些都需要您自己完成。或者您可以执行 shell 脚本来处理以下步骤:mypic+mp.sh
,该脚本也是在第一次运行期间创建的。
您可以看到,这种shell-escape
方式是迄今为止更好的选择:-)
我知道的另一种将 MetaPost 代码集成到 LaTeX 程序中的方法是使用 LuaLaTeX 及其luamplib
包裹。
\documentclass{article}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);
$ := 1;
for i = -.3cm step .6cm until 3.6cm:
% draw a line
draw (1cm,2cm) -- (3cm,5cm);
endfor;
endfig;
\end{mplibcode}
\end{document}
这是最直接、最直接的解决方案:无需导入,无需shell-escape
任何选项。但它是 LuaLaTeX 特有的,与之相反,gmp
它可以在任何引擎上使用(LaTeX+DVI、pdfLaTeX、XeLaTeX、LuaLaTeX……)。
无论哪种方式,您的图片都会很好地绘制在您的文档中:
答案2
Metapost 是一种声明性图形语言;程序描述图像,但不是图像本身。你必须编译mp
生成mps
包含的文件。pdftex
根据您的操作系统,类似下面的操作应该可以完成此操作:
mpost image.mp
这将生成一个文件image.1
,您可以将其重命名image.mps
为 以将其包含在内pdftex
。(有多种方法可以让 Metapost 生成以 结尾的文件.mps
,也有多种方法可以让pdftex
Metapost 接受以 结尾的文件.1
,但我将这些留作阅读文档的练习。)
要将 Metapost 源包含在您的 TeX 源中,请查看gmp
包。
希望有所帮助。