etoolbox für Schleife über Bereich

etoolbox für Schleife über Bereich

Gibt es eine Möglichkeit, einen Befehl für einen Bereich aufeinanderfolgender Ganzzahlen (z. B. 11, 12, 13, 14, 15) auszuführen und dabei nur die erste und die letzte Zahl (11 und 15) anzugeben? Im Grunde suche ich nach dem allgemeinen LaTeX-Äquivalent von tikz's \foreach \x in {11,…,15}.

Im MWE unten (unter Verwendung von etoolbox) wird auf jedem der vier Inputs \forcsvlist\mycommand{11,12,13,14,15}korrekt ausgeführt und tatsächlich zu erweitert . Aber sie zusammenzusetzen funktioniert nicht. Ich denke, es kommt auf die Reihenfolge der Erweiterung an, was mir völlig zu hoch ist.\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}

Ich habe mir angesehenLoop Multi-Contingency mit etoolbox,Drucken Sie alle Elemente eines mit dem etoolbox-Paket erstellten Arbeitsarrays, UndÜberzählige geschweifte Klammern entfernen, konnte aber nicht herausfinden, wie ich sie auf diese Situation anwenden könnte.

Antwort1

In diesem Fall ist es genauso einfach, eine Schleife ohne spezifischen Paketcode zu erstellen. Bildbeschreibung hier eingeben

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

Antwort2

Optional kann auch der Schritt angegeben werden; das \int_step_function:nnnNMakro verwendet als Argument den Startpunkt, den Schritt, den Endpunkt und schließlich das Einparametermakro, an das der aktuelle Wert als Argument übergeben wird.

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

Bildbeschreibung hier eingeben

Antwort3

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

Nun habe ich diese Abstraktion aus einer anderen maßgeblichen Antwort übernommen. Für den alltäglichen Gebrauch können Sie auch verwenden

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

und ersetzen Sie es #1durch ##1„wenn“ innerhalb einer Makrodefinition.

Bildbeschreibung hier eingeben

verwandte Informationen