![在 chemfig 中绘制同一键中具有多个聚合物支架的聚合物](https://linux22.com/image/363029/%E5%9C%A8%20chemfig%20%E4%B8%AD%E7%BB%98%E5%88%B6%E5%90%8C%E4%B8%80%E9%94%AE%E4%B8%AD%E5%85%B7%E6%9C%89%E5%A4%9A%E4%B8%AA%E8%81%9A%E5%90%88%E7%89%A9%E6%94%AF%E6%9E%B6%E7%9A%84%E8%81%9A%E5%90%88%E7%89%A9.png)
我需要绘制以下聚合物,但不太清楚如何在一个键中管理两个聚合物支架。结果应如下所示:
我当前的代码生成了第一组括号,但我不知道如何包含其余部分:
\documentclass{article}
\usepackage{chemfig}
\newcommand\setpolymerdelim[2]{\def\delimleft{#1}\def\delimright{#2}}
\def\makebraces(#1,#2)#3#4#5{%
\edef\delimhalfdim{\the\dimexpr(#1+#2)/2}%
\edef\delimvshift{\the\dimexpr(#1-#2)/2}%
\chemmove{
\node[at=(#4),yshift=(\delimvshift)]
{$
\left\delimleft
\vrule height\delimhalfdim depth\delimhalfdim width0pt
\right.
$};
\node[at=(#5),yshift=(\delimvshift)]
{$
\left.
\vrule height\delimhalfdim depth\delimhalfdim width0pt
\right\delimright_{\rlap{#3}}
$};
}%
}
\newcommand{\alignC}{C}
\begin{document}
\setpolymerdelim()
\chemfig{H-[:-30]O-[@{op,.5}:30]-[:-30](-[:-90])-[:30]O-[:-30](=[:-90]O)-[:30]O-[@{cl,.25}:-30]-[:30]-[:-30]O-[:30](=[:90]O)-[:-30]=-[:30](=[:90]O)-[:-30]O-[:30]H}
\makebraces(12pt,12pt){$\scriptstyle\!\!m$}{op}{cl}
\end{document}
答案1
方法 1:
一种方法是使用隐形键(就像 所做的那样@{OP}
),例如,
O-[@{OP,-20}:30,0.2,,,draw=none]% Produces the larger opening square bracket in the figure below
其中不可见键是某个有限的非零 (!) 长度(此处为),则使用0.2*bond length
节点,其中是一个表示节点放置在远处的因子。本质上是将节点移位到您想要的实际可见键上的位置。尝试将 更改为其他数字以了解我的意思。当然,这有点滥用符号。@{OP,-20}
-20
-20*bond length
-20
上述方法在复合结构中引入了空格,这并不总是理想的,例如当尝试将此节点插入到没有打印原子的位置时,如右方括号:
@{OP}
(由于打印了原子,我成功地解决了上述问题O
。
方法 2:
chemfig
您还可以通过包装在环境中手动插入节点,然后按照正常方式tikzpicture
使用该命令。\node
\node[right=7pt of cl,yshift=-5pt] (CL) {};
这样做的好处是,你可以使用yshift
和朋友非常精确地指定大括号的位置。
下面是完整代码,它并不完全重现您所拥有的内容,但包含两种方法。您应该能够将此技术应用于其他括号。
完整代码:
(请注意注释% <---------------
。)
\documentclass{article}
\usepackage{chemfig}
\usetikzlibrary{positioning} % <----------------- For positioning of nodes
\newcommand\setpolymerdelim[2]{\def\delimleft{#1}\def\delimright{#2}}
\def\makebraces(#1,#2)#3#4#5{%
\edef\delimhalfdim{\the\dimexpr(#1+#2)/2}%
\edef\delimvshift{\the\dimexpr(#1-#2)/2}%
\chemmove{
\node[at=(#4),yshift=(\delimvshift)]
{$
\left\delimleft
\vrule height\delimhalfdim depth\delimhalfdim width0pt
\right.
$};
\node[at=(#5),yshift=(\delimvshift)]
{$
\left.
\vrule height\delimhalfdim depth\delimhalfdim width0pt
\right\delimright_{\rlap{#3}}
$};
}%
}
\newcommand{\alignC}{C}
\begin{document}
\begin{tikzpicture}
\setpolymerdelim()
\chemfig{H-[:-30]O-[@{OP,-20}:30,0.2,,,draw=none]% <--------------- Method 1
-[@{op,.5}:30]-[:-30](-[:-90])-[:30]O-[:-30](=[:-90]O)-[:30]O-[@{cl,.25}:-30]%
-[:30]-[:-30]O-[:30](=[:90]O)-[:-30]=-[:30](=[:90]O)-[:-30]O-[:30]H}
\node[right=7pt of cl,yshift=-5pt] (CL) {};% <------------------- Method 2
\makebraces(12pt,12pt){$\scriptstyle\!\!m$}{op}{cl}
\setpolymerdelim[]
\makebraces(30pt,30pt){$\scriptstyle\!\!\mathit{stat}$}{OP}{CL}
\end{tikzpicture}
\end{document}