Hyperref 链接放置:与页面左边框和页面顶部对齐

Hyperref 链接放置:与页面左边框和页面顶部对齐

(a) 是否可以将某些hyperref-hyperlinks(例如指向章节的链接以及(使用时memoir)指向目录、图表列表和参考书目的链接)指向页面的最左边框,而不是指向页面内部?请注意,我已经尝试过该hypcap包,它将图表和表格链接定位到文本的左边缘(左边距结束的位置),但不指向页面的左边框。(对于阅读文本,如果文本不是从查看窗口的边缘开始,而是稍微进入窗口边框,那就很好了。)此外,hypcap不处理目录、图表/表格列表和参考书目。

(b) 此外,如果可以让超链接不仅指向页面左边框,还可以指向相应页面的左上角,那将是一个有用的选项。这可能吗?

如果大家想要这个的起始代码,这里有一些我稍微改编过的代码另一个相关问题

\documentclass{memoir}
  % using the memoir class here is necessary
  % for all the desired hyperlinks to be created
\usepackage{hyperref}
\usepackage[all]{hypcap} % hypcap doesn't help here

\begin{document}

\tableofcontents

\section{A section}
This is the only section.

\listoftables
\listoffigures

\begin{thebibliography}{9}
\end{thebibliography}

\end{document}

注意:我知道这个hypcap软件包,但不确定是否/如何使用它来解决这个问题。

答案1

user14996 写道:

(a) 是否可以让某些超链接[...]指向页面的最左边边框,而不是内部?

(b) 此外,如果可以使超链接不仅指向页面左边框,而且还指向相应页面的左上角,那将是一个有用的选择。[...]

首先我同意canaaerus的评论:

想象一下,用户选择了较高的缩放级别,然后您强制跳转到页面的左上角。该点可能距离参考位置非常远,用户将无法看到它。

问题的另一种答案:PDF 格式还支持目标的其他“视图”设置。hyperref 中的默认值是XYZ,X 和 Y 表示锚点位置,Z 表示缩放级别(默认值null 表示不变的缩放级别)。如果您想获取左页边框并且不介意获取右页边框,那么您可以使用

\hyperref{pdfview=FitH}% or FitBH that removes some white space

(驱动程序 hpdftex 和其他驱动程序从锚点的当前位置计算 Y 位置。)

你可以获得整个页面

\hyperref{pdfview=Fit}

但请注意,如果用户因窗口/屏幕太小而无法阅读文本,则必须切换缩放级别可能会令人烦恼。

答案2

在我看来,虽然过于简单,但你要求的东西应该不是必需的。文档应该将其链接指向实际目标位置,然后查看器应用程序可以明智地选择跳转到哪里。该选择还取决于当前的视图模式和缩放级别。
想象一下,用户选择了高缩放级别,而你强制跳转到页面的左上角。该点可能离引用的位置很远,用户将无法看到它。

现在无论如何都要这样做,将标签标记放在左上角。我到现在为止都明白了:

\documentclass{memoir}

\usepackage[colorlinks]{hyperref}

\usepackage{lipsum}

\usepackage[absolute]{textpos}
\setlength\TPHorizModule{1cm}
\setlength\TPVertModule{1cm}
\textblockorigin{0mm}{0mm}

\newcounter{lbl}
\def\plabel#1{\begin{textblock}{0}(0,0)\refstepcounter{lbl}\label{#1}\end{textblock}}

\begin{document}
\chapter{The first chapter}
\lipsum[1-3]
\section{A section}
Here a label is set!\plabel{lbl1}

\chapter{The second chapter}
Here is a link up.{\Huge(\ref{lbl1})}
\end{document}

第一个问题是textblock始终位于第一的页面。因此您需要使用其他绝对定位方法。(我敢打赌有十几种方法可以做到这一点)

第二件仍需修复的事情是,现在标签引用了计数器lbl。(我认为这与包方法类似hypcap。)因此您需要修复引用。

\def\thelbl{\thesection}

例如会有所帮助。但也许您不只是想引用部分。

答案3

(a)是的。

(b)是的。

为了将链接目标位置设置在页面顶部,此示例应用eso-pic包(2015 版)(TeXLive 2016)来定位零尺寸图形,图形的位置附加到超链接。对于图形,这是用编译的xelatex。(编译任何选项时,即使编译器的注释没有表明需要多次编译,也可以多次编译以解决交叉引用问题。)

在此之前的答案中,缩放系数问题开始于 200% 左右。但是,对于提出的问题,答案是肯定的。

此示例说明,设置页面顶部链接可能/可以使用自定义垂直调整,因为定位零尺寸图形所需的调整取决于页面上第一个项目在页面下方的位置。链接是使用命令“手动”完成的\phantomsection。此代码使用四个变量,如下面的代码中所述。

