OCGX 和 hyperref:重叠链接的可见性和可点击性

OCGX 和 hyperref:重叠链接的可见性和可点击性

我正在使用ocgx单击 PDF 中的链接来显示不同的文本块(在同一页面的同一区域)。

但是,每个文本块都有自己的\href链接,即使没有可见的文本,这些链接也会在页面上重叠(隐藏先前定义的 OCG!)。是否可以使切换ocg不仅可视,还可层排序?

在下面的 MWE 中,请注意使用按钮 1、2 切换文本块可见性才不是切换 href 链接的存在,并且只存在链接“google.com”,即使 ocg 不可见(我的屏幕截图中未捕获鼠标指针)....

\documentclass{article}
\usepackage{ocgx}
\usepackage{hyperref}

\usepackage{textpos}
\setlength{\TPHorizModule}{12pt}
\setlength{\TPVertModule}{12pt}

\begin{document}
\actionsocg{ocg1}{}{ocg2}{{\color{blue}{button 1}}}$|$ %toggle ocg1, hide ocg2
\actionsocg{ocg2}{}{ocg1}{{\color{blue}{button 2}}}%toggle ocg2, hide ocg1

%define OCGs:
  \begin{ocg}{}{ocg1}{0}
    \begin{textblock}{40}(1,1)
      \href{http://overleaf.com}{Link 1}
    \end{textblock}
  \end{ocg}

  \begin{ocg}{}{ocg2}{0}
    \begin{textblock}{40}(1,1)
      \href{http://google.com}{Link 2}    
    \end{textblock}
  \end{ocg}

\end{document}

按下按钮 1 后将鼠标悬停在链接上 按下按钮 1 后将鼠标悬停在链接上

答案1

这可以通过包来完成ocgx2加上hyperref一些修补使其能够感知 PDF 层。

但请注意,只有 Acrobat Reader 尊重放置在 PDF 图层上的链接的可见性:

\documentclass{article}

\usepackage{ocgx2}
\usepackage{hyperref}
%patch hyperref to make PDF Annotations PDF-Layer-(OCG)-aware
\makeatletter
  \let\Hy@setpdfborderOrig\Hy@setpdfborder
  \def\Hy@setpdfborder{\ocgbase@insert@oc\Hy@setpdfborderOrig}%
\makeatother

\usepackage{textpos}
\setlength{\TPHorizModule}{12pt}
\setlength{\TPVertModule}{12pt}

\begin{document}
\actionsocg{ocg1}{}{ocg2}{{\color{blue}{button 1}}}$|$ %toggle ocg1, hide ocg2
\actionsocg{ocg2}{}{ocg1}{{\color{blue}{button 2}}}%toggle ocg2, hide ocg1

%define OCGs:
  \begin{ocg}{}{ocg1}{0}
    \begin{textblock}{40}(1,1)
      \href{http://overleaf.com}{Link 1}
    \end{textblock}
  \end{ocg}

  \begin{ocg}{}{ocg2}{0}
    \begin{textblock}{40}(1,1)
      \href{http://google.com}{Link 2}
    \end{textblock}
  \end{ocg}

\end{document}

如果 PDF 层数增加,创建用于相互隐藏 PDF 层的开关\actionsocg会变得很麻烦。为了简化,pkgocgx2允许将 OCG 分组为单选按钮组。在属于同一单选按钮组的所有 OCG 中,一次只能启用一个,从而自动隐藏先前可见的 OCG。使用选项将 OCG 添加到单选按钮组radiobtngrp=...。将 OCG 分组到单选按钮组中允许我们使用简单的\showocg命令为每个层创建开关:

在此处输入图片描述

\documentclass{article}

\usepackage{ocgx2}
\usepackage{hyperref}
%patch hyperref to make PDF Annotations PDF-Layer-(OCG)-aware
\makeatletter
  \let\Hy@setpdfborderOrig\Hy@setpdfborder
  \def\Hy@setpdfborder{\ocgbase@insert@oc\Hy@setpdfborderOrig}%
\makeatother

\usepackage{fontawesome,pgffor}
\parindent=0pt

\begin{document}

\foreach \ocgname / \urlicon in {%
  GitHub/\faGithub, StackExchange/\faStackExchange, StackOverflow/\faStackOverflow, Google/\faGoogle% 
}{\showocg{\ocgname}{\urlicon}\ }\\[1ex]
%define OCGs, within the same Radio Button Group
\foreach \ocgname / \weburl in {%
  GitHub/{https://github.com}, StackExchange/{https://stackexchange.com}, StackOverflow/{https://stackoverflow.com}, Google/{https://google.com}%
}{%
  \makebox[0pt][l]{%
  \begin{ocg}[radiobtngrp=myURLs]{\ocgname}{\ocgname}{off}
    \url{\weburl}
  \end{ocg}}%
}

\end{document}

相关内容