PDF 디스플레이의 이동 상자

PDF 디스플레이의 이동 상자

나는fancytooltips패키지도 좋고 너무 맘에 듭니다. 제가 생각할 수 있는 한 가지 좋은 점은 항목이 단순한 툴팁이 아닌 이동 가능한 상자로 표시되도록 하는 것입니다. (때때로 툴팁이 다른 텍스트를 가릴 수도 있습니다.) 이것이 전혀 구현 가능합니까? 많은 작업이 필요할 수 있지만 가능하다면 조사해 보고 싶습니다.

예시와 스크린샷fancytooltips 다음에서 찾을 수 있습니다.이 게시물. 해당 게시물을 인용하려면:


Gonzalo Medina와 Audrey는 모두 훌륭한 솔루션을 게시했습니다. 하지만 이제는 상황이 더 간단해졌습니다. 참조fancy-preview웹페이지 - 의 새 버전 fancytooltips(2012년 5월) preview.sty및 일부 bash 스크립트를 기반으로 서지 항목, 정리, 정의, 표시된 방정식 등에 대한 툴팁을 자동으로 얻습니다.

작은 예와 스크린샷이 첨부되어 있습니다.

\documentclass{article}
\usepackage{amsmath,amsthm}
\newtheorem{lemma}{Lemma}
\usepackage{hyperref} % Important!
\begin{document}

\begin{lemma}[Lemma from \cite{M}]\label{lemma}
  If $k<0$, then
  \begin{equation}
    \label{eq:1}
    x^2+k<x^2
  \end{equation}
  for every real number $x$.
\end{lemma}

Inequality \eqref{eq:1} in Lema \ref{lemma} can be proved easily. Is
more general than \cite[Theorem 3.4]{K}.

\begin{thebibliography}{9}
\bibitem[M]{M} Me: My book related to the problem (2006), 145 p.
  % The new line is important!

\bibitem{K} Karl: Karl's paper published in some minor proceedings, 
    a local conferrence organized by his university (2005), 23--25.
  % The new line is important!


\end{thebibliography}
\end{document}

Adobe Reader의 파일

여기에 이미지 설명을 입력하세요

참조 M

여기에 이미지 설명을 입력하세요

참조 1

여기에 이미지 설명을 입력하세요

방정식 (1)

여기에 이미지 설명을 입력하세요

Lemma 1.

여기에 이미지 설명을 입력하세요

답변1

이를 위해서는 패키지를 해킹해야 합니다 fancytooltips.

TeXLive에 없는 패키지에 의존하기 때문에 fancytooltips직접 시도해 보았습니다.

아래 정의된 도구 설명 명령은 모든 일반 출력 드라이버(LaTeX 작업 흐름)를 지원합니다.

  • latex-> dvips-> ps2pdf( dvips옵션과 함께 호출하면 안 됩니다 -Ppdf!)
  • latex->dvipdfmx
  • xelatex, lualatex,pdflatex

명령

\tooltip[<link text colour>]{<link text>}[<tip box colour>]{<tip text>}

드래그할 수 있는 도구 설명을 만듭니다.

색상 인수는 선택사항이며 기본값은 blue및 입니다 yellow!20. 패키지 의 색상 모델에 따라 미리 정의된 색상 이름과 색상 표현을 xcolor사용할 수 있습니다. 가 로드 되면 hyperref내부 링크(옵션)에 대한 색상 설정 linkcolor이 로 사용됩니다 <link text colour>.

<link text>latex-> dvips-> 작업 흐름 을 제외하고 줄 끝에서 분리될 수 있습니다 ps2pdf.

여러 줄은 또는 <tip text>에 넣어야 합니다 .\parboxminipage

\documentclass[a6paper,12pt]{scrbook}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% tooltips with LaTeX v. 2017/11/28
%
% \tooltip[*[*[*[*]]]][<link colour>]{<link text>}[<tip box colour>]{<tip text>}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   \tooltip     --> draggable tip, visible on mouse-over, hidden on mouse-out
%               
%   \tooltip*    --> draggable tip, toggle visiblity on mouse-over
%               
%   \tooltip**   --> NON-draggable tip, visible on mouse-over, hidden on mouse-out
%              
%   \tooltip***  --> NON-draggable tip, toggle visiblity on mouse-over
%               
%   \tooltip**** --> NON-draggable tip, toggle visiblity on mouse-click (Evince!)
%
% Default link colour can be set with
%
%   \usepackage[linkcolor=<colour>]{hyperref}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{pdfbase}[2017/03/16]
\usepackage{xparse,ocgbase}
\usepackage{xcolor,calc}
\usepackage{tikzpagenodes}
\usetikzlibrary{calc}

