介绍
我想创建一个包含所有内容的链接的目录文本 和 页码但文本和页码的颜色不同,应该使用 pdflatex 编译。
完工
我有下面的(最小)工作代码。
\documentclass[11pt, letterpaper, openany, oneside]{book}
\usepackage{sectsty}
\usepackage{titlesec}
\usepackage{color}
\usepackage[bookmarks,hypertexnames=false,debug,linktocpage=true,hidelinks]{hyperref}
\hypersetup{
colorlinks,
linktoc=all,
linkcolor={blue},
citecolor={blue},
urlcolor={blue}
}
\begin{document}
\titleformat{\chapter}{\color{red}\normalfont\Huge\bfseries}{\thechapter}{1em}{}[]
\sectionfont{\color{red}}
\subsectionfont{\color{red}}
\tableofcontents
\chapter{Chapter One}
\section{A Section}
Text goes here.
\section{Another Section}
Text goes here.
\subsection{A Sub Section}
Text goes here.
\section{One more section Section}
Text goes here.
\chapter{Chapter One}
Text goes here.
\section{A Section}
Text goes here.
\section{Another Section}
Text goes here.
\end{document}
这将为目录提供以下输出:
它还给出了章节的以下输出
期望的结果
我想要一个目录在哪里全部文本(章节标题、节标题、小节标题、页码等)是超链接到相关部分,但有定制颜色用于目录中的章节标题、小节标题和页码。
还应使用 pdflatex 编译(不是 xelatex、lualatex 等)。
以下是所需输出的摘要:
答案1
在这里,我修补\contentsline
命令以根据目录类型本地更改目录条目的标题部分(与页码部分相比)使用的链接颜色。
在以下示例中,
- 章节目录条目的标题部分更改为
red
,\def\toccolor@chapter{red}
并且 - 章节和小节目录条目的标题部分分别更改
black
为\def\toccolor@section{black}
和\def\toccolor@subsection{black}
。
要将其应用于其他类型的目录条目,
- 查找相应的辅助文件。例如,
\listoftables
使用 aux 文件.lot
。 - 查找此列表使用的目录条目的类型。例如,在
.lot
文件中,您可以看到类似 的行\contentsline {table}{\numberline {1}{\ignorespaces Title}}{1}%
,然后table
( 的第一个参数\contentsline
)是类型名称。 - 提供相应的
\toccolor@<type>
命令。在上例中,使用\def\toccolor@table{<color>}
,目录条目的标题部分的颜色table
将以 排版<color>
。
\documentclass[11pt, letterpaper, openany, oneside]{book}
\usepackage{sectsty}
\usepackage{titlesec}
\usepackage{color}
\usepackage{xpatch}
\usepackage[bookmarks,hypertexnames=false,debug,linktocpage=true,hidelinks]{hyperref}
\hypersetup{
colorlinks,
linktoc=all,
linkcolor={blue},
citecolor={blue},
urlcolor={blue}
}
\titleformat{\chapter}
{\color{red}\normalfont\Huge\bfseries}
{\thechapter}{1em}
{}[]
\sectionfont{\color{red}}
\subsectionfont{\color{red}}
\makeatletter
% redefine \contentsline, locally change linkcolor
\IfPackageAtLeastTF{hyperref}{2022-11-13}{\@tempswatrue}{\@tempswafalse}
\if@tempswa
% see https://github.com/latex3/hyperref/commit/7bf9ab4c99c434c30d0d00771326ae3d487fb092
\xpatchcmd\contentsline
{%
\csname l@#1\endcsname{%
\Hy@toclinkstart{#2}\Hy@toclinkend
}{%
\Hy@toclinkstart{#3}\Hy@toclinkend
}%
}
{%
\csname l@#1\endcsname{%
\begingroup
\def\@linkcolor{black}%
\Hy@toclinkstart{#2}\Hy@toclinkend
\endgroup
}{%
\Hy@toclinkstart{#3}\Hy@toclinkend
}%
}
{}{\PatchFailedII}
\else
\xpatchcmd\contentsline
{%
\csname l@#1\endcsname{%
\hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend
}{%
\hyper@linkstart{link}{\Hy@tocdestname}{#3}\hyper@linkend
}%
}
{%
\csname l@#1\endcsname{%
\begingroup
\Hy@toccolor{#1}%
\hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend
\endgroup
}{%
\hyper@linkstart{link}{\Hy@tocdestname}{#3}\hyper@linkend
}%
}
{}{\PatchFailedI}
\fi
% choose toc linkcolor, #1 is first arg of \contetnsline,
% eg "chapter", "section"
\def\Hy@toccolor#1{%
\ifcsname toccolor@#1\endcsname
\edef\@linkcolor{\csname toccolor@#1\endcsname}%
\fi
}
\def\toccolor@chapter{red}
\def\toccolor@section{black}
\def\toccolor@subsection{black}
\makeatother
\begin{document}
\tableofcontents
\chapter{Chapter One}
\section{A Section}
Text goes here.
\section{Another Section}
Text goes here.
\subsection{A Sub Section}
Text goes here.
\section{One more section Section}
Text goes here.
\chapter{Chapter One}
Text goes here.
\section{A Section}
Text goes here.
\section{Another Section}
Text goes here.
\end{document}