使用 tocloft 修改目录中章节号的格式

使用 tocloft 修改目录中章节号的格式

我正在使用 tocloft 包来更改目录的样式。我想将章节编号排版为罗马数字。但是,对于目录,我将使用该romanbars包对其进行排版。

此包提供了一个命令,它接受输入(罗马数字)并将其格式化为底线和顶线上的水平线,我觉得这很赏心悦目。该命令接受一个参数。但是,该tocloft命令仅提供使用非参数命令(如)更改(章节)编号格式的命令\bfseries

我的 MWE 是:

\documentclass{scrbook}

\renewcommand{\thechapter}{\Roman{chapter}}

\usepackage[usedvipsnames]{xcolor}
\usepackage{tocloft}
\usepackage{romanbar}

\renewcommand{\cftchappresnum}{\color{red}\Romanbar}

\usepackage{lipsum}

\begin{document}

\tableofcontents

\chapter{First Chapter}
\lipsum[2]

\chapter{Second Chapter}
\lipsum[2]

\chapter{Third Chapter}
\lipsum[2]

\end{document}

生成结果:

例子

如您所见,每个罗马数字的首字母都使用该命令正确格式化,而任何后续字母都使用普通字体格式化。

是否可以以\Romanbar某种方式包装命令,以便读取整个以下数字?或者以其他方式配置tocloft以实现所需的格式?

答案1

一个有点棘手的解决方案:

\documentclass{scrbook}

\renewcommand{\thechapter}{\Roman{chapter}}

\usepackage[usedvipsnames]{xcolor}
\usepackage{tocloft}
\usepackage{romanbar}

\newsavebox{\tocnr}
\renewcommand{\cftchappresnum}{\color{red}\begin{lrbox}{\tocnr}}
\renewcommand{\cftchapaftersnum}{\end{lrbox}\expandafter\Romanbar\expandafter{\usebox{\tocnr}}\relax}

\usepackage{lipsum}

\begin{document}

\tableofcontents

\chapter{First Chapter}
\lipsum[2]

\chapter{Second Chapter}
\lipsum[2]

\chapter{Third Chapter}
\lipsum[2]

\end{document}

在此处输入图片描述

答案2

您可以修补\addchaptertocentry

\documentclass{scrbook}

\renewcommand{\thechapter}{\Roman{chapter}}

\usepackage[usedvipsnames]{xcolor}
\usepackage{romanbar}
\RedeclareSectionCommand[
  tocentrynumberformat=\def\autodot{}\textcolor{red}
]{chapter}

\usepackage{xpatch}
\xpatchcmd{\addchaptertocentry}
  {\addtocentrydefault{chapter}{#1}{#2}}
  {\ifstr{#1}{}{\addtocentrydefault{chapter}{#1}{#2}}
    {\addtocentrydefault{chapter}{\protect\Romanbar{#1}}{#2}}%
  }{}{\PatchFailed}

\usepackage{lipsum}

\begin{document}
\tableofcontents

\chapter{First Chapter}
\lipsum[2]
\chapter{Second Chapter}
\lipsum[2]
\chapter{Third Chapter}
\lipsum[2]
\end{document}

在此处输入图片描述

请注意,我使用了 KOMA-Script 命令\RedeclareSectionCommand来更改目录中章节编号的颜色。tocloft不建议使用带有 KOMA-Script 类的包。但如果您确实想使用包,tocloft请将包xpatch和补丁添加\addchaptertocentry到您的 MWE。

相关内容