什么是命运?有时自己想想也挺有意思的,细数一下,从娘胎到现在,我已经在鬼门关走过9次了!
第一是在我出生的时候。我妈怀我那会儿已经开始计划生育了,我妈为了生下我,四处躲避村大队管计划生育的人。到临产那天,我妈从外婆家往家赶,为了不被管计生的人抓到,只好超近道从一处乱葬岗经过。到家后,又不能去医院,只好悄悄地找当地的接生婆接生,结果我妈难产,生下我后呼吸都没有了,在当时只能找一个巫医化了一碗符水给我妈喝下,我妈竟然奇迹般地起死回生了。我出生那天正是中元节,也就是人们常说的鬼节。
第二次是在我才几个月大的时候,那时我们家刚从河对岸搬到河这边,新房子是建在荒地上的。有一天,我爸妈下地干活,把我放在了床上。等晚上天黑了我爸妈收工回来,到我躺的床上来摸火柴,我妈记得火柴就在我枕的枕头下面,当我妈把手伸过去时,触摸到了一个冰凉的东西。我妈吓了一跳,马上到邻居家借来手电筒一看,一条蛇正盘在我左边,离我不到一尺,蛇看到手电筒光后就爬走了。这件事是我妈告诉我的,我妈说如果我的左手稍微往外伸一下,我就被蛇咬了!
第三次和第四次都与我哥有关,我小时候在学会走路前都是躺在摇窝里,我爸妈下地干活,基本上都是我哥照顾我,我哥大我三岁。有一次,我哭了,我哥就使劲地摇摇窝,结果把摇窝弄翻了,我被反扣在摇窝里。我爸妈在屋后干活,听不到我的哭声,跑回家一看,才知事情不好,把摇窝翻过来一看,我的脸上已经变成乌紫色了。还有一次还是我哥照顾我的时候,我使劲的哭,把我哥惹急了,用尿布来堵我的嘴,最后又是我妈救了我,呵呵!
第五次是在一岁多,那时我哥已快5岁了。那时正值农村的双抢,我妈就让我哥带着我在家附近玩,等到晚上八九点吃饭时,才发现我不见了。于是我们一个大家族十几个人四处寻找,到最后都开始在池塘里打捞了,到凌晨2点多,才在一条小水沟里发现我,我头朝下立着,满脸的眼泪鼻涕,哈哈!
第六次是在我七岁那年。在我满六岁的那年夏天,我们村来了一个算命的,据说很灵,我妈正好认得他,于是便叫他给我算了一次。结果算命先生说我第二年千万不要去上学,否则有血光之灾。我妈当时没把算命先生说的话当回事,等到第二年,我上二年级,有一天放学回家,为了超近道从农田里经过,刚走到一半,被一个年轻人拦住了,他要我陪他去一个地方割猪草,我不去,他突然拿出一把刀架在我的脖子上,威胁我说如果我不去就杀了我,我还记得我当时的心理斗争,最后恐惧占了上风,我只好陪他去了,等他割完猪草,他才放了我。后来我再也没有见过那个人,按说一个村的人,应该很容易碰到的,也不知道为什么再也没有见过他。
第七次和第八次都与我的背有关,我当时念初二,两次相隔不到3个月。一次是我从宿舍的床上摔下来了。我们的宿舍是教室改的,我睡的床就放在讲台上面,双层,我睡上面,结果晚上睡觉一翻身就从床上掉下来了,结果是背先着地,第二天都直不起来了,疼了一个多月才“自愈”。一次是我哥骑自行车带我上学,在公路上我哥说在路边见到一个好大的死老鼠,我问在哪里,我哥说要不我们转回去看看,说着自行车龙头往左一弯就要回去,突然后面一辆摩托车没有丝毫减速地撞了上来,我和我哥都直接被撞飞到路边的草丛里,我哥头被碰伤了,而我又是背落地,我的背又疼了一个多月才好。直到现在,我的背一着凉就疼。
第九次是我离死亡最近的一次,夏天到我外婆家去玩,下午就和表哥表弟到河边洗澡,平时在家我爸妈是不让我下河洗澡了,所以到现在我都是旱鸭子。和我在一块洗澡的几个表兄弟都不会游泳,我们也就只能在河边玩。其中一个表哥慢慢地向河中心走去,走到一处,他招手要我过去,我于是一步步向他靠近,当水没过我的喉咙时,我脚底突然一轻,整个人便向河中心倒去,我开始使劲的在水里扑腾,慌乱之中竟向河中心漂去,我感觉到我身体开始下沉,这时我眼前是白茫茫的一片,我心里突然平静了下来,我意识到自己要死了,可惜才活了十多岁,当我的手碰到河底的淤泥时,我被我大表哥一把托了起来。他是在河堤上看到我落水的,马上从河堤上飞奔下来,急得把手中的小说都直接往河里扔了,呵呵!
“九死一生”的“一生”就是我现在还活着,哈哈!
2008年10月21日星期二
Maya 2008 for linux 创建中文文本的问题
Maya 2008 for windows 中“create text”能正常的输入中文,也可通过ps从*.ai文件导入中文字形。但是Maya 2008 for linux却无法输入中文,cp过去的中文都是乱码,应该是没有中文字体。网上搜索的结果是Maya for linux仅支持postscript字体,而且还不支持中文字体。所以linux下暂时只能通过文件导入了。
Maya的导入文件格式还支持*.eps,但是试了linux下的一些软件生成的eps文件都导入出错。后来无意中发现KDE下的karbon14能把中文字形导出为ai文件,导入Maya,成功!呵呵!
Maya的导入文件格式还支持*.eps,但是试了linux下的一些软件生成的eps文件都导入出错。后来无意中发现KDE下的karbon14能把中文字形导出为ai文件,导入Maya,成功!呵呵!
2008年7月16日星期三
OpenSUSE 11.0 下Latex中文
Linux下LATEX中文一直是件头疼的事情,不同发行版解决办法不尽相同,有时甚至同一发行版的前后两个版本也有差别,OpenSUSE就是如此!
现把OpenSUSE 11.0下texlive中文解决方案记录如下:
由于电脑是双系统,windows下已经安装了最新的CTeX和ctex-fonts,所以解决方案以此为基础。
1. 把windows 下$LOCALTEXMF/tex/latex 拷贝到/usr/share/texmf/tex/latex,然后mktexlsr,这样可以安装CJK等大部分宏包;
2. 这时用LATEX编译中文TEX文件会提示找不到tfm字体,需要把$LOCALTEXMF/fonts/tfm/chinese 拷贝到/usr/share/texmf/fonts/tfm/chinese,但是此时xdvi无法预览生成的dvi文件,这是因为xdvi 没有找到相应的map文件,这时需要把$LOCALTEXMF/dvips/chinese拷贝到/usr/share/texmf/map/dvips/chinese,然后mktexlsr、“updmap-sys --edit”把拷贝过来的几个t1-gbk*.map添加进去;
3. 为了实现dvipdfm 需要把$LOCALTEXMF/fonts/type1/chinese 拷贝到/usr/share/texmf/fonts/type1/chinese,把$LOCALTEXMF/pdftex/chinese 拷贝到/usr/share/texmf/fonts/enc/pdftex/chinese,其中的map文件拷贝到/usr/share/texmf/fonts/map/pdftex/chinese下面,最后mktexlsr就可以了;
4. 最困难的是实现dvipdfmx,首先是把simsun等几个字体拷贝到/usr/share/texmf/fonts/truetype下面,然后添加/var/lib/texmf/fonts/map/dvipdfm/cid-x.map文件,内容如下:
gbksong@UGBK@ unicode :0:simsun.ttf
gbksongsl@UGBK@ unicode :0:simsun.ttf -s .167
gbkhei@UGBK@ unicode :0:simhei.ttf
gbkheisl@UGBK@ unicode :0:simhei.ttf -s .167
gbkkai@UGBK@ unicode :0:simkai.ttf
gbkkaisl@UGBK@ unicode :0:simkai.ttf -s .167
gbkfs@UGBK@ unicode :0:simfang.ttf
gbkfssl@UGBK@ unicode :0:simfang.ttf -s .167
gbkli@UGBK@ unicode :0:simli.ttf
gbklisl@UGBK@ unicode :0:simli.ttf -s .167
gbkyou@UGBK@ unicode :0:simyou.ttf
gbkyousl@UGBK@ unicode :0:simyou.ttf -s .167
unisong@Unicode@ unicode :0:simsun.ttf
unisongsl@Unicode@ unicode :0:simsun.ttf -s .167
unihei@Unicode@ unicode :0:simhei.ttf
uniheisl@Unicode@ unicode :0:simhei.ttf -s .167
unikai@Unicode@ unicode :0:simkai.ttf
unikaisl@Unicode@ unicode :0:simkai.ttf -s .167
unifs@Unicode@ unicode :0:simfang.ttf
unifssl@Unicode@ unicode :0:simfang.ttf -s .167
unili@Unicode@ unicode :0:simli.ttf
然后,修改/usr/share/texmf/dvipdfm/dvipdfmx.cfg只使用cid-x.map文件;最后把/usr/share/ghostscript/Resource/CMap下面的所有文件拷贝到/usr/share/texmf/font/cmap下面后mktexlsr即可。
经过上述操作后,使用LATEX和dvipdfmx就可以编译utf-8和GBK两种编码的TEX文档,而且得到的pdf文件都支持中文拷贝,哈哈!GBK编码的TEX文档还可以使用latex->dvips->ps2pdf得到不可拷贝的pdf,UTF-8的文档则需要simsun等字体的tfm和pfb字体以及enc文件(均可用fontforge生成),才能通过dvips和ps2pdf得到pdf文档,得到的pdf是可拷贝的,呵呵!
说明:配置dvipdfmx最诡异的就是cid-x.map文件,如果使用网上的方法设置为:
gbksong@UGBK@ UniGB-UTF16-H(或UniGB-UCS2-H ) :0:simsun.ttf
GBK编码的TeX文档得到的pdf文档无法拷贝,改成前面的格式就可以,不明白原因,哪位大侠给解释一下?
2008年7月2日星期三
Show 一下我的硕士答辩beamer!
把我硕士论文答辩的beamer贴出来供各位参考一下。模板是网上搜到的,我做了一些修改。由于这里不能上传附件,所以把模板链接贴出来:
http://www.newsmth.net/bbsanc.php?path=%2Fgroups%2Fcomp.faq%2FTeX%2Fslides%2Fbeamer%2FM.1167373299.g0
把附件中的themes.zip在beamer的目录下面解压缩,然后mktexlsr刷新就可以了。在Debian Sid下beamer的目录是/usr/share/texmf/tex/latex/beamer,其它系统类似。模板左下角的ETIRS在$BEAMER/themes/theme/IAS/ias_text.tex里面修改。附件中的yisl04.zip就是我的beamer的源文件。其中的图片大部分是用metapost画的。文件pdflatex编译即可,呵呵!
http://www.newsmth.net/bbsanc.php?path=%2Fgroups%2Fcomp.faq%2FTeX%2Fslides%2Fbeamer%2FM.1167373299.g0
把附件中的themes.zip在beamer的目录下面解压缩,然后mktexlsr刷新就可以了。在Debian Sid下beamer的目录是/usr/share/texmf/tex/latex/beamer,其它系统类似。模板左下角的ETIRS在$BEAMER/themes/theme/IAS/ias_text.tex里面修改。附件中的yisl04.zip就是我的beamer的源文件。其中的图片大部分是用metapost画的。文件pdflatex编译即可,呵呵!
Metapost 个人总结
接触metapost是因为latex,到现在metapost的手册也看了几遍了,但真正熟练运用metapost还是因为毕业论文。我的毕业论文是用latex写的,而且是在linux下完成的。linux下有两个比较好的latex编辑器:emacs和kile,但是数据图形的处理却缺乏比较顺手的工具。gnuplot和labplot试用了一下,感觉不是很满意,而以前也学过一段时间的metapost,所以最后决定用metapost来画论文中的数据图。使用metapost一个多月下来才真正发现其强大之处,现总结一下。
一、metapost的编译方式
metapost文件不同的编译可以得到不同的图片格式:eps和pdf。
eps格式编译:mpost foo.mp
pdf格式编译:mptopdf foo.mp
eps图片可以直接插入到latex中,与latex无缝融合。有时需要在eps中插入汉字和特殊字符,这些字符可以使用latex和tex来编译。为了插入汉字,mp文件需要添加相应的设置,如下例:
verbatimtex
%&latex
\documentclass[10pt,a4paper]{article}
\usepackage{CJK,amssymb}
\begin{document}
\begin{CJK}{GBK}{song}
etex;
draw btex 这里是中文宋体 etex;
verbatimtex
\end{CJK}
\end{document}
etex;
end
文件中verbatimtex...etex和btex...etex中间的部分由指定的编译方式来编译,"%&latex"指明了用latex来编译。
latex方式编译:mpost -tex=latex foo.mp
插入汉字后得到的eps图片gv等工具是无法浏览的,因为gv等不支持中文字体。为了能够浏览生成的eps图片,一般在文件的开始加入"prologues :=1"(在linux可能要加入"prologues :=2"),当然也可以"mptopdf foo.mp"编译生成pdf文件浏览。
二、画笔
涉及到画图就要说说画笔,metapost自带了两种画笔:pencircle和pensquare,也可以自己定义画笔:
pen mypen[];
mypen1 = makepen((0, 0.7)--(0.5, 0)--(0, -0.7)--(-0.5, 0)--cycle); %菱形
mypen2 = makepen((-0.5, -0.3)--(0, 0.7)--(0.5, -0.3)--cycle); %三角
画笔必须是封闭图形,划线时按颜色填充画笔。画线时可以根据需要选用画笔,可以设置线条颜色,宽度等:
pickup pencircle scaled 1pt;
draw (0,0)--(1cm,1cm) withcolor red;
或者:
draw (0,0)--(1cm,1cm) withpen mypen1 scaled 1pt withcolor (1,0,0)%支持rgb颜色格式
三、线型
画笔的线型有多种,还可以自己设置独特的线性。如虚线:
darw (0,0)--(1cm,1cm) dashed evenly scaled 2;
自定义线型可以看metapost手册。
四、曲线
metapost除了可以画直线之外,还可以自动画出曲线。上面的例子中(0,0)--(1cm,1cm)表示是直线,而(0,0)..(1cm,1cm)表示是曲线,为贝赛尔曲线。还可以指定曲线经过某点时的方向:
draw (0,0){dir 30}..{dir 45}(1cm,1cm}
五、图形处理
metapost对图形进行处理,如旋转(rotated)、移动(shifted)、缩放(xscaled, yscaled)等。
六、graph宏包
metapost的强大还体现在很多地法,下面主要讲一下graph宏包,因为论文要处理数据曲线,所以要经常用到这个宏包。下面是一个使用graph宏包画数据曲线的例子。
verbatimtex
%&latex
\documentclass[10pt,a4paper]{article}
\usepackage{CJK,amssymb}
\begin{document}
\begin{CJK}{GBK}{song}
\Large
etex;
input graph;
beginfig(1);
draw begingraph(12cm,8cm);%设置图片大小
init_numbers(btex$-$etex, btex$1$etex, btex${\times}$etex, btex${}^-$etex, btex${}^2$etex);%设置坐标轴数字格式,使用latex来处理数字。
setrange(0,5,18,15);%设置横纵坐标范围
path p[];
picture lab[];
pen mypen[];
mypen1 = makepen((0, 0.7)--(0.5, 0)--(0, -0.7)--(-0.5, 0)--cycle); %菱形
mypen2 = makepen((-0.5, -0.3)--(0, 0.7)--(0.5, -0.3)--cycle); %三角
lab1 = btex 温度线膨胀系数/$(10^{-6}/K)$ etex rotated 90;
glabel.lft(image(draw lab1),OUT);
glabel.bot(btex 含水率/\% etex, OUT);
gdata("7-days.txt", $, augment.p1($1, $2););
for x = 0 step 3 until 18:
grid.bot(format("%g", x), x) withcolor 0.80white;
endfor;
for y = 5 step 2.5 until 15:
grid.lft(format("%g", y), y) withcolor 0.80white;
endfor;
gdraw (point 0 of p1
for i= 1 upto length p1:
..point i of p1
endfor) withpen pencircle scaled 1.5pt withcolor red;
for i = 0 step 1 until length p1:
gdraw point i of p1 withpen mypen1 scaled 6pt withcolor red;
endfor;
gdata("14-days.txt", $, augment.p2($1, $2););
gdraw p2 withpen pencircle scaled 1.2pt withcolor green;
for i = 0 step 1 until length p2:
gdraw point i of p2 withpen mypen2 scaled 6pt withcolor green;
endfor;
gdata("28-days.txt", $, augment.p3($1, $2););
gdraw p3 withpen pencircle scaled 1.2pt withcolor blue;
for i = 0 step 1 until length p3:
gdraw point i of p3 withpen pensquare scaled 6pt withcolor blue;
endfor;
gdata("56-days.txt", $, augment.p4($1, $2););
gdraw p4 withpen pencircle scaled 1.2pt withcolor (0.8, 0.3, 0);
for i = 0 step 1 until length p4:
gdraw point i of p4 withpen pencircle scaled 6pt withcolor (0.8, 0.3, 0);
endfor;
lab9 = image(
draw (-25pt, 9pt)--(-3pt, 9pt) withpen pencircle scaled 1.2pt withcolor (0.8, 0.3, 0);
draw (-14pt, 9pt) withpen pencircle scaled 6pt withcolor (0.8, 0.3, 0);
draw btex 56天龄期 etex;
draw (-25pt, 27pt)--(-3pt, 27pt) withpen pencircle scaled 1.2pt withcolor blue;
draw (-14pt, 27pt) withpen pensquare scaled 6pt withcolor blue;
draw btex 28天龄期 etex shifted (0, 18pt);
draw (-25pt, 45pt)--(-3pt, 45pt) withpen pencircle scaled 1.2pt withcolor green;
draw (-14pt, 45pt) withpen mypen2 scaled 6pt withcolor green;
draw btex 14天龄期 etex shifted (0, 36pt);
draw (-25pt, 63pt)--(-3pt, 63pt) withpen pencircle scaled 1.2pt withcolor red;
draw (-14pt, 63pt) withpen mypen1 scaled 6pt withcolor red;
draw btex 7天龄期 etex shifted (0, 54pt););
glabel(image(unfill bbox lab9; draw bbox lab9 withpen pencircle scaled 0.5pt; draw lab9), (15.5,13));
endgraph;
endfig;
verbatimtex
\end{CJK}
\end{document}
etex;
end
上面的例子中需要重点说明的是:
(一)坐标轴的设置
1.标签(label)
"lab1 = btex 温度线膨胀系数/$(10^{-6}/K)$ etex rotated 90;"是定义纵坐标label,然后"glabel.lft(image(draw lab1),OUT);"画出此标签,定义标签时用到了旋转"rotated 90"。
2.stick
for x = 0 step 3 until 18:
grid.bot(format("%g", x), x) withcolor 0.80white;
endfor;
for y = 5 step 2.5 until 15:
grid.lft(format("%g", y), y) withcolor 0.80white;
endfor;
画出网格,指出stick方向,网格线为0.80white颜色。
(二)曲线
1.数据读入
曲线的数据点通过文件读入:
gdata("7-days.txt", $, augment.p1($1, $2););
"augment.p1($1, $2);"表示将数据文件"7-days.txt"中第一、第二列数据组成的点作为path p1曲线上的点,即第一列各点为x值,第二列各点为y值。
2.数据点标记
有时需要标记数据点,方法如下:
for i = 0 step 1 until length p1:
gdraw point i of p1 withpen mypen1 scaled 6pt withcolor red;
endfor;
这是在曲线p1的每个数据点画上直径为6pt的红色小点。
3.曲线格式
由augment得到的曲线draw得到的各点之间是直线连接的,如果想曲线连接,可以做如下处理:
gdraw (point 0 of p1
for i= 1 upto length p1:
..point i of p1
endfor) withpen pencircle scaled 1.5pt;
(三)图例
图例是一个pic,内容可以自己定义:
lab9 = image(
draw (-25pt, 9pt)--(-3pt, 9pt) withpen pencircle scaled 1.2pt withcolor (0.8, 0.3, 0);
draw (-14pt, 9pt) withpen pencircle scaled 6pt withcolor (0.8, 0.3, 0);
draw btex 56天龄期 etex;
draw (-25pt, 27pt)--(-3pt, 27pt) withpen pencircle scaled 1.2pt withcolor blue;
draw (-14pt, 27pt) withpen pensquare scaled 6pt withcolor blue;
draw btex 28天龄期 etex shifted (0, 18pt);
draw (-25pt, 45pt)--(-3pt, 45pt) withpen pencircle scaled 1.2pt withcolor green;
draw (-14pt, 45pt) withpen mypen2 scaled 6pt withcolor green;
draw btex 14天龄期 etex shifted (0, 36pt);
draw (-25pt, 63pt)--(-3pt, 63pt) withpen pencircle scaled 1.2pt withcolor red;
draw (-14pt, 63pt) withpen mypen1 scaled 6pt withcolor red;
draw btex 7天龄期 etex shifted (0, 54pt););
定义完后画出即可:
glabel(image(unfill bbox lab9; draw bbox lab9 withpen pencircle scaled 0.5pt; draw lab9), (15.5,13));
其中"draw bbox lab9"是给图例加一个框。
(四)双坐标轴
有时需要定义双坐标轴,下面是一个例子:
verbatimtex
%&latex
\documentclass[10pt,a4paper]{article}
\usepackage{CJK}
\begin{document}
\begin{CJK}{GBK}{song}
etex;
input graph;
beginfig(1);
draw begingraph(10cm,7cm);
init_numbers(btex$-$etex, btex$1$etex, btex${\times}$etex, btex${}^-$etex, btex${}^2$etex);
path p[];
picture lab[];
lab1 = btex 大气温度/$\,^{\circ}\mathrm{C}$ etex rotated 90;
lab2 = btex 太阳散射辐射照度/($W/m^2)$ etex rotated -90;
lab3 = btex 大气温度 etex;
lab4 = btex 散射辐射照度 etex;
setrange(0,26,24,38);
glabel.bot(btex 时间/$h$ etex,OUT);
glabel.lft(image(draw lab1),OUT);
gdata("rad-temp.txt", $, augment.p1($1,$2); augment.p2($1,$3););
for x = 0 step 3 until 24:
grid.bot(format("%g", x), x) withcolor 0.80white;
endfor;
for y = 26 step 2 until 38:
grid.lft(format("%g", y), y) withcolor 0.80white;
endfor;
gdraw (point 0 of p1
for i= 1 upto length p1:
..point i of p1
endfor) withpen pencircle scaled 1pt;
setcoords(linear, linear);
setrange(0,0,24,180);
for y = 0 step 30 until 180:
itick.rt(format("%g", y), y) withcolor 0.8white;
endfor;
gdraw p2 withpen pencircle scaled 1pt;
glabel.rt(image(draw lab2), OUT);
pickup pencircle scaled 5pt;
for i = 0 step 1 until length p2:
gdraw point i of p2;
endfor;
pickup defaultpen;
p3 = (0, 0)--(3.2cm, 0)--(3.2cm, 1.5cm)--(0, 1.5cm)--cycle;
glabel.urt(image(unfill p3; draw p3), 0, 135);
glabel.urt(image(draw (-0.2cm,0.2cm)--(-0.9cm,0.2cm) withpen pencircle scaled 1.0pt;
draw lab3),(0,157));
glabel.urt(image(draw (-0.2cm,0.2cm)--(-0.9cm,0.2cm) withpen pencircle scaled 1.0pt;
draw (-0.6cm,0.2cm) withpen pencircle scaled 5pt; draw lab4),(0,142));
endgraph;
endfig;
verbatimtex
\end{CJK}
\end{document}
etex;
end
其中重要的设置为:setcoords和setrange这两个函数。
一、metapost的编译方式
metapost文件不同的编译可以得到不同的图片格式:eps和pdf。
eps格式编译:mpost foo.mp
pdf格式编译:mptopdf foo.mp
eps图片可以直接插入到latex中,与latex无缝融合。有时需要在eps中插入汉字和特殊字符,这些字符可以使用latex和tex来编译。为了插入汉字,mp文件需要添加相应的设置,如下例:
verbatimtex
%&latex
\documentclass[10pt,a4paper]{article}
\usepackage{CJK,amssymb}
\begin{document}
\begin{CJK}{GBK}{song}
etex;
draw btex 这里是中文宋体 etex;
verbatimtex
\end{CJK}
\end{document}
etex;
end
文件中verbatimtex...etex和btex...etex中间的部分由指定的编译方式来编译,"%&latex"指明了用latex来编译。
latex方式编译:mpost -tex=latex foo.mp
插入汉字后得到的eps图片gv等工具是无法浏览的,因为gv等不支持中文字体。为了能够浏览生成的eps图片,一般在文件的开始加入"prologues :=1"(在linux可能要加入"prologues :=2"),当然也可以"mptopdf foo.mp"编译生成pdf文件浏览。
二、画笔
涉及到画图就要说说画笔,metapost自带了两种画笔:pencircle和pensquare,也可以自己定义画笔:
pen mypen[];
mypen1 = makepen((0, 0.7)--(0.5, 0)--(0, -0.7)--(-0.5, 0)--cycle); %菱形
mypen2 = makepen((-0.5, -0.3)--(0, 0.7)--(0.5, -0.3)--cycle); %三角
画笔必须是封闭图形,划线时按颜色填充画笔。画线时可以根据需要选用画笔,可以设置线条颜色,宽度等:
pickup pencircle scaled 1pt;
draw (0,0)--(1cm,1cm) withcolor red;
或者:
draw (0,0)--(1cm,1cm) withpen mypen1 scaled 1pt withcolor (1,0,0)%支持rgb颜色格式
三、线型
画笔的线型有多种,还可以自己设置独特的线性。如虚线:
darw (0,0)--(1cm,1cm) dashed evenly scaled 2;
自定义线型可以看metapost手册。
四、曲线
metapost除了可以画直线之外,还可以自动画出曲线。上面的例子中(0,0)--(1cm,1cm)表示是直线,而(0,0)..(1cm,1cm)表示是曲线,为贝赛尔曲线。还可以指定曲线经过某点时的方向:
draw (0,0){dir 30}..{dir 45}(1cm,1cm}
五、图形处理
metapost对图形进行处理,如旋转(rotated)、移动(shifted)、缩放(xscaled, yscaled)等。
六、graph宏包
metapost的强大还体现在很多地法,下面主要讲一下graph宏包,因为论文要处理数据曲线,所以要经常用到这个宏包。下面是一个使用graph宏包画数据曲线的例子。
verbatimtex
%&latex
\documentclass[10pt,a4paper]{article}
\usepackage{CJK,amssymb}
\begin{document}
\begin{CJK}{GBK}{song}
\Large
etex;
input graph;
beginfig(1);
draw begingraph(12cm,8cm);%设置图片大小
init_numbers(btex$-$etex, btex$1$etex, btex${\times}$etex, btex${}^-$etex, btex${}^2$etex);%设置坐标轴数字格式,使用latex来处理数字。
setrange(0,5,18,15);%设置横纵坐标范围
path p[];
picture lab[];
pen mypen[];
mypen1 = makepen((0, 0.7)--(0.5, 0)--(0, -0.7)--(-0.5, 0)--cycle); %菱形
mypen2 = makepen((-0.5, -0.3)--(0, 0.7)--(0.5, -0.3)--cycle); %三角
lab1 = btex 温度线膨胀系数/$(10^{-6}/K)$ etex rotated 90;
glabel.lft(image(draw lab1),OUT);
glabel.bot(btex 含水率/\% etex, OUT);
gdata("7-days.txt", $, augment.p1($1, $2););
for x = 0 step 3 until 18:
grid.bot(format("%g", x), x) withcolor 0.80white;
endfor;
for y = 5 step 2.5 until 15:
grid.lft(format("%g", y), y) withcolor 0.80white;
endfor;
gdraw (point 0 of p1
for i= 1 upto length p1:
..point i of p1
endfor) withpen pencircle scaled 1.5pt withcolor red;
for i = 0 step 1 until length p1:
gdraw point i of p1 withpen mypen1 scaled 6pt withcolor red;
endfor;
gdata("14-days.txt", $, augment.p2($1, $2););
gdraw p2 withpen pencircle scaled 1.2pt withcolor green;
for i = 0 step 1 until length p2:
gdraw point i of p2 withpen mypen2 scaled 6pt withcolor green;
endfor;
gdata("28-days.txt", $, augment.p3($1, $2););
gdraw p3 withpen pencircle scaled 1.2pt withcolor blue;
for i = 0 step 1 until length p3:
gdraw point i of p3 withpen pensquare scaled 6pt withcolor blue;
endfor;
gdata("56-days.txt", $, augment.p4($1, $2););
gdraw p4 withpen pencircle scaled 1.2pt withcolor (0.8, 0.3, 0);
for i = 0 step 1 until length p4:
gdraw point i of p4 withpen pencircle scaled 6pt withcolor (0.8, 0.3, 0);
endfor;
lab9 = image(
draw (-25pt, 9pt)--(-3pt, 9pt) withpen pencircle scaled 1.2pt withcolor (0.8, 0.3, 0);
draw (-14pt, 9pt) withpen pencircle scaled 6pt withcolor (0.8, 0.3, 0);
draw btex 56天龄期 etex;
draw (-25pt, 27pt)--(-3pt, 27pt) withpen pencircle scaled 1.2pt withcolor blue;
draw (-14pt, 27pt) withpen pensquare scaled 6pt withcolor blue;
draw btex 28天龄期 etex shifted (0, 18pt);
draw (-25pt, 45pt)--(-3pt, 45pt) withpen pencircle scaled 1.2pt withcolor green;
draw (-14pt, 45pt) withpen mypen2 scaled 6pt withcolor green;
draw btex 14天龄期 etex shifted (0, 36pt);
draw (-25pt, 63pt)--(-3pt, 63pt) withpen pencircle scaled 1.2pt withcolor red;
draw (-14pt, 63pt) withpen mypen1 scaled 6pt withcolor red;
draw btex 7天龄期 etex shifted (0, 54pt););
glabel(image(unfill bbox lab9; draw bbox lab9 withpen pencircle scaled 0.5pt; draw lab9), (15.5,13));
endgraph;
endfig;
verbatimtex
\end{CJK}
\end{document}
etex;
end
上面的例子中需要重点说明的是:
(一)坐标轴的设置
1.标签(label)
"lab1 = btex 温度线膨胀系数/$(10^{-6}/K)$ etex rotated 90;"是定义纵坐标label,然后"glabel.lft(image(draw lab1),OUT);"画出此标签,定义标签时用到了旋转"rotated 90"。
2.stick
for x = 0 step 3 until 18:
grid.bot(format("%g", x), x) withcolor 0.80white;
endfor;
for y = 5 step 2.5 until 15:
grid.lft(format("%g", y), y) withcolor 0.80white;
endfor;
画出网格,指出stick方向,网格线为0.80white颜色。
(二)曲线
1.数据读入
曲线的数据点通过文件读入:
gdata("7-days.txt", $, augment.p1($1, $2););
"augment.p1($1, $2);"表示将数据文件"7-days.txt"中第一、第二列数据组成的点作为path p1曲线上的点,即第一列各点为x值,第二列各点为y值。
2.数据点标记
有时需要标记数据点,方法如下:
for i = 0 step 1 until length p1:
gdraw point i of p1 withpen mypen1 scaled 6pt withcolor red;
endfor;
这是在曲线p1的每个数据点画上直径为6pt的红色小点。
3.曲线格式
由augment得到的曲线draw得到的各点之间是直线连接的,如果想曲线连接,可以做如下处理:
gdraw (point 0 of p1
for i= 1 upto length p1:
..point i of p1
endfor) withpen pencircle scaled 1.5pt;
(三)图例
图例是一个pic,内容可以自己定义:
lab9 = image(
draw (-25pt, 9pt)--(-3pt, 9pt) withpen pencircle scaled 1.2pt withcolor (0.8, 0.3, 0);
draw (-14pt, 9pt) withpen pencircle scaled 6pt withcolor (0.8, 0.3, 0);
draw btex 56天龄期 etex;
draw (-25pt, 27pt)--(-3pt, 27pt) withpen pencircle scaled 1.2pt withcolor blue;
draw (-14pt, 27pt) withpen pensquare scaled 6pt withcolor blue;
draw btex 28天龄期 etex shifted (0, 18pt);
draw (-25pt, 45pt)--(-3pt, 45pt) withpen pencircle scaled 1.2pt withcolor green;
draw (-14pt, 45pt) withpen mypen2 scaled 6pt withcolor green;
draw btex 14天龄期 etex shifted (0, 36pt);
draw (-25pt, 63pt)--(-3pt, 63pt) withpen pencircle scaled 1.2pt withcolor red;
draw (-14pt, 63pt) withpen mypen1 scaled 6pt withcolor red;
draw btex 7天龄期 etex shifted (0, 54pt););
定义完后画出即可:
glabel(image(unfill bbox lab9; draw bbox lab9 withpen pencircle scaled 0.5pt; draw lab9), (15.5,13));
其中"draw bbox lab9"是给图例加一个框。
(四)双坐标轴
有时需要定义双坐标轴,下面是一个例子:
verbatimtex
%&latex
\documentclass[10pt,a4paper]{article}
\usepackage{CJK}
\begin{document}
\begin{CJK}{GBK}{song}
etex;
input graph;
beginfig(1);
draw begingraph(10cm,7cm);
init_numbers(btex$-$etex, btex$1$etex, btex${\times}$etex, btex${}^-$etex, btex${}^2$etex);
path p[];
picture lab[];
lab1 = btex 大气温度/$\,^{\circ}\mathrm{C}$ etex rotated 90;
lab2 = btex 太阳散射辐射照度/($W/m^2)$ etex rotated -90;
lab3 = btex 大气温度 etex;
lab4 = btex 散射辐射照度 etex;
setrange(0,26,24,38);
glabel.bot(btex 时间/$h$ etex,OUT);
glabel.lft(image(draw lab1),OUT);
gdata("rad-temp.txt", $, augment.p1($1,$2); augment.p2($1,$3););
for x = 0 step 3 until 24:
grid.bot(format("%g", x), x) withcolor 0.80white;
endfor;
for y = 26 step 2 until 38:
grid.lft(format("%g", y), y) withcolor 0.80white;
endfor;
gdraw (point 0 of p1
for i= 1 upto length p1:
..point i of p1
endfor) withpen pencircle scaled 1pt;
setcoords(linear, linear);
setrange(0,0,24,180);
for y = 0 step 30 until 180:
itick.rt(format("%g", y), y) withcolor 0.8white;
endfor;
gdraw p2 withpen pencircle scaled 1pt;
glabel.rt(image(draw lab2), OUT);
pickup pencircle scaled 5pt;
for i = 0 step 1 until length p2:
gdraw point i of p2;
endfor;
pickup defaultpen;
p3 = (0, 0)--(3.2cm, 0)--(3.2cm, 1.5cm)--(0, 1.5cm)--cycle;
glabel.urt(image(unfill p3; draw p3), 0, 135);
glabel.urt(image(draw (-0.2cm,0.2cm)--(-0.9cm,0.2cm) withpen pencircle scaled 1.0pt;
draw lab3),(0,157));
glabel.urt(image(draw (-0.2cm,0.2cm)--(-0.9cm,0.2cm) withpen pencircle scaled 1.0pt;
draw (-0.6cm,0.2cm) withpen pencircle scaled 5pt; draw lab4),(0,142));
endgraph;
endfig;
verbatimtex
\end{CJK}
\end{document}
etex;
end
其中重要的设置为:setcoords和setrange这两个函数。
祭出我的第一文——OpenSUSE 下的生活
参加工作一年半了,突然发现生活有些无聊,总得有点追求吧,所以决定学点东西。刚开始想学3DMAX,资料买了一堆,学着学着就没意思了,书也扔在了一边。
工作一段时间,手头上有点银子,刚好同事的一台电脑因工作变动想卖掉,我就把它拿下了,还送一电脑桌。电脑搬到家第一天,就着手搞双系统。由于家里没有网线,想了想,还是装SuSE得了,刚好手头上有SuSE10.3的DVD盘,装好后简单设置一下,装几个字体,一会儿搞个Compiz,一会儿折腾中文Latex,用得还不亦乐乎!但是碰到要安装非系统盘里面的软件时还是比较郁闷的,一堆的依赖关系,幸好家离单位不远,实在U盘搞不定了就把电脑机箱搬到单位来折腾一下,呵呵!
SuSE10.3总体上而言还是不错的,就是安装软件时反应慢了点,网上对Yast2这个东东也是一堆意见啊,呵呵!其实如果只是工作或是简单的娱乐,系统没有必要频繁升级,也没有那么多软件要装,用SuSE比用Debian要好一点,基本上日常的需要一张DVD安装盘就能搞定。我在单位的电脑上装的是Debian unstable,每次"apt-get update"后总有一堆的软件要升级,有时安装一个软件也要升级一堆软件,考虑过用stable的,但软件都太老了,呵呵!
在家玩SuSE一段时间后决定还是要学点东西,但是学习语言太枯燥,我又没有恒心,我的Python是扔了捡,捡了扔(汗!)。仔细想想,自己学的专业和从事的工作和电脑基本没有联系,我还是要靠专业吃饭,学点东西也就是消磨一下时光。看着家里3DMAX的教材,决定还是学习Maya,主要是它有Linux版的,哈哈! 在网上下载了Maya2008 X86_64,在单位电脑的Debian系统下安装了一下,运行成功。等回家在SuSE10.3上一试,总是在启动的最后时刻莫名的挂掉。在网上查了一些资料,折腾了几天,最后怀疑是显卡驱动的问题,从网上下载了最新的N卡驱动安装,Maya运行成功。
问题并没有就此解决,Maya启动没多久就频繁报错"fail to open iff file",网上有人说要关掉ViewCube,我试了一下可以,但是不能使用ViewCube我总感觉不爽,接下来的几天里都在为这个问题烦恼。最后不得不怀疑是系统的问题,SuSE10.3有问题!于是我下载了SuSE10.2的DVD安装,覆盖掉原来的SuSE10.3,运行Maya2008果然一点问题都没有。不过我的声卡一直不响,没办法只有用SuSE10.3的内核把SuSE10.2的内核换掉。而且Latex的中文又要重新弄了,呵呵!(不过后来看到网上有人说把10.3的glibc升级就可以了)
5月份就听说OpenSuSE11.0快出来了,6月19日在网上守候了大半天,有事没事刷新一下http://download.opensuse.org/distribution/11.0/,终于比官方发布时间提前了7个小时下载了OpenSUSE 11.0 DVD,是用迅雷下载的,不得不服迅雷的下载速度,呵呵!
把OpenSUSE DVD下载下来后马上刻录成光盘,下班后在家里的电脑上把原来的OpenSUSE 10.2覆盖安装,安装界面很漂亮,安装速度比10.2和10.3要快很多,硬件支持也很好,我电脑的所有的硬件都自动识别出来了。与前面的版本相比分区比较智能化,不需要象10.3那样要手动修改,整个安装过程很顺利,就象网上说的,也就20分钟安装完毕。
其实安装OpenSUSE11.0最担心的就是我的MAYA 2008能否正常运行。11.0安装完毕后首先安装显卡驱动,用以前的N卡驱动总是编译失败,当时估计是11.0的内核太新了,所以到网吧下载了最新的N卡驱动,安装成功!接着安装Maya 2008 X86_64,安装完毕后启动没有问题,但是启动后发现标签栏的标题部分全是框框,包括一些“OK”,“Apply"等按钮上的字体。唉!问题又来了,郁闷啊!
在网上搜索了一下,发现有人遇到了相同的问题,但是没有解决。根据网上的回复以及自己的判断,应该是字体出了问题,首先要确定Maya标签栏标题使用了什么字体。正好我在单位电脑的Debian系统下也安装的Maya 2008,我把标签栏字体截屏下来,在系统字体里面一个一个的对比查找,找了半天费了老大劲终于发现是fixed[rfx]字体。之所以这么难找主要是因为fixed[rfx]不同字号的字体有很大的不同,刚开始没注意,找了好久都没有找到,呵呵!
确定了出问题的字体,后面的事就好解决多了。我发现OpenSUSE 11.0没有fixed[rfx]字体,于是我把Debian /usr/share/fonts/X11/misc下对应-rfx-fixed的几个字体拷贝到OpenSUSE 11.0的/usr/share/fonts/misc下面,root下运行mkfontsdir,重启X,Maya 2008就又恢复正常了,哈哈!
还发现OpenSUSE 11.0的一个问题,就是有两个SCIM,呵呵!一个是user的,一个是root的,网上有人说是libqt4的问题,升级libqt4到最新版本就可以了。还可以把kdm4换成kdm3,我采取的就是这种办法,呵呵!
工作一段时间,手头上有点银子,刚好同事的一台电脑因工作变动想卖掉,我就把它拿下了,还送一电脑桌。电脑搬到家第一天,就着手搞双系统。由于家里没有网线,想了想,还是装SuSE得了,刚好手头上有SuSE10.3的DVD盘,装好后简单设置一下,装几个字体,一会儿搞个Compiz,一会儿折腾中文Latex,用得还不亦乐乎!但是碰到要安装非系统盘里面的软件时还是比较郁闷的,一堆的依赖关系,幸好家离单位不远,实在U盘搞不定了就把电脑机箱搬到单位来折腾一下,呵呵!
SuSE10.3总体上而言还是不错的,就是安装软件时反应慢了点,网上对Yast2这个东东也是一堆意见啊,呵呵!其实如果只是工作或是简单的娱乐,系统没有必要频繁升级,也没有那么多软件要装,用SuSE比用Debian要好一点,基本上日常的需要一张DVD安装盘就能搞定。我在单位的电脑上装的是Debian unstable,每次"apt-get update"后总有一堆的软件要升级,有时安装一个软件也要升级一堆软件,考虑过用stable的,但软件都太老了,呵呵!
在家玩SuSE一段时间后决定还是要学点东西,但是学习语言太枯燥,我又没有恒心,我的Python是扔了捡,捡了扔(汗!)。仔细想想,自己学的专业和从事的工作和电脑基本没有联系,我还是要靠专业吃饭,学点东西也就是消磨一下时光。看着家里3DMAX的教材,决定还是学习Maya,主要是它有Linux版的,哈哈! 在网上下载了Maya2008 X86_64,在单位电脑的Debian系统下安装了一下,运行成功。等回家在SuSE10.3上一试,总是在启动的最后时刻莫名的挂掉。在网上查了一些资料,折腾了几天,最后怀疑是显卡驱动的问题,从网上下载了最新的N卡驱动安装,Maya运行成功。
问题并没有就此解决,Maya启动没多久就频繁报错"fail to open iff file",网上有人说要关掉ViewCube,我试了一下可以,但是不能使用ViewCube我总感觉不爽,接下来的几天里都在为这个问题烦恼。最后不得不怀疑是系统的问题,SuSE10.3有问题!于是我下载了SuSE10.2的DVD安装,覆盖掉原来的SuSE10.3,运行Maya2008果然一点问题都没有。不过我的声卡一直不响,没办法只有用SuSE10.3的内核把SuSE10.2的内核换掉。而且Latex的中文又要重新弄了,呵呵!(不过后来看到网上有人说把10.3的glibc升级就可以了)
5月份就听说OpenSuSE11.0快出来了,6月19日在网上守候了大半天,有事没事刷新一下http://download.opensuse.org/distribution/11.0/,终于比官方发布时间提前了7个小时下载了OpenSUSE 11.0 DVD,是用迅雷下载的,不得不服迅雷的下载速度,呵呵!
把OpenSUSE DVD下载下来后马上刻录成光盘,下班后在家里的电脑上把原来的OpenSUSE 10.2覆盖安装,安装界面很漂亮,安装速度比10.2和10.3要快很多,硬件支持也很好,我电脑的所有的硬件都自动识别出来了。与前面的版本相比分区比较智能化,不需要象10.3那样要手动修改,整个安装过程很顺利,就象网上说的,也就20分钟安装完毕。
其实安装OpenSUSE11.0最担心的就是我的MAYA 2008能否正常运行。11.0安装完毕后首先安装显卡驱动,用以前的N卡驱动总是编译失败,当时估计是11.0的内核太新了,所以到网吧下载了最新的N卡驱动,安装成功!接着安装Maya 2008 X86_64,安装完毕后启动没有问题,但是启动后发现标签栏的标题部分全是框框,包括一些“OK”,“Apply"等按钮上的字体。唉!问题又来了,郁闷啊!
在网上搜索了一下,发现有人遇到了相同的问题,但是没有解决。根据网上的回复以及自己的判断,应该是字体出了问题,首先要确定Maya标签栏标题使用了什么字体。正好我在单位电脑的Debian系统下也安装的Maya 2008,我把标签栏字体截屏下来,在系统字体里面一个一个的对比查找,找了半天费了老大劲终于发现是fixed[rfx]字体。之所以这么难找主要是因为fixed[rfx]不同字号的字体有很大的不同,刚开始没注意,找了好久都没有找到,呵呵!
确定了出问题的字体,后面的事就好解决多了。我发现OpenSUSE 11.0没有fixed[rfx]字体,于是我把Debian /usr/share/fonts/X11/misc下对应-rfx-fixed的几个字体拷贝到OpenSUSE 11.0的/usr/share/fonts/misc下面,root下运行mkfontsdir,重启X,Maya 2008就又恢复正常了,哈哈!
还发现OpenSUSE 11.0的一个问题,就是有两个SCIM,呵呵!一个是user的,一个是root的,网上有人说是libqt4的问题,升级libqt4到最新版本就可以了。还可以把kdm4换成kdm3,我采取的就是这种办法,呵呵!
订阅:
博文 (Atom)