
В документе есть несколько стилей страниц, и я хочу изменить внешний вид некоторых абзацев, если стиль страницы, на которой они отображаются, — это, 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...}
.