![电子配置图](https://linux22.com/image/344727/%E7%94%B5%E5%AD%90%E9%85%8D%E7%BD%AE%E5%9B%BE.png)
我看过一些关于相关电子配置的其他帖子,但没有一个符合我的要求。我对很多 LaTeX 都很熟悉,但对于使用 TikZ 之类的东西,我确信这就是我在这里所需要的。
我想要创建以下图像:
我并不总是需要同时创建“2s”和“2p”部分。理想情况下,将其包装在一个函数中,因为我需要创建许多这样的图像。
\electron{2s}{1}{{1,-1}}
这将是{label}{number of lines}{{array of electrons}}
- 数组中的位置(我不确定这有多么容易实现),我可以提供所需的箭头。1
是一个向上箭头,0
没有箭头,-1
是一个向下箭头(仅作为示例)。
2p 将被绘制为:
\electron{2p}{3}{{1,0},{1,0},{1,0}}
然后,如果需要的话,我可以将它们串在一起,定义它们之间的空间:
\electron{}{}{}$\qquad$\electron{}{}{}
或类似的东西
由于我不知道实际要使用的 TikZ,所以我认为至少应该提供伪代码/标记来显示我认为会发生什么:
\newcommand{\electron}[3]{
\newcounter{lines}
\forloop{lines}{0}{\value{lines} < #2}{
draw line
if array[\value{lines}][0] = -1; draw down line %first entry
if array[\value{lines}][0] = 1; draw up line %first entry
if array[\value{lines}][1] = -1; draw down line %second entry
if array[\value{lines}][1] = 1; draw up line %second entry
}
%place text of #1 cenetered under created lines
}
答案1
我认为你不需要 TikZ 来实现这一点。下面是仅使用制表符和下划线的实现:
\documentclass{standalone}
\usepackage{amssymb} % for harpoons
\newcommand{\electron}[2]{{%
\def\+{\underline{\upharpoonleft}}%
\def\-{\underline{\downharpoonright}}%
\def\0{\underline{\phantom{\downharpoonright}}}%
\setlength\tabcolsep{0pt}% remove extra horizontal space from tabular
\begin{tabular}{c}$#2$\\[2pt]#1\end{tabular}%
}}
\begin{document}
\electron{2s}{\+\-}\quad \electron{2p}{\+\0\ \+\0\ \0\0}
\end{document}
如果您希望命令在数学模式而不是文本模式下工作,只需从 的定义中删除美元符号\electron
,替换tabular
为array
,然后替换\tabcolsep
为\arraycolsep
。
你甚至可以安排只使用+
,-
和0
代替\+
,\-
,和\0
,但那是更复杂。
答案2
我知道答案已被接受,但这是一个使用该modiagram
包的非常简单的示例,不需要任何新内容。我将其作为答案发布,因为我不知道如何在评论中放入代码!我稍后会仔细阅读。
JM 说 MO 与我之前评论中要求的不同,但 MO 是由 AO 制成的,因此如果我们省去 MO 部分,我们就有了必要的零件。AO 之间的距离可以调整,请参阅用户modiagram
手册第 4.1.2 节。
\documentclass{standalone}
\usepackage{modiagram}
\begin{document}
\begin{MOdiagram}[names]
\atom[2s]{left}{2s={0;pair}} \atom[2p]{right}{2p={0;up,up,up}}
\end{MOdiagram}
\end{document}
给出以下内容:
答案3
困难的部分是以好的方式分割输入:
\documentclass{article}
\usepackage{amssymb}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\electron}{mm}
{ % #1 = level, #2 = electron schemes
\jm_electron:nn { #1 } { #2 }
}
\seq_new:N \l_jm_electron_schemes_seq
\seq_new:N \l__jm_electron_schemes_print_seq
\cs_new_protected:Nn \jm_electron:nn
{
\seq_clear:N \l__jm_electron_schemes_print_seq
\seq_set_split:Nnn \l_jm_electron_schemes_seq { | } { #2 }
\seq_map_function:NN \l_jm_electron_schemes_seq \__jm_electron_do_scheme:n
% print the schemes
\group_begin:
\setlength{\tabcolsep}{.2em}
\begin{tabular}{ * { \seq_count:N \l_jm_electron_schemes_seq } { c } }
\seq_use:Nn \l__jm_electron_schemes_print_seq { & } \\
\multicolumn { \seq_count:N \l_jm_electron_schemes_seq } { c } { #1 }
\end{tabular}
\group_end:
}
\cs_new_protected:Nn \__jm_electron_do_scheme:n
{
\seq_put_right:Nn \l__jm_electron_schemes_print_seq
{
\underline
{
\clist_map_inline:nn { #1 }
{
\int_case:nn { ##1 }
{
{1}{$\scriptstyle\upharpoonleft$}
{0}{\phantom{$\scriptstyle\upharpoonleft$}}
{-1}{$\scriptstyle\downharpoonright$}
}
}
}
}
}
\ExplSyntaxOff
\begin{document}
\electron{2s}{1,-1}\quad\electron{2p}{1,0 | 1,0 | 1,0}
\end{document}
第二个参数在 处拆分|
;然后每个项目根据它们被1
、0
或表示而形成一对箭头-1
。
构建一个tabular
具有适当列数的 ,其中每个单元格的内容都用箭头和下划线构建。