输出(不包括)为 24 页。当然,要查看所有功能,需要滚动整个文档。由于主要关注的是链接目标的位置(以确认在滚动模式下每个链接确实位于页面顶部,包括指向/指向目录页面本身的链接),因此可以通过包含书签视图并单击“目录”(最顶部的书签)直接返回目录页面(以测试下一个链接)来方便测试。

虽然预期图片列表会从新页面开始,但从 MWE 可以推断,表格列表不一定也期望或希望出现在另一个新页面的顶部。因此,在这里,这些相应的链接指向同一页面的顶部。

此示例用于nextpage说明章节之间页面的处理。使用几个示例章节来说明每种可能的\clearto情况。无论是想要空白页还是填充页(本页故意留空)、页码还是无页码,这些选项都已说明。几个选项保留为注释行,以用作其他自定义示例。

\documentclass{memoir}

\usepackage[latin,english]{babel}
\usepackage{csquotes} % smart quotes

\renewcommand{\chaptermark}[1]{\markboth{#1}{#1}}

%https://tex.stackexchange.com/a/74096/170846
%\makeheadfootruleprefix{<style>}{<for headrule>}{<for footrule>}
\makeheadfootruleprefix{headings}{}{}
\makeheadrule{headings}{\textwidth}{\normalrulethickness}
\makefootrule{headings}{\textwidth}{\normalrulethickness}
{\footruleskip}

%https://tex.stackexchange.com/a/40552/170846 slightly modified
\makeevenhead{headings}%
    {}{}{\slshape\bookname~\thebook\qquad\partname~\thepart\qquad\leftmark}
\makeoddhead{headings}{\slshape\rightmark}{}{}
\makeevenfoot{headings}{\thepage}{}{}
\makeoddfoot{headings}{}{}{\thepage}

\copypagestyle{plainnotice}{plain}
\makeevenfoot{plainnotice}{\thepage}{}{}% not used with "openright"
\makeoddfoot{plainnotice}{}{}{\thepage}
\aliaspagestyle{chapter}{plainnotice}

\usepackage{nextpage}

% minor modification of nextpage for even-to-even clearing
\makeatletter
\renewcommand{\cleartoevenpage}[2]{%
    \ifodd\c@page\clearpage%
    \else\newpage\thispagestyle{#2}\hbox{}#1
    \newpage\hbox{}
    \fi}
\makeatother

\usepackage[texcoord]{eso-pic}
\usepackage{graphicx}
\usepackage{url}
\usepackage{lipsum}
\usepackage{tocloft}
\usepackage[pagebackref=true]{hyperref}

\hypersetup{
    colorlinks=true,
    linkcolor=blue,
    filecolor=blue,      
    urlcolor=blue,
}

\newcommand{\setChLink}[3]{
\AddToShipoutPictureFG*
\AtPageUpperLeft{
    \begin{picture}(0,0)
    \put(0,260){\phantomsection
    \addcontentsline{#1}{#2}{#3}}
    \end{picture}
    }
}

\makeatletter
\renewcommand{\@memb@bchap}{%
  \chapter*{\bibname}%
  \bibmark
  \ifnobibintoc\else
  \AddToShipoutPictureFG*
  \AtPageUpperLeft{
    \begin{picture}(0,0)
    \put(0,260){\phantomsection
    \addcontentsline{toc}{chapter}{\bibname}}
    \end{picture}
    }
  \fi
  \prebibhook}
\makeatother

\newcommand{\setPgLink}[4]{% #1 "title" #2 label
\AddToShipoutPictureFG*
\AtPageUpperLeft{
    \begin{picture}(0,0)
    \put(0,#4){\phantomsection% #4 is adjustable per page link
    \addcontentsline{#1}{#2}{#3}}% #1 which "list" (e.g., toc)
                         %     #2 which "level" (e.g., chap.)
                         %   #3 "title"
    \end{picture}
    }
}

\setcounter{tocdepth}{1} % -1, 0, 1

\begin{document}
\AddToShipoutPictureFG*
\AtPageUpperLeft{
    \begin{picture}(0,0)
    \put(0,144){\pdfbookmark[0]{Contents}{tblcntnts}}
    \end{picture}
    }

\tableofcontents*

% odd to odd -- blank
\cleartooddpage[\thispagestyle{empty}]%  <--- square

% odd to odd -- blank with centered pg no
%\cleartooddpage[\thispagestyle{plain}]

% odd to odd -- blank with Chap pg no
%\cleartooddpage[\thispagestyle{plainnotice}]

\chapter*{Chapter 1}
\setChLink{toc}{chapter}{Chapter 1}
\chaptermark{Chapter 1}

\lipsum[44-48]

\lipsum[64-69]

% odd to odd -- skipped pg filled (applying Chap footer)
%\cleartooddpage[{\vspace*{\fill}\begin{center}THIS PAGE LEFT BLANK\end{center}\vspace*{\fill}}\thispagestyle{plainnotice}]

% odd to odd -- skipped pg filled (no page number)
\cleartooddpage[{\vspace*{\fill}\begin{center}THIS PAGE LEFT BLANK\end{center}\vspace*{\fill}}\thispagestyle{empty}]

% odd to odd -- skipped pg filled (centered page number)
%\cleartooddpage[{\vspace*{\fill}\begin{center}THIS PAGE LEFT BLANK\end{center}\vspace*{\fill}}\thispagestyle{plain}]

% odd to odd -- just Chap footer
%\cleartooddpage[\thispagestyle{plainnotice}]

% odd to odd -- just centered page number
%\cleartooddpage[\thispagestyle{plain}]

\chapter*{Chapter 2}
\setChLink{toc}{chapter}{Chapter 2}
\chaptermark{Chapter 2}

\lipsum[49-53]

% even to odd -- blank    and
% even to odd -- filled 
% are the same -- there is no blank page to handle
\cleartooddpage[{\vspace*{\fill}\begin{center}THIS PAGE LEFT BLANK\end{center}\vspace*{\fill}}\thispagestyle{plain}]

\chapter*{Chapter 3}
\setChLink{toc}{chapter}{Chapter 3}
\chaptermark{Chapter 3}

\lipsum[54-57]

% odd to even -- blank    and
% odd to even -- filled 
% are the same -- there is no blank page to handle
\cleartoevenpage{some text that won't ever show up}{plainnotice}

\setPgLink{toc}{chapter}{A plain PreChap page}{132}
% for no page number
%\thispagestyle{empty}
% for Chap 1st page page number
\thispagestyle{plainnotice}
This is the recto page advanced to.  Typically, there'll be pre-chapter text or graphics on this page.

\chapter*{Chapter 4}
\setChLink{toc}{chapter}{Chapter 4}
\chaptermark{Chapter 4}

\lipsum[58-63]

% even to even -- blank
\cleartoevenpage{}{empty}

\setPgLink{toc}{chapter}{PreChap Graphics}{140}
\thispagestyle{plainnotice}

%adapted from https://tex.stackexchange.com/a/248829/170846
\begin{minipage}[c]{\textwidth}
    \href{https://ctan.org/lion/files/ctan_lion_350x350.png}{\includegraphics[scale=0.75]{ctan_lion_350x350.png}{}}\\
\end{minipage}

\chapter*{Chapter 5}
\setChLink{toc}{chapter}{Chapter 5}
\chaptermark{Chapter 5}

\lipsum[59-63]

% even to even -- skipped pg filled (applying Chap footer)
\cleartoevenpage{\vspace*{\fill}\begin{center}THIS PAGE LEFT BLANK\end{center}\vspace*{\fill}}{plainnotice}

% even to even -- skipped pg filled (centered page number)
%\cleartoevenpage{\vspace*{\fill}\begin{center}THIS PAGE LEFT BLANK\end{center}\vspace*{\fill}}{plain}

% even to even -- skipped pg filled (no page number)
%\cleartoevenpage{\vspace*{\fill}\begin{center}THIS PAGE LEFT BLANK\end{center}\vspace*{\fill}}{empty}

% even to even -- skipped pg w/ defined header/footer only
%\cleartoevenpage{}{headings}

% even to even -- skipped pg w/ Chap footer only
%\cleartoevenpage{}{plainnotice}

% even to even -- skipped pg w/ centered page number only
%\cleartoevenpage{}{plain}

\setPgLink{toc}{chapter}{The \enquote{cleared-to} verso page, ready for pre-Chap content, with preceding Notice of deliberate blankness}{140}
\thispagestyle{plainnotice}
%\thispagestyle{plain}
%\thispagestyle{empty}

Here is a famous quote by a famous author.

{\textit{Famous Author}}


\chapter*{Chapter 6}
\setChLink{toc}{chapter}{Chapter 6}
\chaptermark{Chapter 6}

\lipsum[70-73]

\cleartooddpage{}

\setPgLink{toc}{chapter}{List of Figures}{132}
\listoffigures*


\setPgLink{toc}{chapter}{List of Tables}{260}
\listoftables*

\begin{thebibliography}{9}
\lipsum[74-79]

\end{thebibliography}

\end{document}

相关内容