像 enumitem 一样替换星号

像 enumitem 一样替换星号

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

答案1

在此处输入图片描述

无需替换,*只需在本地使其成为正确的计数器即可。

\documentclass{article}

\newcommand{\FormatCounter}[2]{{%
    \ExpandArgs{cc}\let{c@*}{c@#1}%
    #2%
}}

\begin{document}
    \textit{asdf \FormatCounter{page}{(\alph*)} asdf}
    \textit{asdf \FormatCounter{page}{\textup{(\alph*)}} asdf}
\end{document}

相关内容