所以我想弄清楚如何让所有链接都用虚线加下划线。我所能做的最好的就是这和这是:
\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
、\hyperref
和footnote
命令。它还添加了一个名为的新命令\secref
,该命令可用于引用部分,这样“Section”一词也会带下划线。
为了说明目的,我稍微改变了代码\formatlink
,以便每个链接都显示为红色框;结果是:
可能还有更多命令需要覆盖,但它可能会对您有所帮助。