
Я использую его 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 с помощью \actionsocg
быстро становится громоздким, если количество слоев PDF увеличивается. Для упрощения pkgocgx2
позволяет группировать ОПГ вГруппы радиокнопок. Из всех 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}