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.
\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:nnnN
Makro 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}
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 #1
durch ##1
„wenn“ innerhalb einer Makrodefinition.