Как сделать заголовки цветными, используя один цвет для каждой главы

Как сделать заголовки цветными, используя один цвет для каждой главы

Я набираю книгу в стиле протоколов, которая содержит статьи в хронологическом порядке. Поскольку статьи также категоризируются, каждой категории назначается цвет, и стили глав должны использовать этот цвет в качестве фонового цвета для некоторых причудливых глав. Эта часть работает, как и ожидалось, с titlesec.

В дополнение к этому я хотел бы также изменить цвет заголовков, который должен совпадать с «цветом главы» для текущей главы.

Проблема, которую я наблюдаю при моем наивном подходе, заключается в том, что цвет заголовков меняется слишком рано, т. е. страница перед новой главой уже напечатана новым цветом.

Вот MWE:

\documentclass[fontsize=12pt, paper=a4]{scrbook} 
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage[automark]{scrpage2} 
\usepackage{xcolor}

\newcommand{\chaptercolor}{red}

\clearscrheadfoot 
\pagestyle{scrheadings}
\ihead[\color{\chaptercolor}\leftmark]{\color{\chaptercolor}\leftmark} 
\ohead[\color{\chaptercolor}\rightmark]{\color{\chaptercolor}\rightmark}
\cfoot[\color{\chaptercolor}\pagemark]{\color{\chaptercolor}\pagemark}

\begin{document} 

\renewcommand{\chaptercolor}{blue}
\chapter{Ch1}
\Blindtext

\renewcommand{\chaptercolor}{green}
\chapter{Ch2}
\Blindtext

\end{document}

Как вы видите, на странице 2 заголовок уже зеленый, хотя эта страница все еще относится к главе 1, которая должна быть синей.

Я также пробовал использовать две разные переменные ( headercolorи chaptercolor), где я использовал \headercolorв *headоператорах и использовал titlesec's \titelformatдля назначения только chaptercolorтогда headercolor, когда задано само название главы. К сожалению, это тоже не сработало.

Обновлять:Я ищу решение для преамбулы. MWE слишком упрощает мой текущий сценарий, и поскольку цвет также используется в самом названии главы, важно, чтобы цвет главы был определен до ее начала. Я хотел бы сохранить этот тип «интерфейса» максимально стабильным, чтобы авторам не пришлось возиться с деталями.

Любые советы о том, как можно лениво задать цвет, чтобы изменение цвета в заголовках происходило только на самой первой странице новой главы, будут высоко оценены. Спасибо!

решение1

Определите новую команду, которая выполняет \cleardoublepageи изменяет цвет:

\newcommand{\changechaptercolor}[1]{%
  \cleardoublepage%
  \renewcommand\chaptercolor{#1}%
}

Тогда вы можете использовать

\documentclass[fontsize=12pt]{scrbook} 
\usepackage[ngerman]{babel}
\usepackage{blindtext}

\usepackage{xcolor}
\newcommand\chaptercolor{red}
\newcommand{\changechaptercolor}[1]{%
  \cleardoublepage%
  \renewcommand\chaptercolor{#1}%
}

\usepackage[automark]{scrpage2}% or scrlayer-scrpage
\clearscrheadfoot 
\pagestyle{scrheadings}
\addtokomafont{pageheadfoot}{\color{\chaptercolor}}
\addtokomafont{pagenumber}{\color{\chaptercolor}}
\ihead[\leftmark]{\leftmark} 
\ohead[\rightmark]{\rightmark}
\cfoot[\pagemark]{\pagemark}

\begin{document} 
\changechaptercolor{blue}
\chapter{Ch1}
\Blindtext

\changechaptercolor{green}
\chapter{Ch2}
\Blindtext
\end{document}

введите описание изображения здесь

решение2

Как упоминалось в комментариях, достаточно разместить изменение цвета (выполненное через \chaptercolor) после вызова chapter команды.

\documentclass{scrbook} 
\usepackage{blindtext}
\usepackage[automark]{scrlayer-scrpage}
\usepackage{xcolor}

\clearscrheadfoot 
\ihead[\leftmark]{\leftmark} 
\ohead[\rightmark]{\rightmark}
\cfoot[\pagemark]{\pagemark}
%Now adding color to all elements in the pagehead
%This is much easier to maintain
\addtokomafont{pagehead}{\color{\chaptercolor}}

\begin{document} 

\chapter{Mark Twain}
\newcommand{\chaptercolor}{blue}
\Blindtext

\chapter{Ambrose Bierce}
\renewcommand{\chaptercolor}{green}
\Blindtext

\end{document}

Но я бы предпочел видеть обычный черный текст на мягком цветном фоне. Для одностороннего документа вы можете определить что-то вроде этого

\DeclareLayer[clone=plain.scrheadings.head.oneside,
    contents={%
        \color{\chaptercolor}%
        \rule[-\dp\strutbox]%
        {\paperwidth}{\headheight}%
    }%
]{plain.scrheadings.head.oneside.background}
\DeclareLayer[clone=scrheadings.head.oneside,
    contents={%
        \color{\chaptercolor}%
        \rule[-\dp\strutbox]%
        {\paperwidth}{\headheight}%
    }%
]{scrheadings.head.oneside.background}

В результате получаем следующий результат:

введите описание изображения здесь

Еще одна вещь, на которую стоит обратить внимание, дает этот вывод

введите описание изображения здесь

Этого можно добиться с помощью следующего кода.

\documentclass{scrbook} 
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage[automark]{scrlayer-scrpage}
\usepackage{xcolor}


\clearscrheadfoot 
\ihead[\leftmark]{\leftmark} 
\ohead[\rightmark]{\rightmark}
\cfoot[\pagemark]{\pagemark}


%Defining the Layer
\makeatletter
\newlength{\topheight}
\setlength{\topheight}{\sls@topmargin}
\addtolength{\topheight}{\headheight}
\DeclareLayer[
    background,
    contents={%
        \color{\chaptercolor}%
        \rule{\paperwidth}{\topheight}%
    }%
]{scrheadings.head.background}
\makeatother

%Adding the Layer to the pagestyles
\AddLayersAtBeginOfPageStyle{scrheadings}{%
    scrheadings.head.background,%
}
\AddLayersAtBeginOfPageStyle{plain.scrheadings}{%
scrheadings.head.background}

\usepackage{etoolbox}
\newcommand{\basecolor}{%
    \ifcase\arabic{chapter}\or blue\or orange\or green\or red\fi%
}
\newcommand{\chaptercolor}{\basecolor!20!white}
\begin{document} 

\chapter{Mark Twain}
\Blindtext
\Blindtext
\chapter{Walt Whitman}
\Blindtext
\Blindtext
\Blindtext
\chapter{F. Scott Fitzgerald}
\Blindtext
\Blindtext
\chapter{Ambrose Bierce}
\Blindtext
\Blindtext
\end{document}

Вы можете сделать его еще более нарядным, изменив цвет названия главы, добавив

\newcommand{\chaptertitlecolor}{\basecolor!70!white}
\addtokomafont{chapter}{\color{\chaptertitlecolor}}

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

введите описание изображения здесь

Можно даже пойти дальше и напечатать заголовок более темным оттенком базового цвета, что может выглядеть примерно так:

введите описание изображения здесь

Пожалуйста, помните

Цвета могут сильно отвлекать и мешать чтению. Печать цветных страниц также довольно дорога.

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