提高章节标签的超目标

提高章节标签的超目标

使用twocolumn模式时,一个已知问题是,对章节标题的引用指向基线而不是章节标题。

在之前的一个问题中,我问过如何修复目录这个问题,但我意识到该解决方案并不能解决我\ref和朋友的相同问题。

我尝试\label以与 相同的方式进行修补,但这对的\addcontentsline没有任何影响。我如何修改标签的目标?如果有帮助的话,引用该章节的书签总是以 为前缀。\hypertarget\*refchapter:chapter:

代表:

\documentclass{scrbook}
\usepackage[twocolumn]{geometry}
\usepackage{varioref}
\usepackage[hypertexnames=false]{hyperref}
\usepackage{cleveref}

\usepackage{etoolbox}

% Add extra hyper target for chapter: chapter..\thechapter
\renewcommand*{\chapterformat}{%
  \mbox{\raisebox{25pt}[0pt][0pt]{\hypertarget{.\theHchapter}{}}% Add 
    \chapappifchapterprefix{\nobreakspace}\thechapter\hspace{1em}}%
}

\makeatletter
% Update \addcontentsline to jump to new hyper target _only_ if \chapter is used
\patchcmd{\addcontentsline}% <cmd>
  {\Hy@writebookmark}% <search>
  {\ifnum\pdfstrcmp{chapter}{#2}=0 % Chapter mark
     \edef\@currentHref{.\theHchapter}%
   \fi
   \Hy@writebookmark}% <replace>
  {}{}% <success><failure>

\patchcmd{\label}% <cmd>
  {\Hy@writebookmark}% <search>
  {\edef\@currentHref{.\theHchapter}%
   \Hy@writebookmark}% <replace>
  {}{}% <success><failure>

\makeatother


\makeatletter
\@addtoreset{chapter}{part}
\makeatother

\begin{document}
\tableofcontents
\part{A}
\chapter{foo\label{chapter:foo}}
\chapter{bar}
\part{B}
\chapter{Baz}\label{chapter:Baz}
\chapter{Foobar}

\Vref{chapter:Baz}.

\Vref{chapter:foo}.

\end{document}

答案1

Hyperref 自动在每个页面顶部以名称提供目标page.\thepage

\documentclass{scrbook}
\usepackage[twocolumn]{geometry}
\usepackage{varioref}
\usepackage{hyperref}
\usepackage{cleveref}

\newcommand{\topref}[1]% #1 = label
{\hyperlink{page.\getpagerefnumber{#1}}{\getrefnumber{#1}}}

\begin{document}

chapter \topref{chapter:foo}

\part{A}
\chapter{foo}\label{chapter:foo}
\chapter{bar}
\part{B}
\chapter{Baz}\label{chapter:Baz}
\chapter{Foobar}

\end{document}

相关内容