使用 MetaPost 绘制相图

使用 MetaPost 绘制相图

我想采用@Thruston 提供的解决方案经济周期的阶段。但是,当我复制并粘贴作为英文解决方案提供的第一段代码时,我无法在 latex 中获得输出。我收到错误Missing \begin{document}可能是什么原因造成的?

答案1

问题在于,原始图表设计为直接使用 Metapost 进行编译 —— “老方法”。因此,要获得所需的输出,您应该使用mpost而不是任何 LaTeX 引擎进行编译。如果您这样做,它将创建一个.epsEncapsulated PostScript 文件,您可以使用 GhostScriptepstopdf等将其渲染成各种形式。

或者,您可以使用 和 来调整它以适应现代用法lualatexluamplib调整过程相当容易。

从此模板文件开始。

\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);
% drawing-commands-go-here
endfig;
\end{mplibcode}
\end{document}

然后复制源文件中和之间的所有内容beginfig并将endfig其放在模板中注释行的位置。

然后您可以编译它以lualatex直接获取 PDF 输出文件。

这是一个可行的例子:

\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);

string ff; ff = "phvr8r";

% fiddle with the parameters to get a nice rising wave
path wave;
wave = (origin for t=1 step 1 until 3*360 + 24: 
                  -- (2/3t,70 sind(t)) shifted (0,1/3*t) 
               endfor) scaled 3/4 shifted (21,34);

% draw the straight arrow and the wave on top
drawarrow point 0 of wave -- point 3*360 of wave scaled 1.05 
          dashed evenly withcolor .5[blue, white];
draw wave withpen pencircle scaled 1 withcolor .67 green;

% labels
picture s[];                % center each label and push it up/down slightly
s1 = "peak"      infont ff; s1 := s1 shifted (-1/2 xpart urcorner s1, 6);
s2 = "trough"    infont ff; s2 := s2 shifted (-1/2 xpart urcorner s2, -12);
s3 = "expansion" infont ff; s3 := s3 shifted (-1/2 xpart urcorner s3, 6);
s4 = "recession" infont ff; s4 := s4 shifted (-1/2 xpart urcorner s4, 6);

% add the labels in the "right" places 
t = 0; n = 0;
forever:
  dt := directiontime right of subpath(t,infinity) of wave;
  exitif dt < 0;
  t := t + dt;
  n := n + 1;
  if odd(n): draw s1 shifted point t of wave withcolor .67 blue;  
     if n>1: draw s3 rotated angle direction t-dt/2 of wave
                             shifted point t-dt/2 of wave ; fi
  else:      draw s2 shifted point t of wave withcolor .67 red;  
             draw s4 rotated angle direction t-dt/2 of wave
                     shifted point t-dt/2 of wave;
  fi
endfor

% do the axes and titles
path xx, yy;
xx = origin -- (xpart point infinity of wave, 0);
yy = origin -- (0, ypart point infinity of wave);
drawarrow xx;
drawarrow yy;

label.bot("Time"                 infont ff scaled 1.2,            point 1/2 of xx);
label.lft("Level of real output" infont ff scaled 1.2 rotated 90, point 1/2 of yy);
label.top("The business cycle"   infont ff scaled 1.44, point 0.8 of yy shifted 108 right) withcolor .8 red;

endfig;
\end{mplibcode}
\end{document}

编译它以lualatex获得如下 PDF:

在此处输入图片描述

笔记

如果您的源 MP 文件中有多个beginfig/endfig对,则应将它们分别复制到单独的模板文件中。

相关内容