Chemfig:如何使原子的边界呈圆形?

Chemfig:如何使原子的边界呈圆形?

我正在使用它\makebox来控制如何打印原子以获得一致的结果。我想将我的原子打印成一个圆圈而不是一个盒子,这样所有角度的所有键都与原子的边界等距。我注意到该\charge命令有一个选项可以沿圆形边界打印电荷;但是,该命令没有类似的选项\chemfig。是否有这样的命令\makebox可以产生圆形边界,或者是否有其他方法可以实现此目标?请参阅下面的演示。

在此处输入图片描述

\documentclass[border=10pt]{standalone}
\usepackage{adjustbox}
\usepackage{chemfig}

\begin{document}
%
    \def\foreverunspace{%
      \ifnum\lastnodetype=11
        \unskip\foreverunspace
      \else
        \ifnum\lastnodetype=12
          \unkern\foreverunspace
        \else
          \ifnum\lastnodetype=13
            \unpenalty\foreverunspace
          \fi
        \fi
      \fi
    }%
%
    \renewcommand{\printatom}[1]{%
        \setbox0=\hbox{#1\foreverunspace}\ifdim\wd0=0pt% if the argument doesn't have a size
            \ensuremath{\mathrm#1}%
        \else%
            \makebox(2.5ex,2.5ex){\ensuremath{\mathrm#1}}% use makebox for atoms
        \fi%
    }%
%
    \setchemfig{%
        % circle=true% not a defined key!
        fixed length=false%
    }%
    \noindent%
    \chemfig{%
        C%
            (-[:0]F)%
            (-[:45]F)%
    }%
%
    \setchemfig{debug=true}%
    \chemfig{%
        C%
            (-[:0]F)%
            (-[:45]F)%
    }%
%
    \hspace{2ex}%
%
    \setchemfig{debug=false}%
    \chemfig{\charge{[overlay=false]0=\:,45=\:}{O}}\hspace{2ex}%
%
    \setcharge{debug=true}%
    \chemfig{\charge{[overlay=false]0=\:,45=\:}{O}}\hspace{2ex}%
%
    \setcharge{debug=false,circle=true}%
    \chemfig{\charge{[overlay=false]0=\:,45=\:}{O}}\hspace{3ex}%
%
    \setcharge{debug=true}%
    \chemfig{\charge{[overlay=false]0=\:,45=\:}{O}}
%
\end{document}

答案1

在此处输入图片描述

我定义了两个pic对象。一个对象始终绘制边框,更简单。它有名称atom,有两个参数:其名称和小项目符号的角度列表(如果有)。另一个对象atom o取决于三个参数;它的第三个参数定义边框的不透明度。图中顶部元素由给出atom o

那么您觉得怎么样?请注意,也可以类似地添加其他装饰。

代码

\tikzset{%
  pics/atom/.style 2 args={%  name, list of angles (charges?)
    code={%
      \path (0, 0)
      node[circle, draw,
      minimum width=6.6ex, minimum height=6.6ex,
      inner sep=1ex, outer sep=1ex,
      text=black] (#1) {$#1$};
      \foreach \i in {#2}{%
        \filldraw[black] (\i: 3.3ex) circle (.25ex);
      }
    }
  },  
  pics/atom o/.style n args={3}{%  name, list of angles, border's opacity
    code={%
      \path (0, 0)
      node[circle, draw, opacity=#3, text opacity=1,
      minimum width=6.6ex, minimum height=6.6ex,
      inner sep=1ex, outer sep=1ex,
      text=black] (#1) {$#1$};
      \foreach \i in {#2}{%
        \filldraw[black] (\i: 3.3ex) circle (.25ex);
      }
    }
  }
}

\begin{tikzpicture}
  \path (0, 0) pic {atom={F}{0, 30}};
  \path (2, 0) pic[red] {atom={He}{90}};
  \path (F) edge[-] (He);

  \path (2, 2) pic[blue] {atom o={O}{80, 110, 180}{.2}};
\end{tikzpicture}

\end{document}

相关内容