我希望每次\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}
给出