Como faço para que o estilo da página atual seja usado como condição para alguma classificação no LaTeX?

Como faço para que o estilo da página atual seja usado como condição para alguma classificação no LaTeX?

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 plainpáginas e em itálico em outros lugares.

Mais especificamente, quero que a aparência de alguns parágrafos mude nas páginas a partou a chapterou 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 \someparagraphseja 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, \someparagraphele 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 \labele \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 \thispagestyleemitido 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 \chaptere \partsão emitidos? Se for o último, uma maneira melhor (IMHO) é

\AddToHook{shipout/after}{\gdef\someparagraph\textit}

e para se conectar ao seu estilo \chaptere \partdefinir \gdef\someparagraph\textbfquando 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 etoolboxe algo como \pretocmd\{\chapter}{\gdef...}.

informação relacionada