假设我定义了一个点数组
pair p[];
那么p.0
、p0
、p[0]
有什么不同吗?我可以使用p.01
、p01
、p[01]
吗?
答案1
根据规则,是下标为数字的p.0
变量(等于)。因此、和是同一个变量。p
.0
0
p.0
p0
p[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)
注意p1
和p.1
不是相同。数字 1 可以等效地输入1
和,01
因此p1
,p01
和完全相同。但是,(带有空格)p[1]
p[01]
p. 1
是和 一样p1
。
Metapost 将其输入拆分为代币。您可以在手册的第 7.1 节 ( ) 中找到 token 的定义texdoc metapost
。规则如下
p.1
由两个标记组成,一个符号标记p
和一个数字标记.1
;虽然符号标记可以假定不同的含义,但数字标记始终表示相应的数字,在本例中为 0.1,因为将其输入为 、 或任何其他与规则兼容的方式都是0.1
合法.1
的0.10
。
另一种情况是p. 1
;空格总是会让 Metapost 结束查找令牌名称。同样.
,只要它后面没有紧跟着数字或另一个句点。当空格或句点完成其停止工作时,它会被忽略。所以
p 1 p. 1 p1 p[1]
是引用相同变量的完全等效方法。p.1
我再说一遍,不是,它等效于p0.1
或p[0.1]
。“括号规则”在另一个地方,处理数组的地方。