Изменить формат номера главы в ToC с помощью tocloft

Изменить формат номера главы в ToC с помощью tocloft

Я использую пакет tocloft для изменения стиля моего ToC. Я хотел бы набрать номера глав римскими цифрами. Однако для ToC я бы набрал их с помощью пакета 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для изменения цвета номера главы в TOC. Использование package tocloftс классом KOMA-Script не рекомендуется. Но если вы действительно хотите использовать package, tocloftто добавьте package xpatchи патч \addchaptertocentryв свой MWE.

Связанный контент