Bewegungsfeld in der PDF-Anzeige

Bewegungsfeld in der PDF-Anzeige

Ich habe versucht, mit demfancytooltipsPaket und mag es sehr. Eine Sache, die ich mir gut vorstellen könnte, wäre, den Eintrag als verschiebbare Box anzuzeigen, statt nur als Tooltip. (Manchmal verdeckt der Tooltip anderen Text.) Ist das überhaupt umsetzbar? Ich meine, es könnte eine Menge Arbeit bedeuten, aber wenn es überhaupt möglich ist, würde ich es mir gerne ansehen.

Die Beispiele und Screenshots fancytooltipsfinden Sie indieser Beitrag. Um aus diesem Beitrag zu zitieren:


Sowohl Gonzalo Medina als auch Audrey haben eine hervorragende Lösung gepostet. Aber die Dinge sind jetzt einfacher. Siehe diefancy-previewWebseite – basierend auf der neuen Version fancytooltips(Mai 2012) preview.styund einigen Bash-Skripten erhalten Sie automatisch Tooltips für bibliographische Einträge, Theoreme, Definitionen, angezeigte Gleichungen usw.

Ein kleines Beispiel und Screenshots sind angehängt.

\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}

Die Datei im Adobe Reader

Bildbeschreibung hier eingeben

Referenz M

Bildbeschreibung hier eingeben

Referenz 1

Bildbeschreibung hier eingeben

Gleichung (1)

Bildbeschreibung hier eingeben

Lemma 1.

Bildbeschreibung hier eingeben

Antwort1

Dies würde ein Hacken des fancytooltipsPakets erfordern.

Da fancytooltipses von Paketen abhängt, die nicht in TeXLive enthalten sind, habe ich selbst etwas ausprobiert.

Der unten definierte Tooltip-Befehl unterstützt alle gängigen Ausgabetreiber (LaTeX-Workflows):

  • latex-> dvips-> ps2pdf( dvipsdarf nicht mit Option aufgerufen werden -Ppdf!)
  • latex->dvipdfmx
  • xelatex, lualatex,pdflatex

Der Befehl

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

Erstellt einen Tooltip, der verschoben werden kann.

Die Farbargumente sind optional und standardmäßig auf blueund eingestellt. Es können yellow!20vordefinierte Farbnamen und Farbausdrücke entsprechend dem Farbmodell des Pakets verwendet werden. Wenn geladen ist, wird seine Farbeinstellung für interne Links (Option ) als verwendet .xcolorhyperreflinkcolor<link text colour>

<link text>ist über Zeilenenden hinweg umbrechbar, mit Ausnahme des latex-> dvips->- ps2pdfWorkflows.

Mehrzeilige Dateien sollten in ein oder <tip text>eingefügt werden .\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}

Bildbeschreibung hier eingeben

Wie es funktioniert:

Es werden zwei PDF-Annotationen (maussensitive Bereiche) erzeugt: (1) Ein über die Zeilenenden umbrechbarer Link um den blauen Linktext. (2) Ein interaktives ( /Ff 65536) Button- /FT/BtnWidget ( ) ( /Subtype/Widget) für den Tipptext.

Die Sichtbarkeit der Tipp-Box wird über eine JavaScript-Aktion gesteuert, die an das Mouse-Enter-Event des Links gebunden ist. Um den Tipp ein-/auszublenden, genügt es, den Mauszeiger wiederholt über den Linktext zu bewegen.

Der Tipptext kannnichtdirekt in den Seiteninhalt eingebettet werden; es könnte sonst nicht verschoben werden. Vielmehr wird es in eine Box ( \sbox) gesetzt und anschließend in ein sogenanntes Form-XObject destilliert, das eine in sich geschlossene PDF-Entität mit grafischem und/oder Textinhalt ist. Dieses Form-XObject ist über den /MKEintrag an das Erscheinungsbild des Button-Widgets gebunden.

Das Ziehen wird als JavaScript-Aktion implementiert, die durch das Mouse-Up-Ereignis des Tip-Text-Buttons ausgelöst wird. Die Mausbewegung wird durch die Funktion verfolgt, drag()die mithilfe eines JavaScript-Timers ( app.setInterval) wiederholt ausgeführt wird. Die so ermittelten Deltas der Mausposition werden kontinuierlich zu den Koordinaten ( rectEigenschaft) des JavaScript- FieldObjekts addiert, das den Tip-Text-Button darstellt.

verwandte Informationen