在 chemfig 中绘制同一键中具有多个聚合物支架的聚合物

在 chemfig 中绘制同一键中具有多个聚合物支架的聚合物

我需要绘制以下聚合物,但不太清楚如何在一个键中管理两个聚合物支架。结果应如下所示:

聚合物

我当前的代码生成了第一组括号,但我不知道如何包含其余部分:

\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}

在此处输入图片描述

相关内容