Saltar al contenido

Cuadros de hipertexto “Zoom in” automáticos en PDF

Solución:

El siguiente código (para usar con pdfLaTeX) define el comando zoombox[box line width]contents. Crea un cuadro de clic para ampliar para ajustar el segundo argumento “contenido” en la ventana de AdobeReader. Se dibuja una línea de puntos alrededor del cuadro si el ‘ancho de línea del cuadro’ opcional es> 0.

EDITAR: El código se ha optimizado para archivos PDF de presentación (como beamer generados) examinados en pantalla completa modo. El cuadro de zoom ahora está centrado en la pantalla cuando se hace clic, según lo solicitado por @alfC.

documentclassbeamer

usepackagegraphicx
usepackagemwe

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%  zoombox[box line width]contents
%
%  optimized version for beamer: in full screen, zoom boxes are centred
%  in the viewer; useable with any documenclass
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
makeatletter
newsavebox[email protected]
newcounter[email protected]@m
usepackagecalc
newdimen[email protected]newdimen[email protected]
newdimen@zwnewdimen@zhnewdimen@zd

newcommandzoombox[2][0]%
  leavevmode%
  sbox[email protected]#2%
  setlength[email protected]1pt*ratiowd[email protected]ht[email protected]+dp[email protected]%
  setlength[email protected]1pt*ratiopaperwidthpaperheight%
  ifdim[email protected]>[email protected]relax%
    setlength@zwwd[email protected]setlength@zh@zw*ratiopaperheightpaperwidth%
    setlength@zd(@zh-ht[email protected]dp[email protected])*real0.5+dp[email protected]%
    setlength@zh@zh-@zd%
  else%
    setlength@zhht[email protected]+dp[email protected]%
    setlength@zw@zh*ratiopaperwidthpaperheight%
    setlength@zhht[email protected]setlength@zddp[email protected]%
  fi%
  makebox[0pt][l]makebox[wd[email protected]][c]makebox[@zw][l]%
    pdfdest name zbfs[email protected]@m fitr
      width  @zwspace
      height @zhspace
      depth  @zdspace
  %
  pdfdest name zb[email protected]@m fitr
    width  wd[email protected]space
    height ht[email protected]space
    depth  dp[email protected]space
  immediatepdfannot 
    width  wd[email protected]space
    height ht[email protected]space
    depth  dp[email protected]space
  !zoomed)
          var lastView=this.viewState;
          if(app.fs.isFullScreen) this.gotoNamedDest('zbfs[email protected]@m');
          else this.gotoNamedDest('zb[email protected]@m');
          zoomed=true;
        else
          this.viewState=lastView;
          zoomed=false;
        
      )
    >>
  %
  usebox[email protected]%
  stepcounter[email protected]@m%
 
makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

begindocument
beginframe
zoomboxincludegraphics[width=1cm]example-image-a
zoomboxincludegraphics[width=1cm]example-image-b
zoomboxincludegraphics[width=1cm]example-image-c
zoomboxincludegraphics[height=1cm]example-image-golden
zoomboxincludegraphics[width=1cm]example-image-golden-upright
endframe
enddocument

El segundo ejemplo define pares de comandos para marcar esquinas opuestas (inferior izquierda y superior derecha. O. Superior izquierda e inferior derecha) de un cuadro de zoom y comandos para marcar secuencias de texto / párrafos completos.

