Как сделать так, чтобы текущий стиль страницы использовался в качестве условия для форматирования в LaTeX?

Как сделать так, чтобы текущий стиль страницы использовался в качестве условия для форматирования в LaTeX?

В документе есть несколько стилей страниц, и я хочу изменить внешний вид некоторых абзацев, если стиль страницы, на которой они отображаются, — это, plainс помощью макроса примерно следующего вида:

\def\plainpagestyle{plain}
\def\someparagraph#1{
    \ifx???\currentpagestyle???\plainpagestyle
        \textbf{#1}
    \else
        \textit{#1}
    \fi
}

таким образом, \someparagraph{some text}«некоторый текст» на страницах отображается жирным шрифтом plain, а в других местах — курсивом.

В частности, я хочу, чтобы внешний вид некоторых абзацев менялся на страницах a partили a chapterили других вещей, таких как begin, поэтому \thispagestyle{plain}на странице всегда объявляется after.

Есть ли хороший способ сделать это?

решение1

(Слишком длинно для комментария)

Это не сработает, если только вы \someparagraphне гарантированно не попадете в область действия \thispagestyle{plain}, несмотря ни на что.

Обычно TeX занимается набором абзацевдорешив, где разбить страницы, может случиться так, что когда он столкнется с вашим разрывом, \someparagraphон все еще будет считать, что \thispagestyle{plain}он в силе, но текст в конечном итоге появится за разрывом страницы.

Не говоря уже о том, что сам текст может быть разбит по страницам, и в этом случае он будет неверным, что бы вы ни делали. Хорошо, мы могли бы попробовать что-то на основе \labelи \ref, асинхронного механизма, который позволяет иметь правильные ссылки на страницы.

Теперь начинается самое интересное: размер текста будет отличаться, если вы наберете его жирным шрифтом или курсивом; жирный шрифт может вызвать разрыв страницы, и вы получите текст на странице с обычным стилем, но жирным шрифтом. Таким образом, даже асинхронный механизм может дать сбой, потому что при следующем наборе вы получите курсив, который можетнетвызвать разрыв страницы. Видите ли вы риск бесконечного цикла?

Вам следует лучше определить границы своей проблемы, если вы надеетесь получить ответ.

решение2

Если ваш тест

был \thispagestyleвыпущен И выбран стиль страницыplain

то следующее будет работать

\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
  • Это не проверит, является литекущийСтиль страницы простой, но только если натекущий\thispagestyle{plain}страница был отправлен вызов . Если кто-то звонит \pagestyle{plain}на страницу, а затем \pagestyle{empty}на следующую страницу, нет может сделать.
  • Это будет выглядеть странно, если \thispagestyle{plain}и \thispagestyle{something-else}появится на той же странице с каким-либо промежуточным текстом, использующим тест.
  • \thispagestyle{plain}Если установить это на странице относительно поздно, это будет выглядеть странно .
  • Это предполагает, что ничто не испортило определение \thispagestyle.
  • Это почти наверняка немного проявится на следующей странице, но из вашего вопроса и комментариев следует, что вас это устраивает.

Ваш вопрос действительно касается тестирования для \thispagestyle{plain}? Или это тайная проблема XY, где реальная проблема заключается в изменении определенных стилей на страницах, где \chapterи \partвыдаются? Если это последнее, то лучшим (ИМХО) способом будет

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

и подключиться к вашему стилю \chapterи \partопределить, \gdef\someparagraph\textbfкогда они вызываются. Это можно сделать либо с помощью titlesec(что позволяет указать некоторый код, который будет запущен после применения стиля раздела), либо с помощью etoolboxи что-то вроде \pretocmd\{\chapter}{\gdef...}.

Связанный контент