目录中的章节标题格式

目录中的章节标题格式

我搜索了整个网络但没有找到如何重新定义章节标题格式的方法,以便将其传输到目录中同一章节的显示方式。

我想定义一个新环境来改变文本的颜色以及章节标题,如下面的最小示例所示:

\documentclass{article}
\usepackage{xcolor,titlesec}

\newcommand{\mystyle}{}
\titleformat{\section}{\normalfont\Large\bfseries\mystyle}{\thesection}{1em}{}
\newenvironment{myenv}
    {\renewcommand{\mystyle}{\color{red}} \mystyle}
    {\renewcommand{\mystyle}{}}

\begin{document}
\tableofcontents

\section{One}
Section one.

\begin{myenv}
\section{Two}
Section two.
\end{myenv}

\section{Three}
Section three.
\end{document}

此代码给出了以下结果,它仅设置了文本中该部分的颜色。

我得到了什么

但是,我想要实现的是,无需手动修改每个部分,也无需定义新的部分命令,而是让特定的部分名称在目录中也显示相同的颜色,如下所示。

我想要得到什么

编辑1:这个帖子有点相关,但它只有在整个文档中改变章节标题的样式时才有效,因此它不能解决我的问题。

编辑 2:非常感谢您的快速回答!不过,我认为我找到了最适合我的方法,如下面我自己的回答中所述,灵感来自这个帖子

答案1

这是一个解决方案。如果需要的话,我会尽力解释。

\documentclass{article}
\usepackage{xcolor}

\newenvironment{myenv}%
   {\color{red}%
   \addtocontents{toc}{\protect\begin{mytocenv}}}%
   {\addtocontents{toc}{\protect\end{mytocenv}}}

\makeatletter 
\let\mtl@section\l@section
\newenvironment{mytocenv}%
   {\renewcommand*\l@section[2]{\mtl@section{{\color{red}##1}}{##2}}}%
   {}
\makeatother
\begin{document}
\tableofcontents

\section{One}
Section one.

\begin{myenv}
\section{Two}
Section two.
\end{myenv}

\section{Three}
Section three.
\end{document}

更新我没有关注小节等等(这个问题没有明确提出),所以我认为应该这样做

\makeatletter 
\let\mtl@section\l@section
\let\mt@dottedtocline\@dottedtocline
\newenvironment{mytocenv}%
   {\renewcommand*\l@section[2]{\mtl@section{{\color{red}##1}}{##2}}%
   \renewcommand*\@dottedtocline[5]{\mt@dottedtocline{##1}{##2}{##3}{{\color{red}##4}}{##5}}}%
   {}
\makeatother

在此处输入图片描述

答案2

您还可以定义一个命令而不是环境;如果您有想要着色的连续部分,那么在我看来这会更容易:

\documentclass{article}
\usepackage{xcolor,titlesec,titletoc}

\newcommand{\mystyle}[1][black]{%
  \titleformat
    {\section}%
    {\normalfont\Large\bfseries\color{#1}}%
    {\thesection}%
    {1em}{}%
%
  \titlecontents
    {section}[0em]%
    {\addvspace{0.3pc}\sffamily\bfseries\filright\color{#1}}%
    {}{\hspace*{0em}}%
    {\titlerule*[0.7pc]{.}\bfseries\contentspage}%
}

\mystyle

\begin{document}
\tableofcontents

\section{One}
Section one.

\mystyle[red]
\section{Two}
Section two.

\section{Three}
Section three.

\mystyle
\section{Four}
Section four.

\end{document}

在此处输入图片描述

答案3

事实上,我认为我找到了一种我最喜欢的方法,因为代码最容易修改(增加了 2 行)和理解(纯 LaTeX)。我读到这个想法时这篇文章是关于不同作者用不同颜色撰写的文本

我还没有发现这样做有什么缺点,除了你必须假设文档的其余部分是黑色,如果我理解正确的话,@touhami 和 @ArashEsbati 的答案也是如此。理想情况下,我不想做这个假设,但我不知道如何更普遍地实现这一点。

还可以轻松地用单行添加子部分等,只需添加以下内容:

\titleformat\subsection}{\normalfont\large\bfseries\ignorestyle}{\thesubsection}{1em}{}
\titleformat\subsubsection}{\normalfont\normalsizees\ignorestyle}{\thesubsubsection}{1em}{}

这是我的最小代码:

\documentclass{article}
\usepackage{xcolor,titlesec}

\newcommand{\mystyle}{}
\titleformat{\section}{\normalfont\Large\bfseries\mystyle}{\thesection}{1em}{}
\newenvironment{myenv}
    {\renewcommand{\mystyle}{\color{red}} 
    \addtocontents{toc}{\mystyle}
    \mystyle}
    {\renewcommand{\mystyle}{\color{black}}
    \addtocontents{toc}{\mystyle}}

\begin{document}
\tableofcontents

\section{One}
Section one.

\begin{myenv}
\section{Two}
Section two.
\end{myenv}

\section{Three}
Section three.
\end{document}

结果如下:

在此处输入图片描述

相关内容