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.