\documentclass{article}
\newcommand[3]{\mycounter}{a=#1, b=#2, c=#3}
\begin{document}
\mycounter{1}{2}{3}
\mycounter{4}{5}{6}
Too much… and the last line is
\mycounter{28}{29}{30}
\end{document}
我想用一个命令将这10行简化:\command{1}{30}
,如果我输入\command{1}{29}
,那么命令的最后一行将输出为\mycounter{28}{29}{29}
;如果我输入\command{1}{28}
,那么命令的最后一行将输出为\mycounter{28}{28}{28}
。我该如何实现这个命令?
答案1
您也可以使用\loop
在纯 TeX 中定义的循环。您不需要再加载任何 LaTeX 包,并且代码在纯 TeX 中也可以运行。
\newcount\tmpnum
\def\mycounter#1#2#3{a=#1, b=#2, c=#3 \par}
\def\command#1#2{%
\def\maxnum{#2}\tmpnum=1
\loop
\unless\ifnum\tmpnum>#2 \mycounter{\valnum0}{\valnum1}{\valnum2}
\advance\tmpnum by3
\repeat
}
\def\valnum#1{%
\ifnum\maxnum>\numexpr\tmpnum+#1\relax
\the\numexpr\tmpnum+#1\relax \else \maxnum\fi
}
\command{1}{29}
答案2
multido
几乎是针对你的问题而设计的:
\documentclass{article}
\newcommand\printnextthree[1]{#1, \the\numexpr#1+1\relax, \the\numexpr#1+2\relax \par}
\usepackage{multido}
\begin{document}
\multido{\i=1+3}{9}{\printnextthree{\i}}
\end{document}
输出:
但对于你的实际问题,为什么要重新发明轮子?只需使用pdfpages
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[offset=-2in 0in,nup=1x3,pages=-]{testpdf.pdf}
\end{document}
的规范nup=1x3
在每页上放置一列 3 张幻灯片,pages=-
告诉它包含所有页面,并offset=-2in 0in
告诉它将每个包含的幻灯片向左移动 2 英寸(否则它将水平居中)。
针对我的一组旧幻灯片运行时的示例输出: