为了使以下 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}