Metapost“奇数”运算符因负值而失败?

Metapost“奇数”运算符因负值而失败?

还有人注意到吗?在 Metapost 中,odd运算符似乎对负数失效?

这是我的测试程序(适用于 Metafont 和 Metapost)。

  for i=-2 upto 2: show(i); show(odd i); endfor end

如果我通过 Metafont 运行它,我会得到

This is METAFONT, Version 2.7182818 (TeX Live 2014) (preloaded base=mf)
(test.mf
>> -2
>> false
>> -1
>> true
>> 0
>> false
>> 1
>> true
>> 2
>> false )
Transcript written on test.log.

但 Metapost 给出了这样的答案:

This is MetaPost, version 1.902 (TeX Live 2014) (kpathsea version 6.2.0)
(/usr/local/texlive/2014/texmf-dist/metapost/base/mpost.mp
(/usr/local/texlive/2014/texmf-dist/metapost/base/plain.mp
Preloading the plain mem file, version 1.005) ) (./test.mf
>> -2
>> false
>> -1
>> false
>> 0
>> false
>> 1
>> true
>> 2
>> false )
Transcript written on test.log.

的值-1似乎有误。这似乎是一个错误。

编辑:2020 年 11 月

该错误已在 2014 年 9 月的 Metapost 修订版 2037 中修复,因此如果您仍然看到该错误,则应该升级。

This is MetaPost, version 2.00 (TeX Live 2019) (kpathsea version 6.3.1) 
**oddity.mp
(/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) ) (./oddity.mp
>> -2
>> false
>> -1
>> true
>> 0
>> false
>> 1
>> true
>> 2
>> false )

答案1

解决方法是,您可以写(i mod 2)=1而不是odd i。这对于正整数和负整数都符合预期,但对于小数则不然。要获得odd原始数的宣传行为,您需要:(round i mod 2)=1

相关内容