documentclassarticle

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
makeatletter
InputIfFileExistsjobname.zom                                                                         
newwritezoomdat
immediateopenoutzoomdat=jobname.zom                                                                      
newcommandstartzoombox[2][0]%                                                                           
  leavevmode%                                                                                               
  pdfsavepos%
  [email protected]zoomdat%
  stringexpandafterstringdefstringcsnamespace zb#2.ulxstringendcsname%                             
    noexpandnumberpdflastxpos%
  stringexpandafterstringdefstringcsnamespace zb#2.ulystringendcsname%                             
    noexpandnumberpdflastypos%                                                                           
  %
  ifcsname zb#2.ulxendcsnameifcsname zb#2.lrxendcsname%
    edefzoomwddimexpr csname zb#2.lrxendcsname sp- csname zb#2.ulxendcsname sprelax%               
    edefzoomdpdimexpr csname zb#2.ulyendcsname sp- csname zb#2.lryendcsname sprelax%               
    pdfdest name zb#2.in fitr                                                                             
      width zoomwd                                                                                          
      height 0pt
      depth zoomdp
    immediatepdfannot                                                                                      
      width zoomwd                                                                                          
      height 0pt
      depth zoomdp                                                                                          
    %
      /Subtype/Link/H/N 
      /Border [0 0 1 [1 2]]                                                                                  
      /A <<
        /S/JavaScript                                                                                        
        /JS (
          if(typeof(zoomed)=='undefined'%
  fifi%                                                                                                    

defstopzoombox#1%leavevmode%                                                                             
  leavevmode%                                                                                               
  pdfsavepos%
  [email protected]zoomdat%
  stringexpandafterstringdefstringcsnamespace zb#1.lrxstringendcsname%                             
    noexpandnumberpdflastxpos%
  stringexpandafterstringdefstringcsnamespace zb#1.lrystringendcsname%                             
    noexpandnumberpdflastypos%                                                                           
  %                                                                                                         

defstartzoom%
  stepcounter@[email protected]%
  xdef@lblStack[email protected]@id.@lblStack%
  @ifstar@startzoomstar@startzoom%                                                                        


newcommand@startzoom[1][0]%
  raiseboxbaselineskip[0pt][0pt]startzoombox[#1].[email protected]@id%                                                 

newcommand@startzoomstar[1][0]%
  makebox[0pt][r]raiseboxbaselineskip[0pt][0pt]startzoombox[#1].[email protected]@id%                                
  hspaceparindent%                                                                                      

defstopzoom%
  @ifstar@stopzoomstar@stopzoom%                                                                          

def@stopzoom%
  @popStack@lblStack%
  raisebox-1ex[0pt][0pt]stopzoombox.@lblCur%
  xspace%

def@stopzoomstar%
  @popStack@lblStack%
  hfillraisebox-1ex[0pt][0pt]stopzoombox.@lblCur%
  xspace%

newcounter@[email protected]
def@lblStack
def@popStack#1expandafter@@popStack#1nil
def@@popStack#1.#2nilgdef@lblCur#1gdef@lblStack#2
RequirePackagexspace
makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

begindocument
sectionParagraph zooming
startzoom[1]First paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first startzoom[1]emphDo not miss this one.stopzoom First paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph first paragraph.stopzoom*

startzoom*[1]Second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph second paragraph.stopzoom*
enddocument

Los dos comandos para marcar las esquinas de un área de zoom son

startzoombox[line width]label

y

stopzoomboxlabel

Están pensados ​​para utilizarse en entornos de creación de imágenes, como pspicture o tikzpicture. Los pares de comandos asociados deben identificarse mediante etiquetas exclusivas.

Para marcar texto y párrafos se han proporcionado los siguientes comandos:

startzoom[lwidth]
startzoom*[lwidth]
stopzoom
stopzoom*

Las versiones con estrellas insertan un espacio horizontal (negativo parindent en primera línea, hfill al final del párrafo).

Las áreas de zoom pueden estar anidadas. Sin embargo, los más pequeños deben colocarse encima de los más grandes (es decir, para que aparezcan más adelante en el código), para que no se oculten.


Tenga en cuenta que al menos dos pdflatex las carreras son necesarias.


EDITAR:

Una versión dvipdfmx / XeLaTeX del zoombox La macro se proporciona en: ¿Cómo incluyo una imagen en miniatura de hacer clic para hacer zoom en un documento que no es beamer?

AFAIK, no hay una macro o paquete predefinido que haga todo eso, pero los elementos que necesita existen: puede colocar hipervínculos con ventanas de zoom usando el hyperref paquete. Puede obtener las coordenadas necesarias utilizando el zref paquete (s), especialmente zref-abspos. Estos paquetes son del mismo autor y funcionan bien juntos.

Debería colocar el párrafo en su propia casilla. Coloque un zref marcador antes y después del párrafo en el sitio izquierdo y derecho, respectivamente, para obtener las coordenadas del mismo. Luego ponga toda la caja en un href macro que utiliza las coordenadas como destino. Ver el manual de hyperref para más detalles especialmente href y el FitR (zoom de rectángulo).

Sospecho que está pensando en la función “hilo de artículo” en PDF. Esto es particularmente útil para cosas como periódicos, donde el flujo del texto es complicado (múltiples columnas y la página dividida en varios artículos, e incluso cosas como “(continúa en la página 3)”. Con Adobe Reader, cuando pasa el mouse sobre el hilo, el ícono de la mano cambia a una mano con flecha, y al hacer clic, se amplía el ancho del artículo, y cada clic adicional sigue el flujo del artículo, sin importar cuán no lineal y complicado pueda ser.

PDFtex tiene las primitivas para admitir hilos de artículos: pdfthread, pdfstartthread, pdfendthread, pdfthreadmargin. Pero hasta donde yo sé, el único soporte de látex es bastante limitado, a través del pdfpages, por lo que solo es útil si está utilizando pdfpages por alguna imposición compleja.

valoraciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *