教我如何使用 \loop...\repeat 结构等

教我如何使用 \loop...\repeat 结构等

以下代码片段是给出的解决方案的一部分这里

\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而不是\repeatfor 循环。但是,我不建议使用该循环结构。

答案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

相关内容