SMILES结构公式在化学界,尤其是计算化学界有着广泛的应用,但现有的TeX包并不支持直接用SMILES代码绘制键线结构。
例如
该命令\SMILES{c1ccccc1}
相当于\chemfig{*6 (-=-=-=)}
答案1
从对相关问题发表评论一个选择是使用 Chemobabel 包。
下面的 MWE 显示 Chemfig 和 Chemobabel 的输出。请注意,Chemobabel 需要与 LaTeX 配合使用-shell-escape
。
\documentclass{article}
\usepackage{chemobabel}
\usepackage{chemfig}
\begin{document}
\noindent Chemfig\\[5mm]
\chemfig{*6 (-=-=-=)}\\[1cm]
Chemobabel\\[5mm]
\smilesobabel{c1ccccc1}{}
\end{document}
结果:
还有一些进一步的选项可以控制输出的大小,以及各种 Open Babel 选项来控制分子的绘制方式。
Chemobabel 的安装需要几个步骤。您需要从以下位置下载软件包https://github.com/aminophen/chemobabel/blob/master/chemobabel.sty。该软件包使用 Open Babel 转换为 SVG,然后使用 Inkscape 或rsvg-convert
将 SVG 转换为 PDF(或 EPS,如果需要),因此您需要安装 Open Babel 和两个 SVG 工具之一。
以下备注适用于 Chemobabel 的旧版本,对于 Github 上的当前版本不再需要。它们留在这里是为了为下面的评论和 Github 问题的讨论提供背景信息。
如果您使用 Inkscape,那么您需要修改chemobabel.sty
,因为 Chemobabel 中使用的 Inkscape 命令行选项不再起作用(请参阅https://github.com/aminophen/chemobabel/issues/2)。修复方法非常简单,如 Github 问题中所述。具体来说,将第 42 行更改为:
\newcommand\chemob@bel@inkscapecmd[2]{inkscape #1.svg --export-type=#2}
Open Babel 的默认输出有相当大的边距,这在文档中看起来不太好。因此,进一步的改进是在pdfcrop
包含输出之前使用。这需要在 中添加另外几行chemobabel.sty
。具体来说,更改文件末尾附近的选项处理:
% define the image extension
\DeclareOption{pdf}{\def\chemob@belimgExt{pdf}\def\chemob@bel@cropcmd#1{pdfcrop #1 #1}}
\DeclareOption{eps}{\def\chemob@belimgExt{eps}\let\chemob@bel@cropcmd\@undefined}
并从内部调用裁剪命令\smilesobabel
(从第 81 行开始):
\newcommand\@smilesobabel[2]{%
\endgroup
\chemob@bel@exec{%
\smilesob@bel@obabelcmd{#1}{#2} 2>\[email protected]
&& \chemob@bel@svgtoimgcmd{\smilesob@belGetName}{\chemob@belimgExt} 2>>\[email protected]
|| rm -f \smilesob@belGetName.\chemob@belimgExt}%
\ifcsname chemob@bel@cropcmd\endcsname%
\chemob@bel@exec{\chemob@bel@cropcmd{\[email protected]}}\fi%
\chemob@bel@common@maybeimg{\smilesobabel@next}{\smilesob@belGetName}{SMILES string}%
\addtocounter{smilesob@belCounter}{1}% select next name
}