增加 chemfig+tikz 中的 zorder

增加 chemfig+tikz 中的 zorder

我有一个 chemfig 结构,我想通过在原子位置画一个简单的圆圈来突出显示某些位置。到目前为止,这种方法有效,但我还想将新节点放在结构顶部。我尝试了https://tex.stackexchange.com/a/20426/12740,但它不起作用。

梅威瑟:

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{chemfig}
\pgfdeclarelayer{front}
\pgfsetlayers{main,front}
\makeatletter
\pgfkeys{%
  /tikz/on layer/.code={
    \pgfonlayer{#1}\begingroup
    \aftergroup\endpgfonlayer
    \aftergroup\endgroup
  },
  /tikz/node on layer/.code={
    \gdef\node@@on@layer{%
      \setbox\tikz@tempbox=\hbox\bgroup\pgfonlayer{#1}\unhbox\tikz@tempbox\endpgfonlayer\egroup}
    \aftergroup\node@on@layer
  },
  /tikz/end node on layer/.code={
    \endpgfonlayer\endgroup\endgroup
  }
}
\def\node@on@layer{\aftergroup\node@@on@layer}
\makeatother

\newcommand*\ca{%
  \tikz\draw[fill,opacity=0.5,draw=none,color=red,on layer=front] circle (.1);%
}
\newcommand*\cb{%
  \tikz\draw[fill,opacity=0.9,draw=none,color=blue,on layer=front] circle (.15);%
}

\begin{document}
\setatomsep{2em}
\setdoublesep{.3em}
\begin{tikzpicture}
\node {%
\chemfig[line width=1pt]{%
[:-60]O-(-[::60]*6((\cb)-(\ca)=(\ca)-(\cb)(-([:60]=O)-[:-60]O)=(\ca)-(\ca)=))=[:-120]O}%
};

\end{tikzpicture}
\end{document}

我怀疑问题出在\ca和的定义上\cb,因为它使用了自己的\tikz命令,但我不知道如何解决这个问题。

答案1

就像这个答案,您可以使用 来绘制 chemfig remember pictureoverlay并用 命名坐标@{}

\documentclass[border=7mm]{standalone}
\usepackage{chemfig}

\setatomsep{2em}
\setdoublesep{.3em}

\begin{document}
  \chemfig[remember picture, line width=1pt]{
    [:-60]O-(-[::60]*6(@{cb1}-@{ca1}=@{ca2}-@{cb2}(-([:60]=O)-[:-60]O)=@{ca3}-@{ca4}=))=[:-120]O
  }
  \begin{tikzpicture}[remember picture,overlay]
    \foreach \i in {1,...,4}
      \fill[opacity=0.5,color=red] (ca\i) circle (.1);
    \foreach \i in {1,2}
      \fill[opacity=0.5,color=blue] (cb\i) circle (.15);
  \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容