如果我想测试某个页面是奇数/偶数(即模 2),那么我可以使用以下命令:
\ifthenelse{\isodd{\thepage}}{}{}
如果我想测试某个页面是否模 4,我该怎么做?
一个简单的例子:
\documentclass{article}
\usepackage{ifthen}
\newcommand{\ismodfour}{???}
\begin{document}
Page 1: \ifthenelse{\ismodfour{\thepage}}{mod 4}{not mod 4} \newpage
Page 2: \ifthenelse{\ismodfour{\thepage}}{mod 4}{not mod 4} \newpage
Page 3: \ifthenelse{\ismodfour{\thepage}}{mod 4}{not mod 4} \newpage
Page 4: \ifthenelse{\ismodfour{\thepage}}{mod 4}{not mod 4} \newpage
Page 5: \ifthenelse{\ismodfour{\thepage}}{mod 4}{not mod 4} \newpage
\end{document}
答案1
以下是egreg 的可扩展\modulo
和changepage
包。它使用changepage
通过标签的机制来检查页码。
请注意,这至少需要两次编译才能给出正确的结果。
\documentclass{article}
% only for this example make ridicously small pages:
\usepackage[papersize={3cm,.5cm},margin=0pt]{geometry}
% use `changepage's strict page check mechansim:
\usepackage[strict]{changepage}
% @egreg's expandable \modulo{<n>}{<m>}
% see https://tex.stackexchange.com/a/34449/5049
\def\truncdiv#1#2{((#1-(#2-1)/2)/#2)}
\def\moduloop#1#2{(#1-\truncdiv{#1}{#2}*#2)}
\def\modulo#1#2{\number\numexpr\moduloop{#1}{#2}\relax}
\makeatletter
\newif\if@modfourpage
% a mod 4 version of `changepage's \checkoddpage
\DeclareRobustCommand\checkmodfourpage{%
\@modfourpagefalse
\ifstrictpagecheck
\stepcounter{cp@cntr}\pmemlabel{\cplabel\thecp@cntr}%
\cp@tempcnt=\pmemlabelref{\cplabel\thecp@cntr}\relax
\ifnum\modulo{\cp@tempcnt}{4}=0 \@modfourpagetrue\fi
\else
\ifnum\modulo{\cp@tempcnt}{4}=0 \@modfourpagetrue\fi
\fi
}
% \ifmodfourpage{<true>}{<false>}:
\newcommand*\ifmodfourpage{%
\checkmodfourpage
\if@modfourpage
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\makeatother
% \strictpagecheck
\begin{document}
\thepage: \ifmodfourpage{mod 4}{not mod 4}\newpage
\thepage: \ifmodfourpage{mod 4}{not mod 4}\newpage
\thepage: \ifmodfourpage{mod 4}{not mod 4}\newpage
\thepage: \ifmodfourpage{mod 4}{not mod 4}\newpage
\thepage: \ifmodfourpage{mod 4}{not mod 4}\newpage
\thepage: \ifmodfourpage{mod 4}{not mod 4}\newpage
\thepage: \ifmodfourpage{mod 4}{not mod 4}\newpage
\thepage: \ifmodfourpage{mod 4}{not mod 4}
\end{document}