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 с помощью \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}

Связанный контент