
Ich glaube, ich stoße auf einen GMP-Fehler, bei dem ein Vardef-Makroname „mymacro@#“ in die generierte Metapost-Datei als „mymacro@##“ geschrieben wird. Dies ist mein erstes Mal, dass ich das GMP-Paket verwende, und ich könnte etwas übersehen. Kann jemand bestätigen, dass dies ein Fehler ist? Wenn es tatsächlich ein Fehler ist, gibt es eine Problemumgehung oder eine mögliche Lösung?
Danke!
Die TeX-Eingabe:
\documentclass{article}
\usepackage[shellescape]{gmp}
\begin{document}
\begin{mpost}
u=2cm;
vardef mymacro@#=
pair @#.mid;
@# := (0u, 0u) -- (50u, 75u);
@#.mid := 0.5[(0u, 0u), (50u, 75u)];
enddef;
path a;
mymacro.a;
draw a;
\end{mpost}
\end{document}
Logdatei:
This is MetaPost, version 2.00 (TeX Live 2019) (kpathsea version 6.3.1) 29 NOV 2019 13:41
**foo+mp0001
(/usr/local/texlive/2019/texmf-dist/metapost/base/mpost.mp
(/usr/local/texlive/2019/texmf-dist/metapost/base/plain.mp
Preloading the plain mem file, version 1.005) ) (./foo+mp0001.mp
>> mymacro.a
! Isolated expression.
<to be read again>
;
l.14 mymacro.a;
I couldn't find an `=' or `:=' after the
expression that is shown above this error message,
so I guess I'll just ignore it and carry on.
>> unknown path a
! Improper `addto'.
<to be read again>
withpen
draw->...:also(EXPR0)else:doublepath(EXPR0)withpen
.currentpen.fi._op_
<to be read again>
;
l.15 draw a;
This expression should have specified a known path.
So I'll not change anything just now.
[1] )
1 output file written: foo+mp0001.mps
Die Metapost-Datei:
%% Do not edit, this file has been generated
%% automatically by foo.tex via gmp.sty
outputtemplate:= "%j.mps";
beginfig(1);
u=2cm;
vardef mymacro@##= pair @##.mid;
@## := (0u, 0u) -- (50u, 75u);
@##.mid := 0.5[(0u, 0u), (50u, 75u)];
enddef;
path a;
mymacro.a;
draw a;
endfig;
end.
Antwort1
Es sieht nach einem Fehler aus, ja. Beim Scannen der mpost
Umgebung setzt das Paket den Catcode von nicht auf #
, 12
sodass TeX ihn wie üblich verdoppelt. Sie müssen zu \do\#
hinzufügen \gmp@otherchars
:
\makeatletter % added vvvvv
\def\gmp@otherchars{\do\!\do\=\do\:\do\"\do\?\do\'\do\`\do\|\do\#}
\makeatother
Wenn man das hinzufügt (und die Länge der Zeile etwas verkürzt, damit sie auf die Seite passt), funktioniert der Code:
\documentclass{article}
\usepackage[shellescape]{gmp}
\makeatletter
\def\gmp@otherchars{\do\!\do\=\do\:\do\"\do\?\do\'\do\`\do\|\do\#}
\makeatother
\begin{document}
\begin{mpost}
u=2cm;
vardef mymacro@#=
pair @#.mid;
@# := (0u, 0u) -- (5u, 7u);
@#.mid := 0.5[(0u, 0u), (5u, 7u)];
enddef;
path a;
mymacro.a;
draw a;
\end{mpost}
\end{document}