
我認為我遇到了 gmp 錯誤,其中 vardef 巨集名稱“mymacro@#”在生成的 Metapost 檔案中被寫入為“mymacro@##”。這是我第一次使用 gmp 包,我可能會遺漏一些東西。誰能確認這是一個錯誤嗎?如果確實是一個錯誤,是否有一些解決方法或可能的修復?
蒂亞!
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}
記錄檔:
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
元帖子檔:
%% 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.
答案1
它看起來像一個錯誤,是的。掃描mpost
環境時,套件不會將 catcode 設定為#
to 12
,因此 TeX 將其加倍,就像通常一樣。您需要添加\do\#
到\gmp@otherchars
:
\makeatletter % added vvvvv
\def\gmp@otherchars{\do\!\do\=\do\:\do\"\do\?\do\'\do\`\do\|\do\#}
\makeatother
添加該內容(並稍微減少行的長度以適合頁面),程式碼可以工作:
\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}