Автоматически удалять номера страниц в одностраничных документах

Автоматически удалять номера страниц в одностраничных документах

Я нахожу, что выбор LaTeX в отношении размещения номера страницы в одностраничных документах стилистически странный, поэтому я хотел бы подавить это поведение. Я уже делал это ранеевручную, но было бы лучше не следить самому за длиной документа.

Вопрос был задандо, но предпочитаемое автором решение заключается в игре с \maketitle, что не имеет для меня никакого значения. Принятоеотвечатьсоздает макрос, который должен следовать за \begin{doucument}, но было бы лучше иметь что-то, что я могу поместить в свою преамбулу или .styфайл, чтобы мне не приходилось помнить о необходимости всегда добавлять какой-то пользовательский макрос в каждый документ, который я пишу.

МВЭ:

\documentclass{article}
\usepackage{lipsum,fancyhdr}
    \pagestyle{fancy}
    \fancyhead[C]{Don't ever remove this header}
\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}

решение1

Есть некоторые пакеты, которые могут более или менее подсчитывать количество страниц ( totpages, count1to, lastpage, ...). В примере используется пакет zref-totpages:

\documentclass{article}

\usepackage{zref-totpages}

\usepackage{lipsum,fancyhdr}
\pagestyle{fancy}
\fancyhead[C]{Don't ever remove this header}
\fancyfoot[C]{%
  \ifnum\ztotpages=1 \else\thepage\fi
}

\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}

Необходимо два прогона LaTeX, поскольку на момент отправки первой страницы еще неизвестно, сколько страниц последует за ней.

\ztotpagesравен нулю при первом запуске LaTeX, когда zrefметка LastPageне записана в .auxфайле.

решение2

Если я правильно вас понял, вы хотите удалить номер страницы на первой странице, но сохранить заголовок. Это можно сделать, определив пользовательский стиль fancyhdr, идентичный стандартному, fancyно без нумерации страниц, и использовать его только для первой страницы. Полный MWE:

\documentclass{article}
\usepackage{lipsum,fancyhdr}
    \pagestyle{fancy}
    \fancyhead[C]{Don't ever remove this header}
\fancypagestyle{mystyle}{
    \fancyhf{}
    \fancyhead[C]{Don't ever remove this header}
    \fancyfoot[C]{}
}
\begin{document}
\thispagestyle{mystyle}
\lipsum[1] % automatically remove page number in a document with this line
\pagestyle{fancy}
\lipsum[1-6] % automatically keep page numbers in a document with this line
\end{document}

Победа! Автоматизация работает с использованием lastpageи ifthen. Короче говоря, она проверяет, lastpageпревышает ли длина документа (как определено ) 1 страницу. Если документ 1 страница, стиль mystyleиспользуется там, где есть нумерация страниц. Однако, если документ длиннее 1 страницы, первая страница использует mystyleи следующие страницы будут использовать этот fancyстиль.

\documentclass{article}
\usepackage{lipsum,fancyhdr,ifthen,lastpage}
\pagestyle{fancy}
\fancyhead[C]{Don't ever remove this header}
\fancypagestyle{mystyle}{
    \fancyhf{}
    \fancyhead[C]{Don't ever remove this header}
    \fancyfoot[C]{}
}
\begin{document}
\ifthenelse{\pageref{LastPage}=1}
{
    \pagestyle{mystyle}
}
{
    \thispagestyle{mystyle}
}
\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}

Единственное, что теперь — это то, что его нельзя использовать в преамбуле...

решение3

Пример с lastpageпакетом:

\documentclass{article}
\usepackage{lastpage}
\usepackage{refcount}
\usepackage{etoolbox}
\usepackage{lipsum,fancyhdr}
\pagestyle{fancy}
\fancyhead[C]{Don't ever remove this header}
\begin{document}
\ifnumcomp{\getpagerefnumber{LastPage}}{>}{2}{}{\fancyfoot{}} 
 % If document is longer than 2 pages there will be page numeration, if not there will     not be.
\lipsum[1] % automatically remove page number in a document with this line
\end{document}

решение4

Добрый вечер, мы можем проверить номер страницы в конце документа. Если там только одна страница, он очистит нижний колонтитул в центре, в противном случае он перейдет дальше, не меняя значений по умолчанию, и номер страницы останется нетронутым.

\documentclass{article}
\usepackage{lipsum,fancyhdr}
\pagestyle{fancy}
\fancyhead[C]{Don't ever remove this header}
\begin{document}
\lipsum[1]
%\lipsum[1-6] % Turn on/off this line...
\ifnum\thepage=1\fancyfoot[C]{}\fi
\end{document}

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