![绘制玻尔风格元素](https://linux22.com/image/456849/%E7%BB%98%E5%88%B6%E7%8E%BB%E5%B0%94%E9%A3%8E%E6%A0%BC%E5%85%83%E7%B4%A0.png)
我正在尝试制作元素的玻尔式图表。我尝试使用玻尔包,但尽管这几乎可以生成我想要的东西,但却没有显示轨道形状或原子核的组成。
\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 选项包括scale
、rotate
等。可选。
例子:
\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}