hyperref
提供命令\hyperlink
,语法为:
\hyperlink{name}{text}
在哪里姓名是超文本对象的名称,并且文本用作跳转到定义标记的链接。页面锚点(例如 )page.12
也可用作超文本对象。例如,
Click \hyperlink{page.23}{here} to jump to page 23.
这是 Martin Scharrer 提出的解决方案 这个问题。
我想使用 将一串文本链接到页面(按页码)\hyperlink
,但能够引用隐式页面锚点page.<number>
,该锚点的“编号”事先是未知的。也就是说,page
在 的参数中使用计数器的值,该值仅在文档的后面设置\hyperlink
。
这是一个假设的解决方案:
\documentclass{article}
\usepackage[pageanchor]{hyperref} % option is the default anyway
%% Martin Scharrer's patch for hyperref
%% available at https://tex.stackexchange.com/a/19416/9237
\makeatletter
\let\orig@Hy@EveryPageAnchor\Hy@EveryPageAnchor
\def\Hy@EveryPageAnchor{%
\begingroup
\hypersetup{pdfview=Fit}%
\orig@Hy@EveryPageAnchor
\endgroup
}
\makeatother
\def\getpageref{???} % \getpageref extracts the numeric value of \pageref{key}
% for use in the first argument of \hyperlink
\begin{document}
See
\hyperlink{page.\getpageref{lkd}}{this page}
for further clarification.
\newpage
This is the linked page.\label{lkd}
\end{document}
我知道如何实现相似的解决方案只需使用\label
然后\pageref
(或\autopageref
),但我有兴趣利用hyperref
建议的补丁这里由 Martin 制作,使所有页面锚点都以全页模式显示。(此补丁似乎只适用于\hyperlink
。)
答案1
您可以使用常规命令标记要链接到的页面,然后从中\label
提取其页码\getpagerefnumber
refcount
包中使用它\hyperlink
(“普通” LaTeX 宏\pageref
在这里不起作用,因为它不可扩展)。
一个小例子:
\documentclass{article}
\usepackage{refcount}
\usepackage[pageanchor]{hyperref}
%% Martin's patch for hyperref
\makeatletter
\let\orig@Hy@EveryPageAnchor\Hy@EveryPageAnchor
\def\Hy@EveryPageAnchor{%
\begingroup
\hypersetup{pdfview=Fit}%
\orig@Hy@EveryPageAnchor
\endgroup
}
\makeatother
\begin{document}
See
\hyperlink{page.\getpagerefnumber{mypage}}{this page}
for further clarification.
\clearpage
\dots
\clearpage
This is the linked page.\label{mypage}
\end{document}
答案2
我昨晚尝试了一些事情,但只得到了错误,因为我玩\pageref*
。但 diabonas 的回答给了我决定性的提示。所以这是我的解决方案没有 \hyperlink
。它使用替代定义,\hyperref{URL}{category}{label}{text}
而不是category
=“page”。它对于外部资源特别有用(外部 PDFURL
当然需要页面锚点,据我所知,它仅适用于 Adobe Reader 的浏览器插件版本)。在我的 MWE 中,URL
设置为./\jobname.pdf
,将转换为本地 PDF 文件。它完全按照 OP 的要求工作。
\documentclass{article}
\usepackage[latin,english]{babel} % needed for "blindtext",
% "english" is the active language
\usepackage{blindtext,lipsum,kantlipsum} % just for the examples
\usepackage{refcount}% from "oberdiek" bundle
\usepackage[%
colorlinks=true,%
linkcolor=green,%
% filecolor=cyan,% it's the default
]{hyperref}
%%% Patch from Martin Scharrer
%%% cf. https://tex.stackexchange.com/a/19416/9237
\makeatletter
\let\orig@Hy@EveryPageAnchor\Hy@EveryPageAnchor
\def\Hy@EveryPageAnchor{%
\begingroup
\hypersetup{pdfview=Fit}%
\orig@Hy@EveryPageAnchor
\endgroup
}
\makeatother
%%% \mypageref{<label>}{some linked text}
\newcommand{\mypageref}[2]{\hyperref{./\jobname.pdf}{page}{\getpagerefnumber{#1}}{#2}}
\begin{document}
\section{Package \texttt{blindtext}}
\subsection{English blindtext}\label{btext-en}
See also package \hyperref[klipsum]{\ttfamily kantlipsum} on
\mypageref{klipsum}{next page}.
\medskip
\blindtext[1]
\subsection{Latin blindtext}\label{btext-la}
Compare package \hyperref[lipsum]{\ttfamily lipsum} on
\mypageref{lipsum}{page \pageref*{lipsum}}.
\medskip
\begin{otherlanguage}{latin}
\blindtext[1]
\end{otherlanguage}
\newpage
\section{Package \texttt{kantlipsum}}\label{klipsum}
See also package \hyperref[btext-en]{\texttt{blindtext} with English text} on
\mypageref{btext-en}{previous page}.
\medskip
\kant[1]
\section{Package \texttt{lipsum}}\label{lipsum}
Compare package \hyperref[btext-la]{\texttt{blindtext} with pseudo-Latin text} on
\mypageref{btext-la}{page \pageref*{btext-la}}.
\medskip
\begin{otherlanguage}{latin}
\lipsum[1]
\end{otherlanguage}
\end{document}
MWE 很高兴从我自己那里偷来的:在单个 pdf 文件中以不同方式表示超链接。