![教我如何使用 \loop...\repeat 结构等](https://linux22.com/image/252121/%E6%95%99%E6%88%91%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20%5Cloop...%5Crepeat%20%E7%BB%93%E6%9E%84%E7%AD%89.png)
以下代码片段是给出的解决方案的一部分这里:
\def\IncludeOutput#1{
\parskip=2mm
\def\examplename{#1}
\pdfximage{\Directory/\examplename.pdf}%
\edef\lastpdfpage{\the\pdflastximagepages}
\repeat\for{pag}\by{0} % We advance manually the counter in the loop body
\until{\ifnum\pag>\lastpdfpage}
\do{
\noindent\hfill\fbox{%
\includegraphics[width=0.45\textwidth,page=\number\pag]{\Directory/\examplename.pdf}}%
\hfill%
\advance\pag by 1
\ifnum\pag>\lastpdfpage\hfill\par% If odd number of pages
\else% If even number of pages, output the last one
\fbox{%
\includegraphics[width=.45\textwidth,page=\number\pag]{\Directory/\examplename.pdf}}%
\hfill\hbox{}\par % Next pair of images
\fi%
\advance\pag by 1
}
}
我想使用\loop...\repeat
上面代码片段中的构造,而不是在中定义的当前循环构造\input{repeat}
。
我不熟悉\loop...\repeat
,尤其是嵌套循环和条件语句,例如检查数字是奇数还是偶数,检查一个数字是否大于或等于另一个数字。
答案1
这不适用于 Knuth 的 TeX,因为它需要 e-TeX \unless
;但是pdftex
有它。
\newcount\X
\X=10
\loop
\the\X\endgraf
\advance \X by -1
\unless\ifnum \X<0
\repeat
\bye
没有用于组合条件的预定义运算符。
循环\loop...\if...\repeat
非常简单:
\loop
<codeA>
<conditional>
<codeB>
\repeat
通常情况下,一个函数有 或<codeA>
,<codeB>
但不能同时有(但可以同时有)。主要区别在于<codeA>
总是至少执行一次,因为它带有前有條件的。
条件是什么? 任何预定义或内置的条件; <codeA>
也<codeB>
可以包含完整的条件。
该\repeat
命令在 LaTeX 中定义为\fi
,因此循环可以嵌套在另一个条件中。因此
\newif\ifhiggs
\IfFileExists{abc.tex}{\higgstrue}{\higgsfalse}
\ifhiggs
\loop
<codeA>
<conditional>
<codeB>
\repeat
\fi
是避免参数中代码复杂的好方法。您甚至可以使用 Eijkhouts,repeat.tex
只要您重新定义\repeat
:
\input{repeat}
\let\Repeat\repeat
\let\repeat\fi
并使用\Repeat
而不是\repeat
for 循环。但是,我不建议使用该循环结构。
答案2
X >= 0 与 X>-1 相同:
\newcount\X
\X=10
\loop
\the\X\endgraf
\advance \X by -1
\ifnum \X>-1
\repeat
\bye
或者使用虚拟值
\newcount\X
\newcount\Y
\X=10
\Y=0
\loop
\the\X\endgraf
\advance \X by -1
\ifnum\X>0 \ifnum\X=0\Y=1\fi\else\Y=1\fi
\ifnum\Y=0
\repeat
\bye
答案3
您还可以使用以下数学库pgf
:
参考:
代码:
\documentclass{article}
\usepackage{pgf}
\newcommand{\TestValue}[2]{%
\pgfmathsetmacro{\var}{#1-#2}%
\pgfmathparse{ifthenelse(\var>=0,"#1~is greater or equal to #2","#1~is less than #2")}
\pgfmathresult%
}%
\begin{document}
\TestValue{11}{10}\par
\TestValue{10}{10}\par
\TestValue{9}{10}\par
\end{document}
答案4
解决了!该睡觉了。
\newcount\x
\newcount\M
\newcount\N
\M=7% number of pages.
\N=\M
\advance\N by 1
\x=1
\loop
\ifnum\x<\N
\noindent\null\hfill page:\the\x
\advance \x by 1
\ifnum\x>\M
\hfill\null\endgraf
\else
\hfill page:\the\x\hfill\hbox{}\endgraf
\fi
\advance \x by 1
\repeat
\bye