我正在制作一款小型纸笔游戏,游戏的背面有物品索引。在游戏过程中,玩家会遇到一些物品,文档背面有关于如何找到物品详细信息的说明。但是,单击这些超链接时,我会跳转到物品的顶部(而且有点被截断了)。
我如何改变这两个命令,以便在单击超链接时将读者带到包含该项目的页面顶部?
\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