etoolbox 範囲のループ

etoolbox 範囲のループ

最初の数字と最後の数字 (11 と 15) だけを指定して、連続する整数の範囲 (たとえば、11、12、13、14、15) に対してコマンドを実行する方法はありますか? 基本的に、 の一般的な LaTeX 相当のものを探していtikzます\foreach \x in {11,…,15}

以下の MWE ( を使用etoolbox) では、は 4 つの入力のそれぞれに対して\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マクロは、開始点、ステップ、終了点、そして最後に現在の値が引数として渡される 1 つのパラメータ マクロを引数として受け取ります。

\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 }

マクロ定義内で#1は に置き換えます。##1

ここに画像の説明を入力してください

関連情報