如何为目录中的章节编号添加颜色?

如何为目录中的章节编号添加颜色?

在以下 MWE 中,我如何仅为目录中的章节编号着色?

\documentclass[a4paper]{book}
\usepackage{color}

\makeatletter
\renewcommand*\l@section{\@dottedtocline{1}{0em}{2.3em}}  
\makeatother

\begin{document}
\tableofcontents

\chapter{Test one}
\section{Introduction}
\section{Foo bar}

‎\end{document}‎  

我喜欢这样做而不使用诸如 之类的附加包tocloft

答案1

\csname the#1\endcsname没有包,只是重新定义或改变写入 ToC 的方式,通过重新定义\@sect

\documentclass[a4paper]{book}
\usepackage{color}

\makeatletter
\renewcommand*\l@section{\@dottedtocline{1}{0em}{2.3em}}  

\newcommand{\sectionnumbercolor}{blue}

\def\@sect#1#2#3#4#5#6[#7]#8{%
  \ifnum #2>\c@secnumdepth
    \let\@svsec\@empty
  \else
    \refstepcounter{#1}%
    \protected@edef\@svsec{\@seccntformat{#1}\relax}%
  \fi
  \@tempskipa #5\relax
  \ifdim \@tempskipa>\z@
    \begingroup
      #6{%
        \@hangfrom{\hskip #3\relax\@svsec}%
          \interlinepenalty \@M #8\@@par}%
    \endgroup
    \csname #1mark\endcsname{#7}%
    \addcontentsline{toc}{#1}{%
      \ifnum #2>\c@secnumdepth \else
        \protect\numberline{\textcolor{\sectionnumbercolor}{\csname the#1\endcsname}}%
      \fi
      #7}%
  \else
    \def\@svsechd{%
      #6{\hskip #3\relax
      \@svsec #8}%
      \csname #1mark\endcsname{#7}%
      \addcontentsline{toc}{#1}{%
        \ifnum #2>\c@secnumdepth \else
          \protect\numberline{\textcolor{\sectionnumbercolor}{\csname the#1\endcsname}}%
        \fi
        #7}}%
  \fi
  \@xsect{#5}}

\makeatother

\begin{document}
\tableofcontents

\chapter{Test one}
\section{Introduction}
\section{Foo bar}

‎\end{document}‎  

在此处输入图片描述

答案2

下面介绍了一个补丁,它改变了\numberline通常写入 ToC 的宏。相反,它编写了一个特定于部分单元的宏,而该宏又可以根据您的需要进行定义:

在此处输入图片描述

\documentclass{book}
\usepackage{xcolor,etoolbox}

\makeatletter
\patchcmd{\@sect}{\numberline}{\csname #1numberline\endcsname}{}{}
\patchcmd{\@sect}{\numberline}{\csname #1numberline\endcsname}{}{}
\renewcommand*\l@section{\@dottedtocline{1}{0em}{2.3em}}
\makeatother

\colorlet{secnumcolor}{red}% For convenience

% Default definition of \numberline (left-aligned box of fixed-width \@tempdima)
% \def\numberline#1{\hb@xt@\@tempdima{#1\hfil}}

\newcommand{\sectionnumberline}[1]{\makebox[2.3em][l]{\color{secnumcolor}#1}}
%\newcommand{\subsectionnumberline}{\numberline}% Not needed here
%\newcommand{\subsubsectionnumberline}{\numberline}% Not needed here

\begin{document}
\tableofcontents

\chapter{Test one}
\section{Introduction}
\section{Foo bar}

‎\end{document}‎

我们执行两次修补程序\numberline>\csname #1numberline\endcsname以覆盖内部的两个实例\@sectregexpatch只需一条命令即可完成此操作全部替换

相关内容