\thispagestyle no tiene ningún efecto si no se proporciona ninguna página rota(\clearpage, \newpage)

\thispagestyle no tiene ningún efecto si no se proporciona ninguna página rota(\clearpage, \newpage)

En una determinada posición del artículo, la página a la que pertenece, necesita un estilo elegante especial que hago desde \thispagestyleel paquete fancyhdr.

En mi ejemplo, como se muestra en el MWE a continuación, la página, y solo la página donde está el texto "bbb" (está en la segunda página en este ejemplo, pero también puede estar en la otra página, determinado por la longitud del artículo) , necesitar un \chead. Sin embargo, el contenido de \cheadestá en la primera página, no en la segunda como esperaba.

Creo que esto se debe a que no se proporciona ningún salto de página. Pero la posición del texto "bbb" depende de la longitud del artículo, entonces, ¿cómo solucionar este problema?

Mi MWE es:

\documentclass{article}
\usepackage{fancyhdr}

\begin{document}
\fancypagestyle{common}{\chead{I want my header only on the page at which  ``bbb'' is located}}
aaa\par\vspace{80em}
bbb\thispagestyle{common}\par\vspace{80em}
ccc
\end{document}

EDITAR:

Para dejar mi intención más clara, me gustaría dar el siguiente MWE modificado.

Mi deseo es: todas las páginas deben tener el mismo contenido de encabezado/pie de página que se define en \fancypagestyle{allpages}, excepto que la página en la que se encuentra "bbb" (en este ejemplo, es la segunda página), tiene un encabezado/pie de página diferente definido por \fancypagestyle{onlythispage}.

Pero la composición tipográfica real está lejos de mi intención. Creo que esto se debe a que no se dan saltos de página.

Como la posición de "bbb" depende de la longitud del artículo, no puedo prever en qué página estará. Entonces, ¿existe un método no visible para abordar este tipo de problema?

\documentclass{article}
\usepackage{fancyhdr,}

\begin{document}

\fancypagestyle{onlythispage}{\chead{only this page}\cfoot{only this page}}
\fancypagestyle{allpages}{\fancyhf{}\chead{all pages}\cfoot{all pages}}

\pagestyle{allpages}

aaa\par\vspace{80em}
bbb\thispagestyle{onlythispage}\par\vspace{80em}
ccc
\end{document}

Respuesta1

Puedes usar un \markcomando:

\documentclass{article}
\usepackage{fancyhdr}
\fancypagestyle{common}{\fancyhf{}\chead{\rightmark}}
\pagestyle{common}
\begin{document}

aaa\par\vspace{80em}
bbb\markright{I want my header only on the page at which  ``bbb'' is located}\markright{}\par\vspace{80em}
ccc
\end{document}

También puede pasar un valor booleano con el comando marcar y utilizarlo en el encabezado. El valor de laprimero\markright en la página ganará.

\documentclass{article}
\usepackage{fancyhdr}
\usepackage{etoolbox}
\newbool{bbbpage}

\begin{document}

\fancypagestyle{allpages}{\fancyhf{}%
 \chead{\rightmark\ifbool{bbbpage}{only this page}{all pages}}
 \cfoot{\rightmark\ifbool{bbbpage}{only this page}{all pages}}}

\pagestyle{allpages}

aaa\par\vspace{80em}
bbb\markright{\booltrue{bbbpage}}\markright{\boolfalse{bbbpage}}\par\vspace{80em}
ccc
\end{document}

En caso de que necesite \markright/\rightmark, por ejemplo, para obtener alguna \sección en los encabezados, puede usar sus propias \marks (pero esto podría romperse, por ejemplo, con dos columnas o varias columnas).

Respuesta2

Supongo que estás usando encabezados, pero eso no es realmente relevante.

El problema es que el salto de página es asíncrono: normalmente TeX lee más de lo que cabe en una página antes de decidir que tiene que enviarla. En su caso, \thispagestylese ve y procesa mientras TeX aún no ha decidido expulsar la página 1.

