Archive for the ‘软件’ Category
看图不说话20091224
翻译Sage文档的准备工作
打算翻译一下Sage的文档。Sage的文档完全是用reStructuredTEXT写成的,由Sphinx管理,对应的翻译就行了,但是为了与原文档保持相同的风格,还是折腾了好久。这里记录一下。
环境是:Ubuntu+Sage 4.2.1+CTeXLive 2008。以翻译Sage Tutorial为例,需要做以下准备工作。(下面用$SAGE代替sage的主目录)
- 转到$SAGE/devel/sage-main/doc/目录;
- 在common目录中的builder.py文件中,找到
LANGUAGES = ['en', 'fr']
修改为:
LANGUAGES = ['en', 'fr', 'zh']
- 新建zh子目录,并将en子目录下的tutorial目录复制到刚才新建的zh目录中 (如果是翻译其他文档,复制相应的目录);
- 修改zh目录下的conf.py文件:
- 在
import sys, os
这一行后 添加 两行:
reload(sys) sys.setdefaultencoding('utf8') - 在conf.py文件最后添加:
latex_preamble='\usepackage{ctex}'latex_premble+='\usepackage{ctex}\n\punctstyle{CCT}'
- 在
- 修改$SAGE/local/lib/python2.6/site-packages/Sphinx-0.6.3-py2.6.egg/sphinx/texinputs/Makefile文件,将其中的“pdflatex”全部替换为“xelatex”(共有5处);
- 将$SAGE/local/lib/python2.6/site-packages/Sphinx-0.6.3-py2.6.egg/sphinx/writers/latex.py中的“\\usepackage[utf8]{inputenc}”中的“utf8”修改为“latin1”,即“\\usepackage[latin1]{inputenc}”。
如果上述操作正常的话,就可以开始翻译了。将zh/tutorial下的所有.rst 文件翻译为中文后,即可进行编译。编译的方法如下:
- 转到$SAGE目录;
- 查看所有文档列表:
./sage -docbuild -D
此时应该可以看到“zh/tutorial”选项;
- 编译:
./sage -docbuild zh/tutorial html ./sage -docbuild zh/tutorial pdf
编译结果会在编译信息最后一行提示。
2010年6月21日更新:
以上是基于Sage 4.3所做的修改,今天下载了4.4.3,情况有些变化:
- 以上的第4、6步完全不需要了,因为相关的配置转移到其他文件中去了
- 修改$SAGE/devel/sage-main/doc/common/conf.py文件中两个地方:
-
latex_elements['inputenc'] = ‘\\usepackage[utf8x]{inputenc}’
改为
latex_elements['inputenc'] = ‘\\usepackage[latin1]{inputenc}’ - latex_elements['preamble']那一行下面再添加一行:
latex_elements['preamble'] += ‘\usepackage{ctex}\n\punctstyle{CCT}\n’
-
latex_elements['inputenc'] = ‘\\usepackage[utf8x]{inputenc}’
用grep在子目录中指定的文件类型中查找
grep -r abcd *.py
这样的命令得不到你期待的结果,而
grep -r abcd *
这样得到的结果又太多,仍然不是你想要的。
正解是:
find . -name *.py|xargs grep asdf
注:这是一个困惑我很久的问题,今天在 这里看到 一种解决方案 。 有人在留言中给出另外一种方法
find . -iname ‘*.cc’ -exec grep -nH ‘{}’ \;
但是看上去比较复杂,我不喜欢。
reStructuredTEXT输出为LaTeX以及公式的问题
中文的rst文件,输出为LaTeX文件:
在home目录下编辑.docutils文件,内容如下:
[latex2e writer]
documentclass: article
documentoptions: 12pt a4paper
output-encoding: utf-8
stylesheet: /home/username/docutils.tex
前几行没什么可说的,最后一行所指定文件的内容如下:
\usepackage[slantfont,boldfont,CJKaddspaces,CJKchecksingle]{xeCJK}
\CJKlanguage{zh-cn}
\setmainfont{Times New Roman}
\setCJKmainfont{Adobe Song Std}
\usepackage{CJKfntef}
我这是想用xelatex,如果是用CCT或者CTEX,语句相对少些。大家自己改吧。
公式的话,在文件头添加
.. role:: raw-math(raw)
:format: latex html
行内公式这样写:
If :raw-math:`$x=5 \times 3$` then :raw-math:`$x$` is
注意,冒号后面没空格!
独立公式这样写:
.. raw:: latex html
$$ W \approx \sum{f(x_k) \Delta x} $$
$$ W = \int_{a}^{b}{f(x) dx} $$
参考源:
- Docutils Configuration: http://docutils.sourceforge.net/docs/user/config.html
- reStructured Text tips and tricks: http://www.programmerq.net/rsttricks.html
- [tip] python-docutils: rst2latex create chinese pdf(繁体中文): http://kalug.linux.org.tw/~lloyd/bblog/archives/2009/11/09/%5Btip%5D_python-docutils:_rst2latex_create_chinese_pdf/
注:
如果是使用Sphinx,那么对于公式的支持就不用这么麻烦了,可以直接使用:math:和.. math::这样的命令,因为Sphinx支持rST扩展,用上面的方法,反而会出很多问题。
Imagemagick 合并两个图像
composite基本用法示例:
composite -gravity southwest 1.png 2.jpg 3.jpg
gravity原意是重力,这里可以理解为对齐的方式。上面命令中中左下角对齐。1.png是前景图,2.jpg是背景图,3.jpg是输出结果。
btw: 有人说GraphicsMagick效率比Imagemagick效率更高,不知道真假。
纪念Opera Mini
(无正文)
用Imagemagick将PDF文件转为图片
convert -density 150 aaa.pdf aaa.png
-density 参数指定的是DPI,也就是分辩率。一般屏幕显示用72就足够了,150适用于大多数场合,300以上的分辩率就很高了。不清楚最高可以到多少。当然了,这些都只在原PDF是矢量的情况下才有比较好的效果,如果原PDF是点阵的,比如扫描的图书,那么更大的DPI造成的结果就是颗粒变大。
如果PDF有多页,那么上述命令会将所有的页都转出来,存成多个文件。如果只想转其中某几页,可以在PDF文件名后加页码范围,象这样:
convert -density 150 aaa.pdf[0-3,20-25] aaa.png
注意,convert都是从0计数的,也就是说Imagemagick把PDF文件的第一页叫作第0页。不管上面哪种情况,只要是转换多页,Imagemagick都会自动在原文件名中加序号,以0开始,连续编号,形如aaa-0.png、aaa-1.png、aaa-2.png……,而与原页码没有任何联系。
当然了,转换的时候,还可以指定-resize这些参数。
VIM编辑文件实例
假设有以下文件
1234567
甲甲大学
张三
李四
王五
2222222
乙乙大学
张三三
李四四
王五五
3333333
丙丙大学
张三四
李四五
王五六
……
简单讲,每个队的信息被分成了5行,报名号、学校、队员1、队员2、队员3。我们主要的工作是要删除多余的回车符,将每一队的信息集中到一行。
- 删除多余的空白:“:%s/ //g”;
- 因为总共是1430行,也就是286个组,这个数记下来,下面要用。
- 合并每组的5行:在normal模式下,光标停在报名号这一行,直接输入“5J”,注意,是大写的J,也就是shift+j。可以看到,每一组的5行信息已经合并成一行了,并且以空格分隔。其中,5表示执行后面的命令5次,J表示合并两行。这一步是基础,并不需要,按“u”,退回到第2步的状态,并按“gg”,将光标停在第一行。
- 录制宏:开始录制以a为名字的宏,“qa”,之后依次按下面的键,“5Jjq”,其中5J的作用已经解释了,j跳到第二行,q结束录制宏。
- 这时候你的光标应该在第二行,并且是normal模式,依次按下面的键,“285@a”,其中@就是shift+2,@a的意思是执行宏a,也就是执行@a共285次。这时,每组的信息已经集中到一行了。
- 其实我们的任务基本上已经完成了,下面是先转成csv格式,再导入Excel,还是直接转成html表格,都是很容易的事情了。下面的命令就不再解释了。
- :%s/ /<\td><td>/g
- :%s/^/<tr><td>/g
- :%s/$/<\/td><\/tr>/g
- 文件最前面加上<html><body><table>,文件最后面加上</table></body></html>,大功告成。(表格加线,加标题这些自己看着办吧)
btw:
当你不了解一种工具(特别是像VIM这种强悍的工具)时,你可能根本想不到活儿还可以这么干,而且干的这么漂亮。
RapidShare
RapidShare上好东西比较多,但是对免费用户的限制也比较多。倒计时还可以找软件跳过去,但流量限制不好办。不知道ADSL断线再拨号的方式是否可行。试了几个在线代理都不能正常下载。最后发现下面两种方式可行:
- http://fanyi.cn.yahoo.com/
- Opera的Turbo
再加上自己本身IP可以下一部分,应该够了。
btw:不要成为下载狂
Ubuntu下使用md5sum计算字符串的MD5值
echo -n string|md5sum
注:之前只会用md5sum计算文件的MD5值,想计算个字符串的MD5值,试了很多办法都不行,今天无意中看到。看来对Linux的软件哲学理解的还是不到位。

