
Der folgende einfache METAPOST-Code wird nicht fehlerfrei kompiliert:
verbatimtex
%&latex
\documentclass{article}
\begin{document}
etex
beginfig(1);
z0 = (0,0); z1 = (sqrt(3)*cm,0);
z2 = (sqrt(3)*cm,1cm);
draw z0--z1--z2--cycle;
label.bot(btex $w$ etex, 1/2[z0,z1]);
endfig;
end;
In der Protokolldatei heißt es:
This is MetaPost, version 2.01 (MiKTeX 22.3) 14 APR 2022 17:40
Sample.mp Preloading the plain mem file, version 1.005) (./Sample.mp
>> Sample.mp
>> Sample.mpx
! ! Unable to read mpx file.
l.10 label.bot(btex
$w$ etex, 1/2[z0,z1]);
The two files given above are one of your source files
and an auxiliary file I need to read to find out what your
btex..etex blocks mean. If you don't know why I had trouble,
try running it manually through MPtoTeX, TeX, and DVItoMP
In der mpxerr-Datei heißt es:
This is mikTeX, Version 3.141592653 (MiKTeX 22.3) (preloaded format=tex 2022.4.14) 14 APR
2022
17:38
restricted \write18 enabled.
%&-line parsing enabled.
**./mp8HtMK1.tex
(mp8HtMK1.tex
! Undefined control sequence.
l.2 \documentclass
{article}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.
! Undefined control sequence.
l.3 \begin
{document}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.
[1] [1] )
Output written on mp8HtMK1.dvi (2 pages, 340 bytes).
Ich bin verblüfft. Ich habe den Code mehrfach überprüft und er scheint korrekt zu sein. Beim Kompilieren werden die richtigen ausführbaren Dateien aufgerufen (z. B. mpost.exe, latex.exe). Was ist los?
Ich habe entsprechende Fragen in diesem Forum gelesen und versucht, die vorgeschlagenen Lösungen umzusetzen. Nichts funktioniert.
Antwort1
Da wir uns im Jahr 2022 befinden, besteht eigentlich keine Notwendigkeit %&latex
mehr, den alten Aufruf mit Metapost zu verwenden. Die alten Dokumente und Beispiele müssen wirklich alle aktualisiert werden.
Sie haben hier zwei Möglichkeiten:
Wenn Sie es einfach nur ausprobieren möchten mpost
und Ihnen die Integration in komplexe LaTeX-Formate egal ist, ersetzen Sie zunächst Ihre Präambel, sodass Ihre MP-Datei folgendermaßen aussieht:
prologues := 3;
outputtemplate := "%j%c.%{outputformat}";
beginfig(1);
z0 = (0,0); z1 = (sqrt(3)*cm,0);
z2 = (sqrt(3)*cm,1cm);
draw z0--z1--z2--cycle;
label.bot(btex $w$ etex, 1/2[z0,z1]);
endfig;
end;
Wenn Sie dies damit kompilieren, mpost
wird jetzt eine Ausgabe im Encapsulated PostScript-Format in einer Datei mit einer .eps
Erweiterung erstellt, die Sie mit jedem PostScript-Viewer anzeigen oder mit epstopdf
oder ähnlichen Tools in ein PDF umwandeln können.
Wenn Sie MP hingegen in einem moderneren Stil verwenden möchten, mit allen nützlichen LaTeX-Formatierungen, falls Sie diese benötigen, wechseln Sie zur Verwendung lualatex
des luamplib
Pakets. So:
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);
z0 = (0,0); z1 = (sqrt(3)*cm,0);
z2 = (sqrt(3)*cm,1cm);
draw z0--z1--z2--cycle;
label.bot(btex $w$ etex, 1/2[z0,z1]);
endfig;
\end{mplibcode}
\end{document}
Kompilieren Sie dies mit, lualatex
um direkt eine PDF-Datei zu erstellen.
Und tatsächlich gibt es eine clevere Option für Labels, mit der Sie den umständlichen Mechanismus vollständig loswerden können btex ... etex
. Sehen Sie sich die mplib-Textext-Option an ...
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable} % <---- extra option
\begin{mplibcode}
beginfig(1);
z0 = (0,0); z1 = (sqrt(3)*cm,0);
z2 = (sqrt(3)*cm,1cm);
draw z0--z1--z2--cycle;
label.bot("$w$", 1/2[z0,z1]);
endfig;
\end{mplibcode}
\end{document}
Kompilieren Sie dies mit, lualatex
um ein PDF zu erhalten, das wie folgt aussieht:
Sie können die (spärliche) Dokumentation lesen aufluamplib
Hier.