我搜索了整个网络但没有找到如何重新定义章节标题格式的方法,以便将其传输到目录中同一章节的显示方式。
我想定义一个新环境来改变文本的颜色以及章节标题,如下面的最小示例所示:
\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}
结果如下: