Как перевести \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был прочитан.

Раскомментирование строк с помощью %приведет к отображению номера страницы на обеих страницах; в противном случае номер страницы печататься не будет.

Связанный контент