
Hay varios estilos de página en un documento y quiero cambiar la apariencia de algunos párrafos si el estilo de página en el que aparecen es, por ejemplo, plain
con una macro de aproximadamente la siguiente forma:
\def\plainpagestyle{plain}
\def\someparagraph#1{
\ifx???\currentpagestyle???\plainpagestyle
\textbf{#1}
\else
\textit{#1}
\fi
}
por lo que \someparagraph{some text}
muestra "algo de texto" en negrita en plain
las páginas y en cursiva en otros lugares.
Más específicamente, quiero que la apariencia de algunos párrafos cambie en las páginas a part
o a chapter
u otras cosas como esta comienzan, por lo que siempre \thispagestyle{plain}
se declara después en la página.
¿Existe una buena manera de hacerlo?
Respuesta1
(Demasiado largo para un comentario)
Esto no funcionará, a menos que \someparagraph
se garantice que aparecerá dentro del alcance de \thispagestyle{plain}
, pase lo que pase.
Normalmente, TeX compone párrafosanteshaber decidido dónde dividir las páginas y por eso puede suceder que cuando encuentre la suya \someparagraph
siga creyendo que \thispagestyle{plain}
está vigente, pero el texto eventualmente aparecerá más allá del salto de página.
Sin mencionar que el texto en sí puede estar dividido en páginas y, en este caso, será incorrecto sin importar lo que hagas. Bien, podríamos probar algo basado en \label
y \ref
, el mecanismo asincrónico que hace posible tener referencias de páginas correctas.
Ahora comienza la diversión: el tamaño del texto será diferente si lo escribes en negrita o cursiva; La negrita puede provocar un salto de página y terminará con el texto en una página con estilo normal, pero en negrita. Por lo tanto, incluso un mecanismo asíncrono podría fallar, porque en la siguiente composición tipográfica aparecerían cursivas, lo que podríanoactivar el salto de página. ¿Puedes ver el riesgo de un bucle infinito?
Tienes que delimitar mejor tu problema, si esperas obtener una respuesta.
Respuesta2
Si tu prueba es
ha
\thispagestyle
sido emitido Y el estilo de página seleccionado esplain
entonces lo siguiente funcionará
\makeatletter
\def\@SS@plain{plain}
\newcommand\whatisthepagestyle{%
\if@specialpage
\ifx\@specialstyle\@SS@plain
PAGE IS PLAIN
\else
PAGE IS SPECIAL, NOT PLAIN
\fi
\else
PAGE IS NOT SPECIAL
\fi
}
\makeatother
- Esto no probará si elactualEl estilo de la página es sencillo, pero sólo si en elactual
\thispagestyle{plain}
página a la que se ha emitido una llamada . Si alguien llama\pagestyle{plain}
en la página seguida de\pagestyle{empty}
en la página siguiente, no lo puede hacer. - Esto se comportará de forma extraña si
\thispagestyle{plain}
aparece\thispagestyle{something-else}
en la misma página con algún texto intermedio que utilice la prueba. - Esto se comportará de forma extraña si
\thispagestyle{plain}
se configura relativamente tarde en la página. - Esto supone que nada interfiere con la definición de
\thispagestyle
. - Es casi seguro que esto se extenderá un poco en la página siguiente; pero por tu pregunta y tus comentarios parece que estás de acuerdo con eso.
¿Su pregunta es realmente acerca de las pruebas \thispagestyle{plain}
? ¿O es secretamente un problema XY donde el verdadero problema es cambiar ciertos estilos en las páginas donde \chapter
se \part
publican? Si es lo último, una mejor manera (en mi humilde opinión) es
\AddToHook{shipout/after}{\gdef\someparagraph\textit}
y para enganchar a su estilo \chapter
y \part
definir \gdef\someparagraph\textbf
cuándo se llaman. Esto se puede hacer usando titlesec
(que le permite especificar algún código que se ejecutará después de aplicar el estilo de la sección), o usar etoolbox
y algo como \pretocmd\{\chapter}{\gdef...}
.