El comando \thispagestylesólo es confiable si se da poco después de un salto de página, por ejemplo cuando se inicia un nuevo capítulo, una característica que las clases estándar utilizan para emitir archivos \thispagestyle{plain}.

El único método fiable es utilizar el mecanismo \label- \pageref. Aquí implemento el trabajo con la ayuda de refcountque proporciona una versión ampliable de \pageref, es decir \getpagerefnumber.

\documentclass{article}
\usepackage{fancyhdr}
\usepackage{refcount,pdftexcmds}

\pagestyle{fancy}

\makeatletter
\chead{%
  \ifnum\pdf@strcmp{\thepage}{\getpagerefnumber{bbb}}=\z@
    I want my header only on the page at which  ``bbb'' is located%
  \else
    Normal header%
  \fi
}
\makeatother

\begin{document}

aaa\par\vspace{80em}
bbb\label{bbb}\par\vspace{80em}
ccc

\end{document}

ingrese la descripción de la imagen aquí

Lo uso \pdf@strcmppara garantizar que se admita cualquier tipo de numeración de páginas.

Lo siguiente admite cualquier cantidad de encabezados variantes.Por favor, no te atrevas a pedir una versión sin \ExplSyntaxOn.

Los encabezados alternativos se recopilan en una lista de propiedades, indexadas por las etiquetas que queremos usar. Al inicio del documento, esta lista de propiedades se reindexa utilizando el número de página correspondiente a la referencia. Debido a esto, las etiquetas que aparezcan más tarde tendrán prioridad en caso de que dos etiquetas para encabezados alternativos se encuentren en la misma página.

\documentclass{article}
\usepackage[a6paper]{geometry} % just to make a smaller picture
\usepackage{fancyhdr}
\usepackage{refcount,xparse}

\ExplSyntaxOn
\NewDocumentCommand{\definelylheaders}{mm}
 {% #1: default header
  % #2: label=alternate header, label=alternate header, ...
  \tl_gset:Nn \g_lylheader_default_tl { #1 }
  \prop_gset_from_keyval:Nn \g_lylheader_headers_prop { #2 }
  \prop_map_inline:Nn \g_lylheader_headers_prop
   {
    \seq_gput_right:Nn \g_lylheaders_labels_seq { ##1 }
   }
 }

\AtBeginDocument
 {
  \seq_map_inline:Nn \g_lylheaders_labels_seq
   {
    \prop_gput:Nxx \g_lylheaders_headers_body_prop
     { \getpagerefnumber{#1} }
     { \prop_item:Nn \g_lylheader_headers_prop { #1 } }
   }
 }

\NewDocumentCommand{\lylheaders}{}
 {
  \prop_if_in:NxTF \g_lylheaders_headers_body_prop { \thepage }
   {
    \prop_item:Nx \g_lylheaders_headers_body_prop { \thepage }
   }
   {
    \tl_use:N \g_lylheader_default_tl
   }
 }

\cs_generate_variant:Nn \prop_if_in:NnTF { Nx }
\cs_generate_variant:Nn \prop_item:Nn { Nx }
\cs_generate_variant:Nn \prop_gput:Nnn { Nxx }

\tl_new:N \g_lylheader_default_tl
\prop_new:N \g_lylheaders_headers_prop
\prop_new:N \g_lylheaders_headers_body_prop
\seq_new:N \g_lylheaders_labels_seq

\ExplSyntaxOff

\pagestyle{fancy}
\chead{\lylheaders}

\definelylheaders{Default header}{
  bbb = This is the header for bbb,
  ccc = This is the header for ccc,
}

\begin{document}

aaa\par\vspace{\dimexpr\textheight-\topskip}
bbb\label{bbb}\par\vspace{\dimexpr\textheight-\topskip}
ccc\label{ccc}\par\vspace{\dimexpr\textheight-\topskip}
ddd

\end{document}

ingrese la descripción de la imagen aquí

información relacionada