metapost 图形中 ps2pdf 命令的问题

metapost 图形中 ps2pdf 命令的问题

我们大学有一个系统,多年来我们在这个系统中编写了数千道题。我们开始使用 Metapost,然后是 PSTricks,然后我们开始使用 tike 和 tkz。我们的代码混合了 perl 和 tex 代码,然后应用一个脚本来生成一个 tex 文件,然后使用以下命令对其进行编译。

latex --shell-escape filename.tex
dvips -o filename-pics.ps filename.dvi
ps2pdf -dAutoRotatePages=/None filename-pics.ps filename-pics.pdf
pdflatex --shell-escape filename.tex

Texlive 2012 运行良好,但 Texlive 2014 的最新更新带来了问题。我们的许多图形将无法再编译并最终出现在我们的 pdf 输出文档中。因此,当我们试图找出问题所在时,我可能会带着许多问题进入 Tex Stack Exchange。我的第一个问题如下。

这是一个最小文件。

\documentclass{article}
\usepackage{amsmath,amssymb}

\usepackage{infwarerr}
\usepackage{ltxcmds}

\usepackage{pst-pdf}
\usepackage{pst-bar}
\usepackage{pst-plot}
\usepackage{pst-tree}
\usepackage{pst-eucl}
\usepackage{pst-solides3d}
\usepackage{pstricks-add}
\usepackage{tkz-euclide,tkz-fct}
\usetkzobj{all}

\usepackage{ifpdf}

%% for metapost graphics
\usepackage{emp}
\ifpdf
\DeclareGraphicsRule{*}{mps}{*}{}
\fi
\setlength{\unitlength}{1cm}

\empTeX{}

\begin{document}

\setlength{\unitlength}{1cm}
\begin{empfile}

\begin{empdef}[raydomain1](4,4)

%initalize parameters;
numeric xa, ya, xb, yb;
xa:=0;
ya:=0;
xb:=5;
yb:=-5;

%initialize scale
numeric u; 10u=w;

%opendotblue macro
def opendotblue(expr pos)=
 fill fullcircle scaled 4pt shifted pos withcolor white;
 draw fullcircle scaled 4pt shifted pos withcolor blue;
enddef;

%grid
for k=-5u step 1u until 5u:
 draw (k,-5u)--(k,5u) withcolor blue;
 draw (-5u,k)--(5u,k) withcolor blue;
endfor;

%axes
drawdblarrow (-5u,0)--(5u,0);
label.rt(btex $x$ etex, (5u,0));
drawdblarrow (0,-5u)--(0,5u);
label.top(btex $y$ etex, (0,5u));

%scale
label.lft(btex $5$ etex, (0,5u));
label.top(btex $5$ etex, (5u,0));

%draw ray
path p;
p:=((xa,ya)--(xb,yb)) scaled u;
pickup pencircle scaled 1pt;
 drawarrow p withcolor blue;
pickup defaultpen;
opendotblue((xa,ya) scaled u);
label.rt(btex $f$ etex, (xb,yb) scaled u);

\end{empdef}

\end{empfile}

\immediate\write18{mpost  \jobname}

\empuse{raydomain1}

\end{document}

我们将此文件另存为 filename.tex。然后前两个命令就可以正常工作了。

latex --shell-escape filename.tex
dvips -o filename-pics.ps filename.dvi

但是,第三条命令:

ps2pdf -dAutoRotatePages=/None filename-pics.ps filename-pics.pdf

发布以下错误。

Error: /typecheck in --div--
Operand stack:
   1   1   0.0   0.0   a   65781.8
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1900   1   3   %oparray_pop   1899   1   3   %oparray_pop   1883   1   3   %oparray_pop   1771   1   3   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   --nostringval--   4   --nostringval--   %repeat_continue   --nostringval--
Dictionary stack:
   --dict:1168/1684(ro)(G)--   --dict:0/20(G)--   --dict:132/200(L)--   --dict:787/1012(L)--   --dict:183/300(L)--
Current allocation mode is local
Last OS error: Invalid argument
Current file position is 447402
GPL Ghostscript 9.10: Unrecoverable error, exit code 1

现在,如果我们注释两行,即:

%\usepackage{tkz-euclide,tkz-fct}
%\usetkzobj{all}

然后这个错误就消除了。那么,有什么变化吗?

这是第二个示例:

\documentclass{article}
\usepackage{amsmath,amssymb}

\usepackage{pst-pdf}
\usepackage{pst-bar}
\usepackage{pst-plot}
\usepackage{pst-tree}
\usepackage{pst-eucl}
\usepackage{pst-solides3d}
\usepackage{pstricks-add}
\usepackage{tkz-euclide,tkz-fct}
\usetkzobj{all}

\begin{document}

\begin{center}
\psset{unit=0.4in}
\begin{pspicture}(-1,-1)(6.5,6)
\psgrid[gridlabels=0pt,subgriddiv=1,gridcolor=lightgray](0,0)(0,0)(5,5)
\psaxes[arrows=->,arrowscale=1.5,ticks=none,labels=none](0,0)(0,0)(5.3,5.3)
\uput[0](5.3,0){$x$}
\uput[270](5,0){5}
\uput[270](0,0){0}
\uput[180](0,5){5}
\uput[180](0,0){0}
\uput[90](0,5.3){$y$}
\psdot*[linecolor=red,dotsize=3pt 3](2,2)
\uput[45](2,2){$P$}
\end{pspicture}
\end{center}

\end{document}

现在,这三个命令:

latex --shell-escape filename.tex
dvips -o filename-pics.ps filename.dvi
ps2pdf -dAutoRotatePages=/None filename-pics.ps filename-pics.pdf

生成一个空白文件 filename-pics.pdf。

现在,我再次评论以下几行:

%\usepackage{tkz-euclide,tkz-fct}
%\usetkzobj{all}

然后,这三个命令:

latex --shell-escape filename.tex
dvips -o filename-pics.ps filename.dvi
ps2pdf -dAutoRotatePages=/None filename-pics.ps filename-pics.pdf

生成包含所需图像的文件 filename-pics.pdf。

注意:我知道有些人可能会立即开始建议更好的方法(它们现在确实存在,但可能在我们多年前开始时不存在),所以我们必须保持我们的系统保持不变,因为有太多的文件是我们无法重写的。

那么,发生了什么事:

\usepackage{tkz-euclide,tkz-fct}
\usetkzobj{all}

我在用:

\ProvidesPackage{tkz-fct}[2014/03/13 1.19 c function ] 

大卫

相关内容