我正在使用它\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}