pgffor loop พร้อมนิพจน์เลขคณิต

Sep 02 2020

ฉันชอบxintexprแพ็คเกจนี้มากขึ้นเพราะมีไวยากรณ์ที่ดี ฉันต้องการทำซ้ำคำสั่ง M ครั้งและอีกคำสั่ง 5-M = N ครั้ง ฉันได้รับข้อผิดพลาดเนื่องจากนิพจน์เลขคณิตของหลังอยู่ในforeachลูป ฉันคิดว่าการใช้\letcs ควรจะคำนวณนิพจน์? ฉันยังคิดว่าปัญหาอาจเกี่ยวข้องกับการขยาย /

MWE ด้านล่าง:

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

คำตอบ

2 egreg Sep 02 2020 at 15:46

คุณต้องการขยายนิพจน์ทั้งหมด:

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

สิ่งนี้จะพิมพ์

MMM NN

ด้วยแนวทางที่แตกต่าง:

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