我正在使用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
这可以通过包来完成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}