2013-05-08 80 views
1

我试图做到以下几点:字符串在mpost for循环

xN := 200; 
topp:= 3; 
bott := -3; 
spac := 20; 

% draw number line 
draw (0,0)--(xN,0); 

last := 3; 

% draw 4 tick marks from left side 
for i := 0 upto last: 
    draw (spac*i,topp)..(spac*i,bott); 
endfor; 

% label tick marks accordingly 
for i := 0 upto last: 
    label.bot(btex $x_{i}$ etex, (i*spac,bott)); 
endfor; 

目标是让左勾是X_0,下一个是X_1,等等。但是由于我在tex环境中进行了标记,因此它不使用label命令中的i作为变量,而只是一个字母。结果是每个刻度标记都标记为“x_ {i}”。对不起,如果这不清楚,这是我第一次尝试使用metapost,我认为必须有一种方法来使用循环而不是蛮横的强制它。

回答

0

如在similar question:添加input tex;线以包括TEX宏,然后更改

label.bot(btex $x_{i}$ etex, (i*spac,bott)); 

为以下:

label.bot(TEX ("$x_" & decimal (i) & "$"), (i*spac,bott)); 

这样,i的值被转换成十进制表示,然后构造一个字符串$ x_0 $或$ x_1 $等,然后TEX宏将它编译成一个漂亮的标签。