无法读取 mpx 文件

无法读取 mpx 文件

这是 LaTeX 文件:

verbatimtex
\documentclass[a4paper, 12pt]{article}
\usepackage{amsfonts, amssymb, longtable, verbatim}
\usepackage[utf8]{inputenc}
\usepackage{cmap}
\usepackage[T2A]{fontenc}
\usepackage[english]{babel}
\begin{document}
\rm
etex

prologues := 3;
u=.5cm;

beginfig(1);
z0=(0,0);
label.bot(btex $A$ etex, z0);
endfig;

end

这是我在 cmd(Windows 10)中用于编译 mp 文件的命令:mpost DifGemFig.mp -tex=latex 我将文件保存在记事本++使用 UTF-8。然后我收到错误:

This is MetaPost, version 2.02 (MiKTeX 22.8.28)
(C:/Users/mrPlag/AppData/Local/Programs/MiKTeX/metapost/base/mpost.mp
(C:/Users/mrPlag/AppData/Local/Programs/MiKTeX/metapost/base/plain.mp
Preloading the plain mem file, version 1.005) ) (./DifGemFig.mpfatal: Command failed: tex --parse-first-line --interaction=nonstopmode mpM7rFx1.tex; see mpxerr.log
>> DifGemFig.mp
>> DifGemFig.mpx
! ! Unable to read mpx file.
l.18 label.bot(btex
                    $A$ etex, z0);
Transcript written on DifGemFig.log.

为什么我会看到此错误?目录中没有 mpx 文件。在其他电脑上,btex 可以运行。

答案1

Metapost 程序mpost从左到右处理其参数。因此,当您像这样调用它时:

mpost DifGemFig.mp -tex=latex

DifGemFig.mp使用默认的 TeX 引擎(即普通的)进行处理tex。但对于你的情况,这失败了,因为你有一个块需要 LaTeX 引擎。如果你按照错误消息提示verbatimtex进行查看:mpxerr.log

Command failed: tex [...] mpM7rFx1.tex; see mpxerr.log

那么你会发现很多错误说那\documentclass是一个未定义的控制序列等等,可能会给你一个线索!

因此您需要做的就是运行:

mpost -tex=latex DifGemFig.mp

现在第一个参数告诉mpost更改为使用 LaTeX 引擎,第二个参数是您的文件,它将被正确处理。

如果这感觉有点太难,那么另一种方法是使用lualatexluamplib包来制作独立的 Metapost 图形,如下所示:

\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
    dotlabel.urt("$A$", origin);
endfig;
\end{mplibcode}
\end{document}

编译此文件以lualatex获得如下所示的 PDF 文件:

在此处输入图片描述

笔记

  • MWE 中的任何包都不需要lualatex
  • ... 你可能还想amsmath添加unicode-math
  • mplibtextextlabel选项会自动通过 Latex 传递标签中的字符串(就像您输入的那样textext("string")),因此您不需要btex ... etex再使用任何字符串。

相关内容