如何将宏转换为计数器

如何将宏转换为计数器

为了使以下 mwe 工作,我显然(我是这样认为的,但事实并非如此,请参阅答案)必须将宏转换\i为计数器。但是怎么做呢?

\documentclass{scrartcl}
\usepackage{romannum}
\usepackage{tikz}
\begin{document}
 \foreach \i in {1,2,3} \Romannum{\i};
\end{document}

答案1

您不必将其作为计数器,但您必须为循环使用另一个变量名:

\documentclass{scrartcl}
\usepackage{romannum}
\usepackage{tikz}
\begin{document}
\foreach \x in {1,2,3} \Romannum{\x};
\end{document}

答案2

您不必将其作为计数器,但您必须\i先进行扩展\Romannum

\documentclass{scrartcl}
\usepackage{romannum}
\usepackage{tikz}
\begin{document}
 \foreach \i in {1,2,3} \expandafter\Romannum\expandafter{\i};
\end{document}

答案3

我不太喜欢\Romannum,它使用\MakeUppercase,使得它不可扩展。

这是一个可扩展的版本:

\documentclass{scrartcl}

\makeatletter
\newcommand{\Romannum}[1]{\expandafter\@slowromancap\romannumeral#1@}
\makeatother

\usepackage{tikz}
\begin{document}
 \foreach \i in {1,2,3} {\Romannum{\i};}
\end{document}

这也许更容易做到\let\Romannum\@Roman,但是babel语言是会改变的\@Roman

另一个策略是使用expl3

\documentclass{scrartcl}

\usepackage{xparse}

\ExplSyntaxOn
\cs_new_eq:NN \Romannum \int_to_Roman:n
\ExplSyntaxOff

\usepackage{tikz}
\begin{document}
 \foreach \i in {1,2,3} {\Romannum{\i};}
\end{document}

相关内容