我想格式化只有第一个使用 KOMA 脚本以不同的方式显示文档中的章节标题。我想更改字体和章节前缀的存在。由于 KOMA 显然不提供任何恢复字体或选项的选项,这答案建议将相应的\chapter
命令封装到一个组中。如果我想更改第二章节标题。
\documentclass{scrreprt}
\usepackage{blindtext}
\KOMAoption{parskip}{false}
\begin{document}
\chapter{This}
\blindtext
\section{Foo}
\blindtext
\section{Bar}
\blindtext
\begingroup
\KOMAoption{chapterprefix}{true}
\setkomafont{chapter}{\centering\large\rmfamily}
\chapter{That}
\endgroup
\blindtext
\section{Foo}
\blindtext
\section{Bar}
\blindtext
\end{document}
但是,如果我实际改变了第一的章节标题,然后事情就出错了。
\documentclass{scrreprt}
\usepackage{blindtext}
\KOMAoption{parskip}{false}
\begin{document}
\begingroup
\KOMAoption{chapterprefix}{true}
\setkomafont{chapter}{\centering\large\rmfamily}
\chapter{This}
\endgroup
\blindtext
\section{Foo}
\blindtext
\section{Bar}
\blindtext
\chapter{That}
\blindtext
\section{Foo}
\blindtext
\section{Bar}
\blindtext
\end{document}
当我编译后一个文档时,第一段的间距被破坏了两个方面。首先,第一行是缩进的,而这不应该发生。其次,第一节的垂直间距比它应该的要小得多。
看起来是\chapter
在第一次出现在文档中时设置了一些东西,但这些东西在 中丢失了\endgroup
。不幸的是,我一点头绪都没有什么可能会成功。我很乐意听取关于如何进行的建议。
答案1
您可以修补\chapterformat
并\chapterlineswithprefixformat
:
\documentclass{scrreprt}
%\providecommand*\Ifstr{\ifstr}% needed up to and including KOMA-Script version 3.27, see https://komascript.de/faq_deprecatedif
\usepackage{blindtext}
%\KOMAoption{parskip}{false}% default
\newif\ifspecialchapter
\newcommand\specialchapter{%
\specialchaptertrue%
\KOMAoption{chapterprefix}{true}%
}
\newcommand\defaultchapter{%
\specialchapterfalse%
\KOMAoption{chapterprefix}{false}%
}
\usepackage{xpatch}
\xpretocmd\chapterlineswithprefixformat
{\Ifstr{#1}{chapter}{\ifspecialchapter\large\rmfamily\fi}{}}%
{}{\PatchFailedI}
\xpretocmd\chapterformat
{\ifspecialchapter\centering\large\rmfamily\fi}
{}{\PatchFailedII}
\begin{document}
\specialchapter
\chapter{That}
\defaultchapter
\blindtext
\section{Foo}
\blindtext
\section{Bar}
\blindtext
\chapter{This}
\blindtext
\section{Foo}
\blindtext
\section{Bar}
\blindtext
\end{document}
结果:
或者你可能想要
然后使用
\documentclass{scrreprt}
%\providecommand*\Ifstr{\ifstr}% needed up to and including KOMA-Script version 3.27, see https://komascript.de/faq_deprecatedif
\usepackage{blindtext}
%\KOMAoption{parskip}{false}% default
\newif\ifspecialchapter
\newcommand\specialchapter{%
\specialchaptertrue%
\KOMAoption{chapterprefix}{true}%
}
\newcommand\defaultchapter{%
\specialchapterfalse%
\KOMAoption{chapterprefix}{false}%
}
\usepackage{xpatch}
\xpretocmd\chapterlineswithprefixformat
{\Ifstr{#1}{chapter}{\ifspecialchapter\centering\large\rmfamily\fi}{}}%
{}{\PatchFailedI}
\xpretocmd\chapterformat
{\ifspecialchapter\large\rmfamily\fi}
{}{\PatchFailedII}
\begin{document}
\specialchapter
\chapter{That}
\defaultchapter
\blindtext
\section{Foo}
\blindtext
\section{Bar}
\blindtext
\chapter{This}
\blindtext
\section{Foo}
\blindtext
\section{Bar}
\blindtext
\end{document}
补充说明:不要\centering
在 的参数中使用\setkomafont
。
您也可以使用内部命令\if@chapterprefix
。但请注意,内部命令将来可能会发生变化。
\documentclass{scrreprt}
%\providecommand*\Ifstr{\ifstr}% needed up to and including KOMA-Script version 3.27, see https://komascript.de/faq_deprecatedif
\usepackage{blindtext}
%\KOMAoption{parskip}{false}% default
\newif\ifspecialchapter
\newif\ifdefaultchapterprefix
\makeatletter
\newcommand\specialchapter{%
\specialchaptertrue%
\if@chapterprefix\defaultchapterprefixtrue\else\defaultchapterprefixfalse\fi%
\KOMAoption{chapterprefix}{true}%
}
\newcommand\defaultchapter{%
\ifspecialchapter%
\ifdefaultchapterprefix\@chapterprefixtrue\else\@chapterprefixfalse\fi%
\fi%
\specialchapterfalse%
}
\makeatother
\usepackage{xpatch}
\xpretocmd\chapterlineswithprefixformat
{\Ifstr{#1}{chapter}{\ifspecialchapter\centering\large\rmfamily\fi}{}}%
{}{\PatchFailedI}
\xpretocmd\chapterformat
{\ifspecialchapter\large\rmfamily\fi}
{}{\PatchFailedII}
\begin{document}
\specialchapter
\chapter{That}
\defaultchapter
\blindtext
\section{Foo}
\blindtext
\section{Bar}
\blindtext
\chapter{This}
\blindtext
\section{Foo}
\blindtext
\section{Bar}
\blindtext
\end{document}
结果与第二个示例相同。