如何将 \ifthenelse 从“ifthen”翻译为“etoolbox”?

如何将 \ifthenelse 从“ifthen”翻译为“etoolbox”?

尝试制作检查文档总页数的条件表达式(参见这个问题),我使用包找到了这个解决方案ifthen

\documentclass{article}
\usepackage{lipsum}
\usepackage{ifthen}
\usepackage{lastpage}
\begin{document}

\ifthenelse{\pageref{LastPage}>1}{\pagestyle{plain}}{\pagestyle{empty}}

\lipsum[2-3]

\end{document}

我想尝试使用etoolbox而不是ifthen因为它现在看起来是一个更常用的包。我的以下尝试不起作用:

\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage{lastpage}

\begin{document}

\ifnumcomp{\pageref{LastPage}}{>}{1}{\pagestyle{plain}}{\pagestyle{empty}}

\lipsum[2-13]

\end{document}

那么我该怎么做呢etoolbox

答案1

主要问题是\pageref{LastPage}不能在的参数中使用\ifthenelse,也不能在etoolbox函数中使用,因为它只适用于印刷頁面參考。

人们必须采用不同的方法,使用更安全的包装zref-lastpage

\documentclass{article}
\usepackage{zref-lastpage}

\makeatletter
\AtBeginDocument{% this must be executed after the aux file has been input
  \ifnum\zref@extractdefault{LastPage}{page}{0}>1
    \pagestyle{plain}%
  \else
    \pagestyle{empty}%
  \fi
}
\makeatother

\begin{document}
x

%\clearpage
%y

\end{document}

可以使用\ifnum相应的函数代替etoolbox

\makeatletter
\AtBeginDocument{% this must be executed after the aux file has been input
  \ifnumcomp{\zref@extractdefault{LastPage}{page}{0}}{>}{1}
    {\pagestyle{plain}}
    {\pagestyle{empty}}%
}
\makeatother

然而这仍然需要\makeatletter和上面的代码\makeatother一样\AtBeginDocument,因为我们必须确保代码被执行文件.aux已被读入。

取消注释%行将在两页上显示页码;因为不会打印页码。

相关内容