目录:
前言
1chem
1-1 关于 chem,还有一段典故
1-2 使用
1-3 安装chem
2chem and tex
前言
对于我们化学专业的人而言输入化学式是一件头痛的事。化学式分两类有机,无机。无机的化学式大都是字母与字母数字。输入还是比较方便的(用oo的公式输入就很方便)。但是有机的就苦了。如下: 在windows下面还有chemoffice这个软件好用在linux就没有了。也有一些但是用起来可不容易,而且做出来的也不好。当然也有一些还是不错的商业软件,但是就算是用了这些软件输入的进程也是很不方便的。后来我接触到了tex,我对于用键盘直接输入的方式很有兴趣,就像在tex下输入数学的公式一样。但是我发现tex好像对于有机化学式也是没有办法。后来我在网上看到了一种方法。就是我下面要介绍的软件。
这一个软件,可以有与chemoffice相当的功能,而且可以超过它。
同时介绍我的一个方案可以让你有更好的输入体验。这个是基于tex的。
chem
贝尔实验室的大牛Brian Kernighan (就是和里奇一起写《C语言程序设计》的大牛)写了一篇怎么用chem preprocessor画化学形的文章。人家1992年写的东西,到现在还很好用,并且在书籍排版上,似乎超过了其他的比较著名的商业软件如chemdraw和免费软件isisdraw。虽然日本学者也写了一个xymtex,但是因为语法过于古怪,并且效果也不如这个。chem宏包在最新的groff中即有支持。下面简单的介绍软件的使用。本资料主要来源于英文版的手册,如果你英语不错,建议看原版。
关于 chem,还有一段典故:
话说当年(别问我,我不知道是哪一年)一个星期一的下午,Kernighan、 Jon Bentley 和一个同在贝尔实验室的化学家 Lynn Jelinski 闲扯了一会儿,Lynn 就向他俩抱怨在文档中插入化学结构式实在太麻烦了。正好 Kernighan 刚写了 pic,就想,咦,这不可以用 pic 画吗?于是那天晚上 K&B 就写了一个简单的前端。Lynn 一看,哎,不错!他们仨花了一个星期时间完成了 chem 语言,还在 Computers & Chemistry 杂志上发了篇文章,名字叫做:Chem - a program for phototypesetting chemical structure diagrams。
别着急,还没完。话说当年(1990) GNU 要搞自由软件版本的 troff,开始重写 troff,把前端中的 pic, tbl, soelim 和 eqn 都重写了,就剩下画数学公式的 ideal 和 chem 没有重写。到现在你看你自己 Linux 中的 info groff,在 Introduction->Preprocessor 的最后还能找到:“There are other preprocessors in existence, but, unfortunately, no free implementations are available. Among them are preprocessors for drawing mathematical pictures (`ideal') and chemical structures (`chem').“
时间慢慢到了 2006 年 10 月 19 号,一个叫 Bernd Warken 的小子在 groff 的邮件列表中吼了一嗓子:哈哈,我用 Perl 重写了 chem!然后维护者 Werner LEMBERG 大叔就说:Great!
使用
1. 从这里开始
编译过程:
首先建立一个文件,比如foo.chem,内容如下:
.cstart
ring6 pointing right put N at 4 put O at 1
bond -90 length .1 ; N
double bond -90 length .1 ; O
.cend
然后对文件进行编译:终端输入:
$chem foo.chem | groff -p -Tps>foo.ps
$ps2epsi foo.ps
上面的命令分三部分:调用chem预处理,groff画图,把ps图像转换为epsi格式。(否则系统
会提示”No BoundingBox”)得到foo.epsi文件。epsi文件可以直接在latex中调用。
2. chem代码的结构:
chem代码的结构比较简单,如下所示:
.cstart
[这部分是画图的代码。]
.cend
这个是当年他们发的论文,详细的介绍了chem的使用方法。
http://dx.doi.org/10.1016/0097-8485(87)85006-4
安装chem
chem是groff中的一部份,我们的ubuntu自带了groff-base,但是安装groff时所用的groff-base的版本不对。所以要重新安装
https://launchpad.net/ubuntu/+source/gr ... ld/1524223
下载groff-base_1.20.1-7_i386.deb,
如果是用软件中心安装的话,由于安装了高版本的,无法安装。
sudo dpkg -i groff-base_1.20.1-7_i386.deb
可以把高版本的变成低版本的。
sudo apt-get install groff
这样chem就安装好了。
这样就可以软件输入化学式了。
chem and tex
安装TEX,这个我就不说了,在论坛里有。
我安装的是latex.
问题是我想实现一个目标,就是像在tex中一样可以输入有机化学式。我用了一个方法。
就是我们在写化学方程式的地方。我们用chem的语法一样写,然后我写了个脚本,写完了文章之后,用这个脚本处理文件。这个脚本中包括了文件的预处理,和chem处理以及latex的处理。
而预处理的部份是把文件中的chem语法部份取出来,生成相应的化学式。同时把这部份的chem语法改成tex中的图片插入的语法。这样一个合法的tex文件以及相当的化学式的eps图片就都出来了。然后就是用latex处理tex文件了。
在tex中的语法是:
代码: 全选
\usepackage{graphicx}
.
.
\includegraphics
.cstart
[这部分是画图的代码。]
.cend
shell脚本如下:
最新的在15,16楼
代码: 全选
#!/bin/bash
#从文件中取取出.cstart到.cend之间的文件生成相应的文件同时编号,把这部份文件换成一段相应的代码
mkdir ctoutfiles
cp $1 ctoutfiles
cd ctoutfiles
file=`ls`
i=`cat $file | wc -l`
bihao=1
for m in `seq $i`
do
if [ "`sed -n "$m,$m p" $file`" = ".cstart" ]
then
a=$m
fi
if [ "`sed -n "$m,$m p" $file`" = ".cend" ]
then
b=$m
sed -n "$a,$b p" $file | chem | groff -p -Tps | ps2eps >"$bihao".ps
bihao=`expr $bihao + 1`
fi
done
bihao=0
sed '/^.cstart$/,/^.cend$/ d' $file | awk '{if($0 ~ /\\includegraphics/){bihao=bihao+1;print $0 "{"bihao".ps}"}else{print}}' >"$file".tex
latex "$file.tex"
xdvi "$file".dvi
感谢这两位,对于这篇文章的帮助
http://bbs.ctex.org/viewthread.php?tid=38666
http://blog.solrex.org/articles/the-gol ... -chem.html
下面的我的一个演示:
文件:
代码: 全选
\documentclass{article}
\usepackage{graphicx}
\begin{document}
holle word!
\includegraphics
.cstart
R: benzene pointing right
bond left from R.V4 ; HO
bond -150 from R.V3 ; CH3O
bond right from R.V1 ; C
double bond up from C ; O
bond right from C ; N
bond 45 ; C2H5
bond 135 from N ; C2H5
.cend
\includegraphics
.cstart
CH4
"+"
Cl2
arrow .3
CH3Cl at Cl2 + (0.65, 0)
"+"
HCl
.cend
\end{document}
代码: 全选
sh chemtex a
这里的shell脚本是我试着写的,我还没有写过。这个花了我半个月的时间。还有一些我预想的功能没有写出来。一方面是我水平有限,还有就是我不是很清楚在这个脚本里有一些功能用不用。想听听大家的想法。同时这个脚本也没有最后定下来。想让大家帮着写一下,完善这个脚本。希望大家多提意见