这是使用 chemnum 标记镧系元素的最佳方法吗?

这是使用 chemnum 标记镧系元素的最佳方法吗?

我想用镧系元素标记一系列化合物,即十拉我正在使用这个chemnum包。

手册对此给出了一些提示,说你可以\newcmpdcounterformat{arabic}{\@arabic}它使用了\int_to_<...>。所以经过一番寻找,我找到了interfaces3.pdf并从中复制粘贴了一些代码,然后在它不起作用时从聊天中获得了帮助。然而,我对手册中对该函数的描述有点担心:

这是低级将整数表达式转换为符号形式(通常是字母)的函数

(重点是我的)

像我这样的人难道不应该避免低级的事情吗?有没有更高级别的方法来做到这一点?我是否应该使用更传统的方法来列出事物列表,例如 \alpha 是如何定义的?

这是我提出的(有效)代码:

\documentclass{article}
\usepackage{chemnum}
\RequirePackage{expl3}

\ExplSyntaxOn
\cs_new:Npn \canageek_int_to_lanthanide:n #1
{
    \int_to_symbols:nnn {#1} { 15 }
    {
        { 1 } { La }
        { 2 } { Ce }
        { 3 } { Pr }
        { 4 } { Nd }
        { 5 } { Pm }
        { 6 } { Sm }
        { 7 } { Eu }
        { 8 } { Gd }
        { 9 } { Tb }
        { 10 } { Dy }
        { 11 } { Ho }
        { 12 } { Er }
        { 13 } { Tm }
        { 14 } { Yb }
        { 15 } { Lu }
    }
}

\newcmpdcounterformat{lanthanide}{\canageek_int_to_lanthanide:n}

\ExplSyntaxOff 

\labelcmpd[sub-counter-format=lanthanide]{lnwater.la,lnwater.ce,lnwater.pr,lnwater.nd,lnwater.pm,lnwater.sm,lnwater.eu,lnwater.gd,lnwater.tb,lnwater.dy,lnwater.ho,lnwater.er,lnwater.tm,lnwater.yb,lnwater.lu}


\begin{document}
\cmpd{peroxo.meoh} 
\cmpd{DMSOcp}

\cmpd{lnwater.pr}
\cmpd{lnwater.{ce,la}}
\cmpd{lnwater.lu}

\end{document}

答案1

你做得很好。代码中的示例chemnum

\newcmpdcounterformat {arabic} { \int_to_arabic:n }
\newcmpdcounterformat {alph}   { \int_to_alph:n }
\newcmpdcounterformat {Alph}   { \int_to_Alph:n }
\newcmpdcounterformat {roman}  { \int_to_roman:n }
\newcmpdcounterformat {Roman}  { \int_to_Roman:n }
\newcmpdcounterformat {greek}  { \chemgreek_int_to_greek:n }
\newcmpdcounterformat {Greek}  { \chemgreek_int_to_Greek:n }

从中我们推断出第二个参数应该是一个单参数(可扩展)函数,它将抽象整数转换为其他值。在前五种情况下,expl3存在一个核函数,对于其他两种情况,已经设计了一些东西chemgreek,瞧,它就在这里

\cs_new:Npn \chemgreek_int_to_greek:n #1
  {
    \int_to_symbols:nnn {#1} {24}
      {
        {  1 } { \chemgreek_alpha: }
        {  2 } { \chemgreek_beta: }
        {  3 } { \chemgreek_gamma: }
[...]
        { 23 } { \chemgreek_psi: }
        { 24 } { \chemgreek_omega: }
      }
  }

(省略了一些行)。所以你的方法是非常很好,我认为没有问题。

您读到的“低级”是指\int_to_symbols:nnn实际上是用于定义\int_to_alph:n和的函数,\int_to_Alph:n可以用于脚注符号等。

相关内容