所有链接均用虚线加下划线

所有链接均用虚线加下划线

所以我想弄清楚如何让所有链接都用虚线加下划线。我所能做的最好的就是是:

\documentclass{article}
\usepackage{xcolor,soul,lipsum}
\usepackage[hidelinks]{hyperref}
\usepackage{tikz}
 \def\@pdfborder{0 0 1}% Overrides border definition set with colorlinks=true
  \def\@pdfborderstyle{/S/U/W 0}
\newcommand{\udot}[1]{%
\tikz[baseline=(todotted.base)]{
\node[inner sep=-1pt,outer sep=0pt] (todotted) {#1};
\draw[dotted] (todotted.south west) -- (todotted.south east); }%}%
\newcommand{\myhy}[2]{\udot{\hyperref[#1]{\color{black}\setulcolor{white}\ul{#2}}}}
\begin{document}
\section{To See}\label{tosee}
\vskip2cm
This is \myhy{tosee}{just to see} what it looks like\footnote{\lipsum[1]}. \lipsum[1-2]
\end{document}

问题是我想以这种方式格式化文档中的每个单个链接(包括脚注、网页等的链接)。有什么想法吗?

答案1

您应该做的是覆盖\ref、、\hyperref命令\footnote以及用于链接的任何其他命令。以下代码应该为您提供一个起点:

\documentclass{article}
\usepackage{lipsum}
\usepackage[hidelinks]{hyperref}
\usepackage{tikz}

\usetikzlibrary{calc}

\makeatletter
\newlength\link@width
\newsavebox\link@box

\newcommand{\formatlink}[1]{%
   % --- save the box to be displayed (so that e.g. footnote counters do not
   %     get incremented twice)
   \savebox{\link@box}{#1}%
   % --- calculate the width of the box for later use
   \settowidth\link@width{\usebox{\link@box}}%
   % --- draw the link
   \tikz[baseline=(todotted.base)]{
   \node[inner sep=-1pt,outer sep=0pt] (todotted) {\usebox{\link@box}};
   \draw[dotted, thick] 
      ($(todotted.base)-(.5\link@width,2pt)$) -- +(\link@width,0); 
   }%
}

\makeatother

\AtBeginDocument{%
   % --- replace \ref command
   \let\oldref=\ref
   \renewcommand\ref[1]{\formatlink{\oldref{#1}}}
   % --- replace hyperref command
   \let\oldhyperref=\hyperref
   \renewcommand\hyperref[2][]{\formatlink{\oldhyperref[#1]{#2}}}
   % --- replace footnote command
   \let\oldfootnote=\footnote
   \renewcommand\footnote[1]{\formatlink{\footnotemark}\footnotetext{#1}}
   % --- replace cite command
   \let\oldcite=\cite
   \renewcommand\cite[1]{\formatlink{\oldcite{#1}}}
   % --- introduce secref command   
   \newcommand\secref[1]{\hyperref[#1]{Section \oldref{#1}}}
}

\begin{document}

\section{To See}\label{tosee}
This is Section \ref{tosee}; or refer to it like \secref{tosee}.
This is \hyperref[tosee]{just to see} what it looks like\footnote{\lipsum[1]}. \lipsum[1-2]
How about this?\footnote{And a second footnote}
\end{document}

代码引入了一个新命令,\formatlink顾名思义,该命令用于格式化链接。其唯一参数是要用点加下划线的文本。的代码\formatlink与您在问题中写的代码大致相同,但为了外观更好而进行了细微的更改。

接下来,里面的代码\AtBeginDocument(在命令中执行\begin{document})将覆盖\ref\hyperreffootnote命令。它还添加了一个名为的新命令\secref,该命令可用于引用部分,这样“Section”一词也会带下划线。

为了说明目的,我稍微改变了代码\formatlink,以便每个链接都显示为红色框;结果是:

可能还有更多命令需要覆盖,但它可能会对您有所帮助。

相关内容