考虑下面的 MWE。我使用 TIKZ 自定义来获得漂亮的链接下划线。(使用renewcommand
)ref
,我将其替换为这个 MWE \textcolor{red}
(因此文本颜色不是目标)
如你看到的:
- 目录现在有一个红色的页码;
- 表格列表(LOT)有不是红色的页码;
- 章节中的链接是自定义的(红色)。
现在的问题是:我需要重新定义什么才能在 LOF 中获得红色页码(并且 \textcolor 在这里是一个代理,所以我需要能够替换我的 TIKZ 替代品)?
请参阅此 MWE:
测试文件
\documentclass[10pt,fleqn,final]{extbook}
\usepackage{etoc}
\usepackage{xcolor}
\usepackage{titlesec}
\usepackage[hidelinks,linktoc=page]{hyperref}
\etocsetstyle{chapter}
{}
{ \normalsize\addvspace{.5ex}\leavevmode}
{\llap{\etocnumber\hspace{0.75cm}}\etocname\hspace{10pt}\titlerule*[1pc]{.}\hspace{10pt}%
\makebox[-0cm][l]{\makebox[0pt]{\etocpage}}\par}
{}
\makeatother
\let\oldhyperlink=\hyperlink%
\renewcommand\hyperlink[2]{\textcolor{red}{\oldhyperlink{#1}{#2}}}%
\let\oldref=\ref
\AtBeginDocument{\renewcommand\ref[1]{\textcolor{red}{\oldref{#1}}}}
\urlstyle{same}
\begin{document}
\tableofcontents
\listoftables
\chapter{Test}
\hyperlink{http://tex.stackexchange.com}{Customized link}
\begin{table}[h]
\begin{tabular}{ c }
\hline
cell1 \\
\hline
\end{tabular}
\caption{This link is not customized in LOT}
\end{table}
\end{document}
答案1
我认为没有好的方法来改变 hyperref 命令。hyperref 在这种情况下不使用带参数的命令。最简单的方法可能是重新定义\@dottedtocline
,例如
\def\@dottedtocline#1#2#3#4#5{%
\ifnum #1>\c@tocdepth \else
\vskip \z@ \@plus.2\p@
{\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
\parindent #2\relax\@afterindenttrue
\interlinepenalty\@M
\leavevmode
\@tempdima #3\relax
\advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
\tikzul[dotted]{#4}\nobreak
\leaders\hbox{$\m@th
\mkern \@dotsep mu\hbox{.}\mkern \@dotsep
mu$}\hfill
\nobreak
\hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
\par}%
\fi}
编辑
根据要求,使用 etoc 的完整示例,它改变了很多。etoc
没有挂接到列表,因此必须再次更改\@dottedtocline
:绿色和红色是 tikz 代码的占位符:
\documentclass[10pt,fleqn,final]{extbook}
\usepackage{etoc}
\usepackage{xcolor}
\usepackage{titlesec}
\usepackage[hidelinks,linktoc=page]{hyperref}
\etocsetstyle{chapter}
{}
{ \normalsize\addvspace{.5ex}\leavevmode}
{\llap{\etocnumber\hspace{0.75cm}}\etocname\hspace{10pt}\titlerule*[1pc]{.}\hspace{10pt}%
\makebox[-0cm][l]{\makebox[0pt]{\etocpage}}\par}
{}
\makeatletter
\def\@dottedtocline#1#2#3#4#5{%
\ifnum #1>\c@tocdepth \else
\vskip \z@ \@plus.2\p@
{\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
\parindent #2\relax\@afterindenttrue
\interlinepenalty\@M
\leavevmode
\@tempdima #3\relax
\advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
\textcolor{green}{#4}\nobreak
\leaders\hbox{$\m@th
\mkern \@dotsep mu\hbox{.}\mkern \@dotsep
mu$}\hfill
\nobreak
\hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor \textcolor{red}{#5}}%
\par}%
\fi}
\makeatother
\let\oldhyperlink=\hyperlink%
\renewcommand\hyperlink[2]{\textcolor{red}{\oldhyperlink{#1}{#2}}}%
\let\oldref=\ref
\AtBeginDocument{\renewcommand\ref[1]{\textcolor{red}{\oldref{#1}}}}
\urlstyle{same}
\begin{document}
\tableofcontents
\listoftables
\chapter{Test}
\hyperlink{http://tex.stackexchange.com}{Customized link}
\begin{table}[h]
\begin{tabular}{ c }
\hline
cell1 \\
\hline
\end{tabular}
\caption{This link is not customized in LOT}
\end{table}
\end{document}