格式化目录中的单个条目

格式化目录中的单个条目

如何格式化目录中的单个条目?

例如,如何添加一些水平空间来缩进某些特定行,包括章节编号?

附言:我知道我可以编辑该toc文件但是任何时候这样做都很无聊。

答案1

快速定义一个新包以保持前言简洁。现在,命令\emphchapter带有一个强制参数,如果需要,还可以带有目录的可选参数。还有一个带星号的变体,用于设置一个未编号的章节,并缩进目录。加载包后,您可以使用\setkomafont{emphfont}或格式化目录条目。可以使用通常的to lengthaddtokomafont{emphfont}来更改缩进。setlengthemphindent

在宏中修补参数可能会很麻烦,您可以使用 packageetoolbox和 package regexpatch。示例可以在以下位置找到修补宏内的参数

使用将颜色设置为蓝色addtokomafont会产生如下效果:

響鳴

\begin{filecontents}{emphchapter.sty}
\ProvidesPackage{emphchapter}[2014/10/29 TeX.SX demo package]
\RequirePackage{regexpatch}
\tracingxpatches
\PassOptionsToPackage{x11names}{xcolor}
\RequirePackage{xcolor}
\RequirePackage{scrkbase}
\RequirePackage{xparse}
\newlength{\emphindent}
\newlength{\starredemphindent}
\setlength{\emphindent}{1cm}
\let\starredemphindent\emphindent
\newkomafont{emphfont}{\normalfont\scshape}


\DeclareDocumentCommand{\numemphfontswitch}{}{\protect\usekomafont{emphfont}\protect\hspace{\emphindent}}
\DeclareDocumentCommand{\starredemphfontswitch}{}{\protect\usekomafont{emphfont}\hspace{\starredemphindent}}

\DeclareDocumentCommand{\patchchapter}{}{
\makeatletter
\xpatchcmd{\@chapter}{%
{\protect\numberline{\thechapter}##1}%
}{%
{\numemphfontswitch\protect\numberline{\thechapter}##1}%
}{}{}
\makeatother
}

\NewDocumentCommand{\emphchapter}{ s o m }{
\IfBooleanTF{#1}{
\begingroup
\typeout{starred emphchapter}
\chapter*{#3}
\IfNoValueTF{#2}{
    \addcontentsline{toc}{chapter}{\starredemphfontswitch#3}
}{
    \addcontentsline{toc}{chapter}{\starredemphfontswitch#2}
}
\endgroup
}
{
\typeout{numbered emphchapter}
\begingroup
\patchchapter
\IfNoValueTF{#2}{
\chapter{#3}
}{
\chapter[#2]{#3}
}
\endgroup
}
}

\endinput
\end{filecontents}



\documentclass{report}
\usepackage{emphchapter}
\usepackage{blindtext}
\addtokomafont{emphfont}{\color{blue}}
\begin{document}
\tableofcontents
\chapter{tester}
\blindtext
\emphchapter{emphchapter}
\emphchapter[optional numbered emph]{emphchapter}
\blindtext
\chapter{behind emphchapter}
\blindtext
\chapter{before starred}
\blindtext
\emphchapter*{starred emphchapter}
\blindtext
\emphchapter*[optional starred entry]{starred emphchapter with optional}
\blindtext
\chapter{tester}
\end{document}

相关内容