Gostaria de ter um rodapé ou estilo de página diferente, dependendo se o documento possui uma ou mais páginas. Não tenho muita experiência com programação TeX, então as respostassobre "Comparando um argumento com uma string quando o argumento é resultado de um comando com etoolbox"não me ajudou muito e"Quando usar \edef, \noexpand e \expandafter?"é um pouco complicado para mim pela primeira vez.
Eu tentei isso, mas não funcionou:
\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage{lastpage}
\begin{document}
\expandafter\ifstrequal{\pageref*{LastPage}}{1}{
\pagestyle{empty}
}{
\pagestyle{plain}}
\lipsum[2-3]
\end{document}
Posso continuar experimentando.
Alguém poderia me mostrar uma boa maneira de fazer isso, por favor?
Responder1
Em vez de lastpage
você pode usar 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}
Isso levará 2 execuções de compilação para se estabilizar.
Responder2
Tenho o mesmo problema em relação ao número de páginas de documentos e encontrei várias soluções.
Pegando emprestado algum código da resposta de Ulrike Fisher paraessa questãoConsegui definir esta macro:
\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}
Aqui está o resultado que usei até hoje. Eu corrijo \maketitle
rapidamente usando \patchcmd
from etoolbox
, um pacote que carrego para outros fins no documento 'real':
\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}
Como egreg enfatiza no comentário abaixo (e em um comentário à resposta original), a solução não é cem por cento à prova de erros (por exemplo, não funciona em scrartcl
). Agora corrigi os erros que o jfbu identificou.
Hoje consegui até encontrar duas soluções adicionais que não precisam de patchetc..:
Com base na discussão emessa questãoeesta respostapara outra pergunta, criei uma solução funcional que não requer nenhum pacote adicional e trabalha com KOMAscript e as classes padrão. Ele sobrevive \pagenumbering{Roman}
. Como egreg apontou, ainda não é infalível, mas tentei adiar os testes carregando os pacotes atendvi
- e atveryend
- do oberdiek
-bundle e usando comandos desses pacotes. Então os testes falham. Portanto, para os MWEs abaixo, temos que confiar \AtEndDocument
.
Aqui estão os MWEs:
\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}
Se precisar de numeração romana, você também pode carregar zref-totpages
e alterar o teste para:
\AtEndDocument{\ifnum\ztotpages=\@ne\thispagestyle{empty}{}\fi}
Baseado emesta resposta, encontrei uma solução usando scrartcl
, scrpage2
e zref-totpages
, que também sobrevive \pagenumbering{Roman}
. Você pode adicionar código adicional às false
partes true
do teste:
\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}
Esperançosamente, é útil.