我想用镧系元素标记一系列化合物,即十拉我正在使用这个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
可以用于脚注符号等。