Enumitem 提供了一个很好的语法\begin{enumerate}[label=\alph*]
,其中*
被适当的计数器替换。我想了解这是如何工作的(或者说,我如何做类似的事情)。我尝试了来自的解决方案这里现在有:
\documentclass{article}
\makeatletter
\newtoks\S
\let\ea\expandafter
\newcommand{\FormatCounter}[2]{%
\def\replaceStar##1{%
\def\@replaceStar####1*{####1{#1}}%
\ea\S\ea{\@replaceStar##1\Ignore*\relax}%
}%
\def\Ignore##1\relax{}%
\replaceStar{#2}%
\showthe\S%
\the\S%
}
\begin{document}
\textit{asdf \FormatCounter{page}{(\alph*)} asdf}
\textit{asdf \FormatCounter{page}{\textup{(\alph*)}} asdf}
\end{document}
第一次替换成功,第二次替换失败,因为替换没有到达组内的星号。我该如何解决这个问题?
显然,使用
\ea\replaceStar\ea{\detokenize{#2}}%
运行没有错误,并进行了正确的替换,但我不知道如何撤消\detokenize