如何使用 LaTeX 从 SMILES 绘制结构?

如何使用 LaTeX 从 SMILES 绘制结构?

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
}

相关内容