更改 LOF/LOT 链接需要更新什么?

更改 LOF/LOT 链接需要更新什么?

考虑下面的 MWE。我使用 TIKZ 自定义来获得漂亮的链接下划线。(使用renewcommandref,我将其替换为这个 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}

相关内容