Gmp-Paketfehler in Vardef-Suffixmakros?

Gmp-Paketfehler in Vardef-Suffixmakros?

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 mpostUmgebung setzt das Paket den Catcode von nicht auf #, 12sodass 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}

Bildbeschreibung hier eingeben

verwandte Informationen