¿Cómo utilizar el recuento total de páginas en una expresión condicional?

¿Cómo utilizar el recuento total de páginas en una expresión condicional?

Me gustaría tener un pie de página o un estilo de página diferente dependiendo de si el documento tiene una o más páginas. No tengo mucha experiencia con la programación TeX, así que las respuestasacerca de "Comparar un argumento con una cadena cuando el argumento es el resultado de un comando con etoolbox"no me ayudó mucho y"¿Cuándo utilizar \edef, \noexpand y \expandafter?"Es un poco complicado para mí por primera vez.

Intenté esto, pero no funcionó:

\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage{lastpage}
\begin{document}

\expandafter\ifstrequal{\pageref*{LastPage}}{1}{
  \pagestyle{empty}
  }{
  \pagestyle{plain}}

\lipsum[2-3]

\end{document}

Quizás siga experimentando.

¿Alguien podría mostrarme una buena manera de hacer esto, por favor?

Respuesta1

En lugar de lastpageusted puede utilizar totcountel paquete.

\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage{totcount}
\regtotcounter{page}

\begin{document}

\ifnumcomp{\totvalue{page}}{>}{1}{\pagestyle{plain}}{\pagestyle{empty}}

\lipsum[2]

\end{document}

ingrese la descripción de la imagen aquí

Se necesitarán 2 ejecuciones de compilación para estabilizarse.

Respuesta2

Tengo el mismo problema con respecto al número de página en los documentos y encontré varias soluciones.

Tomando prestado algún código de la respuesta de Ulrike Fisher aesta preguntaPude 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}

Aquí está el resultado que he usado hasta hoy. Parcheo \maketitlesobre la marcha usando \patchcmdfrom etoolbox, un paquete que cargo para otros fines en el 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 enfatiza egreg en el comentario a continuación (y en un comentario a la respuesta original), la solución no es cien por ciento infalible (por ejemplo, no funciona bajo scrartcl). Ahora he corregido los errores que jfbu ha identificado.

Hoy incluso pude encontrar dos soluciones adicionales que no necesitan parches.etc..:

Basado en la discusión enesta preguntayesta respuestaPara otra pregunta, he creado una solución funcional que no requiere ningún paquete adicional y que funciona con KOMAscript y las clases estándar. Sobrevive \pagenumbering{Roman}. Como ha señalado egreg, todavía no es infalible, pero he intentado posponer las pruebas cargando los paquetes atendvi- y atveryend- del oberdiekpaquete - y usando comandos de esos paquetes. Entonces las pruebas fallan. Entonces, para las siguientes MWE, debemos confiar \AtEndDocument.

Aquí están los 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}

Si necesita numeración romana, también puede cargar zref-totpagesy cambiar la prueba a:

\AtEndDocument{\ifnum\ztotpages=\@ne\thispagestyle{empty}{}\fi}

Residencia enesta respuesta, He encontrado una solución usando scrartcl, scrpage2y zref-totpages, que también sobrevive \pagenumbering{Roman}. Puede obtener un código adicional a las partes falsey truede la prueba:

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

Ojalá sea útil.

información relacionada