¿Error del paquete gmp en macros de sufijo vardef?

¿Error del paquete gmp en macros de sufijo vardef?

Creo que me estoy encontrando con un error de gmp donde un nombre de macro vardef "mymacro@#" se escribe en el archivo metapost generado como "mymacro@##". Esta es la primera vez que uso el paquete gmp y es posible que me falte algo. ¿Alguien puede confirmar que esto es un error? Si realmente se trata de un error, ¿existe alguna solución alternativa o posible solución?

TÍA!

La entrada TeX:

\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}

Archivo de registro:

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

El archivo metapost:

%% 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.

Respuesta1

Parece un error, sí. Al escanear el mpostentorno, el paquete no establece el código cat en #, 12por lo que TeX lo duplica, como lo haría normalmente. Necesitas agregar \do\#a \gmp@otherchars:

\makeatletter %                                       added vvvvv
\def\gmp@otherchars{\do\!\do\=\do\:\do\"\do\?\do\'\do\`\do\|\do\#}
\makeatother

Agregando eso (y reduciendo un poco la longitud de la línea para que quepa en la página), el código funciona:

\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}

ingrese la descripción de la imagen aquí

información relacionada