
Я набираю книгу в стиле протоколов, которая содержит статьи в хронологическом порядке. Поскольку статьи также категоризируются, каждой категории назначается цвет, и стили глав должны использовать этот цвет в качестве фонового цвета для некоторых причудливых глав. Эта часть работает, как и ожидалось, с 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}}
Оба, цветная полоса сверху и заголовок, имеют один и тот же базовый цвет. Но я решил выбрать более темный вариант для лучшей читаемости. Вывод выглядит так:
Можно даже пойти дальше и напечатать заголовок более темным оттенком базового цвета, что может выглядеть примерно так:
Пожалуйста, помните
Цвета могут сильно отвлекать и мешать чтению. Печать цветных страниц также довольно дорога.