OCGX 및 hyperref: 겹치는 링크의 가시성 및 클릭 가능성

OCGX 및 hyperref: 겹치는 링크의 가시성 및 클릭 가능성

ocgxPDF의 링크를 클릭하면 동일한 페이지의 동일한 영역에 다른 텍스트 블록을 표시하는 데 사용하고 있습니다 .

그러나 각 텍스트 블록에는 고유한 \href링크가 있으며, 텍스트가 표시되지 않는 경우에도(!) 이러한 링크는 페이지에서 겹쳐집니다(이전에 정의된 OCG를 숨김). ocg가시성뿐만 아니라 레이어 순서도 전환할 수 있나요 ?

아래 MWE에서 버튼 1,2를 사용하여 텍스트 블록 가시성을 전환합니다.하지 않습니다href 링크의 존재를 전환하면 ocg가 모두 표시되지 않는 경우에도 "google.com" 링크만 표시됩니다(마우스 포인터가 내 스크린샷에 캡처되지 않음)....

\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게다가 hyperrefPDF 레이어를 인식하도록 약간의 패치를 적용했습니다.

그러나 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}

\actionsocgPDF 레이어 수가 증가하면 PDF 레이어를 상호 숨기기 위한 스위치를 빠르게 만드는 것이 번거로워집니다. 단순화하기 위해 pkgocgx2OCG를 다음과 같이 그룹화할 수 있습니다.라디오 버튼 그룹. 동일한 라디오 버튼 그룹에 속하는 모든 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}

관련 정보