boucle pgffor avec expression arithmétique
Sep 02 2020
Je suis devenu friand de ce xintexprpaquet pour sa belle syntaxe. Je voudrais répéter une commande M fois et une autre 5-M = N fois. J'obtiens une erreur en raison de l'expression arithmétique de ce dernier dans la foreachboucle. Je pensais que l'utilisation du \letcs était censée calculer l'expression? J'ai aussi pensé que le problème était peut-être lié à l'expansion /
MWE ci-dessous:
\documentclass[11pt,a4paper]{article}
\usepackage{pgffor}
\usepackage{xint}
\usepackage{xintexpr}
\begin{document}
\newcommand{\M}{3}
% my attempts below
\newcommand{\N}{\printnumber{{\xintiexpr5-\M\relax}}}
% \edef\N{\printnumber{\xintiexpr5-\M\relax}}
% \newcommand{\Na}{\xintiexpr5-\M\relax} % intermediate value
% \let\N\Na % tr
\foreach \m in {1,...,\M}{M}
\foreach \n in {1,...,\N}{N} % but the math wont work here
\end{document}
Réponses
2 egreg Sep 02 2020 at 15:46
Vous voulez faire une expansion complète de l'expression:
\documentclass[11pt,a4paper]{article}
\usepackage{pgffor}
\usepackage{xint}
\usepackage{xintexpr}
\begin{document}
\newcommand{\M}{3}
\edef\N{\xintthe\xintiexpr5-\M\relax}
\foreach \m in {1,...,\M}{M}
\foreach \n in {1,...,\N}{N}
\end{document}
Cela imprimera
MMM NN
Avec une approche différente:
\documentclass[11pt,a4paper]{article}
\usepackage{pgffor}
\usepackage{xfp}
\begin{document}
\newcommand{\M}{3}
\foreach \m in {1,...,\M}{M}
\foreach \n in {1,...,\inteval{5-\M}}{N}
\end{document}