
Existem vários estilos de página em um documento, e quero alterar a aparência de alguns parágrafos se o estilo de página em que eles aparecem for, digamos, plain
, com uma macro aproximadamente no seguinte formato:
\def\plainpagestyle{plain}
\def\someparagraph#1{
\ifx???\currentpagestyle???\plainpagestyle
\textbf{#1}
\else
\textit{#1}
\fi
}
de modo que \someparagraph{some text}
renderiza "algum texto" em negrito nas plain
páginas e em itálico em outros lugares.
Mais especificamente, quero que a aparência de alguns parágrafos mude nas páginas a part
ou a chapter
ou outras coisas como esta começam, então sempre o after \thispagestyle{plain}
é declarado na página.
Existe uma maneira legal de fazer isso?
Responder1
(muito tempo para um comentário)
Isso não vai funcionar, a menos que \someparagraph
seja garantido que você apareça no escopo de \thispagestyle{plain}
, não importa o que aconteça.
Normalmente, o TeX está compondo parágrafosantestendo decidido onde dividir as páginas, pode acontecer que, ao encontrar o seu, \someparagraph
ele ainda acredite que \thispagestyle{plain}
está em vigor, mas o texto acabará aparecendo após a quebra de página.
Sem falar que o próprio texto pode ficar dividido em páginas e, neste caso, estará errado, não importa o que você faça. OK, poderíamos tentar algo baseado em \label
e \ref
, o mecanismo assíncrono que torna possível ter referências de página corretas.
Agora começa a diversão: o tamanho do texto será diferente se você digitá-lo em negrito ou itálico; negrito pode desencadear uma quebra de página e você terminará com o texto em uma página com estilo normal, mas em negrito. Assim, mesmo um mecanismo assíncrono pode falhar, porque na próxima composição você obteria itálico, o que poderianãoacionar a quebra de página. Você consegue ver o risco de um loop infinito?
Você tem que delimitar melhor o seu problema, se quiser obter uma resposta.
Responder2
Se o seu teste for
foi
\thispagestyle
emitido E o estilo de página selecionado éplain
então o seguinte 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
- Isto não testará se oatualo estilo da página é simples, mas apenas se noatualpágina para a qual uma chamada
\thispagestyle{plain}
foi emitida. Se alguém ligar\pagestyle{plain}
na página seguida de\pagestyle{empty}
na página seguinte, não dá para fazer. - Isso terá um comportamento engraçado se
\thispagestyle{plain}
aparecer\thispagestyle{something-else}
na mesma página com algum texto intermediário que usa o teste. - Isso terá um comportamento engraçado se
\thispagestyle{plain}
for definido relativamente tarde na página. - Isso pressupõe que nada mexeu com a definição de
\thispagestyle
. - É quase certo que isso irá sangrar um pouco na próxima página; mas pela sua pergunta e pelos seus comentários, parece que você concorda com isso.
Sua pergunta é realmente sobre testes \thispagestyle{plain}
? Ou é secretamente um problema XY onde a verdadeira questão é alterar certos estilos nas páginas onde \chapter
e \part
são emitidos? Se for o último, uma maneira melhor (IMHO) é
\AddToHook{shipout/after}{\gdef\someparagraph\textit}
e para se conectar ao seu estilo \chapter
e \part
definir \gdef\someparagraph\textbf
quando eles serão chamados. Isso pode ser feito usando titlesec
(que permite especificar algum código a ser executado após a aplicação do estilo da seção) ou usar etoolbox
e algo como \pretocmd\{\chapter}{\gdef...}
.