
Я нахожу, что выбор 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}