前面通过Google Data API解决了光靠Email不能解决的标签和插图问题,自然,就想到应该可以插入LaTeX语法的数学公式吧,只是把这些公式转成图片插入就可以了。这中间只是多了一个自动编译并转为图片的过程,至少我之前是这么想的。
但在实际的操作中总有意想不到的问题,我第一次碰到了多线程或者多进程的问题。在之前写一些小东西的时候,是没有涉及过多线程或多进程的需求的,可在这里,去编译tex源文件的时候,它出现了。
最先我直接通过os.system
把对tex源文件的编译写到某个函数中,可这样是无法执行的,我猜想应该是os.system
还没有执行完,这个函数就返回了,而这个函数一返回,就把里面的os.system
直接中断了。后来我用subprocess
和threading
来处理对tex源文件的编译,执行是没有问题了,但我无法在编译tex源文件处做阻塞,一阻塞就不能正常编译。不阻塞倒能正常编译,可我后继的操作必须在tex源文件编译完毕后才能进行,不能并发执行的。
最后这个问题我还是无解,我想可能与python是作为vim的脚本执行有关,这时python执行的这个进程与vim的进程的关系?所以我不得不把原本应该在函数内完成的事放到外部完成,虽然很dirty,但它能正常工作了。
import vim,os,markdown2,re,datetime reInLineMath = re.compile(r'\$.*?\$') reBlockMath = re.compile(r'\\\[.*?\\\]', re.S) def getFileName(): 'get a random filename like 20090423' d = datetime.date.today().strftime('%Y%m%d') return d def createTexFile(body, mathInLineList, mathBlockList): mathInLineList = '\n\\newpage\n'.join(mathInLineList) mathBlockList = '\n\\newpage\n'.join(mathBlockList) texcode = ''' \\documentclass{article}\n \\usepackage{tikz}\n \\usepackage{amsmath}\n \\pagestyle{empty}\n \\\begin{document} %s\n\\newpage\n%s\n \\end{document}''' % (mathInLineList, mathBlockList) file = open('/home/zys/temp/%s.tex' % getFileName(),'w') print >> file,texcode file.close() return file.name subject = vim.current.buffer[0] body = '\n'.join(vim.current.buffer[2:]) mathInLineList = reInLineMath.findall(body) mathBlockList = reBlockMath.findall(body) if mathInLineList.__len__() > 0 or mathBlockList.__len__() > 0: texFile = createTexFile(body, mathInLineList = mathInLineList, mathBlockList = mathBlockList) os.system('rxvt -e pdflatex --output-directory=/home/zys/temp/ %s' % texFile) os.system('rxvt -e convert -trim -density 120 -antialias %s.pdf %s. jpg' % (texFile.split('.')[0],texFile.split('.')[0])) mathList = mathInLineList + mathBlockList if mathList.__len__() == 1: body = body.replace(mathList[i], '![math](%s.jpg)' % (texFile.split('.')[0])) else: for i in range(mathList.__len__()): body = body.replace(mathList[i], '![math](%s-%d.jpg)' % (texFile.split('.')[0], i))
主要的代码就这些,用正则表达式从正文中取出tex相关的数学公式,然后把这些公式做成一个单独的tex源文件,一页一个公式,编译后得到一个pdf文件,用convert去把这个pdf文件转成jpg图片,这里带一个-trim参数,得到没有边距的图。如果是多页会得到一组编号的jpg图,再回头用这些图的本机地址去替换正文中的tex数学公式。
另外,代码高亮是通过highlight来做的,在vim中选中代码块,执行highlight就可以得到内嵌css的html带pre标签的代码。
下面纯属演示数学公式效果- -
八卦传播问题
假设某地区的总人口为,在短期内不变,表示知道消息的人数所占的百分比,初始时刻的百分比为,传播率为,另外有一部分人知道消息,但不传播,不传播率为,则数学模型为:
求解得:
于是有:
此表明随时间的增长,消息慢慢地会淡化,逐步被人遗忘。
python我自己学来平时用的,好用啊,哈哈。
貌似有很多游戏都用LUA做嵌入式扩展脚本吧。
PS:你空间变得很想WIKI了。。不太好看
我最早听说LUA是TeX的一个引擎luatex,它可以用LUA作扩展。其它还有什么应用就不知道了。
这个不好看嘛?-_-,将就了吧,大部分都用RSS订阅的^o^