Cuadro de desplazamiento en visualización de PDF

Cuadro de desplazamiento en visualización de PDF

Intenté usar elfancytooltipsPaquete y me gusta mucho. Una cosa que podría imaginar que sería buena es que la entrada se muestre como un cuadro móvil en lugar de solo una información sobre herramientas. (A veces, la información sobre herramientas oscurece otro texto). ¿Es posible implementar esto? Quiero decir que podría requerir mucho trabajo, pero si es posible, me gustaría investigarlo.

Los ejemplos y capturas de pantalla fancytooltipsse pueden encontrar enesta publicación. Para citar esa publicación:


Tanto Gonzalo Medina como Audrey publicaron una excelente solución. Pero las cosas son más sencillas ahora. Ver elfancy-previewpágina web: basada en la nueva versión de fancytooltips(mayo de 2012) preview.styy algunos scripts bash, obtiene automáticamente información sobre herramientas para entradas bibliográficas, teoremas, definiciones, ecuaciones mostradas, etc.

Se adjuntan pequeños ejemplos y capturas de pantalla.

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

El archivo en Adobe Reader

ingrese la descripción de la imagen aquí

Referencia M

ingrese la descripción de la imagen aquí

Árbitro 1

ingrese la descripción de la imagen aquí

Ecuación (1)

ingrese la descripción de la imagen aquí

Lema 1.

ingrese la descripción de la imagen aquí

Respuesta1

Esto requeriría piratear el fancytooltipspaquete.

Como fancytooltipsdepende de paquetes que no están en TeXLive, probé algo por mi cuenta.

El comando de información sobre herramientas definido a continuación admite todos los controladores de salida comunes (flujos de trabajo LaTeX):

  • latex-> dvips-> ps2pdf( dvips¡no se debe llamar con la opción -Ppdf!)
  • latex->dvipdfmx
  • xelatex, lualatex,pdflatex

El comando

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

crea una información sobre herramientas que se puede arrastrar.

Los argumentos de color son opcionales y están predeterminados en bluey yellow!20. xcolorSe pueden utilizar nombres de colores predefinidos y expresiones de color según el modelo de color del paquete. Si hyperrefestá cargado, su configuración de color para enlaces internos (opción linkcolor) se utiliza como <link text colour>.

<link text>se puede dividir en los finales de línea, excepto en el latex-> dvips-> ps2pdfflujo de trabajo.

Las líneas múltiples <tip text>deben colocarse en a \parboxo minipage.

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

ingrese la descripción de la imagen aquí

Cómo funciona:

Se crean dos anotaciones PDF (regiones sensibles al mouse): (1) Un enlace alrededor del texto del enlace azul, que se puede dividir en los finales de línea. (2) Un widget /Ff 65536de botón ( ) interactivo ( ) para el texto de la sugerencia./FT/Btn/Subtype/Widget

La visibilidad del cuadro de sugerencias se controla mediante una acción de JavaScript que está vinculada al evento de entrada del mouse del enlace. Para mostrar/ocultar la sugerencia, basta con pasar repetidamente el puntero del ratón sobre el texto del enlace.

El texto de la sugerencia puedenoestar directamente integrado en el contenido de la página; De lo contrario, no se podría mover. Más bien, se compone en un cuadro ( \sbox) y posteriormente se destila en el llamado Form-XObject, que es una entidad PDF autónoma con contenido gráfico y/o textual. Este Form-XObject está vinculado a la apariencia del widget del botón a través de la /MKentrada.

El arrastre se implementa como una acción de JavaScript, que se activa al mover el mouse hacia arriba en el botón de texto de sugerencia. El movimiento del mouse es rastreado por la función drag()que se ejecuta repetidamente usando un temporizador de JavaScript ( app.setInterval). Los deltas de la posición del mouse así determinada se agregan continuamente a las coordenadas ( rectpropiedad) del Fieldobjeto JavaScript que representa el botón de texto de sugerencia.

información relacionada