![如何让这些自定义超链接跳转到页面的开头而不是精确的超目标?](https://linux22.com/image/433389/%E5%A6%82%E4%BD%95%E8%AE%A9%E8%BF%99%E4%BA%9B%E8%87%AA%E5%AE%9A%E4%B9%89%E8%B6%85%E9%93%BE%E6%8E%A5%E8%B7%B3%E8%BD%AC%E5%88%B0%E9%A1%B5%E9%9D%A2%E7%9A%84%E5%BC%80%E5%A4%B4%E8%80%8C%E4%B8%8D%E6%98%AF%E7%B2%BE%E7%A1%AE%E7%9A%84%E8%B6%85%E7%9B%AE%E6%A0%87%EF%BC%9F.png)
我正在制作一款小型纸笔游戏,游戏的背面有物品索引。在游戏过程中,玩家会遇到一些物品,文档背面有关于如何找到物品详细信息的说明。但是,单击这些超链接时,我会跳转到物品的顶部(而且有点被截断了)。
我如何改变这两个命令,以便在单击超链接时将读者带到包含该项目的页面顶部?
\newcommand{\makeitem}[1]{#1\hypertarget{#1}{}\label{#1}}
\newcommand{\gain}[1]{> \textbf{Gain:} \hyperlink{#1}{#1 (Page: \pageref*{#1})}}
代码示例:
\documentclass[12pt]{article}
\usepackage[hidelinks]{hyperref}
\newcommand{\makeitem}[1]{#1\hypertarget{#1}{}\label{#1}}
\newcommand{\gain}[1]{> \textbf{Gain:} \hyperlink{#1}{#1 (Page: \pageref*{#1})}}
\begin{document}
On this page, the character picks up a torch:
\gain{Torch}
\newpage
And here would be the list of items including the torch:
\makeitem{Torch}
\newpage
Here is a third page so the doc has room to show what the scrolling actually looks like.
\end{document}
答案1
目标(PDF 语音中的目的地)不是链接跳转到的“位置”。它们包含页码和如何显示此页面的说明。
默认情况下,指令会告诉查看者将特定的坐标放入左上角——这给人的印象是链接跳转到了这个地方。
您可以使用(创建目标时全局或本地)更改指令
\hyperref{pdfview=...}
您可能使用的值例如是 Fit 或 FitH。
这通常会改变页面的大小,也许不是您想要的。另一种方法是将目标移动到页面的左上角:
\documentclass[12pt]{article}
\usepackage[hidelinks]{hyperref}
\newcommand{\makeitem}[1]{#1%
\AddToHookNext{shipout/background}{\put(0pt,0pt){\hypertarget{#1}{}\label{#1}}}}
\newcommand{\gain}[1]{> \textbf{Gain:} \hyperlink{#1}{#1 (Page: \pageref*{#1})}}
\begin{document}
On this page, the character picks up a torch:
\gain{Torch}
\newpage
And here would be the list of items including the torch:
\makeitem{Torch}
\newpage
Here is a third page so the doc has room to show what the scrolling actually looks like.
\end{document}
第三种选择是利用 hyperref 创建的页面目标。这需要一种可扩展的方式来检索页码:
\usepackage{zref-user}
\newcommand{\makeitem}[1]{#1\zlabel{#1}\label{#1}}
\makeatletter
\newcommand{\gain}[1]{> \textbf{Gain:} \hyperlink{page.\zref@extractdefault{#1}{page}{0}}{#1 (Page: \pageref*{#1})}}
\makeatother