记住一些信息并将其反映在目录中

记住一些信息并将其反映在目录中

我希望每次\section调用 a 时都存储一些信息(例如宏的值),以便在构建 ToC 时使用这些数据。例如,假设我定义一个宏\SomeInfo并用它来存储颜色的名称。文档如下:

\renewcommand{\SomeInfo}{blue!50!cyan}
\section{BLUE}
...

\renewcommand{\SomeInfo}{green!60!black}
\section{GREEN}
...

\renewcommand{\SomeInfo}{red}
\section{RED}
...

然后我希望每一个值\SomeInfo都能被记录在某个地方,并且用这些信息构建一个像这样的目录:

在此处输入图片描述

这可能吗?如果可以,如何实现?

下面是一个 MWE,我使用 包含了 ToC 设置titletoc,尝试使用它\SomeInfo。当然,这暂时不起作用,因为只有当前值可用,过去的值已被遗忘。

\documentclass{article}

\usepackage{xcolor}

\def\SomeInfo{black}

\usepackage{titletoc}
\titlecontents{section}
    [2em]
    {\bfseries\color{\SomeInfo}} % of course this won't work
    {\contentslabel{2em}}
    {\hspace*{-2em}}
    {\hfill\contentspage}

\begin{document}

\tableofcontents

%% Desired result, hard coded
% \noindent
% {\Large\bfseries Contents}\medskip\\
% {\color{blue!50!cyan}\bfseries 1~~\,BLUE\hfill 1}\medskip\\
% {\color{green!60!black}\bfseries 2~~\,GREEN\hfill 1}\medskip\\
% {\color{red}\bfseries 3~~\,RED\hfill 1}

\renewcommand{\SomeInfo}{blue!50!cyan}
\section{BLUE}
...

\renewcommand{\SomeInfo}{green!60!black}
\section{GREEN}
...

\renewcommand{\SomeInfo}{red}
\section{RED}
...

\end{document}

答案1

您必须将颜色的重新定义传递给文件toc,例如

\documentclass{article}

\usepackage{xcolor}
\colorlet{sectiontoccolor}{black}
\newcommand*{\setsectiontoccolor}[1]{%
    \addtocontents{toc}{\protect\colorlet{sectiontoccolor}{#1}}%
}

\usepackage{titletoc}
\titlecontents{section}%
    [2em]%
    {\bfseries\color{sectiontoccolor}}%
    {\contentslabel{2em}}%
    {\hspace*{-2em}}%
    {\hfill\contentspage}%

\begin{document}

\tableofcontents

\setsectiontoccolor{blue!50!cyan}
\section{BLUE}

\setsectiontoccolor{green!60!black}
\section{GREEN}

\setsectiontoccolor{red}
\section{RED}

\section{STILL RED}

\setsectiontoccolor{black}
\section{BLACK AGAIN}

\end{document}

在此处输入图片描述

答案2

快速而肮脏

\documentclass[12pt]{article}
\usepackage[a4paper]{geometry}
\usepackage{xcolor}
\newcommand{\nsect}[2]{\addtocontents{toc}{\color{#1}}%
\section{#2}%
\addtocontents{toc}{\color{black}}}
\begin{document}
\tableofcontents
\nsect{blue}{My first section}
\nsect{green}{My second}
\nsect{red}{Third}
\end{document} 

给出

在此处输入图片描述

相关内容