\ExplSyntaxOn
\let\tpPdfLink\pbs_pdflink:nn
\let\tpPdfAnnot\pbs_pdfannot:nnnn\let\tpPdfLastAnn\pbs_pdflastann:
\let\tpAppendToFields\pbs_appendtofields:n
\def\tpPdfXform{\pbs_pdfxform:nnnnn{1}{1}{}{}}
\let\tpPdfLastXform\pbs_pdflastxform:
\ExplSyntaxOff

\makeatletter
\NewDocumentCommand{\tooltip}{%
  ssssO{\ifdefined\@linkcolor\@linkcolor\else blue\fi}mO{yellow!20}m%
}{{%
  \leavevmode%
  \IfBooleanT{#2}{%
    %for variants with two and more stars, put tip box on a PDF Layer (OCG)
    \ocgbase@new@ocg{tipOCG.\thetcnt}{%
      /Print<</PrintState/OFF>>/Export<</ExportState/OFF>>%
    }{false}%
    \xdef\tpTipOcg{\ocgbase@last@ocg}%
    %prevent simultaneous visibility of multiple non-draggable tooltips
    \ocgbase@add@ocg@to@radiobtn@grp{tool@tips}{\ocgbase@last@ocg}%
  }%
  \tpPdfLink{%
    \IfBooleanTF{#4}{%
      /Subtype/Link/Border[0 0 0]/A <</S/SetOCGState/State [/Toggle \tpTipOcg]>>
    }{%
      /Subtype/Screen%
      /AA<<%
        \IfBooleanTF{#3}{%
          /E<</S/SetOCGState/State [/Toggle \tpTipOcg]>>%
        }{%  
          \IfBooleanTF{#2}{%
            /E<</S/SetOCGState/State [/ON \tpTipOcg]>>%
            /X<</S/SetOCGState/State [/OFF \tpTipOcg]>>%
          }{
            \IfBooleanTF{#1}{%
              /E<</S/JavaScript/JS(%
                var fd=this.getField('tip.\thetcnt');%
                if(typeof(click\thetcnt)=='undefined'){%
                  var click\thetcnt=false;%
                  var fdor\thetcnt=fd.rect;var dragging\thetcnt=false;%
                }%
                if(fd.display==display.hidden){%
                  fd.delay=true;fd.display=display.visible;fd.delay=false;%
                }else{%
                  if(!click\thetcnt&&!dragging\thetcnt){fd.display=display.hidden;}%
                  if(!dragging\thetcnt){click\thetcnt=false;}%
                }%
                this.dirty=false;%
              )>>%
            }{%
              /E<</S/JavaScript/JS(%
                var fd=this.getField('tip.\thetcnt');%
                if(typeof(click\thetcnt)=='undefined'){%
                  var click\thetcnt=false;%
                  var fdor\thetcnt=fd.rect;var dragging\thetcnt=false;%
                }%
                if(fd.display==display.hidden){%
                  fd.delay=true;fd.display=display.visible;fd.delay=false;%
                }%
               this.dirty=false;%
              )>>%
              /X<</S/JavaScript/JS(%
                if(!click\thetcnt&&!dragging\thetcnt){fd.display=display.hidden;}%
                if(!dragging\thetcnt){click\thetcnt=false;}%
                this.dirty=false;%
              )>>%
            }%  
            /U<</S/JavaScript/JS(click\thetcnt=true;this.dirty=false;)>>%
            /PC<</S/JavaScript/JS (%
              var fd=this.getField('tip.\thetcnt');%
              try{fd.rect=fdor\thetcnt;}catch(e){}%
              fd.display=display.hidden;this.dirty=false;%
            )>>%
            /PO<</S/JavaScript/JS(this.dirty=false;)>>%
          }%
        }%
      >>%
    }%
  }{{\color{#5}#6}}%
  \sbox\tiptext{%
    \IfBooleanT{#2}{%
      \ocgbase@oc@bdc{\tpTipOcg}\ocgbase@open@stack@push{\tpTipOcg}}%
    \fcolorbox{black}{#7}{#8}%
    \IfBooleanT{#2}{\ocgbase@oc@emc\ocgbase@open@stack@pop\tpNull}%
  }%
  \edef\twd{\the\wd\tiptext}%
  \edef\tht{\the\ht\tiptext}%
  \edef\tdp{\the\dp\tiptext}%
  \measureremainder{\whatsleft}\tipshift=0pt%
  \ifdim\whatsleft<\twd\setlength\tipshift{\whatsleft-\twd}\fi%
  \IfBooleanF{#2}{\tpPdfXform{\tiptext}}%
  \raisebox{\heightof{#6}+\tdp}[0pt][0pt]{\makebox[0pt][l]{\hspace{\tipshift}%
    \IfBooleanTF{#2}{\usebox{\tiptext}}{%
      \tpPdfAnnot{\twd}{\tht}{\tdp}{%
        /Subtype/Widget/FT/Btn/T (tip.\thetcnt)%
        /AP<</N \tpPdfLastXform>>%
        /MK<</TP 1/I \tpPdfLastXform/IF<</S/A/FB true/A [0.0 0.0]>>>>%
        /Ff 65536/F 3%
        /AA <<%
          /U <<%
            /S/JavaScript/JS(%
              var fd=event.target;%
              var mX=this.mouseX;var mY=this.mouseY;%
              var drag=function(){%
                var nX=this.mouseX;var nY=this.mouseY;%
                var dX=nX-mX;var dY=nY-mY;%
                var fdr=fd.rect;%
                fdr[0]+=dX;fdr[1]+=dY;fdr[2]+=dX;fdr[3]+=dY;%
                fd.rect=fdr;mX=nX;mY=nY;%
              };%
              if(!dragging\thetcnt){%
                dragging\thetcnt=true;Int=app.setInterval("drag()",1);%
              }%
              else{app.clearInterval(Int);dragging\thetcnt=false;}%
              this.dirty=false;%
            )%
          >>%
        >>%
      }%
      \tpAppendToFields{\tpPdfLastAnn}%
    }%
  }}%
  \stepcounter{tcnt}%
}}
\makeatother
\newsavebox\tiptext\newcounter{tcnt}
\newlength{\whatsleft}\newlength{\tipshift}
\newcommand{\measureremainder}[1]{%
  \begin{tikzpicture}[overlay,remember picture]
    \path let \p0 = (0,0), \p1 = (current page.east) in
      [/utils/exec={\pgfmathsetlength#1{\x1-\x0}\global#1=#1}];
  \end{tikzpicture}%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\parindent=0pt
\begin{document}\Huge
Einstein's \tooltip{formula}{$E=m c^2$} is well known.
  Another famous formula is due to \tooltip{Pythagoras}{$a^2+b^2=c^2$}.
\end{document}

여기에 이미지 설명을 입력하세요

작동 방식:

두 개의 PDF 주석(마우스 감지 영역)이 생성됩니다. (1) 줄 끝에서 끊어질 수 있는 파란색 링크 텍스트 주변의 링크입니다. (2) 팁 텍스트에 대한 대화형( /Ff 65536) 버튼( /FT/Btn) 위젯( )입니다./Subtype/Widget

팁 상자의 가시성은 링크의 마우스 입력 이벤트에 바인딩된 JavaScript 동작을 통해 제어됩니다. 팁을 표시하거나 숨기려면 링크 텍스트 위에 마우스 포인터를 반복적으로 올려 놓으면 충분합니다.

팁 텍스트는 다음과 같습니다.~ 아니다페이지 콘텐츠에 직접 삽입되어야 합니다. 그렇지 않으면 이동할 수 없습니다. 오히려 상자( \sbox)에 조판된 다음 그래픽 및/또는 텍스트 콘텐츠가 포함된 자체 포함 PDF 엔터티인 소위 Form-XObject로 정제됩니다. 이 Form-XObject는 항목을 통해 버튼 위젯 모양에 바인딩됩니다 /MK.

드래그는 팁 텍스트 버튼의 마우스업 이벤트에 의해 트리거되는 JavaScript 작업으로 구현됩니다. 마우스 움직임은 drag()JavaScript 타이머( )를 사용하여 반복적으로 실행되는 함수에 의해 추적됩니다 app.setInterval. 이렇게 결정된 마우스 위치의 델타는 팁 텍스트 버튼을 나타내는 rectJavaScript 개체의 좌표(속성)에 지속적으로 추가됩니다 .Field

관련 정보