还有人注意到吗?在 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
。