
Я работаю над набором книги, в которой будут прекрасные иллюстрации для заголовков глав, а также полностраничные иллюстрации для каждой части (так, Часть 1 получит иллюстрацию, включающую текст «Часть 1» и т. д.). Мне удалось скрыть заголовок главы с помощью:
\newcommand{\mychapter}[1]{%
\begingroup
\let\@makechapterhead\@gobble % make \@makechapterhead do nothing
\chapter{#1}
\endgroup
}
(Это работает, но Кома жалуется на переопределение @makechapterhead. Пока меня это устраивает, но в идеале я хотел бы найти решение, которое не будет раздражать Кому.)
Однако я хотел бы сделать то же самое с \part, а также с \chapter, но у меня не получается.
Вот пример MWE, в котором оглавление и развороты страниц в самый раз, НО я не хочу, чтобы печаталась страница с надписью «Часть 1» или пустая страница напротив нее:
\documentclass[twoside,chapterprefix,headings=big]{scrbook}
\usepackage{blindtext}
\usepackage{mwe}
\makeatletter
\newcommand{\mychapter}[1]{%
\begingroup
\let\@makechapterhead\@gobble
\chapter{#1}
\endgroup
}
\makeatother
\begin{document}
\tableofcontents
\KOMAoptions{headings=openleft}
\part{It begins}
%beautiful artwork goes... around here somewhere?
\includegraphics[width=\textwidth]{example-image-golden}
\KOMAoptions{headings=openright}
\mychapter{a chapter}
\begin{figure}[t!]
\centering
%beautiful chapter head artwork goes here
\includegraphics[width=\textwidth]{example-image-a}
\end{figure}
\blindtext
\mychapter{another chapter}
\begin{figure}[t!]
\centering
%beautiful chapter head artwork goes here
\includegraphics[width=\textwidth]{example-image-b}
\end{figure}
\blindtext
\KOMAoptions{headings=openleft}
\part{The middle bit}
%beautiful artwork goes... around here somewhere?
\includegraphics[width=\textwidth]{example-image-golden}
\KOMAoptions{headings=openright}
\mychapter{yet another chapter}
\includegraphics[width=\textwidth]{example-image-c}
\blindtext
\end{document}
(Мы предполагаем, что «золотое» изображение — это полностраничная иллюстрация, которая будет использоваться вместо LaTeX, выводящего «Часть N: Заголовок».)
Я хочу, чтобы страница с "Часть N: Название" и пустая страница напротив нее были скрыты (не напечатаны). Документ должен идти прямо от оглавления к двухстраничному развороту с иллюстрацией части слева и главой, начинающейся справа.
Создание \newcommand, аналогичной \mychapter, похоже, ничего не делает и даже не записывает ничего интересного в журнал:
\makeatletter
\newcommand{\mypart}[1]{%
\begingroup
\let\@makeparthead\@gobble
\part{#1}
\endgroup
}
\makeatother
Пытаясь подделать частьопускаякоманду \part{It Begins}
и вместо этого допинг ToC с
\addcontentsline{toc}{part}{Part \thepart: It Begins}
приводит к отображению заголовка части в содержаниинижеглава 1, и без номера части, плюс я не вижу, как увеличить \thepart, чтобы последующие части были пронумерованы правильно. Попытка вручную увеличить его с помощью \stepcounter{\thepart}
выдает ошибку.
Если в руководстве Koma на английском об этом и говорится, то я, честно говоря, этого пропустил.
Спасибо всем!
решение1
Я не уверен, что понимаю, чего именно вы хотите. Но вместо того, чтобы возиться с внутренностями класса, я бы предложил определить команду, которая делает именно то, что вы хотите, и ничего больше. AFAIK, вы хотите:
- начать новую нечетную страницу (для глав) или новую четную страницу (для частей)
- шаг за прилавком
- необязательно добавьте запись оглавления и отметку для заголовков страниц
- распечатать изображение
Я использую необязательный аргумент для записи TOC и отметки. И я также определяю вариант звезды без увеличения числа и без записи TOC и отметки, аналогично \part*
и \chapter*
. Я использую обязательный аргумент для файла изображения:
\documentclass[chapterprefix,headings=big]{scrbook}
\usepackage{blindtext}
\usepackage{mwe}
\makeatletter
\NewDocumentCommand\ArtPart{som}{%
\cleardoubleevenpage
\IfBooleanTF{#1}{% star version: no TOC entry or page header
}{%
\refstepcounter{part}%
\IfValueTF{#2}{% optional argument: Use for TOC entry and page header
\addparttocentry{\thepart.}{#2}%
\partmark{#2}%
}{}%
}%
\noindent\includegraphics[width=\textwidth]{#3}%
\par\nobreak
\@afterindentfalse% don't indent first paragraph after the heading
\@afterheading% don't allow page break here etc.
}
\NewDocumentCommand\ArtChapter{som}{%
\cleardoubleoddpage
\IfBooleanTF{#1}{% star version: no TOC entry or page header
}{%
\refstepcounter{chapter}%
\IfValueTF{#2}{% optional argument: Use for TOC entry and page header
\addchaptertocentry{\thechapter}{#2}%
\chaptermark{#2}%
}{}%
}%
\noindent\includegraphics[width=\textwidth]{#3}%
\par\nobreak
\@afterindentfalse% don't indent first paragraph after the heading
\@afterheading% don't allow page break here etc.
}
\makeatother
\begin{document}
\tableofcontents
\ArtPart[It begins]{example-image-golden}
\ArtChapter[a chapter]{example-image-a}
\blindtext
\ArtChapter[another chapter]{example-image-b}
\blindtext
\ArtPart[The middle bit]{example-image-golden}
\ArtChapter[yet another chapter]{example-image-c}
\blindtext
\end{document}
Обратите внимание, что \thepart
это не счетчик, а вывод счетчика. Счетчик будет part
и, следовательно, для управления счетчиком вам придется использовать \stepcounter{part}
, \refstepcounter{part}
, \addtocounter{part}{…}
, и \setcounter{part}{…}
, но не \stepcounter{\thepart}
. Обратите внимание, что в KOMA-Script нет предопределенного \@makeparthead
.
Для получения более подробной информации \NewDocumentCommand
см.«LaTeX для авторов — текущая версия». Более подробную информацию об используемых командах KOMA-Script см. в руководстве KOMA-Script.
Если вы действительно хотите использовать \part
и , \chapter
вам IMHO следует переопределить \chapterlineswithprefixformat
и \partlineswithprefixformat
вместо внутренних команд:
\documentclass[chapterprefix,headings=big]{scrbook}
\usepackage{blindtext}
\usepackage{mwe}
\newcommand\mypart[2]{%
\begingroup
\KOMAoption{open}{left}%
\renewcommand*{\partlineswithprefixformat}[3]{%
\includegraphics[width=\textwidth]{#2}% this is the second argument of
% \mypart not of \partlineswithprefixformat
}%
\renewcommand*{\partheademptypage}{}% don't add an empty page after \part
\part[#1]{#2}%
\endgroup
}
\newcommand\mychapter[2]{%
\KOMAoption{open}{right}%
\DeclareCommandCopy\ChapterLinesWithPrefixFormat\chapterlineswithprefixformat
\renewcommand*{\chapterlineswithprefixformat}[3]{%
\includegraphics[width=\textwidth]{#2}% this is the second argument of
% \mychapter not of \chapterlineswithprefixformat
}%
\chapter[#1]{#2}%
\DeclareCommandCopy\chapterlineswithprefixformat\ChapterLinesWithPrefixFormat
}
\begin{document}
\tableofcontents
\mypart{It begins}{example-image-golden}
\mychapter{a chapter}{example-image-a}
\blindtext
\mychapter{another chapter}{example-image-b}
\blindtext
\mypart{The middle bit}{example-image-golden}
\mychapter{yet another chapter}{example-image-c}
\blindtext
\end{document}
При этом вы по-прежнему можете использовать \RedeclareSectionCommand
, например, для изменения вертикального расстояния до и после заголовка = до и после изображения.
Как вы можете видеть, мне не понадобились никакие внутренние команды для этого второго предложения, а только команды, которые описаны в руководстве KOMA-Script для использования обычными или продвинутыми пользователями или которые описаны в«LaTeX для авторов — текущая версия».
Примечание: Я не использовал \begingroup…\endgroup
in \mychapter
, потому что это также нарушило бы возможность добавления \label
after \mychapter
и также нарушило бы afterindent=false
функцию \RedeclareSectionCommand
. Вместо этого я сохранил значение \chapterlineswithprefixformat
before \chapter
и восстановил его after \chapter
.
Для первого предложения мне нужны были только \@afterindentfalse
и \@afterheading
из ядра LaTeX. Это обычные команды для авторов классов/пакетов, но не внутренние команды KOMA-Script.