Я хотел бы иметь другой нижний колонтитул или стиль страницы в зависимости от того, содержит ли документ одну или несколько страниц. Я не очень опытен в программировании TeX, поэтому ответыо «Сравнение аргумента со строкой, когда аргумент является результатом команды с etoolbox»не очень мне помогло и«Когда следует использовать \edef, \noexpand и \expandafter?»Для меня это немного сложно в первый раз.
Я попробовал это, но это не сработало:
\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage{lastpage}
\begin{document}
\expandafter\ifstrequal{\pageref*{LastPage}}{1}{
\pagestyle{empty}
}{
\pagestyle{plain}}
\lipsum[2-3]
\end{document}
Я, возможно, продолжу экспериментировать.
Может ли кто-нибудь показать мне хороший способ сделать это?
решение1
Вместо этого lastpage
можно использовать totcount
package.
\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage{totcount}
\regtotcounter{page}
\begin{document}
\ifnumcomp{\totvalue{page}}{>}{1}{\pagestyle{plain}}{\pagestyle{empty}}
\lipsum[2]
\end{document}
Для стабилизации потребуется 2 запуска компиляции.
решение2
У меня та же проблема с номерами страниц в документах, и я нашел несколько решений.
Заимствуя часть кода из ответа Ульрике Фишера наэтот вопросМне удалось определить этот макрос:
\documentclass{article}
\usepackage{lipsum,ifthen}
\usepackage[lastpage]{zref}
\makeatletter
\zref@newprop*{numpage}{\the\value{page}}
\zref@addprop{main}{numpage}
\newcommand{\oneormorepages}%
{\ifthenelse{\zref@extractdefault{LastPage}{numpage}{1}>1}%
{\thispagestyle{plain}}%
{\thispagestyle{empty}}%
}
\makeatother
\title{Test}
\author{Test Testson}
\begin{document}
\maketitle
\oneormorepages
\lipsum[1-60] %More than one page
%\lipsum[1] % One page
\end{document}
Вот результат, который я использовал до сегодняшнего дня. Я патчу \maketitle
на лету, используя \patchcmd
from etoolbox
, пакет, который я загружаю для других целей в «настоящий» документ:
\documentclass{article}
\usepackage{lipsum,etoolbox}
%% No page number if the document ai a onepager
\makeatletter
\AtEndDocument{%
\ifnum\value{page} > \@ne
\immediate\write\@auxout{\global\let\string\@multipage\relax}%
\fi
}
\newcommand*{\oneormorepages}{%
\ifdefined\@multipage
\thispagestyle{plain}%
\else
\thispagestyle{empty}%
\fi
}
\patchcmd{\maketitle}
{\thispagestyle{plain}}%
{\oneormorepages}{}{}
%% Change `plain` to `title` if you are using a `memoir` class
\makeatother
\title{Test}
\author{Test Testson}
\begin{document}
\maketitle
\lipsum[1-60] % More than one page
%\lipsum[1] % One page
\end{document}
Как подчеркивает egreg в комментарии ниже (и в комментарии к оригинальному ответу), решение не является стопроцентно надежным (например, оно не работает под scrartcl
). Я уже исправил ошибки, на которые указал jfbu.
Сегодня мне даже удалось найти два дополнительных решения, которые не требуют исправления.и т. д..:
На основе обсуждения вэтот вопросиэтот ответна другой вопрос, я собрал работающее решение, не требующее дополнительных пакетов и работающее под KOMAscript и стандартными классами. Оно выживает \pagenumbering{Roman}
. Как указал egreg, оно все еще не защищено от дурака, но я пробовал откладывать тесты, загружая atendvi
- и atveryend
- пакеты из oberdiek
- пакета и используя команды из этих пакетов. Затем тесты терпят неудачу. Поэтому для MWE ниже мы должны доверять \AtEndDocument
.
Вот MWE:
\documentclass{article}
\usepackage{lipsum}
\makeatletter % You may remove this line if you change\@ne to 1
\AtEndDocument{\ifnum\value{page]=\@ne\thispagestyle{empty}{}\fi} % survives `\pagenumbering{Roman}`
\makeatother % You may remove this line if you change\@ne to 1
\title{Test}
\author{Test Testson}
\begin{document}
\maketitle
\lipsum[1]
\lipsum[1-6] % Turn on/off this line...
\end{document}
Если вам нужна римская нумерация, вы также можете загрузить zref-totpages
и изменить тест на:
\AtEndDocument{\ifnum\ztotpages=\@ne\thispagestyle{empty}{}\fi}
На основеэтот ответ, я нашел решение с использованием scrartcl
, scrpage2
и zref-totpages
, которое также выживает \pagenumbering{Roman}
. Вы можете в дополнительном коде к false
и true
частям теста:
\documentclass{scrartcl}
\usepackage{zref-totpages,lipsum,scrpage2}
\pagestyle{scrplain}
\clearscrheadfoot
% You may use \@ne instead of 1 if you enclose the line in a `\makeatletter\makeatother`
\cfoot[\ifnum\ztotpages=1 \else\pagemark\fi]{\pagemark}
\begin{document}
\lipsum[1] % automatically remove page number in a document with this line
%\lipsum[1-6] % automatically keep page numbers in a document with this line
\end{document}
Надеюсь, это будет полезно.