miércoles, 5 de septiembre de 2012

Hyperlinks con LaTeX

Si queremos añadir links a nuestro documento de pdf, para navegar por las diferentes secciones, referencias y citas, podemos usar el paquete {hyperref}, que automaticamente ya añade los links. Como muestro a continuación:

\documentclass[a4paper,openright,12pt]{book}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage{hyperref}

\begin{document}

\tableofcontents

\chapter{Introducción}
Érase una vez...

\chapter{Nudo}\label{cap.nudo}
La historia continúa con...

\chapter{Desenlace}\label{cap.desenlace}
El final de la historia es sorprendete...

\end{document}



A continuación, unos pequeños truquitos sobre este paquete.



Si un título es muy largo, el paquete {hyperref} puede que ponga el título todo seguido, sir hacer los saltos de línea correspondientes... Para solucionarlo, añade la opción [breaklinks=true]:

\usepackage[breaklinks=true]{hyperref}




El paquete hyperlink funciona mal cuando hemos usado el comando "\addcontentsline", y que posiblemente hayamos añadido en la bibliografía, lista de figuras, lista de tablas, etc. Al pinchar en el link correspondiente, nos envía al capítulo anterior al correcto. Para solucionarlo, tenemos que añadir el comando "\phantomsection" delante de "\addcontentsline".

\cleardoublepage
\phantomsection
\addcontentsline{toc}{chapter}{Lista de Figuras}
\listoffigures

Pero ahora imagínate que quisieses quitar el paquete {hyperref}. Solo con comentar la línea donde se carga ese paquete no sería suficiente. Porque también tendrías que buscar todas las líneas con el comando "\phantomsection" y quitarlas o comentarlas. Hay un truco para evitarlo. Y es añadir la siguiente línea de texto, antes de "\begin{document}". Ahora, aunque no cargues el paquete {hyperref}, LaTeX reconocerá las líneas "\phantomsection" (aunque no hagan nada).

\providecommand\phantomsection{}



El paquete {hyperref} tambien permite hacer links a paginas de internet. Si queremos que aparezca la dirección de internet, usamos "\url{}". Si queremos poner un texto alternativo, usamos "\href{}{}". Como muestro a continuación:

