(7) 重合体

chemfig で重合体を描いてみましょう。

まずは 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{$\scriptstyle#3$}}$};}}

\setpolymerdelim()
\chemfig{\vphantom{CH_2}-[@{op,.75}]CH_2-CH_2-[@{cl,.25}]}
\makebraces[5pt,5pt]{\!\!n}{op}{cl}

このようにすると、

と描けます。

-[@{op,.75}] の部分は 単結合 - の 0.75 の位置 (始点 を 0、終点 を 1 とする) に op という名前 (ラベル) を付ける、の意味です。\makebraces[5pt,5pt]{\!\!n}{op}{cl} は 高さ 5pt、深さ 5pt で、添字に n を付け、開き括弧・閉じ括弧をそれぞれ (すでに \chemfig{} 内で定義した) op, cl の位置に描く、といった意味です。\! は負のスペースです。

しかしこの方法では、直線的なもの以外だとなかなかうまくいきません。例えば、

\setpolymerdelim()
\chemfig{-[@{op,.75}:30]-[:-30]-[@{cl,.25}:30]}
\makebraces[5pt,5pt]{\!\!n}{op}{cl}

とすると

となって括弧の縦方向の位置が不揃いになってしまいます。この場合、

\setpolymerdelim()
\chemfig{-[@{op,.5}:30]-[:-30]-[@{cl,.5}:30]}
\makebraces[5pt,5pt]{\!\!n}{op}{cl}

として、括弧を描く位置(アンカー)として、高さが同じ位置を選べば、

のようにうまくいきます。

が、もう少し複雑になると、そういう位置を (簡単には) 指定できず困ってしまいます。例えば、PET (ポリエチレンテレフタラート) の場合、上の方法ではかなり難しいと思います。

ので、\makebraces の定義を変更して、強制的に高さを揃えるようにすると良いでしょう。\usetikzlibrary{calc} が必要になる点に注意して下さい。

\usetikzlibrary{calc}

\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{%
    \draw let \p1 = (#4) in node [at=(\p1),yshift=-\y1+\delimvshift]%
    {$\left\delimleft\vrule height\delimhalfdim depth\delimhalfdim width0pt\right.$};
    \draw let \p2 = (#5) in node [at=(\p2),yshift=-\y2+\delimvshift]%
    {$\left.\vrule height\delimhalfdim depth\delimhalfdim width0pt\right\delimright_{\rlap{$\scriptstyle#3$}}$};
  }}

(もう少しうまく書けるかもしれません。改善案/コメント歓迎)

このようにすれば、

\setpolymerdelim()
\chemfig{-[@{op,.75}:30]-[:-30]-[@{cl,.25}:30]}
\makebraces[15pt,5pt]{\!\!n}{op}{cl}

とすることで、問題なく高さの揃った括弧が描けます。

また、PET のような複雑なものでも比較的楽に描けます。

\setpolymerdelim[]
\setchemfig{atom sep=2em}
\chemfig{
  Ar-[:30](=[:90]O)-[:-30]O-[:30]-[:-30]-[:30]O
  -[@{op,.5}:-30]
  (=[:-90]O)-[:30]*6(-=-
  (-[:30](=[:90]O)-[:-30]O-[:30]-[:-30]-[:30]O
  -[@{cl,.5}:-30]
  (=[:-90]O)-[:30]Ar)=-=)
  }
\makebraces[70pt,30pt]{\!\!n}{op}{cl}

「括弧の前後が詰っているので、この部分の結合を長くしてバランス良くしたいなー」という場合も、単に線を長くするだけで OK です (マニュアルの方法だといろいろずれます)。

\setpolymerdelim[]
\setchemfig{atom sep=2em}
\chemfig{
  Ar-[:30](=[:90]O)-[:-30]O-[:30]-[:-30]-[:30]O
  -[@{op,.5}:-30,1.5]
  (=[:-90]O)-[:30]*6(-=-
  (-[:30](=[:90]O)-[:-30]O-[:30]-[:-30]-[:30]O
  -[@{cl,.5}:-30,1.5]
  (=[:-90]O)-[:30]Ar)=-=)
  }
\makebraces[70pt,30pt]{\!\!n}{op}{cl}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です