MetaPost语法

本文介绍了MetaPost如何从外部文件读取数据,并详细讲解了画圆圈的步骤。在处理数据时,需使用readfrom和scantokens将字符串转换为数字。此外,文章还提及了遇到的错误及解决方法,包括命令行运行时的报错问题。最后,讨论了如何使用GSview查看MetaPost生成的PS文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、怎样从外部文件读入数据?

得到一行数据。再次使用 readfrom 就会得到后面的行。如果到达文件末尾,readfrom 会返回一个空字符串 EOF,

readfrom "文件"

读入的数据都是作为一个字符串,如果你想要得到数字,你必须用 scantokens 把字符串 evaluate 一下。

u=1mm;
numeric nr, l, Len;
string x, gd, dn;
nr := scantokens(readfrom "DrawSettings.txt")*u;     % 点半径(毫米)
Len := scantokens(readfrom "DrawSettings.txt")*u;    % 图像大小(毫米)
x := (readfrom "DrawSettings.txt");                  % 图像格式(png或eps)
gd := (readfrom "DrawSettings.txt");                 % 是否绘制轨道(ON / OFF)
dn := (readfrom "DrawSettings.txt");                 % 是否画点(ON / OFF)

2、画圆圈

在 MetaPost 程序中,数字与单位之间不能出现空格。事实上,在 MetaPost 中,诸如 1mm、2cm 此类的长度描述本质上是 mm 或 cm 等变量的倍数,即 1 * mm、2 * cm

u=1mm;

3、出现问题

first.mp内容如下

beginifig(0)
    u := 5mm
    drawarrow ( -3.5u, 0) -- (3.5u, 0);
    drawarrow ( 0, -3.5u) -- (0, 3.5u);
    pickup pencircle scaled 2pt;
    for i := 1 upto 1000:
        draw ( u * normaldeviate, u * normaldeviate);
    endfor;
endfor;

end

命令行运行,报错

PS D:\Files\Latex> mpost first.mp
This is MetaPost, version 2.00 (TeX Live 2019/W32TeX) (kpathsea version 6.3.1)
(d:/Offices/Textlive/texlive/2019/texmf-dist/metapost/base/mpost.mp
(d:/Offices/Textlive/texlive/2019/texmf-dist/metapost/base/plain.mp
Preloading the plain mem file, version 1.005) ) (./first.mp
>> beginifig
! Isolated expression.
<to be read again>
                   (
l.1 beginifig(
              0)
?

4、GSview

把metapost生成的fig.1文件重命名为fig.ps,然后用GSview5.0打开
在这里插入图片描述之前总是失败,也不知道是为什么,难道是我GSview安装有问题?
在这里插入图片描述
在这里插入图片描述

5、错误处理

(1)

Runaway loop?
for.sp=1upto.N:e[(EXPR0)][sp][1]:=scantokens(readfrom"bundled_edges.txt" ETC.
! Forbidden token found while scanning the text of a for loop.
<inserted text>
                endfor
<to be read again>
                   end
l.52 end
        ;
?

(2) 基本数据类型pair

pair z;
pair z[];            % z特指坐标,z0 :=(x0,y0)
! Declared variable conflicts with previous vardef.
<to be read again> 
                   ;
l.6 pair z[];
pair zp[];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值