etoolbox 用于循环范围

etoolbox 用于循环范围

有没有办法对一系列连续整数 (例如 11、12、13、14、15) 运行命令,仅指定第一个和最后一个数字 (11 和 15)?基本上,我正在寻找 的一般 LaTeX 等效tikz\foreach \x in {11,…,15}

在下面的 MWE 中(使用etoolbox),\forcsvlist\mycommand{11,12,13,14,15}正确运行\mycommand在四个输入中的每一个,并且\myrange{11}{15}确实扩展为11,12,13,14,15。但将它们放在一起\forcsvlist\mycommand{\myrange{11}{15}}不起作用。我认为这归结为扩展顺序,这超出了我的理解范围。

\documentclass{article}
\usepackage{amsmath, etoolbox}
\newcommand\mycommand[1]{\boxed{#1} }
\newcounter{mycounter}
\newcommand\myrange[2]{
    \defcounter{mycounter}{#1}
    \themycounter%
    \whileboolexpr
        {test {\ifnumless{\themycounter}{#2}}}
        {\stepcounter{mycounter},\themycounter}
    }
\begin{document}
\forcsvlist\mycommand{11,12,13,14,15}
does not equal
\forcsvlist\mycommand{\myrange{11}{15}}
\end{document}

我看过使用 etoolbox 循环多重偶然性打印使用 etoolbox 包创建的工作数组的所有元素, 和删除多余的花括号,但无法弄清楚如何将它们应用于这种情况。

答案1

在这种情况下,循环很容易,不需要任何特定的包代码。 在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}
\newcommand\mycommand[1]{\boxed{#1} }

\makeatletter
\newcommand\zz[3]{%
 #1{#2}%
 \ifnum#2=\numexpr#3\relax\expandafter\@gobblefour\fi
 \zz#1{\the\numexpr#2+1\relax}{#3}%
 }
\makeatother

\begin{document}


\zz\mycommand{11}{15}
\end{document}

答案2

还可选择提供步骤;\int_step_function:nnnN宏将起点、步骤、终点作为参数,最后将当前值作为参数传递给一个参数宏。

\documentclass{article}
\usepackage{xparse}

\newcommand\mycommand[1]{\fbox{#1} }

\ExplSyntaxOn
\NewDocumentCommand{\forrange}{mO{1}mm}
 {
  \int_step_function:nnnN { #1 } { #2 } { #3 } #4
 }
\ExplSyntaxOff

\begin{document}

\forrange{11}{15}{\mycommand}

\forrange{11}[4]{27}{\mycommand}

\forrange{15}[-1]{11}{\mycommand}

\end{document}

在此处输入图片描述

答案3

\documentclass{article}
\usepackage{xinttools}

\newcommand\mycommand[1]{\fbox{#1} }

\newcommand\forrange[4][1]%
    {\xintFor*##1in{\xintSeq[#1]{#2}{#3}}\do{#4{##1}}}

\begin{document}

\forrange{11}{15}{\mycommand}

\forrange[4]{11}{27}{\mycommand}

\forrange[-1]{15}{11}{\mycommand}

\end{document}

现在我从另一个权威答案中摘录了这个抽象概念。对于日常使用,你也可以使用

\xintFor #1 in {99, 37, -53, 'zouzou'}\do{ whatever }

并在宏定义中用 if#1替换。##1

在此处输入图片描述

相关内容