关键词:有机化学式 有机化学方程式 tex 解决方案

OOo,TeX,KO,ABI,GIMP,Picasa,ProE,QCAD,Inkscape,Kicad,Eagle
头像
IDRI
帖子: 476
注册时间: 2010-07-02 21:47

关键词:有机化学式 有机化学方程式 tex 解决方案

#1

帖子 IDRI » 2010-10-16 22:55


目录:
前言
1chem
1-1 关于 chem,还有一段典故
1-2 使用
1-3 安装chem
2chem and tex




前言
对于我们化学专业的人而言输入化学式是一件头痛的事。化学式分两类有机,无机。无机的化学式大都是字母与字母数字。输入还是比较方便的(用oo的公式输入就很方便)。但是有机的就苦了。如下:
image 2.png
image 2.png (1.95 KiB) 查看 8981 次
在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
效果
Screenshot.png
Screenshot.png (8.88 KiB) 查看 8981 次





这里的shell脚本是我试着写的,我还没有写过。这个花了我半个月的时间。还有一些我预想的功能没有写出来。一方面是我水平有限,还有就是我不是很清楚在这个脚本里有一些功能用不用。想听听大家的想法。同时这个脚本也没有最后定下来。想让大家帮着写一下,完善这个脚本。希望大家多提意见
上次由 IDRI 在 2010-11-13 11:37,总共编辑 3 次。
对系统:更加了解; 对软件:更强,更新,更有趣

ubuntu--arch--gentoo

vim(latex-suit),tex(xelatex,metapost),zim,chromium,virtualbox,awk......
头像
leeaman
帖子: 30702
注册时间: 2007-02-02 18:14
系统: debian sid

Re: 关键词:有机化学式 有机化学方程式 tex 解决方案

#2

帖子 leeaman » 2010-10-16 23:06

虽然只用chemwin画过一次半次,不过还是支持
醉了星星,醉月亮●●●●●The Long Way To Go(*^_^*)
头像
IDRI
帖子: 476
注册时间: 2010-07-02 21:47

Re: 关键词:有机化学式 有机化学方程式 tex 解决方案

#3

帖子 IDRI » 2010-10-26 19:16

这么多天了,为什么没有人顶呢!虽然写的不好,但就我而言是很有用的啊!
对系统:更加了解; 对软件:更强,更新,更有趣

ubuntu--arch--gentoo

vim(latex-suit),tex(xelatex,metapost),zim,chromium,virtualbox,awk......
头像
remeber
论坛版主
帖子: 13030
注册时间: 2009-01-06 15:18
来自: 人间

Re: 关键词:有机化学式 有机化学方程式 tex 解决方案

#4

帖子 remeber » 2010-10-26 20:17

好东西。要支持下。 :em11
“有一种被人抛诸脑后的过去,包含一些不该遗忘的点点滴滴。欢笑之余,我将故旧拾起,才刹见自己的薄情。人世间似乎存在着某种公平,每个人都曾被抛掷在他人的遗忘中;而今你所有哽咽难宣的话语,也正是你曾为人所期盼,却永远听不见的字句。” —赫曼 赫塞
风间星魂
帖子: 490
注册时间: 2009-06-20 23:53

Re: 关键词:有机化学式 有机化学方程式 tex 解决方案

#5

帖子 风间星魂 » 2010-10-26 20:37

强贴,留名 :em20
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 关键词:有机化学式 有机化学方程式 tex 解决方案

#7

帖子 xiooli » 2010-10-26 22:34

我勒个去,这个好,我自己写了个 cml2svg 和 mol2svg,如果这个能编译成 svg 的话我直接就写个脚本从 mol/cml 文件到 .chem 的算了,下面来秀个我用 mol2svg 生成的分子结构(转成 png):
附件
mol.png
mol.png (11.02 KiB) 查看 8909 次
头像
IDRI
帖子: 476
注册时间: 2010-07-02 21:47

Re: 关键词:有机化学式 有机化学方程式 tex 解决方案

#8

帖子 IDRI » 2010-10-28 22:33

我近来发现如果想要在oo中插入chem输出的ps图时,好像不是太好。楼上的意思,没有看太明白。好像有办法把图片转成svg,望指教! :em06
对系统:更加了解; 对软件:更强,更新,更有趣

ubuntu--arch--gentoo

vim(latex-suit),tex(xelatex,metapost),zim,chromium,virtualbox,awk......
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 关键词:有机化学式 有机化学方程式 tex 解决方案

#9

帖子 xiooli » 2010-10-29 11:35

IDRI 写了:我近来发现如果想要在oo中插入chem输出的ps图时,好像不是太好。楼上的意思,没有看太明白。好像有办法把图片转成svg,望指教! :em06
我自己写了个脚本直接将 mol/cml 文件转换成 svg 图片,这种图片是矢量图,其他方法转换的图片可能不能无损缩放。
头像
独孤
帖子: 838
注册时间: 2008-02-02 13:06
来自: 寶能科技
联系:

Re: 关键词:有机化学式 有机化学方程式 tex 解决方案

#10

帖子 独孤 » 2010-10-30 12:38

我勒个去,这个好
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 关键词:有机化学式 有机化学方程式 tex 解决方案

