Bug do pacote Gmp em macros de sufixo vardef?

Bug do pacote Gmp em macros de sufixo vardef?

Acho que estou encontrando um bug do gmp onde um nome de macro vardef "mymacro@#" é escrito no arquivo metapost gerado como "mymacro@##". Esta é a primeira vez que uso o pacote gmp e posso estar faltando alguma coisa. Alguém pode confirmar que isso é um bug? Se for realmente um bug, existe alguma solução alternativa ou possível correção?

TIA!

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

Arquivo de log:

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

O arquivo 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.

Responder1

Parece um bug, sim. Ao escanear o mpostambiente, o pacote não define o catcode #como 12, então o TeX o duplica, como normalmente faria. Você precisa adicionar \do\#a \gmp@otherchars:

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

Adicionando isso (e reduzindo um pouco o comprimento da linha para caber na página), o 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}

insira a descrição da imagem aqui

informação relacionada