我想将pdflatex
PDF 文档拆分成两部分。第二部分引用了第一部分,这些引用是超链接,我想删除它们,不改变视觉外观。因此,我希望链接有颜色、有边框、有相同的文本、字体……无论它们看起来如何 - 我只是不想让它们再处于活动/可点击状态。例如,该draft
选项使所有链接都显示为无色。
有没有一种快速的方法可以实现这一目标pdflatex
?
我曾尝试弄乱\pdfstartlink
和\pdfendlink
,但似乎只需将它们重新定义为{}
即可出现以下 pdf 参数\pdfstartlink
- 否则它可以正常工作。
我尝试过的 MWE:
\documentclass{revtex4-1}
\usepackage[colorlinks]{hyperref}
\hypersetup{allcolors=[RGB]{0,0,255}}
\makeatletter
\let\pdfendlink\relax
\let\pdfstartlink\relax
%\let\pdfstartlink\@gobble
%\let\pdfstartlink\@gobbletwo
%\let\pdfstartlink\@gobblethree
%\let\pdfstartlink\@gobblefour
%\def\pdfstartlink#1{}
%\def\pdfstartlink#1#2{}
%\def\pdfstartlink#1#2#3{}
\makeatother
\begin{document}
Reference to \ref{Test}.
\section{Test}
\label{Test}
\end{document}
\pdfstartlink
该问题似乎与如下使用方式有关:
\pdfstartlink attr{#1}goto name{#2}\relax
因此,我基本上需要\def
\pdfstartlink
接受直到第二个封闭}
(或\relax
)的论点,但我发现自己无法做到这一点。
这是一个更复杂的测试用例:
\documentclass{revtex4-1}
\usepackage{hyperref}
\makeatletter
\def\Hy@StartlinkName#1#2{}
\def\close@pdflink{%
\Hy@endcolorlink
\Hy@VerboseLinkStop
}
\makeatother
\begin{document}
\href{X}{Y} \href{X}{Y} \href{X}{Y} \href{X}{Y} \href{X}{Y} \href{X}{Y} \href{X}{Y} \href{X}{Y} \href{X}{Y} \href{X}{Y} \href{X}{Y}
\end{document}
答案1
这是一个稍微删节的版本,也允许开关(激活/停用补丁):
\documentclass{article}
\usepackage[colorlinks]{hyperref}
\hypersetup{allcolors=[RGB]{0,0,255}}
\usepackage{etoolbox}
\def\pdfnolink#1\relax{}% \pdfnolink gobbles everything up to the next \relax
\def\pdfendnolink{}% Just a marker for replacement purposes
\makeatletter
\newcommand{\DisableHyperlinks}{%
\patchcmd{\close@pdflink}{\pdfendlink}{\pdfendnolink}{}{}
\patchcmd{\Hy@StartlinkName}{\pdfstartlink}{\pdfnolink}{}{}% for references
\patchcmd{\hyper@linkurl}{\pdfstartlink}{\pdfnolink}{}{}% for \href{http://...}{...}
\patchcmd{\hyper@linkfile}{\pdfstartlink}{\pdfnolink}{}{}% for \href{XYZ...}{...}
}
\newcommand{\EnableHyperlinks}{%
\patchcmd{\close@pdflink}{\pdfendnolink}{\pdfendlink}{}{}
\patchcmd{\Hy@StartlinkName}{\pdfnolink}{\pdfstartlink}{}{}% for references
\patchcmd{\hyper@linkurl}{\pdfnolink}{\pdfstartlink}{}{}% for \href{http://...}{...}
\patchcmd{\hyper@linkfile}{\pdfnolink}{\pdfstartlink}{}{}% for \href{XYZ...}{...}
}
\makeatother
\setlength{\parindent}{0pt}% Just for this example
\begin{document}
\section{Many hyperlinks}\label{Hyperlinks}
Reference to Section~\ref{Hyperlinks}.
\href{http://www.google.com}{Google}
\hrulefill Hyperlinks disabled\hrulefill
% Disable all links
\DisableHyperlinks
Reference to Section~\ref{Hyperlinks}.
\href{http://www.google.com}{Google}
\hrulefill Hyperlinks enabled\hrulefill
%Enable all links
\EnableHyperlinks
Reference to Section~\ref{Hyperlinks}.
\href{http://www.google.com}{Google}
\end{document}
答案2
据我了解,“普通”链接的相关命令似乎是,\Hy@StartlinkName
并且,驱动程序也是。\close@pdflink
hpdftex.def
pdftex
hyperref
删除\pdfstartlink
并\pdfendlink
保留格式,但禁用可点击性。
注意:我并不认为此方法对所有出现的链接都适用,尤其是书签中的链接不是已禁用!
\documentclass{revtex4-1}
\usepackage{mathtools}
\usepackage[colorlinks]{hyperref}
\usepackage{cleveref}
\hypersetup{allcolors=[RGB]{0,0,255}}
\makeatletter
\newif\ifdisablelinks
\disablelinkstrue
\ifdisablelinks
\def\Hy@StartlinkName#1#2{%
% \pdfstartlink attr{#1}goto name{#2}\relax
}
\def\close@pdflink{%
\Hy@endcolorlink
\Hy@VerboseLinkStop
%\pdfendlink
}
\fi
\makeatother
\begin{document}
Reference to \ref{Test}.
\section{Test}
\label{Test}
\clearpage
\begin{equation}
E=mc^2 \label{einstein}
\end{equation}
\pdfbookmark{einstein}{Einsteins equation}
\clearpage
In \cref{einstein} we see
\end{document}
答案3
我扩展了@Christian Hupfer 的解决方案;其思想原理是一样的。
\documentclass{revtex4-1}
\usepackage[colorlinks]{hyperref}
\hypersetup{allcolors=[RGB]{0,0,255}}
\usepackage{xpatch}
\makeatletter
\patchcmd{\close@pdflink}{\pdfendlink}{}{}{error}
% for references
\patchcmd{\Hy@StartlinkName}{\pdfstartlink attr{#1}goto name{#2}\relax}{}{}{error}
% for \href{http://...}{...}
\patchcmd{\hyper@linkurl}{\pdfstartlink
attr{%
\Hy@setpdfborder
\ifx\@pdfhightlight\@empty
\else
/H\@pdfhighlight
\fi
\ifx\@urlbordercolor\relax
\else
/C[\@urlbordercolor]%
\fi
}%
user{%
/Subtype/Link%
\ifHy@pdfa /F 4\fi
/A<<%
/Type/Action%
/S/URI%
/URI(\Hy@pstringURI)%
\ifHy@href@ismap
/IsMap true%
\fi
\Hy@href@nextactionraw
>>%
}%
\relax}{}{}{error}
% for \href{XYZ...}{...}
\patchcmd{\hyper@linkfile}{\pdfstartlink
attr{%
\Hy@setpdfborder
\ifx\@pdfhighlight\@empty
\else
/H\@pdfhighlight
\fi
\ifx\@filebordercolor\relax
\else
/C[\@filebordercolor]%
\fi
}%
user {%
/Subtype/Link%
\ifHy@pdfa /F 4\fi
/A<<%
/F(\Hy@pstringF)%
/S/GoToR%
\Hy@SetNewWindow
\ifx\\#3\\%
/D[\Hy@href@page\@pdfremotestartview]%
\else
/D(\Hy@pstringD)%
\fi
\Hy@href@nextactionraw
>>%
}%
\relax}{}{}{error}
\makeatother
\begin{document}
Reference to section \ref{Hyperlinks}.
\section{Many hyperlinks}
\label{Hyperlinks}
\href{http://www.google.com}{Google}
\href{A}{A}
\href{B}{B}
\href{C}{C}
\href{X}{X}
\href{Y}{Y}
\href{Z}{Z}
\href{1}{1}
\href{2}{2}
\href{3}{3}
\href{4}{4}
\href{5}{5}
\end{document}
对于其他类型的链接可能需要进一步扩展,但到目前为止,我很高兴。