#11

帖子 xiooli » 2010-11-01 16:51

哈哈,mol2pic 完成了,直接将 mol 文件转换成 pic 格式的文件,然后用 groff -p -Tps file.pic 处理一下就可以出来 ps 文件了。下面是一个示例:
mol2.png
头像
IDRI
帖子: 476
注册时间: 2010-07-02 21:47

Re: 关键词:有机化学式 有机化学方程式 tex 解决方案

#12

帖子 IDRI » 2010-11-01 20:53

楼上,
你的这个mol是什么文件?也是用于画出有机结构图的吗?不懂,请教一下? :em03 :em03
还有,就是我提过的。虽然tex很好,但是我们有时也还是要用到如oo的文字处理工具。但是在oo中插入ps图,的效果很不好。你有没有办法,把ps的转成svg,或png的? :em01 :em01 :em01
对系统:更加了解; 对软件:更强,更新,更有趣

ubuntu--arch--gentoo

vim(latex-suit),tex(xelatex,metapost),zim,chromium,virtualbox,awk......
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 关键词:有机化学式 有机化学方程式 tex 解决方案

#13

帖子 xiooli » 2010-11-01 22:36

IDRI 写了:楼上,
你的这个mol是什么文件?也是用于画出有机结构图的吗?不懂,请教一下? :em03 :em03
还有,就是我提过的。虽然tex很好,但是我们有时也还是要用到如oo的文字处理工具。但是在oo中插入ps图,的效果很不好。你有没有办法,把ps的转成svg,或png的? :em01 :em01 :em01
额,MDL 的 mol 格式阿,当然是保存化合物结构的文件了,很常用的阿。其他的还有 cml,xyz 等。
我也发现了将 ps 转换成epsi的效果不好。有方法就是用ps阅读器打开,然後截图成png :em06 或者用一个结构编辑器编辑了然後导出成图片(推荐http://www.chemaxon.com的marvinsketch,个人免费,可跨平台使用)
头像
IDRI
帖子: 476
注册时间: 2010-07-02 21:47

Re: 关键词:有机化学式 有机化学方程式 tex 解决方案

#14

帖子 IDRI » 2010-11-02 20:37

marvinsketch我有用过,不错的 :em01 :em01
我才大二,还没有接触到mdl,但是以后应该也要用到。能不能把mol2pic发出来共享一下 :em03 :em03 :em03
对系统:更加了解; 对软件:更强,更新,更有趣

ubuntu--arch--gentoo

vim(latex-suit),tex(xelatex,metapost),zim,chromium,virtualbox,awk......
头像
IDRI
帖子: 476
注册时间: 2010-07-02 21:47

Re: 关键词:有机化学式 有机化学方程式 tex 解决方案

#15

帖子 IDRI » 2010-11-05 22:11

学习chem化了我不少时间,当然还没有学得很深。
试着把11 楼 xiooli的图用chem写出来,当作是练习了。化了我不少时间。我发现一些问题。就是出错是它报的是pic的错,在chem中不方便找到那里有错。还有就是化的时间不少。可能相对于图形界面的所用的时间有精力更多一些。这是事实我不回避。用不用这种方法,由你自己选择。

代码: 全选

.cstart
	OH
	bond 120 
	bond down ; BP
R1:	ring pointing right put O at 6 
	bond up from R1.V3 ; OH
	bond down from R1.V2 ; OH
	bond -150 from R1.V4 ; OH
	bond up from R1.V1 ; O 
	bond 60 ; BP
R2: 	ring with .V5 at BP
	back bond -60 ; OH
	back bond 150 from R2.V4
	bond -150 from R2.V4
R3: 	ring with .V6 at R2.V2
	bond up from R3.V6 
	bond from R3.V2
R4:     ring double 1,2 with .V5 at R3.V1
R5:     ring with .V6 at R4.V2 
 	back bond down from R5.V5
R6: 	ring with .V4 at R5.V2
        bond -60 from R6.V6 
      
	back bond up from R6.V1
 	bond 150 from R6.V4 ; BP
	double bond 60 ; O 
	bond 150 length 1 from BP ; O
	bond down length 1 ; BP
R7:	ring pointing right put O at 6 with .V1 at BP
	bond down from R7.V4 ; OH
	bond up from R7.V3 ; OH
	bond down from R7.V2 ; O
	bond down ; BP
R8:	ring pointing right put O at 6 with .V1 at BP
	bond down from R8.V4 ; OH 
	bond up from R8.V3 ; OH
	bond up from R8.V5
	bond left ; HO
	bond down from R8.V2 ; OH
	bond up from R7.V5
	bond -60 ; O
	bond down ; BP
R9:	ring pointing right put O at 6 with .V1 at BP
	bond down from R9.V2 ; OH
	bond from R9.V4 ; OH
	bond up  from R9.V3 ; OH
	bond up from R9.V5 
	bond  60  ; OH 
 
.cend
Screenshot.png
对系统:更加了解; 对软件:更强,更新,更有趣

ubuntu--arch--gentoo

vim(latex-suit),tex(xelatex,metapost),zim,chromium,virtualbox,awk......
回复