绘制玻尔风格元素

绘制玻尔风格元素

我正在尝试制作元素的玻尔式图表。我尝试使用玻尔包,但尽管这几乎可以生成我想要的东西,但却没有显示轨道形状或原子核的组成。

\documentclass{standalone}
\usepackage{tikz,graphicx}
\usetikzlibrary{decorations.markings}

\definecolor{myyellow}{RGB}{254,241,24}
\definecolor{myorange}{RGB}{234,125,1}

\def\proton(#1,#2){%
    \fill[shading=ball,ball color=myyellow, opacity=0.75] (#1,#2) circle  (10pt);
    \node at (#1,#2) {\texttt{+}};
}
\def\neutron(#1,#2){%
    \fill[shading=ball,ball color=myorange, opacity=0.75] (#1,#2) circle    (10pt);
}
\def\electron{%
    \fill[shading=ball,ball color=gray!30] (0,0) circle (5pt);
    \node at (0,0) {\texttt{-}};
}
\def\sorbit(#1,#2){%
 \draw[
  color=violet,
  rotate=#1,
  postaction=decorate,
  decoration={markings,
  mark=at position #2 with {\electron},
}]
  (0,0) ellipse (1.5 and 3.5);
}
\def\porbit(#1,#2){%
  \draw[
  color=violet,
  rotate=#1,
  postaction=decorate,
  decoration={markings,
  mark=at position #2 with {\electron},
}]
  (0,0) ellipse (4 and 6);
}

\begin{document}

Hydrogen
\begin{tikzpicture}
%H Nucleons
\proton(0.2,-0.2)

%H orbits
\sorbit(40,.9)
\end{tikzpicture}

Helium
\begin{tikzpicture}
%He Nuclius
\neutron(-0.1,0.1)
\proton(0.2,-0.2)
\neutron(-0.25,-0.5)
\proton(-0.3,0.1)
%He Orbit
\sorbit(100,.3)
\sorbit(50,0.8)
\end{tikzpicture}

\end{document}

在此处输入图片描述

有人知道有哪个包可以生成这个吗?理想情况下,我只需在我的 tikz 图片中输入类似 \H 的内容即可。

此外,如果有任何帮助可以自动定位质子和中子,那么我就不必一个接一个地进行定位。

尝试过使用类似如何在 TikZ 中创建美观的原子核?来产生原子核,但似乎无法让它发挥作用。

答案1

嗯,这不是一个包,但是也许它能满足你的要求。

我们定义一个命令

\Bohr[<tikz options>]{<protons>}{<neutrons>}{<electron sequence>}

TikZ 选项包括scalerotate等。可选。

例子:

\Bohr{1}{0}{1} % Hydrogen

在此处输入图片描述

\Bohr{3}{4}{2,1} % Lithium

在此处输入图片描述

\Bohr{13}{14}{2,8,3} % Aluminum

在此处输入图片描述

如您所见,宏调整了电子轨道的尺度、角度和偏心率。

这是代码。您可以轻松调整颜色和尺寸。还有更多可能的调整,但我想在继续进行之前先看看这是否是正确的想法。

\documentclass{article}

\usepackage{tikz, ifthen}

\tikzset{proton/.pic={\shade[shading=ball, ball color=protoncolor](0,0) circle[radius=\protonradius];\node[black]{\tiny+};},
    neutron/.pic={\shade[shading=ball, ball color=neutroncolor](0,0) circle[radius=\neutronradius];},
    electron/.pic={\shade[shading=ball, ball color=electroncolor](0,0) circle[radius=\electronradius];\node[black]{\tiny-};}}

\colorlet{protoncolor}{yellow!90!black}
\colorlet{neutroncolor}{orange!90!black}
\colorlet{electroncolor}{gray!30}
\colorlet{orbitcolor}{violet}

\newcommand{\protonradius}{2.5mm}
\newcommand{\neutronradius}{2.5mm}
\newcommand{\electronradius}{1mm}

\newcommand{\Bohr}[4][]{\tikz[#1]{\pgfmathtruncatemacro{\tot}{#2 + #3}
  \foreach \e[count=\j] in {#4}{\xdef\nume{\j}}
  \foreach \e[count=\j, evaluate=\e as \R using 3*sqrt(#2+#3)/2] in {#4}{
    \draw[orbitcolor, rotate=180/\nume*\j+90/\nume] (0:\R) arc (0:360:{\R} and {\R/(\nume)})
      foreach \s in {1,...,\e} {pic[pos=\s*1/\e+.1]{electron}};
  }
  \foreach \n[evaluate=\n as \r using sqrt((\n-1))/6,
    evaluate=\n as \t using 222.492236*\n,
    ] in {\tot,...,1}{\pic at (\t:\r){neutron};
    \foreach \x[evaluate=\x as \y using int(\tot/#2*\x)] in {1,...,#2}
        {\ifthenelse{\equal{\n}{\y}}{\pic at (\t:\r){proton};}{}
    }
  }
}}

\begin{document}

\Bohr{1}{0}{1} % Hydrogen

\Bohr{3}{4}{2,1} % Lithium

\Bohr{13}{14}{2,8,3} % Aluminum?

\end{document}

相关内容