我正在尝试添加一些氢键来改进结构。链内氢键没有问题,但我不知道如何在两个相邻的\chemfig
命令中连接原子。这是我的尝试。
请注意,红色键(从OH
中出现C6
)位置不正确。它应该从 H 中出现,而不是从 中出现O
。
这是另一个问题,但主要问题是连接H
两个链之间的键。
我想我必须操纵边界框,但我不知道如何去做。
\documentclass{article}
\usepackage{chemfig}
\begin{document}
\definesubmol{180-glucoBeta}{
-[:-10,.7,,,magenta]4
(
-[:10](-[:-150,0.7]-[6,0.7]OH)
-[:-10]O(-[:50,.75])(-[:8,1.1,,,dash pattern=on 1pt off 1pt,green])
)
-[:50](-[:-170]HO)
-[:-10](-[:55,0.7]OH)
-[:10]1(-[2,0.7]H)
-[:-10,.7,,,magenta]{\color{magenta}{O}}
}
\definesubmol{glucoBeta_H_bond}{
-[:10,.7,,,magenta]4
(
-[:-10](-[:150,0.7]-[2,0.7]OH(-[:100,1,,,dash pattern=on 1pt off 1pt,red]))
-[:10]O(-[:-50,.75])(-[:-8,1.1,,,dash pattern=on 1pt off 1pt,green])
)
-[:-50](-[:170]HO(-[:-80,,,,dash pattern=on 1pt off 1pt,brown]))
-[:10](-[:-55,0.7]OH)
-[:-10]1(-[6,0.7]H)
-[:10,.7,,,magenta]{\color{magenta}{O}}
}
\chemfig[][scale=.75]{
-[:-10,.7,,,,dash pattern=on 2pt off 2pt, magenta]O
!{glucoBeta_H_bond}
!{180-glucoBeta}
!{glucoBeta_H_bond}
!{180-glucoBeta}
!{glucoBeta_H_bond}
-[:-10,.7,,,dash pattern=on 2pt off 2pt, magenta]
}
\chemfig[blue][scale=.75]{
-[:-10,.7,,,dash pattern=on 2pt off 2pt, magenta]O
!{glucoBeta_H_bond}
!{180-glucoBeta}
!{glucoBeta_H_bond}
!{180-glucoBeta}
!{glucoBeta_H_bond}
-[:-10,.7,,,dash pattern=on 2pt off 2pt, magenta]
}
\end{document}
答案1
两个分子之间的连接
如果问题是如何在通过单独调用 创建的两分子之间绘制连接,\chemfig
那么答案原则上很简单。ChemFig 的分子实际上是 TikZ 图片,而原子在这个意义上是节点。因此,它们可以通过 ChemFig 的@{<node name>}
语法命名,然后通过某些\tikz[remember picture, overlay]...;
ChemFig 的包装器连接起来\chemmove{}
。
下面的例子
\documentclass{article}
\usepackage{chemfig}
\begin{document}
General idea:\par
\chemfig{-[7]@{a}-[1]}
\vskip2em
\chemfig{-[1]@{b}-[7]}
\chemmove{ \draw[red,dotted] (a)--(b); }
\end{document}
经过两次编译后得到:
但是,就你的情况而言,我认为这不是最好的方法。为了能够连接节点,它们需要具有唯一的名称。如果你重复使用一个节点名称,则只会记住最后一个实例:
因此,当要连接的节点隐藏在重复的子节点中时,该方法就不是那么好:
\documentclass{article}
\usepackage{chemfig}
\begin{document}
problem with molecules derived from submols:\par
\definesubmol{foo}{-[7]@{a}-[1]}
\definesubmol{bar}{-[1]@{b}-[7]}
\chemfig{!{foo}!{bar}!{foo}!{bar}}
\vskip2em
\chemfig{!{foo}!{bar}!{foo}!{bar}}
\chemmove{ \draw[green,dashed] (a)--(b); }
\end{document}
寻找正确的原子
这回答了你的第二个问题:
请注意,红色键(从 C6 中的 OH 中出现)位置不正确。它应该从 H 而不是 O 中出现。
ChemFig 为这一问题提供了解决方案。 中的每个键\chemfig{}
都有一个可选参数,其中包含五个参数:
-[<direction>,<length factor>,<departure>,<arrival>,<tikz options>]
这里有趣的是<departure>
和,<arrival>
它们是整数,指定所需的出发和到达原子的数量。ChemFig 手册中有以下示例:
\documentclass{article}
\usepackage{chemfig}
\begin{document}
\chemfig{ABCD-[:75,,2,3]EFG}\qquad
\chemfig{ABCD-[:75,,,2]EFG}\qquad
\chemfig{ABCD-[:75,,3,2]EFG}
\end{document}
建议的解决方案
为了得到两股纤维素,我建议保存一两个具有氢键的葡萄糖的亚摩尔数。以下是使用turned-glucoBeta
亚摩尔的可能定义我对你链接的问题的回答:
\definesubmol{bridged}{
-[:10,.7,,,glycosid]4
(
-[:-10](-[:150,0.7]-[2,0.7]OH)
-[:10]{\color{red}{O}}(-[:-8,1.2,,,bridge])
-[:-50,.75]
)
-[:-50]
(
-[:170]HO
-[6,,2,2,bridge]
OH
-[6,.7]
-[:-30]
-[:170]4(-[:-170,.475,,,glycosid])
-[:-50](-[:170]HO)
-[:10](-[:-50,.7]OH)
-[:-10]1(-[6]H)(-[:10,.7,,,glycosid]{\color{glyc}O}!{turned-glucoBeta})
-[:130]{\color{red}O}(-[:-8,1.2,,,bridge])
-[:-170]
)
-[:10](-[:-55,0.7]OH)
-[:-10]1(-[6,0.7]H)
-[:10,.7,,,glycosid]{\color{glyc}O}
!{turned-glucoBeta}
}
现在可以重复使用此 submol 来获取聚合物:
完整代码
\documentclass[margin=.5cm]{standalone}
\usepackage{chemfig}
\tikzset{
bridge/.style={dotted,blue} ,
glycosid/.style={glyc}
}
\colorlet{glyc}{green}
\definesubmol{turned-glucoBeta}{
-[:-10,.7,,,glycosid]4
(
-[:10](-[:-150,0.7]-[6,0.7]OH)
-[:-10]{\color{red}{O}}-[:50,.75]
)
-[:50](-[:-170]HO)
-[:-10](-[:55,0.7]OH)
-[:10]1(-[2,0.7]H)
-[:-10,.7,,,glycosid]{\color{glyc}{O}}
}
\definesubmol{bridged}{
-[:10,.7,,,glycosid]4
(
-[:-10](-[:150,0.7]-[2,0.7]OH)
-[:10]{\color{red}{O}}(-[:-8,1.2,,,bridge])
-[:-50,.75]
)
-[:-50]
(
-[:170]HO
-[6,,2,2,bridge]
OH
-[6,.7]
-[:-30]
-[:170]4(-[:-170,.475,,,glycosid])
-[:-50](-[:170]HO)
-[:10](-[:-50,.7]OH)
-[:-10]1(-[6]H)(-[:10,.7,,,glycosid]{\color{glyc}O}!{turned-glucoBeta})
-[:130]{\color{red}O}(-[:-8,1.2,,,bridge])
-[:-170]
)
-[:10](-[:-55,0.7]OH)
-[:-10]1(-[6,0.7]H)
-[:10,.7,,,glycosid]{\color{glyc}O}
!{turned-glucoBeta}
}
\begin{document}
\chemfig{!{bridged}!{bridged}!{bridged}}
\end{document}