\url{http://www.latex-project.org/}

\href{http://www.latex-project.org/}{latex project}




La verdad es que no me gusta que los enlaces queden rodeados de una caja roja, como se ve más arriba. Pero con la opción [hidelinks], estas cajas ya desaparecen.

\usepackage[hidelinks]{hyperref}

Esta opción también quita las cajas azules de los enlaces a páginas web. Como lo normal es que los links a los sitios de internet, estén en azul y subrayados, podemos añadirlo editando el color de la palabra, usando el paquete {color}, como explico en otra entrada (click aquí).

\usepackage[usenames]{color}

\textcolor{Cyan}{\underline{\url{http://www.latex-project.org/}}}
\href{http://www.latex-project.org/}{\textcolor{Cyan}{\underline{latex project}}}




Otra opción que puede ser muy interesante, es añadir en la bibliografía un link con la página donde cada referencia es citada. Para ello, hay que añadir la opción [backref=page]. En otra entrada, explico cómo editar esta opción, y añadir una paqueña frase como "citado en" (click aquí).

\usepackage[backref=page]{hyperref}




Un último truquito. Recuerda que cuando navegas por un documento de pdf, y después de hacer click sobre un link, siempre puedes volver a la página anterior haciendo "Alt" + flecha izquierda. (O por lo menos en Adobe en Windows.)

31 comentarios:

Saúl dijo...

Hola Luis, nuevamente ahora en este post, muy útil, mis felicitaciones.

Usé el package hyperref para referencias mi indice de contenido, el tema es que cuando el marcador ocupa digamos dos líneas, o mejor dicho el título es demasiado largo (ya sea en I. de contenido, I. de tablas o I. de gráficos) hyperref pone todo el texto en una sola línea lo que hace que la numeración desaparezca, que puedo estar poniendo mal o que me faltaría poner? muchas gracias por tu ayuda.

Luis dijo...

Hola Saúl, pues es raro porque a mí sí me salta de línea...

De todos modos, en los índice puedes poner un texto alternativo más cortito. Por ejemplo, en una imagen:

\caption[textocorto]{textolargo}

Hasta luego.

Saúl dijo...

Hola Luis, yo uso texmaker y compilo con ps, de todas maneras solucioné parcialmente mi problema así:

\usepackage[linktocpage]{hyperref}

Ahora los link están sólo sobre los números de páginas. Gracias por todo, de veras que tu blog me ha sido muy útil para darle el acabado a mi trabajo.

Saludos.

Saúl

Luis dijo...

Me alegro. :-)

Abril Ayala Sánchez dijo...

Hola Luis, gracias por las notas me son muy utiles pero tengo una duda y ojalá puedas ayudarme. Es en el uso de bibliography lo utilizo tal cual lo has puesto, me gusta y funciona muy bien a excepción de que estoy trabajando en español y no se como poner acentos, he leído que no son compatibles pero te pregunto a ti, conoces alguna forma de habilitar los acentos?

un saludo.

Abril

Luis dijo...

Hola Abril, ¿qué tal?

He probado y a mí me funciona sin problema con acentos. Así que, quizás el error esté en otro sitio...

Por otro lado, quizás si pones el acento como \' te funcione.

author = {A. Andr\'es}

Ya me dirás si consigues arreglarlo.
Hasta luego

Rolando Ayala Cerda dijo...

Felicidades por los tutoriales.
¿Cómo hago para generar links de referencia de autores en el texto hacia la bibliografía?
En los papers se ve que los autores y años están encerrados en una caja que cuando das un click te lleva a la referencia ó bibliografía.
Muy agradecido anticipado por la respuesta.

Luis dijo...

Hola Rolando,

cuando usas el paquete hyperref, se añaden automáticamente los links a la bibliografía.

Sephiroth Smith Wesker dijo...

Hola, un blog condensado pero con los elementos necesarios para la implicación de utilizar hyperref. Te agradezco mucho, me ha salvado mi tesis. Muy muy útil.

GRACIAS

Luis dijo...

Me alegro Sephiroth. :-)

DANY MANUEL EDUARDO SIADÉN PAIVA dijo...

Hola buenas noches, disculpa quisiera hacer una consulta, eh intentado muchas cosas para rectficar este error, pero me sigue saliendo. No se si tu puedes ayudarme! mi error es como se muestra en la imagen, en marcadores del pdf, en a parte de los capitulos me aparece "12pt" no se a que se debe eso! desearia eliminarlo y que solo salga el nombre el capitulo.

http://www.subirimagenes.net/i/150312015716619646.png

Luis dijo...

Hola Dany, parece que en esos títulos tienes puesto 12pt...

\chapter{12pt TITULO}

Rolando Ayala Cerda dijo...

Buen día Luis. Disculpe la molestia. Uso el paquete Hyperref, pero necesito de su ayuda para elaborar un documento de este tipo.
http://www.subirimagenes.net/i/150313023256451556.png

http://www.subirimagenes.net/i/150313023317451557.png

¿Cuál es el procedimiento adecuado para lograr un documento así?
Estaré muy agradecido por su respuesta. Muchas gracias.

Luis dijo...

Eso es lo que hace directamente hyperref. Como formato de bibliografía, puedes usar apalike.

Carlos Darek dijo...

Buenos días Luis ya cheque tu blog para las hyperreferencias y si lo hace pero me pone las cajas rojas y cuando pongo esto \usepackage[hidelinks]{hyperref} que mencionabas me arroja error, mi preámbulo es este:

\documentclass[a4paper,openany,12pt]{book}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{makeidx}
\usepackage{graphicx}
\usepackage{fourier}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\author{Carlos Alberto}
\title{Tesis}
\usepackage{tocloft}
\renewcommand{\cftchappresnum}{Capítulo }
\renewcommand{\cftchapaftersnum}{}
\renewcommand{\cftchapnumwidth}{25mm}
\graphicspath{{FigsTesis/}}
\usepackage{subfig}
\usepackage{soul}
\makeatletter
\long\def\@makecaption#1#2{%
\vskip\abovecaptionskip
\sbox\@tempboxa{#1. #2}%
\ifdim \wd\@tempboxa >\hsize
#1. #2\par
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\vskip\belowcaptionskip}
\spanishdecimal{.}
\usepackage{float}
\usepackage{hyperref}
\usepackage[hidelinks]{hyperref}

Carlos Darek dijo...

para la bibliografia lo pongo así:


es la refrigeración \cite{nueva3}.\\
\bibitem{nueva3}%
Robert A. Taylor and Gary l. Solbrekken, Comprehensive system-level optimization of thermoelectric devices for electronic cooling applications, IEEE transactions on components and packaging technologies, vol. 31, no. 1, 2008.


y para la figura así:


\begin{figure}[!htb]%
\centering
\includegraphics[scale=0.7]{Fig3}
\textbf{\caption{Dispositivo termoeléctrico Enfriador (TEC)}
\label{Fig3}}
\end{figure}

Figura \ref{Fig3}.


solo me arroja el error cuando pongo esto en el preambulo

\usepackage[hidelinks]{hyperref}

y sin el me salen las cajas rojas que mencionas


Saludos y gracias Luis.

Luis dijo...

Hola Carlos,
parece entonces que el paquete {hyperref} interacciona con alguno de los otros paquetes que tienes... Yo lo que haría sería tratar de encontrar cuál es el paquete conflictivo, y luego, trataría de ver si hay alguna forma alternativa de hacer lo que hacía ese paquete...

Si descubres cuál es el paquete que da problemas, dímelo. :-)

Hasta luego

Roberto dijo...

Hola Luis,

Cuando utilizo \phantomsection el hipervínculo funciona bien, pero te remite al mitad de la página y no al título de la sección, es decir, tengo que subir hacia arriba para ver el título de la sección. En el resto de secciones que no necesitan \phantomsection el título se ve perfectamente sin necesidad de moverme por la página. ¿Sabes alguna solución para este problema?

Muy buen tutorial. ¡Enhorabuena!

Luis dijo...

Hola Roberto, gracias. :-)
No sé la solución al problema que dices. :-(
Pero si un día la encuentras, dímela. ;-)
Hasta luego

Diana dijo...

Hola Luis, te cuento que te estoy enteramente agradecida tu blog es súper útil y me ha enseñado un monton... de verdad muchas gracias por compartir tu conocimiento!!!!!!!

Rolando Ayala Cerda dijo...

Hola Luis, agradecido por tus aportes, son muy valiosos.
¿Qué comando o paquete se utiliza para insertar páginas en forma horizontal aparte del paquete lscape?

Luis dijo...

Diana, me alegro. :-)

Rafael Artidoro Sandoval Nuñez dijo...

Estimados si quieren que no aparezcan esas molestas cajas rojas declaren las siguientes tres lineas de comandos en el orden que se muestran... Saludos

\usepackage{hyperref}
\hypersetup{pdfborder={0 0 0}}
\hypersetup{hidelinks}

Luis dijo...

Genial,
gracias por el aporte Rafael

Rafael Artidoro Sandoval Nuñez dijo...

De nada Luis, cuenta con mi ayuda para cualquier duda que tengan respecto al desarrollo y soluciones de LaTeX.... Saludos.

Luis dijo...

Rolando,
para girar una única página, el único paquete que conozco es {lscape}. Y luego encerrando entre \begin{landscape} \end{landscape} lo que quiero poner en esa página.
Hasta luego

Felipe dijo...

Hola Luis, quiero saber si es posible que las referencias cruzadas sean de ida y vuelta, es decir, que cuando de click a una por supuesto me mandará a ella, pero que pueda regresar con la tecla back (<--) he visto textos en Tex y lo hacen pero los mios no, espero puedas ayudarme. gracias de antemano.

Luis dijo...

Hola Felipe, muy buena pregunta.

Para hacerlo, añade:

\usepackage[backref=page]{hyperrref}

Hasta luego

Michael Madison dijo...

Hola. Excelente página, sumamente pedagógica. Muchas gracias por ella, Luis.

Aunque tardísimo, quizás sirva para otros. Con respecto al problema de Saúl, el autor del primer post, yo lo resolví usando la opción breaklinks=true en el paquete hyperref. Santo remedio.

Saludos.

Luis dijo...

Michael,
Genial, muchas gracias por compartirlo. Lo voy a añadir en la entrada.
Hasta luego

Lila Gabriela Perez Ostos dijo...

Hola el problema que tengo es que cuando coloco el comando \usepackage{hyperref}, en las citas dentro del texto solo me pone al autor y desaparece el año de publicacion. El formato que uso para la biblofrafia es \bibliographystyle{newapa}. Quisiera usar el hyperref sin que me modifique nada.

muchas gracias de antemano.