metapost中的数组命名规则

metapost中的数组命名规则

假设我定义了一个点数组

pair p[];

那么p.0p0p[0]有什么不同吗?我可以使用p.01p01p[01]吗?

答案1

根据规则,是下标为数字的p.0变量(等于)。因此、和是同一个变量。p.00p.0p0p[0]

以下是交互式版本:

This is MetaPost, version 1.803 (kpathsea version 6.1.1)
**\relax
(mpost.mp (/usr/local/texlive/2013/texmf-dist/metapost/base/plain.mp
Preloading the plain mem file, version 1.004) )
*pair p[];
*p0=(2,3); show p0; show p[0]; show p.0;
>> (2,3)
>> (2,3)
>> (2,3)
*p1=(1,2); show p[1]; show p[01]; show p.1;
>> (xpart p0.1,ypart p0.1)
>> (1,2)
>> (1,2)

注意p1p.1不是相同。数字 1 可以等效地输入1和,01因此p1p01和完全相同。但是,(带有空格)p[1]p[01]p. 1和 一样p1

Metapost 将其输入拆分为代币。您可以在手册的第 7.1 节 ( ) 中找到 token 的定义texdoc metapost。规则如下

p.1

由两个标记组成,一个符号标记p和一个数字标记.1;虽然符号标记可以假定不同的含义,但数字标记始终表示相应的数字,在本例中为 0.1,因为将其输入为 、 或任何其他与规则兼容的方式都是0.1合法.10.10

另一种情况是p. 1;空格总是会让 Metapost 结束查找令牌名称。同样.,只要它后面没有紧跟着数字或另一个句点。当空格或句点完成其停止工作时,它会被忽略。所以

p 1 p. 1 p1 p[1]

是引用相同变量的完全等效方法。p.1我再说一遍,不是,它等效于p0.1p[0.1]。“括号规则”在另一个地方,处理数组的地方。

相关内容