我有一个自定义枚举器:
\newenvironment{subp}{%
\begin{enumerate}[label={\textsc{\alph*.}}]
}{\end{enumerate}}
在环境中有时我需要跳到特定的标签,我会这样做:
\begin{subp}
\setcounter{enumi}{1} % b
\item blah blah
\setcounter{enumi}{4} % e
\item blah blah
\end
因为标签是字母,而计数器是数字计数的。
我希望我可以编写一个如下所示的宏:
\newcommand{\setcurrentlabel}[1]{\setcounter{enumi}{\toascii{#1}-\toascii{a}}
也许有一些转换宏的\toascii
作用就像ord(x)
python中的函数一样。所以我可以直接使用,这比手动用数字\setcurrentlabel{b}
设置更清楚。enumi
答案1
反引号可用于获取数字上下文中的字符代码:
`a or `\a
可以通过以下示例提供数值上下文,\number
或者使用 e-TeX\numexpr
进行减法。
\documentclass{article}
\newcommand*{\setcurrentlabel}[1]{\setcounter{enumi}{\numexpr`#1-`a\relax}}
\begin{document}
\renewcommand*{\theenumi}{\alph{enumi}}
\begin{enumerate}
\setcurrentlabel{b}
\item blah blah
\setcurrentlabel{e}
\item blah blah
\end{enumerate}
\end{document}
另一种选择是包calc
:
\usepackage{calc}
\newcommand*{\setcurrentlabel}[1]{\setcounter{enumi}{`#1-`a}}
答案2
对于设置数字标签的努力,您可能还会使用通常支持的可选参数\item
:
\documentclass{article}
\usepackage{enumitem,xparse}
\NewDocumentCommand{\fixeditem}{o}{%
\IfNoValueTF{#1}
{\item}% \fixeditem
{\item[\scshape #1.]}% \fixeditem[..]
}
\newlist{subp}{enumerate}{1}
\setlist[subp]{label={\textsc{\alph*.}}}
\begin{document}
\begin{subp}
\item blah blah
\fixeditem[b] blah blah
\fixeditem[e] blah blah
\end{subp}
\end{document}
上述方法的唯一缺点是当您将\item
s 与\fixeditem
s 混合时,列表枚举将不会在 之后继续按顺序进行\fixeditem
。