2.4 Gestionar referencias
\(\LaTeX\) tiene comandos que facilitan la gestión de referencias en un documento. En particular, admite referencias cruzadas (referencias internas entre elementos dentro de un documento), citas bibliográficas (referencias a documentos externos) e indexación de palabras o expresiones seleccionadas. Las funciones de indexación se analizarán en el Capítulo 14 y las citas bibliográficas en los Capítulos 15 y 16.
Para permitir la referencia cruzada de elementos dentro de un documento, debe asignar una “clave” (que consta de una cadena de caracteres, preferiblemente letras ASCII, dígitos y puntuación) al elemento estructural dado y luego usar esa clave para hacer referencia a ese elemento. en otra parte.
\label{key} \ref{key} \pageref{key}
El comando \label
asigna la clave al elemento actualmente “activo” del documento (consulte a continuación para determinar qué elemento está activo en un punto determinado). El comando \ref
escribe una cadena, identificando el elemento dado, como la sección, ecuación o número de figura, dependiendo del tipo de elemento estructural que estaba activo cuando se emitió el comando \label
. El comando \pageref
escribe el número de la página donde se proporcionó el comando \label
. Las cadenas key deberían, por supuesto, ser únicas. Como ayuda sencilla, puede resultar útil anteponerles una cadena que identifique el elemento estructural en cuestión: “sec” podría representar unidades seccionales, “fig” identificaría figuras, etc.
\section{A Section} \label{sec:this} A reference to this section looks like this: ‘‘see section~\ref{sec:this} on page~\pageref{sec:this}’’.
Existe un peligro potencial al utilizar caracteres de puntuación como dos puntos. En ciertos estilos de lenguaje dentro del sistema babel
(ver Capítulo 13), algunos de estos caracteres tienen significados especiales y se comportan esencialmente como comandos. El paquete babel
se esfuerza por permitir dichos caracteres como parte de las claves \label
, pero esto puede fallar en algunas situaciones. De manera similar, los caracteres fuera del rango ASCII han sido un problema en el pasado. Sin embargo, a partir del lanzamiento de \(\LaTeX\) en 2019, hay una nueva implementación que esencialmente admite todos los caracteres Unicode que también se pueden usar para componer texto, es decir, generalmente no se rechazan porque \(\LaTeX\) no sabe cómo lidiar con ellos. a ellos. Por lo tanto, puede usar etiquetas como fig:größer
, pero usar, digamos, caracteres chinos aún puede generar errores, a menos que haya cargado paquetes especiales de soporte de fuentes para ellos o haya usado una versión bastante reciente de \(\LaTeX\).
Para crear etiquetas de referencia cruzada, el elemento estructural “actualmente activo” de un documento se determina de la siguiente manera. Los comandos de sección (\capítulo
, \sección
, . . . ), los entornos ecuación
, figura
, tabla
y la familia teorema
, así como los distintos niveles de la enumeración
entorno y \footnote
establecen la cadena de referencia actual, que contiene el número generado por \(\LaTeX\) para el elemento dado. Esta cadena de referencia generalmente se establece al comienzo de un elemento y se restablece cuando se sale del alcance del elemento.
Excepciones notables a esta regla son los entornos table
y figure
, donde la cadena de referencia se define mediante los comandos \caption
. Esto permite varios pares \caption
y \label
dentro de un entorno. Debido a que es la directiva \caption
la que genera el número, el comando \label
correspondiente debe seguir al comando \caption
en cuestión. De lo contrario, se genera un número incorrecto. Si se coloca antes en el cuerpo flotante, el comando \label
recoge la cadena de referencia actual de alguna entidad anterior, normalmente la unidad seccional actual.
El problema se muestra claramente en el siguiente ejemplo, donde solo las etiquetas “fig:in2
” y “fig:in3
” están colocadas correctamente para generar los números de referencia necesarios para las figuras. En el caso de “fig:in4
” se ve que los entornos (en este caso, center
) limitan el alcance de las referencias, porque obtenemos el número de la sección actual, en lugar del número de la figura.
Cabe señalar que usar un entorno “central” en un flotador (como lo hicimos a continuación) no es una buena idea no solo porque limita el alcance de la referencia: ¡también crea un espacio adicional generalmente no deseado en la parte superior del flotador! Es mejor utilizar una declaración \centering
, que evita ambos problemas.
\section{A section} \subsection{A subsection}\label{sec:before} Text before is referenced as ‘\ref{sec:before}’. \begin{figure}[ht] \label{fig:in1} % bad \begin{center} \fbox{\ldots{} figure body \ldots} \caption{First caption} \bigskip \label{fig:in2} % ok \fbox{\ldots{} figure body \ldots} \caption{Second caption} \end{center} \label{fig:in3} \label{fig:in4} % ok % bad \end{figure} \label{sec:after} % bad, unless you want the page reference \raggedright The labels are: ‘before’ (\ref{sec:before}), ‘fig:in1’ (\ref{fig:in1}) -- bad, ‘fig:in2’ (\ref{fig:in2}), ‘fig:in3’ (\ref{fig:in3}), ‘fig:in4’ (\ref{fig:in4}) -- bad and ‘after’ (\ref{sec:after}) -- probably bad!
Para cada clave declarada con \label{key}
, \(\LaTeX\) registra la cadena de referencia actual y el número de página. Por lo tanto, múltiples comandos \label
(con diferentes identificadores de clave key) dentro de la misma unidad seccional generan una cadena de referencia idéntica pero, posiblemente, diferentes números de página como sec:before
y sec:after
arriba.
Según el \(\LaTeX\) Manual [106] las etiquetas se pueden colocar dentro del argumento principal de los comandos de título o título, en lugar de después de ellos. Hacer esto hace que el código fuente sea un poco menos legible (por eso los prefiero después), pero hay algunos casos extremos, generalmente con \caption
, donde colocar la etiqueta después del comando puede generar espacio adicional incorrecto, por lo que hay que tener cuidado con esto.
Etiquetas más elegantes
Una referencia a través de \ref
produce, de forma predeterminada, los datos asociados con el comando \label
correspondiente (normalmente un número); cualquier formato adicional debe ser proporcionado por el usuario. Si, por ejemplo, las referencias a ecuaciones siempre deben escribirse como “ecuación (número)”, se debe codificar “ecuación
(\ref{clave}
)”.
Para reforzar la coherencia, el paquete amsmath
proporciona un comando \eqref
para hacer referencia a ecuaciones. Automáticamente coloca paréntesis alrededor del número de ecuación. Para utilizar esto y también aplicar la magia de varioref
(ver la siguiente sección), se podría definir
\newcommand\eqvref[1]{\eqref{#1} \vpageref{#1}}
que luego agrega automáticamente una referencia de página si la ecuación está en una página diferente. Lo que eso no hace es agregar automáticamente la palabra “ecuación
”, aunque, por supuesto, también puedes codificarla en la definición. Sin embargo, se ofrece una solución más general para agregar palabras basadas en el contador al que se hace referencia con la declaración \labelformat
. Alternativamente, puede utilizar el paquete cleveref
analizado en la Sección 2.4.2, que proporciona una solución más sofisticada para esto.
\labelformat{counter}{formatting-code} \Ref{label}
Con \labelformat
\(\LaTeX\) ofrece la posibilidad de generar dichos adornos automáticamente. El comando toma dos argumentos: el nombre de un contador y su representación cuando se hace referencia. Por tanto, para un uso exitoso, es necesario conocer el nombre del contador que se utiliza para generar la etiqueta, aunque en la práctica esto no debería suponer un problema. Al procesar una referencia, el número de contador actual (o, más exactamente, su representación) se toma como argumento, por lo que el segundo argumento debe contener #1
para recuperarlo.
Un efecto secundario de usar \labelformat
es que, dependiendo del formato definido, resulta imposible usar \ref
al principio de una oración (si el texto de reemplazo comienza con una letra minúscula). Para superar este problema, también existe un comando \Ref
que se comporta como \ref
excepto que pone en mayúsculas el primer token de la cadena generada. En el siguiente ejemplo, puede observar este comportamiento cuando “sección” se convierte en “Sección”.
\usepackage[nospace]{varioref} \labelformat{section}{section~#1} \labelformat{equation}{equation~(#1)} \section{An example}\label{sec} \Ref{sec} shows the use of the \verb=\labelformat= declaration with a reference to \ref{eq}. \begin{equation} a = b \label{eq} \end{equation}
Para que el comando \Ref
funcione correctamente, el primer token en el segundo argumento de \labelformat
debe ser una sola letra ASCII; de lo contrario, la capitalización falla o, peor aún, terminas con algunos mensajes de error. Si realmente necesita algo más complicado en este lugar (por ejemplo, una letra acentuada), debe rodearlo explícitamente con llaves, identificando así la parte que debe escribirse en mayúscula. Por ejemplo, para referencias de figuras en el idioma húngaro, es posible que desees escribir \labelformat{figure}{{á}bra~\thefigure}
.
En pdf\(\TeX\) las llaves son necesarias, independientemente de si escribes el carácter acentuado como
\'a
o comoá
como hicimos arriba, porque en este motor los caracteres UTF-8 se ven como varios tokens incluso si en la pantalla parecen un solo personaje. La desventaja es que estas llaves evitan cualquier interletraje que la fuente pueda especificar entreá
y el siguiente carácter. Sin embargo, en \(XE TEX\) o Lua\(\TeX\) un carácter Unicode es un token único (no una secuencia de bytes) y, por lo tanto, se selecciona correctamente incluso sin las llaves. Así, con estos motores no se deben utilizar los tirantes para mejorar el resultado tipográfico.
Como segundo ejemplo del uso de \labelformat
, considere la siguiente situación: en la clase de documento informe
o libro
, las notas a pie de página están numeradas por capítulo. Hacer referencia a ellas normalmente sería ambiguo, dado que no está claro si nos referimos a una nota a pie de página del capítulo actual o a una nota a pie de página de un capítulo diferente. Esta ambigüedad se puede resolver agregando siempre la información del capítulo en la referencia o comparando el número del capítulo en el que apareció la “etiqueta” con el número del capítulo actual y agregando información adicional si difieren. Esto se logra mediante el siguiente código:
\usepackage{ifthen,varioref} \labelformat{footnote}{#1\protect\iscurrentchapter{\thechapter}} \newcommand\iscurrentchapter[1]{% \ifthenelse{\equal{#1}{\thechapter}}{}{ in Chapter~#1}}
El truco consiste en utilizar \protect
para evitar que \iscurrentchapter
se evalúe cuando se forma la etiqueta. Luego, cuando se ejecuta el comando \ref
, \iscurrentchapter
compara su argumento (es decir, el número de capítulo actual cuando se formó la etiqueta) con el número de capítulo actual y, cuando difieren, escribe la información apropiada.
2.4.1 varioref - Referencias cruzadas más flexibles
En muchos casos es útil, cuando se hace referencia a una figura o tabla, poner un comando \ref
y \pageref
en el documento, especialmente cuando una o más páginas separan la referencia y el objeto. Algunas personas usan un comando como
\newcommand\fullref[1]{\ref{#1} on page~\pageref{#1}}
para reducir el número de pulsaciones de teclas necesarias para realizar una referencia tan completa. Pero como nunca se sabe con certeza dónde cae finalmente el objeto al que se hace referencia, este método puede dar como resultado una cita de la página actual, lo cual es perturbador y, por lo tanto, debe evitarse. El paquete varioref
, escrito por Frank Mittelbach, intenta resolver ese problema automáticamente. Para esto, proporciona los comandos \vref
y \vpageref
para manejar referencias únicas, así como \vrefrange
y \vpagerefrange
para manejar referencias múltiples.
Recomendamos que siempre cargue el paquete con la opción nospace
, y esto es lo que asumimos a lo largo del libro. Sin él, varioref
manipula los espacios delante de sus comandos (e incluso agrega uno si no hay ninguno), pero esto causa una serie de problemas y, por lo tanto, debe evitarse. Algunos detalles más se dan en la página 85.
\vref*[same-page]{key} \Vref*[same-page]{key}
El comando \vref
es como \ref
cuando la referencia y \label
están en la misma página y no se usa el argumento opcional. Con el argumento opcional imprime el texto misma página después de la referencia. Si la etiqueta y la referencia difieren en una página, \vref
crea una de estas cadenas: “en la página siguiente”, “en la página anterior” o “en la página siguiente”. La palabra “frente” se utiliza cuando tanto la etiqueta como la referencia se encuentran en una doble página y el documento está tipográfico en modo “dos caras”. Cuando la diferencia es mayor que una página, \vref
produce tanto \ref
como \pageref
. Tenga en cuenta que cuando se utiliza un esquema de numeración de páginas especial en lugar de la numeración árabe habitual (por ejemplo, \pagenumbering{roman}
), no habrá distinción entre faltar una o varias páginas.
Si \varioref
se carga con la opción nospace
como se recomienda, entonces la forma de estrella no tiene ningún efecto a menos que también cargue hyperref
. En el último caso, evita que “hyperref” genere un hipervínculo para esta referencia. Si no se utiliza “nospace”, entonces la forma de estrella deja de agregar un espacio delante de la referencia.
El comando \Vref
funciona como \vref
excepto que internamente usa \Ref
en lugar de \ref
; es decir, pone en mayúscula la primera letra. Consulte más arriba para obtener una discusión sobre las restricciones que se aplican a su uso con pdf\(\TeX\).
\vpageref*[same-page][other-page]{key}
A veces es posible que solo desee hacer referencia a un número de página. En ese caso, se debe suprimir una referencia si se cita la página actual. Para ello se define el comando \vpageref
. Produce las mismas cadenas que \vref
excepto que no comienza con \ref
y produce la cadena guardada en \reftextcurrent
si tanto la etiqueta como la referencia se encuentran en la misma página.
Definir \reftextcurrent
para producir algo como “en la página actual” garantiza que texto como “… vea el diagrama que muestra…” no aparezca como “. . . vea el diagrama que lo muestra. . .
”, lo que podría resultar engañoso.
Un espacio delante de \vpageref
se ignora si el comando no crea ningún texto. Por tanto, la forma correcta de utilizar el comando es colocar un espacio a cada lado. Al igual que con \vref
, la forma de estrella no tiene ningún efecto cuando se usa la opción nospace
a menos que también se cargue hyperref
, en cuyo caso suprime el hipervínculo a la página.
De hecho, \vpageref
permite aún más control cuando se usa con sus dos argumentos opcionales. El primer argumento especifica un texto alternativo que se utilizará si la etiqueta y la referencia se encuentran en la misma página. Esto es útil cuando ambos están muy juntos, por lo que pueden estar separados o no por un salto de página. En tal caso, normalmente sabes si la referencia viene antes o después de la etiqueta para poder codificar algo como lo siguiente:
\vpageref[above]{ex:foo} which shows ... ... see the diagram
El texto resultante será “. . . Vea el diagrama de arriba que muestra. . .”cuando ambos están en la misma página, o “. . . consulte el diagrama en la página anterior al que se muestra. . .” (o algo similar, dependiendo de la configuración de los comandos \reftext..before
y \reftext..after
) si están separados por un salto de página. Sin embargo, tenga en cuenta que si utiliza \vpageref
con dicho argumento opcional para hacer referencia a una figura o tabla, dependiendo de los parámetros de ubicación del flotante, el flotante puede aparecer en la parte superior de la página actual y, por lo tanto, antes de la referencia. incluso si sigue la referencia en el archivo fuente.
Quizás incluso prefieras decir “. . . vea el diagrama anterior” cuando tanto el diagrama como la referencia se encuentren en la misma página; es decir, invierta el orden de las palabras en comparación con nuestro ejemplo anterior. De hecho, en algunos idiomas el orden de las palabras cambia automáticamente en ese caso. Para permitir esta variación, se puede utilizar el segundo argumento opcional otra página. Especifica el texto que precede a la referencia generada si tanto el objeto como la referencia no se encuentran en la misma página. Así, se escribiría
\vpageref[above diagram][diagram]{ex:foo} which shows ... ... see the
para lograr el efecto deseado.
\vpagerefrange*[same-page]{first}{last}
Este comando es similar a \vpageref
(sin el segundo argumento opcional) pero toma dos argumentos obligatorios: dos etiquetas que indican un rango. Si ambas etiquetas se encuentran en la misma página, el comando actúa exactamente como \vpageref
(con una sola etiqueta); de lo contrario, producirá algo como “en las páginas 15 a 18” (consulte las posibilidades de personalización que se describen a continuación). Tiene un argumento opcional que por defecto es la cadena almacenada en \reftextcurrent
y se usa si ambas etiquetas aparecen en la página actual.
Nuevamente existe una forma destacada, \vpagerefrange*
, que suprime un hipervínculo o la inserción de un espacio dependiendo de las opciones utilizadas.
\vrefrange[same-page]{first}{last}
Este comando \vrefrange
es simplemente una abreviatura conveniente para
\ref{first} to \ref{last} \vrefpagerange[same-page]{first}{last}
excepto que varía la palabra “a” según el idioma. Esto significa que es adecuado solo para rangos de longitud tres o más, porque con solo dos es mejor usar “y” entre las referencias como lo hicimos en el siguiente ejemplo.
\usepackage[nospace]{varioref} \renewcommand\theequation {\thesection.\arabic{equation}} \section{Test} Observe equations~\vrefrange{A}{C} and in particular equations~\ref{B} and~\ref{C} \vpagerefrange{B}{C}. \begin{equation}a=b\label{A}\end{equation} Here is a second equation\ldots \begin{equation}b<c\label{B}\end{equation} \ldots and finally one more equation: \begin{equation}a<c\label{C}\end{equation}
Proporcionar tus propios comandos de referencia
A veces es posible que desees definir tus propios comandos de referencia que hagan uso de las funciones varioref
internamente. Para ello, el paquete ofrece tres comandos auxiliares.
\vpagerefcompare{key1}{key2}{true-code}{false-code}
Este comando compara los números de página para key1 y key2 y luego ejecuta true-code o false-code dependiendo del resultado. El siguiente ejemplo muestra una aplicación no muy seria que compara dos etiquetas de ecuaciones e imprime texto dependiendo de sus posiciones relativas. Compare los resultados de las pruebas de la primera página con los de la segunda.
\usepackage[nospace]{varioref} \newcommand\veqns[2]{the equation% \vpagerefcompare{#1}{#2}% {s (\ref{#1})}% { (\ref{#1}) \vpageref{#1}}% \space and (\ref{#2}) \vpageref{#2}} Test: \veqns{A}{B}. \par Test: \veqns{A}{C}. \begin{equation} a=b \label{A}\end{equation} \begin{equation} b=c \label{B}\end{equation} \newpage Test: \veqns{A}{B}. \par Test: \veqns{A}{C}. \par We force eq.~\ref{C} to the next page! \newpage % for eq. to next page \begin{equation} c=a \label{C}\end{equation}
\vpagerefnearby{key}{true-code}{false-code}
Este comando le permite averiguar si una referencia de página generaría una referencia textual porque está en la página anterior, actual o siguiente o si simplemente generaría una referencia con un número de página. Dependiendo del resultado, se ejecuta el código verdadero o el código falso.
\vrefpagenum{cmd}{key}
El paquete también proporciona el comando \vrefpagenum
, que le permite escribir sus propios pequeños comandos que implementan funciones similares a las proporcionadas por los dos comandos anteriores. Se necesitan dos argumentos: el segundo es una etiqueta (es decir, como se usa en \label
o \ref
), y el primero es un nombre de comando arbitrario (asegúrese de usar el suyo propio) que se establece en el número de página. representación relacionada con esta etiqueta. Esto luego se puede utilizar para realizar comparaciones con números de página de otras etiquetas, pero tenga en cuenta que puede no ser un número.
Opciones de lenguaje
El paquete admite las opciones definidas por el sistema babel
(ver Sección 13.1.3); por tanto, una declaración como \usepackage[ngerman]{varioref}
produce textos adecuados para el idioma alemán. Si su documento está escrito en varios idiomas, debe especificarlos todos como opciones para que las cadenas se integren en el mecanismo de cambio de idioma de “babel”. Para los idiomas que (todavía) no son compatibles, debe especificar usted mismo las cadenas de idioma relevantes como se explica en la página 84.
Personalizaciones individuales
Para permitir una mayor personalización, las cadenas de texto generadas (que estarán predefinidas por las opciones de idioma) se definen mediante macros. Las referencias hacia atrás usan \reftextbefore
si la etiqueta está en la página anterior pero es invisible, y \reftextfacebefore
si está en la página opuesta (es decir, si el número de página actual es impar y el documento está configurado en dos caras
modo).
De manera similar, \reftextafter
se usa cuando la etiqueta aparece en la página siguiente pero hay que pasar la página, y \reftextfaceafter
se usa cuando está en la página siguiente, pero opuesta. Estas cuatro cadenas se pueden redefinir con \renewcommand
.
De hecho, \reftextfacebefore
y \reftextfaceafter
se utilizan sólo si el usuario o la clase de documento especifica la impresión a doble cara.
El comando \reftextfaraway
se utiliza cuando la etiqueta y la referencia difieren en más de una página o cuando no son numéricas. Esta macro es un poco diferente de las anteriores porque toma un argumento, la cadena de referencia simbólica, para que puedas usar \pageref
en su texto de reemplazo. Por ejemplo, si quisiera utilizar sus macros en documentos en idioma alemán, definiría algo como:
\renewcommand\reftextfaraway[1]{auf Seite~\pageref{#1}}
El comando \reftextpagerange
toma dos argumentos y produce el texto que describe un rango de páginas (los argumentos son claves que se usarán con \pageref
). De manera similar, \reftextlabelrange
toma dos argumentos y describe el rango de figuras, tablas o cualquier cosa a la que se refieran las etiquetas. Consulte a continuación los valores predeterminados del idioma inglés de ambos.
Para permitir alguna variación aleatoria en las cadenas generadas, puede usar el comando \reftextvario
dentro de las macros de cadenas. Este comando toma dos argumentos y selecciona uno u otro para imprimir dependiendo del número de comandos \vref
o \vpageref
que ya se encuentren en el documento (alternando entre el primer y el segundo argumento).
A modo de ejemplo, a continuación se muestran las definiciones predeterminadas en inglés de las distintas macros descritas en esta sección:
\newcommand\reftextfaceafter{on the \reftextvario{facing}{next} page} \newcommand\reftextfacebefore {on the \reftextvario{facing}{preceding} page} \newcommand\reftextafter {on the \reftextvario{following}{next} page} \newcommand\reftextbefore {on the \reftextvario{preceding page}{page before}} \newcommand\reftextcurrent {on \reftextvario{this}{the current} page} \newcommand\reftextfaraway [1]{on page~\pageref{#1}} \newcommand\reftextpagerange [2]{on pages~\pageref{#1}--\pageref{#2}} \newcommand\reftextlabelrange[2]{\ref{#1} to~\ref{#2}}
Si desea personalizar el paquete según sus propias preferencias, simplemente escriba las redefiniciones apropiadas de los comandos anteriores en el preámbulo de su documento o en un archivo con la extensión .sty
(por ejemplo, vrflocal.sty
) y cárguelo. con \paquete de uso
. Si también coloca \RequirePackage[nospace]{varioref}
(consulte la Sección A.6 en la página →II 693) al principio de este archivo, entonces su paquete local carga automáticamente el paquete varioref
.
A algunas personas no les gustan las referencias textuales a páginas, pero desean suprimir automáticamente una referencia de página cuando tanto la etiqueta como la referencia se encuentran en la misma página. Esto se puede lograr con la ayuda del comando \thevpagerefnum
de la siguiente manera:
\renewcommand\reftextfaceafter {on page~\thevpagerefnum} \renewcommand\reftextfacebefore {on page~\thevpagerefnum} \renewcommand\reftextafter {on page~\thevpagerefnum} \renewcommand\reftextbefore {on page~\thevpagerefnum}
Dentro de uno de los comandos \reftext
…, \thevpagerefnum
evalúa el número de página actual si se conoce o dos signos de interrogación en caso contrario.
De la misma manera puedes suprimir todas las referencias textuales a páginas si la referencia está en la página anterior o siguiente y mostrar el número de página solo cuando esté más alejada. Para esto, cambie las definiciones de la siguiente manera:
\renewcommand\reftextfaceafter {\unskip} \renewcommand\reftextafter {\unskip} \renewcommand\reftextfacebefore{\unskip} \renewcommand\reftextbefore {\unskip}
El \unskip
es necesario para eliminar el espacio que ya se agregó después de la referencia. Sin él terminas con dos espacios.
Algunos idiomas tienen una estructura de oraciones completamente diferente, por lo que no basta con ajustar sólo las frases individuales. Para atender esto, también existen \vrefformat
, \Vrefformat
, \vrefrangeformat
y \fullrefformat
. Por ejemplo, para el japonés existen definiciones como
\renewcommand\vrefformat[2]{\ref{#2}(\vpageref[#1]{#2})} % for Japanese \renewcommand\vrefformat[2]{\ref{#2} \vpageref[#1]{#2}} % all other % languages
Los paréntesis en la definición japonesa no son los caracteres normales, sino sus contrapartes anchas en las ranuras Unicode U+FF08 y U+FF09, algo que no se puede ver aquí pero que es importante cuando se usa junto con glifos kanji.
Personalización para varios idiomas con babel
Si usa el sistema babel
, las redefiniciones para idiomas individuales deben agregarse usando \addto
, como se explica en la Sección 13.6, por ejemplo,
\addto\extrasngerman{% \renewcommand\reftextfaceafter{auf der nächsten Seite}% ... }
No olvide agregar los signos de % apropiados como se muestra arriba. De lo contrario, un cambio de idioma podría generar espacios falsos en su documento.
Algunas cosas a tener en cuenta
Definir comandos como los descritos anteriormente plantea algunos problemas interesantes. Supongamos, por ejemplo, que un texto generado como “en la página siguiente” se divide en varias páginas. Si esto sucede, es muy difícil encontrar una solución algorítmica aceptable y, de hecho, esta situación puede incluso resultar en un documento que siempre cambia de un estado a otro (es decir, insertar una cadena; encontrar que esto es incorrecto; insertar otra cadena en la siguiente ejecución que hace que la primera cadena sea correcta nuevamente; La implementación actual del paquete varioref
considera relevante el final de la cadena generada. Por ejemplo,
Tabla 5 en la página actual ⟨salto de página⟩
sería cierto si la Tabla 5 estuviera en la página que contiene la palabra “página”, no en la que contiene la palabra “actual”. Sin embargo, este comportamiento no es completamente satisfactorio y en algunos casos puede resultar en un posible bucle (donde \(\LaTeX\) solicita una ejecución adicional una y otra vez). Por lo tanto, todas estas situaciones producen un mensaje de error \(\LaTeX\) para que pueda inspeccionar el problema y tal vez decidir usar un comando \ref
en ese lugar.
Durante la preparación del documento, mientras todavía se está cambiando el texto, dichos errores se pueden convertir en advertencias colocando un comando \vrefwarning
en el preámbulo. Esto equivale a especificar “borrador” como una opción para el paquete. \vrefshowerrors
asegura que varioref
se detenga al detectar un posible bucle. Este es el valor predeterminado y equivalente a especificar “final” como opción. Los comandos también se pueden usar dentro del documento si desea desactivar los errores solo en algunos lugares.
Además, tenga en cuenta los problemas potenciales que pueden resultar del uso de \reftextvario
en las definiciones predeterminadas: si hace referencia al mismo objeto varias veces en lugares cercanos, el cambio en la redacción cada dos veces puede parecer extraño. Para deshacerse de las variaciones introducidas por \reftextvario
sin redefinir todos los comandos \reftext
… que lo usan, simplemente puede redefinirlo para usar siempre el primero o el segundo de sus argumentos, por ejemplo,
\renewcommand\reftextvario[2]{#1}
en el preámbulo de su documento.
Comportamiento del paquete sin la opción nospace
Cuando se diseñó originalmente varioref
, tenía un comportamiento especial: sus comandos eliminaban cualquier espacio anterior y en su lugar insertaban el suyo propio. Por lo tanto, podría omitir un espacio antes de \vref
o \vpageref
y aún así colocaría la referencia en el lugar correcto. Pero esto significaba que no se podía escribir algo como (\vref{foo}
) y, por lo tanto, el paquete ofrecía formas de estrella de los comandos para evitar manipulaciones de espacio. Este sigue siendo el comportamiento predeterminado si usa el paquete sin la opción nospace
.
Sin embargo, este enfoque tiene varios inconvenientes. Por un lado, evita que hyperref
use las formas de estrella para la supresión de hipervínculos (que es una característica importante), hace que sus fuentes sean menos legibles si omite el espacio y no funciona bien con otros paquetes, por ejemplo, cleveref
. Es por eso que hoy en día recomendamos usar siempre la opción nospace
.
2.4.2 cleveref - Referencias formateadas inteligentemente
Ya hemos visto en la página 77 que \(\LaTeX\) ofrece cierto soporte ligero para referencias formateadas basadas en el contador utilizado en la referencia. El paquete “cleveref” de Toby Cubitt es la versión pesada de este enfoque. Además, admite referencias a múltiples etiquetas y con referencias numéricas o referencias de páginas ordena los resultados y comprime los rangos de manera adecuada. Los comandos varioref``\vref
, \Vref
y \vpageref
se amplían para admitir múltiples claves y formato de referencia. Todos los aspectos del formato se pueden personalizar en el preámbulo del documento, lo que hace de “cleveref” una solución verdaderamente completa y poderosa.
\cref*{key-list} \Cref*{key-list}
El comando principal ofrecido por cleveref
es \cref
. Acepta una única clave (como \ref
) o una lista de dichas claves separadas por comas. Luego formatea la referencia (o referencias) correspondiente (o referencias) según su tipo, por ejemplo, antepone palabras como “sección” o abreviaturas como “fig”. y posiblemente agregue otros adornos, como paréntesis alrededor de los números de ecuación.
Si se proporciona una lista de claves separadas por comas, utiliza formas plurales según corresponda y en listas más largas conoce las conjunciones apropiadas; por ejemplo, puede distinguir pares, conjuntos más largos de referencias individuales y rangos consecutivos, y puede manejar combinaciones de los mismos.
Debido a que el texto generado puede comenzar con una letra minúscula, el paquete ofrece además \Cref
para usar al comienzo de una oración. Se diferencia de \cref
por el uso de una primera letra mayúscula en el texto que se antepone al número de referencia. También siempre utiliza palabras completas, por ejemplo, “Figura”, no “Fig.”, mientras que \cref
puede producir abreviaturas si así se indica.
Si se utiliza el paquete hyperref
, la referencia tipográfica obtiene un hipervínculo al destino de referencia de forma predeterminada. Utilice la forma de estrella para suprimir este enlace.
\usepackage{amsmath,cleveref} \section{A Section}\label{sec:this} A reference to an equation in this section looks like: ‘‘see \cref{eq:a} in \cref{sec:this}’’. \begin{align} a &= b \label{eq:a} \\ b &< c \label{eq:b} \\ c &< d \label{eq:c} \end{align} \Cref{eq:c,eq:a,eq:b} above are \ldots
Como puede ver, la referencia a la ecuación se maneja de manera bastante diferente a la del encabezado: utiliza una abreviatura y agrega paréntesis alrededor del número de la ecuación, mientras que el encabezado se denomina “sección”. En comparación, \Cref
usó “Ecuaciones”; las referencias están ordenadas correctamente (aunque se dan en un orden diferente en la fuente) y el rango resultante se comprimió correctamente. La clasificación automática de referencias suele resultar útil. Si reorganiza partes de su texto, algunas de sus referencias pueden cambiar su orden y, sin esta clasificación, podría terminar con referencias extrañas como “ver figuras (1), (3) y (2)”.
Si tuviéramos dos ecuaciones adicionales y hiciéramos referencia a algunas de ellas, el resultado sería bastante diferente, como se muestra en el siguiente ejemplo:
% equations as before + 2 more \Cref{eq:c,eq:b,eq:a,eq:d,eq:e} are sorted and \cref{eq:c,eq:b,eq:a,eq:e} are sorted with a gap. But compare these results with referencing \cref{eq:c,,eq:b,eq:a,eq:d,eq:e}! Surprised?
El comportamiento del último \cref
en el ejemplo anterior puede haber sido un poco sorprendente: las referencias están ordenadas correctamente pero divididas en dos grupos con el primero comprimido. La razón es el “,,”. Le dice a Cleveref que la clave anterior (eq:c
) debe tratarse como una referencia final en cualquier rango al que pertenezca después de la clasificación. Por lo tanto, las ecuaciones eq:d
y eq:e
forman un segundo rango o más bien un par y, por lo tanto, obtenemos este resultado particular en la segunda oración del ejemplo. Esta función puede resultar útil a veces, pero en tal caso probablemente desee asegurarse de mantener las claves ordenadas en la fuente para comprender mejor lo que está sucediendo.
Si usa \cref
o \Cref
con una lista de claves, no es necesario que todas sean del mismo tipo ya que cleveref
felizmente las clasifica dentro de cada tipo y luego aplica el resto de su magia. Por supuesto, esto funciona bien sólo si los tipos son compatibles entre sí, por ejemplo, si se hace referencia a varios niveles de encabezado diferentes, a flotantes o a diferentes tipos de entornos de teoremas, etc. De lo contrario, podría terminar con construcciones extrañas.
\usepackage{cleveref} In \cref{fig:a,tab:a,fig:b,fig:c} we \ldots
Puede que no le gusten todos los valores predeterminados que aplica cleveref
, por lo que para modificarlos puede usar las opciones sort
(pero no comprimir), compress
(pero no ordenar), nosort
(no hacer ninguna de las dos cosas). , o ordenar y comprimir
(el valor predeterminado). Si los textos generados siempre deben estar en mayúscula, lo que a menudo se solicita en los estilos de la casa, use la opción “mayúscula”.
El paquete también comprende la mayoría de las opciones de idioma; por ejemplo, en el siguiente ejemplo usamos texto en alemán y desactivamos la compresión pero mantenemos la clasificación. No tenemos que usar “mayúscula”, porque los sustantivos alemanes siempre están en mayúscula.
\usepackage[ngerman,sort]{cleveref} \Cref{eq:c,eq:a,eq:b} in \cref{sec:this} \ldots
Otra opción útil es noabbrev
si no te gustan las abreviaturas utilizadas por \cref
en algunos idiomas como el inglés.
Finalmente, si usa cleveref
con hyperref
, las referencias tienen hipervínculos a su destino (a menos que se utilicen las formas de estrella de los comandos). De forma predeterminada, el área de enlace, es decir, el texto en el que puede hacer clic para navegar, es solo la etiqueta y no incluye el material adicional. Con la opción nameinlink
, puede cambiar esto para ampliar el área en la que se puede hacer clic. Para demostrar esto coloreamos las áreas de enlace en el siguiente ejemplo:
\usepackage[colorlinks,linkcolor=blue]{hyperref} \usepackage[nameinlink,noabbrev]{cleveref} \Cref{sec:this} contains \cref{eq:a,eq:b}. 2-4-10
\namecref{key} \nameCref{key} \lcnamecref{key} \namecrefs{key} \nameCrefs{key} \lcnamecrefs{key}
A veces resulta útil proporcionar solo el texto generado para un determinado tipo de referencia sin escribir el valor de la etiqueta. Los comandos anteriores hacen esto para usarse dentro de una oración y al comienzo de una oración, tanto en forma singular como plural. Los comandos \lcname
… siempre usan minúsculas, incluso si la opción mayúsculas
está vigente. Todos los comandos aceptan sólo una clave como argumento, porque una lista de claves no tendría sentido si no se establecen etiquetas.
\labelcref{key-list} \labelcpageref{key-list}
También hay \labelcref
y \labelcpageref
que imprimen las etiquetas o referencias de páginas sin anteponer ningún texto. Admiten listas de claves y aún agregan cualquier texto de conjunción necesario entre los elementos. Sin embargo, debido a que no se compone ningún texto que indique el tipo, los elementos en la lista-clave deben ser de un solo tipo.
\crefrange*{key1}{key2} \Crefrange*{keyfirst}{keylast}
En lugar de especificar una lista de claves larga con \cref
, puede usar \crefrange
o \Crefrange
usando las primera y última claves para indicar un rango consecutivo. Tenga en cuenta que se supone que este rango tiene al menos tres elementos; por lo tanto, hacer referencia a un rango de longitud dos resulta un poco extraño, como se muestra a continuación. Por lo tanto, para esto debería utilizar \cref{eq:b,eq:c}
.
\usepackage{cleveref} \Crefrange{eq:a}{eq:e} and in particular \crefrange{eq:b}{eq:c} show \ldots 2-4-11
\cpageref{key-list} \Cpageref{key-list} \cpagerefrange{keyfirst}{keylast} \Cpagerefrange{keyfirst}{keylast}
Estos son los comandos para manejar las referencias al número de página y, al igual que con \cref
, ordenarlas, comprimirlas y agregar las palabras y puntuaciones apropiadas en el idioma de destino.
\vref*{key-list} \Vref*{key-list} \vrefrange*{keyfirst}{keylast} \vpageref*{key-list} \vpagerefrange*{keyfirst}{keylast}
Si el paquete varioref
se usa con cleveref
, entonces algunas de sus funciones se cambian para admitir listas de claves en lugar de solo una clave como argumento. Tenga en cuenta que los argumentos opcionales no se admiten si ambos paquetes se utilizan juntos. Para su uso al principio de una oración, \Vrefrange
también define \Vrefrange
, \Vpageref
y \Vpagerefrange
, que no son ofrecidos por varioref
.
A continuación repetimos el Ejemplo 2-4-4 en la página 81 con ambos paquetes cargados. Tenga en cuenta que ahora podemos simplemente usar \vref
con una lista de claves en lugar de la construcción utilizada antes.
\usepackage[nospace]{varioref} \usepackage[noabbrev]{cleveref} \renewcommand\theequation {\thesection.\arabic{equation}} \section{Test} Observe \vrefrange{A}{C} and in particular \vref{B,C}. \begin{equation}a=b\label{A}\end{equation} Here is a second equation that appears on the next page \ldots \begin{equation}b<c\label{B}\end{equation} \ldots and finally one more equation: \begin{equation}a<c\label{C}\end{equation}
Personalizando las referencias
El texto generado por los comandos de Cleveref depende del “tipo” de referencia, que generalmente se basa en el contador utilizado por la referencia. Por ejemplo, los comandos \section
usan el contador section
, figure
establece el contador figure
, enumerate
los contadores enumi
a enumiv
para sus diferentes niveles de anidamiento, y así sucesivamente. Por lo tanto, el tipo de referencia para una enumeración de segundo nivel es “enumii”, mientras que el de una figura es “figura”. Hay algunas excepciones a la regla: los niveles de encabezado en la parte posterior tienen los tipos “apéndice”, “subapéndice”, etc., y los entornos tipo teorema usan el nombre del entorno si se carga “amsthm” o “ntheorem”.
Como el paquete tiene conocimiento sobre todos estos tipos estándar y define textos predeterminados para ellos, se puede utilizar de forma inmediata generando resultados como los que se muestran en los ejemplos anteriores.
Sin embargo, si carga paquetes adicionales que definen sus propios entornos o comandos con contadores referenciables o si simplemente no le gustan los textos predeterminados generados por cleveref
, entonces es fácil ajustarlos o ampliarlos utilizando las posibilidades de configuración que ofrece el paquete. como se analiza a continuación.
\crefname{type}{singular}{plural} \Crefname{type}{singular}{plural}
Estos dos comandos definen para un tipo dado el texto a componer cuando se hace una sola referencia y cuando se hacen varias referencias mediante \cref
y \Cref
, respectivamente. Por comodidad, varios tipos heredan sus valores predeterminados de otros tipos; por ejemplo, si cambia el tipo de “sección”, entonces la “subsección” y los otros niveles inferiores también heredan el nuevo texto, a menos que también proporcione una declaración explícita para ellos.
Si define para un tipo dado solo un \crefname
, entonces se proporciona automáticamente un \Crefname
correspondiente poniendo en mayúscula la primera letra en el segundo y tercer argumento. De manera similar, si solo se proporciona \Crefname
, entonces el paquete construye \crefname
aplicando \MakeLowercase
.
\creflabelformat{type}{format}
Si desea que las etiquetas de un determinado tipo tengan un formato especial, puede indicarlo con una declaración \creflabelformat
. El formato puede ser cualquier código \(\LaTeX\), y dentro de él #1
denota el lugar donde se coloca la etiqueta (por ejemplo, \thesection
), y #2
y #3
denotan el inicio. y puntos finales del área en la que se puede hacer clic si se produce un hipervínculo. Por ejemplo, para agregar un paréntesis de cierre a las referencias a un entorno “enumerar”, podría escribir
\creflabelformat{enumi}{#2#1)#3}
o para eliminar los paréntesis alrededor de las referencias de ecuaciones, la solución es escribir
\creflabelformat{equation}{#2#1#3}
\crefrangeconjunction \crefpairconjunction \crefmiddleconjunction \creflastconjunction
Para alterar las conjunciones entre múltiples etiquetas, existen varios comandos que contienen el material a insertar; todos se cambian usando \renewcommand
. Entre un rango consecutivo de etiquetas se agrega \crefrangeconjunction
, entre pares se usa \crefpairconjunction
y para listas más largas se agregan \crefmiddleconjunction
y \creflastconjunction
en los lugares apropiados.
Por ejemplo, si no le gustó el hecho de que las cifras se abrevian como “higos”. en el Ejemplo 2-4-8 en la página 87 y prefiere un guión de rango en lugar de la palabra “a”, entonces esto se puede organizar fácilmente de la siguiente manera:
\usepackage{cleveref} \crefname{figure}{figure}{figures} \newcommand\crefrangeconjunction{--} In \cref{fig:a,tab:a,fig:b,fig:c} we show all relevant data from the different experiments \ldots
\crefalias{type}{existing-type} \label[type]{key}
En lugar de configurar un (nuevo) tipo con \crefname
, etc., también puede especificar que la referencia de ese tipo debe formatearse de acuerdo con algún tipo-existente. Esto puede resultar útil en algunas circunstancias si desea que varios contadores (tipos) utilicen el mismo formato de referencia.
También puedes usar \label
con un argumento type opcional para sobrescribir el tipo predeterminado para las referencias a una etiqueta en particular. Por ejemplo, si desea referirse a algunas preguntas como “suposiciones”, lo siguiente será suficiente:
\usepackage{cleveref} \crefname{assume}{assumption}{assumptions} \creflabelformat{assume}{#2(#1)#3} \begin{equation} a=b\label[assume]{eq}\end{equation} Starting from \cref{eq} we get \ldots
Hay varios otros ajustes posibles con comandos de configuración adicionales que admiten casos especiales según lo necesiten algunos idiomas. Por lo tanto, si lo anterior no es suficiente para sus necesidades, consulte la documentación del paquete para conocer posibilidades de personalización adicionales.
Support for multiple languages
Hasta ahora cubrimos la personalización de comandos para el idioma principal de un documento. Si su documento utiliza varios idiomas y desea personalizar más de uno de ellos, entonces debe realizar los cambios en el mecanismo de cambio de idioma de babel
o polyglossia
. Aquí hay un ejemplo de babel
:
\usepackage[ngerman,english]{babel,cleveref} \crefname{figure}{figure}{figures} \newcommand\crefrangeconjunction{--} \AtBeginDocument{\addto\extrasngerman{% \crefname{figure}{Abbildung}{Abbildungen}% \renewcommand\crefrangeconjunction{--}}} In \cref{fig:a,tab:a,fig:b,fig:c} we have \ldots \par \selectlanguage{ngerman} In \cref{fig:a,tab:a,fig:b,fig:c} haben wir \ldots
Tenga en cuenta que las adiciones a \extrasngerman
deben realizarse después del comienzo del documento o dentro de \AtBeginDocument
para que tengan efecto y que tenemos que usar \renewcommand
, no \newcommand
, en este punto.
Manejo de entornos tipo teorema
Si define un nuevo entorno similar a un teorema con la ayuda de \newtheorem
, entonces cleveref
no utiliza el nombre del contador como tipo sino el nombre del entorno que se ha configurado.
También asume automáticamente que puede usar el título del entorno como texto de referencia (convertido a minúsculas si es necesario), pero no intenta establecer una forma plural ya que es demasiado irregular incluso en inglés. Por lo tanto, si procesamos el siguiente ejemplo, vemos que \Cref
y \cref
con una sola clave funcionan de inmediato, pero el último que usa una lista de claves falla sin más declaraciones.
\usepackage{cleveref} \newtheorem{thm}{Theorem} \newtheorem{lem}{Lemma} \begin{thm} A theorem. \label{thm:a}\end{thm} \begin{lem} A lemma. \label{lem:a}\end{lem} \begin{lem} Another one.\label{lem:b}\end{lem} \Cref{lem:b} is used to prove \cref{thm:a}. \\ But \cref{lem:a,lem:b} need formatting help.
Además de los signos de interrogación en la impresión, también recibimos advertencias como
LaTeX Warning: cref reference format for label type ‘lem’
undefined on input line 31.
en ese caso. La solución es proporcionar declaraciones \crefname
o \Crefname
apropiadas. Sin embargo, incluso eso no es suficiente si configuras los entornos similares a teoremas para que compartan un único contador: en ese caso, de repente obtenemos textos que siempre se refieren a teoremas y no a lemas cuando corresponde.
\usepackage{cleveref} \crefname{thm}{theorem}{theorems} \crefname{lem}{lemma}{lemmas} \newtheorem{thm}{Theorem} \newtheorem{lem}[thm]{Lemma} \begin{thm} A theorem. \label{thm:a}\end{thm} \begin{lem} A lemma. \label{lem:a}\end{lem} \begin{lem} Another one.\label{lem:b}\end{lem} \Cref{lem:b} is used to prove \cref{thm:a}. \\ But \cref{lem:a,lem:b} need formatting help.
Afortunadamente, Cleveref también tiene una solución para este caso. Todo lo que necesita hacer es usar el paquete amsthm
, ntheorem
o thmtools
para entornos tipo teorema (que de todos modos es preferible), y luego todo saldrá correctamente.
\usepackage{amsthm,cleveref} % Otherwise same setup as in previous example ... \Cref{lem:b} is used to prove \cref{thm:a}. \\ Now \cref{lem:a,lem:b} are typeset correctly.
Otras consideraciones especiales
El paquete cleveref
no se puede usar junto con el eqnarray
de \(\LaTeX\), o, más precisamente, no se puede usar \cref
para referirse a una \label
dentro de dicho entorno. Si realmente necesita esto, use \ref
en su lugar y proporcione el material textual necesario (por ejemplo, “eqs”) manualmente. En la mayoría de las circunstancias, es mejor utilizar los entornos proporcionados por amsmath
, porque ofrecen un espaciado mucho mejor entre las ecuaciones.
2.4.3 nameref - Referencias no numéricas
En algunos documentos es necesario hacer referencia a las secciones mostrando sus textos de título en lugar de sus números, ya sea porque no hay un número al que hacer referencia o porque el estilo de la casa lo requiere. Esta funcionalidad la proporciona el comando \nameref
, disponible a través del paquete nameref de Sebastian Rahtz (1955–2016) et al. Este paquete también lo carga automáticamente hyperref
.
Para las secciones numeradas y flotantes con subtítulos, los títulos son los que se mostrarían en las listas de contenidos (independientemente de si dicha lista está realmente impresa). Es decir, si se proporciona un título breve mediante el argumento opcional de un comando de sección o título, entonces este título se imprime con \nameref
. Esto puede resultar algo sorprendente para el lector si el título breve de un encabezado tiene una redacción notablemente diferente al título del cuerpo del documento. Por el contrario, las secciones no numeradas toman la referencia del título del título impreso. Si usa \nameref
con una clave de etiqueta no relacionada con un título (por ejemplo, una etiqueta en una nota al pie o un elemento de enumeración), simplemente muestra el título de la sección circundante.
Como \nameref
no produce el número del encabezado sino solo su título, debe usar adicionalmente \ref
si desea componer ambos. Más comúnmente, es posible que desee mostrar el título junto con una referencia de página para la cual puede usar la abreviatura \Nameref
. Tenga en cuenta que este comando rodea el título entre comillas simples, lo que puede no ser de su agrado y puede generar resultados extraños si usa otro tipo de comillas en otros lugares como lo hicimos en el siguiente ejemplo.
\usepackage{nameref} \setcounter{secnumdepth}{1} \section{Textual References}\label{num} Section \Nameref{num} proves that it is possible to reference unnumbered sections by referencing section ‘‘\nameref{unnum}’’. \subsection[Example]{A Small Example}\label{unnum} The current section is referenced in section~\ref{num}.
Si se usa \nameref
, también puede usar \nameref*
, que funciona como \nameref
pero evita un hipervínculo a la sección. Si carga solo nameref, ambos comandos tienen el mismo efecto.
2.4.4 showkeys, refcheck - Visualización y comprobación de claves de referencia
Al escribir un documento más grande, muchas personas imprimen borradores intermedios. En dichos borradores sería útil si las posiciones de los comandos \label
así como sus claves pudieran hacerse visibles. Esto es posible con el paquete showkeys
escrito por David Carlisle o el paquete refcheck
de Oleg V. Motygin.
Cuando se carga el paquete \label
, \ref
, \pageref
, \cite
y \bibitem
se modifican de manera que se imprima la clave utilizada. Los comandos \label
y \bibitem
normalmente hacen que la clave aparezca en un cuadro en el margen, mientras que los comandos que hacen referencia a una clave la imprimen en letra pequeña encima de la referencia formateada (posiblemente sobreimprimiendo algo de texto). El paquete se esfuerza por colocar las claves de tal manera que el resto del formato del documento se mantenga sin cambios. Sin embargo, no hay garantía para esto y es mejor eliminar o desactivar el paquete showkeys
antes de intentar el formateo final del documento.
\usepackage{amsmath,showkeys} \section{An example}\label{sec} \subsection{A subsection}\label{unused} Section~\ref{sec} shows the use of the \texttt{showkeys} package with a reference to equation~(\ref{eq}). \begin{align} a &= b \label{eq} \\ a &< b \label{eq2} \\ a &> b \end{align}
El paquete admite la opción fleqn
de las clases estándar y funciona junto con los paquetes de la colección \(AMS\)-\(\LaTeX\), varioref
, natbib
y muchos otros paquetes. Sin embargo, es casi imposible garantizar su funcionamiento seguro con todos los paquetes que se conectan a los mecanismos de referencia.
Si desea ver solo las claves del comando \label
en el margen, puede suprimir las demás usando la opción del paquete \notref
(que desactiva la redefinición de \ref
, \pageref
y archivos relacionados). comandos) o la opción notcite
(que hace lo mismo para \cite
y sus primos del paquete natbib
). Alternativamente, es posible que desee utilizar la opción “color” para que las etiquetas sean menos obstructivas.
También se admiten las opciones “borrador” (predeterminado) y “final”. Si bien este último es inútil cuando se usa a nivel de paquete, porque puede lograr el mismo resultado si no especifica el paquete showkeys
, draft
resulta útil si final
se especifica como una opción global en la clase y, sin embargo, Quiero visualizar las claves.
Si observa las claves utilizadas en el Ejemplo 2-4-20, entonces tanto “unused
” como “eq2
” nunca se usan en las referencias, y la tercera ecuación tiene un número de ecuación sin etiqueta. Si bien este último es directamente visible porque no hay ninguna clave encuadrada en el margen, las claves no utilizadas no se pueden identificar fácilmente, si es que se pueden identificar. Sin embargo, es probable que los tres casos sean errores o sobras; por ejemplo, algunas referencias fueron intencionadas pero nunca se hicieron o estuvieron mal escritas.
Para encontrar este tipo de problemas, puede utilizar el paquete refcheck
en lugar de showkeys
. En ese paquete, las etiquetas no utilizadas se muestran en los márgenes rodeadas de signos de interrogación y, en el caso de las etiquetas de ecuación, también subrayadas. Las ecuaciones con etiquetas a las que no se hace referencia muestran {?}
en el margen. Lo que no se muestra es el uso de claves por parte de \ref
, \pageref
o \cite
. Así, al rehacer nuestro ejemplo con este paquete, obtenemos el siguiente resultado:
\usepackage{amsmath,refcheck} \section{An example}\label{sec} \subsection{A subsection}\label{unused} Section~\ref{sec} shows the use of the \texttt{refcheck} package with a reference to equation~(\ref{eq}). \begin{align} a &= b \label{eq} \\ a &< b \label{eq2} \\ a &> b \end{align}
La verificación también se realiza para \bibitems
para que pueda ver fácilmente si tiene citas en su bibliografía a las que nunca se hace referencia en su artículo.
Si utiliza el paquete xr
para proporcionar referencias en diferentes documentos, también se pueden verificar; para obtener más detalles, consulte la documentación del paquete.
2.4.5 xr - Referencias a documentos externos
David Carlisle, basándose en el trabajo anterior de Jean-Pierre Drucbert (1947-2009), desarrolló un paquete llamado xr
, que implementa un sistema para referencias externas.
Si, por ejemplo, un documento necesita hacer referencia a secciones de otro documento (por ejemplo, other.tex
), puede especificar el paquete xr
en el archivo principal y dar el comando \externaldocument{other}
en el archivo preámbulo. Luego puede usar \ref
y \pageref
para hacer referencia a cualquier cosa que haya sido definida con un comando \label
ya sea en other.tex
o en su documento principal. Puede declarar cualquier número de dichos documentos externos.
Si alguno de los documentos externos o el documento principal utiliza la misma clave \label
, se produce un conflicto porque la clave está definida varias veces. Para superar este problema, \externaldocument
toma un argumento opcional en el que puede declarar un prefijo. Por ejemplo, con \externaldocument[A-]{other}
todas las referencias del archivo other.tex
tienen el prefijo A-
. Entonces, por ejemplo, si una sección en el archivo other.tex
tenía una \label{intro}
, entonces se podría hacer referencia a ella con \ref{A-intro}
. El prefijo puede ser cualquier cadena elegida para garantizar que todas las claves importadas desde archivos externos sean únicas.
Sin embargo, tenga en cuenta que si uno de los paquetes que está utilizando declara ciertos caracteres activos (por ejemplo, : en francés o ” en alemán), entonces estos caracteres no deben usarse dentro de los comandos \label
y, por lo tanto, no como parte del * prefijo* tampoco.
A partir de 2019, el paquete también admite referencias a \bibitems
; es decir, puede citar una entrada de bibliografía con \cite
o cualquiera de sus primos incluso si la bibliografía está almacenada en un documento separado.
El paquete no funciona junto con el paquete hyperref
porque ambos modifican el mecanismo de referencia interno. En su lugar, puede utilizar el paquete xr-hyper
, que es una reimplementación diseñada para funcionar con hyperref
.
2.4.6 hyperref - Referencias activas
El paquete hyperref
tiene una larga historia con muchos contribuyentes que se remontan a los primeros días de \(LaTeX 2ε\). El desarrollo original fue realizado por Sebastian Rahtz (1955-2016; ver página vii), con contribuciones de Heiko Oberdiek y David Carlisle; Más tarde, Heiko asumió el control, reescribió y amplió el paquete, por lo que la versión completa de hoy se debe en gran medida a sus esfuerzos. Ahora el paquete hyperref
lo mantiene el equipo del proyecto \(\LaTeX\).
El paquete permite convertir automáticamente todas las referencias cruzadas (citas, índices, etc.) en enlaces de hipertexto. También admite hipervínculos a recursos externos y, además, ofrece acceso a muchas funciones de PDF, como marcadores, etc. El paquete se describe en detalle en [57, págs. 35–67] y viene con su propio manual extenso [167 ]. Por lo tanto, en esta sección solo analizamos las funciones más importantes y útiles para el trabajo diario, pero tenga en cuenta que hay muchas más disponibles (solo en términos de teclas de opciones encontrará más de 100 en el manual).
Como se mencionó en la Sección 2.1.1, se está produciendo un cambio importante durante el cual \(\LaTeX\) se está modernizando para admitir PDF accesible; adaptar hyperref
es un paso importante de la tarea, y si comienza su documento con \DocumentMetadata
para indicar que desea utilizar la nueva funcionalidad, una gran parte de su código interno es diferente. El equipo del proyecto \(\LaTeX\) trabaja para mover partes centrales de hyperref
directamente al kernel de \(\LaTeX\), para limpiar el código y para ampliar y estandarizar sus características.
Estos cambios también tienen cierto impacto en los comandos del usuario: algunas características dependen del nuevo código. Por lo tanto, las opciones y comandos que no están disponibles o que se comportan de manera diferente sin \DocumentMetadata
están marcados con un símbolo de peligro en las siguientes secciones.
Usar “hyperref” puede ser bastante fácil. Simplemente incluirlo en su lista de paquetes cargados (preferiblemente como el último paquete) es suficiente para convertir todas las referencias cruzadas en su documento en enlaces de hipertexto. Para los documentos vistos en la pantalla de una computadora, esto brinda una ayuda invaluable para navegar a través de ellos.
Sin embargo, es posible que consideres que algunas de las configuraciones predeterminadas del paquete no son particularmente agradables (como colocar cuadros de colores alrededor de las áreas de enlaces), por lo que muchas personas llaman al paquete con algunas teclas ajustadas a su gusto. El paquete utiliza un enfoque clave/valor, y la mayoría de las claves se pueden configurar al cargar el paquete o más tarde usando una declaración \hypersetup
.
Enlaces proporcionados manual y automáticamente
Los hipervínculos dentro de un documento constan de dos partes: una región (de texto, generalmente) que, si se hace clic, indica al software de visualización que salte a una parte diferente del documento (el llamado punto de anclaje). Esto se logra colocando anclajes “con nombre” en los lugares de destino, rodeando regiones que deberían reaccionar a los clics con comandos apropiados que invocan algún tipo de acción de “ir al anclaje con un nombre determinado”.
Para poder saltar al lugar correcto, cada ancla necesita un nombre único y las regiones en las que se puede hacer clic deben saber a qué “nombre” deben apuntar. Esto se puede hacer manualmente con los dos comandos siguientes:
\hypertarget{name}{text} \hyperlink{name}{clickable text}
El \hypertarget
escribe el texto y además coloca un ancla con el nombre nombre delante. En una parte diferente del documento, puede crear un vínculo utilizando \hipervínculo
. La región en la que se puede hacer clic es el argumento texto en el que se puede hacer clic y, de forma predeterminada, está rodeado por un cuadro con bordes finos de colores. Si se utiliza de forma manual, es su responsabilidad asegurarse de que nombre sea único en todo el documento.
En muchos casos, no es necesario generar enlaces de documentos internos manualmente, porque “hyperref” lo hace automáticamente detrás de escena. Siempre que un comando o entorno está configurado para permitir referencias cruzadas, \hyperref
agrega un punto de anclaje, y cuando usa \ref
o \pageref
, rodea el número generado con un \hyperlink
para que al hacer clic ese número lo lleva a la sección, título, elemento de bibliografía o cualquier otra cosa a la que se haga referencia. Del mismo modo, añade hipervínculos a los títulos (y/o números de página) en el índice, lista de figuras, etc.
Si desea hacer una referencia sin un hipervínculo, utilice \ref*
o \pageref*
en su lugar. Crear hipervínculos a \labels
existentes en el documento también está disponible mediante el siguiente comando:
\hyperref[label]{text}
Este comando es útil si no desea componer una referencia normal, a través de \ref{label}
, sino que desea hacer referencia en texto al objeto al que apunta \label{label}
. El uso de \hyperref
convierte este texto en un área en la que se puede hacer clic. Si text debe contener además un \ref
para mostrar el número de referencia, use \ref*
en su lugar para evitar enlaces anidados (que no funcionan).
\MakeLinkTarget{}
\ref
, \pageref
y \hyperref
no saltan al lugar donde está escrito \label{label}
sino a la última estructura antes de \label
que estableció un ancla. Esto puede tener el efecto sorprendente (al menos para \pageref
) de que salta a una página diferente a la que se muestra en el resultado si, por ejemplo, la última sección estaba en una página anterior. En tales casos, se puede insertar un destino explícito antes de la etiqueta con \MakeLinkTarget
. Esto crea el ancla de destino necesaria para un enlace correcto si se carga “hyperref”.
El paquete hyperref
también genera enlaces desde las listas generadas por los comandos \tableofcontents
, \listoffigures
, etc., a las páginas con encabezados, figuras, tablas, etc. De forma predeterminada, las áreas en las que se puede hacer clic son los títulos de los encabezados o los subtítulos. Esto se puede cambiar con la clave linktoc
, que acepta los valores ninguno
, sección
(el valor predeterminado), página
o todos
(en cuyo caso tanto el título como el número de página se convierten en hipervínculos).
De forma predeterminada, los enlaces desde los marcadores de notas al pie en los párrafos al texto de la nota al pie en la parte inferior de la página se agregan automáticamente, excepto dentro de algunos entornos (como tabularx
) o cuando se cargan paquetes como bigfoot
que introducen su propio manejo de notas al pie. Tampoco obtendrá un enlace si usa \footnotemark
con un argumento opcional. Puede suprimir explícitamente dichos enlaces estableciendo “hyperfootnotes” en “false” si prefiere no tener ningún enlace de nota al pie.
También es posible generar automáticamente referencias de la bibliografía a las páginas donde se citan los elementos de la bibliografía. Esto puede resultar útil, especialmente durante la preparación de documentos. Esto se logra con la opción del paquete pagebackref
(que muestra los números de página en las que se cita un elemento bibliográfico) o backref
. Este último admite los valores “sección” (que muestra los números de las unidades de sección en las que se realizan las citas, el valor predeterminado), “diapositivas” para usar en presentaciones, “página” (igual que “pagebackref”) o “ninguno”. para prevenirlos.
Hay una restricción importante a tener en cuenta: el mecanismo para agregar enlaces requiere que después de cada entrada \bibitem
siempre haya una línea vacía o un comando \par
. Si esto falta y los \bibitems
se suceden directamente, entonces los enlaces están adjuntos al lugar equivocado.
Las opciones hyperref
para dichas referencias anteriores no son relevantes cuando se utiliza el paquete biblatex
para producir la bibliografía, porque este paquete implementa soporte completo para referencias anteriores con enlaces directamente, y su comportamiento puede y debe adaptarse utilizando las referencias relevantes. Opciones de biblatex
.
Los enlaces desde un índice a las páginas a las que se hace referencia también se generan automáticamente. Esto se puede controlar con la opción del paquete hyperindex
, que se puede configurar en false
si no se desea.
Los nombres de los anclajes son creados por \theH⟨ctr⟩
, que por defecto se expande a \the⟨ctr⟩
. Si esta representación no es única en todo el documento y recibe advertencias sobre nombres de destino duplicados, debe redefinirla, por ejemplo, agregando otro valor de contador.
Este es un problema común con los apéndices: sus definiciones a menudo ponen a cero el contador de capítulos o secciones y cambian el estilo de numeración. Por lo tanto, repetimos la definición de bajo nivel de la Sección 7 en la página 53 para demostrar lo que se necesita para que sea compatible con hyperref
. Comenzamos con una redefinición de \apéndice
. Aquí agregamos una redefinición de \theH⟨ctr⟩
para obtener un nombre de ancla único. Podríamos simplemente reflejar la definición \thesection
, pero en idiomas diferentes al inglés \Alph
quizás no se pueda utilizar como nombre de anclaje, por lo que usamos un prefijo en su lugar. Para evitar errores si la hiperreferencia no está cargada, también proporcionamos una definición predeterminada de \theHsection
:
\providecommand\theHsection{\arabic{section}} \makeatletter \renewcommand\appendix{% \renewcommand\section{% % Redefinition of \section... \clearpage\thispagestyle{plain}% % new page, folio bottom \suppressfloats[t]\@afterindentfalse % no top floats, no indent \secdef\Appendix\sAppendix}% % call \Appendix or \sAppendix \setcounter{section}{0}\renewcommand\thesection{\Alph{section}}% \renewcommand\theHsection{appendix-\arabic{section}}% for hyperref } \makeatother
No es necesario ningún cambio en el comando \Appendix
, pero debemos indicarle a hyperref el nivel del marcador:
\makeatletter \providecommand\toclevel@appendix{1} \makeatother
Como mínimo, el comando \sAppendix
(que implementa el formulario destacado) necesita un \MakeLinkTarget
para que cree un ancla utilizable para referencias de páginas:
\newcommand\sAppendix[1]{% % Simplified (starred) form {\raggedleft\large\bfseries\MakeLinkTarget{}% \appendixname\par \centering#1\par}% \@afterheading\addvspace{\baselineskip}} \makeatother
El caso especial de los contadores “enumerar”, que normalmente nunca son únicos en un documento, lo maneja internamente “hyperref”. Otro problema puede surgir de los números de página: hyperref
crea un ancla para cada página y asume que cada página tiene un nombre único. Este suele ser el caso porque los números de página romanos y árabes cuentan como diferentes, pero puede fallar si los documentos restablecen el número de página después de una portada. La solución más sencilla es establecer el número de página en un valor negativo para las portadas o utilizar un estilo de numeración diferente. Si la clase cablea dichos números de página duplicados, entonces otra opción es rodear las páginas de portada con el entorno NoHyper
: deshabilita todas las funciones hyperref
y, por lo tanto, suprime también la creación de anclajes.
Enlaces a recursos externos
También es posible con hyperref
vincular a recursos externos, por ejemplo, a algún localizador uniforme de recursos (URL) de Internet o a un archivo local, etc. En un archivo PDF, dichos enlaces vienen en tres “sabores”: enlaces a un URL, enlaces que inician (“ejecutan”) una aplicación externa para ver un archivo local y enlaces a otros archivos PDF que el visor de PDF puede cargar. Los tipos de enlaces se marcan automáticamente con diferentes colores o bordes de enlaces que se pueden especificar en \hypersetup
.
El comando básico para este tipo de enlaces es \href
, que intenta identificar el tipo del enlace basándose en algunos patrones, por ejemplo, si hay dos puntos en el destino o si el nombre del archivo termina en .pdf
. En la mayoría de los casos estándar, esto funciona bastante bien.
Ahora también existen los comandos más especializados \hrefurl
, \hrefrun
y \hrefpdf
que crean el tipo de enlace como lo especifica su nombre y ofrecen algunas opciones adicionales para manipular el destino del enlace. Estos últimos están disponibles sólo si se ha utilizado el comando \DocumentMetadata
al inicio del documento.
\href[options]{link target}{text} \hrefurl[options]{url}{text} \hrefrun[options]{file}{text} \hrefpdf[options]{file}{text}
El argumento text se compone y se convierte en el área en la que se puede hacer clic. Puede usar cualquier tipo de formato dentro del argumento text; simplemente lo escribe \(\LaTeX\) como de costumbre. El primer argumento obligatorio debe describir adónde debe llevarnos el enlace. Puede ser un sitio web (que comienza con https://
o http://
), pero existen muchos otros esquemas de URL definidos y admitidos por muchos lectores de PDF. Por ejemplo,
\href{mailto:frank.mittelbach@latex-project.org?subject=Typo found in TLC3}{Report Typo in TLC3}
escribiría el texto “Reportar error tipográfico en TLC3” en el documento y, si se hacía clic, abriría el programa de correo del lector con mi dirección de correo electrónico y una línea de asunto predeterminada precargada; pruébelo si encuentra un error tipográfico.
Los caracteres especiales #
, %
y ~
se pueden usar palabra por palabra en el argumento del destino del enlace. Esto es útil porque aparecen con bastante frecuencia en las URL de páginas web.
Si la URL contiene (como sucede ahora con bastante frecuencia) caracteres no ASCII, deben convertirse al formato “codificado por porcentaje” en el primer argumento de \href
; Esto significa, por ejemplo, que se debe introducir un enlace a la ciudad de Colonia como
\href{https://www.k%C3%B6ln.de}{Köln}
o si se usa en un argumento como
\href{https://www.k\%C3\%B6ln.de}{Köln}
Para este propósito, el comando \hrefurl
ofrece la opción urlencode
, que realiza la codificación porcentual por usted. Esto hace que la entrada \(\LaTeX\) sea considerablemente más larga, pero si la necesita con frecuencia, también puede configurarla como predeterminada configurando href/urlencode
en \hypersetup
.
\hrefurl[urlencode]{https://www.köln.de}{some text}
La mayoría de las URL utilizan el protocolo HTTPS. Para ahorrar algo de escritura, es posible preestablecer este protocolo con href/protocol
en \hypersetup
para \hrefurl
y \url
:
\hypersetup{href/protocol=https://} \hrefurl{www.latex-project.org.de}{some text} \url{www.latex-project.org.de}
Para vincular archivos en la computadora, simplemente puede ingresar el nombre del archivo en el argumento \href
, o puede iniciar una acción usando la notación especial “run:
” de hyperref
. El primer enfoque funciona bien para archivos PDF, mientras que una acción de inicio suele ser la mejor opción para todos los demás tipos de archivos. Le indica al sistema operativo que abra el archivo y, para que esto funcione, el sistema operativo necesita saber cómo hacerlo. Por lo tanto, si puede hacer doble clic en un archivo en su navegador de directorio y eso inicia un programa para ver o procesar el archivo, entonces ejecutar
: archivo en el argumento url hace exactamente lo mismo. Por ejemplo, escribir
\href{run:resources/video.mp4}{see the video}
escribe “ver el video” y, si se hace clic, se abre, después de un cuadro de diálogo de seguridad, el archivo video.mp4
en el subdirectorio recursos
relativo al documento actual en su visor predeterminado .mp4
. El argumento opcional opciones de \href
se puede utilizar si los archivos PDF se abren de esta manera en los visores Adobe Acrobat
. Acepta varias claves diferentes, por ejemplo, para especificar en qué “página” se debe abrir el archivo PDF; consulte el manual del paquete para obtener más detalles.
Poder iniciar otros programas de esta manera desde tu documento puede ser muy útil, por ejemplo, en presentaciones donde puedes agregar pequeños botones que inician una presentación de audio o video, etc.
Los enlaces a archivos PDF externos pueden saltar a anclajes en estos archivos. Si los archivos se han creado con \(\LaTeX\) e hyperref
, los nombres de los anclajes a menudo se pueden adivinar a partir de la representación: en muchos casos el nombre se construye a partir del nombre del contador, un punto y el valor. Por ejemplo, los anclajes a los encabezados se construyen de forma predeterminada como ⟨encabezado⟩.⟨número de encabezado⟩
. Por lo tanto, para saltar a la sección 1.3 en manual.pdf
, puedes escribir algo como
\href{manual.pdf#section.1.3}{see section 1.3 in the manual}
Los nombres de anclaje para otros tipos de objetos numerados son menos fáciles de adivinar. Las ecuaciones, por ejemplo, a menudo se numeran por capítulo o sección en las clases de documentos. Para tener una oportunidad de luchar por nombres únicos, hyperref
construye nombres como ecuación.⟨número de sección⟩.⟨ecuación-contravalor⟩
(donde el número de sección incluye el número de capítulo si la clase tiene capítulos). En caso de duda, puede echar un vistazo al archivo .aux
y buscar líneas que contengan el comando \newlabel
.
\hypersetup{. . . , baseurl = baseurl , . . . }
Para enlaces URL, es posible acortar los argumentos url proporcionando una URL base a través de la clave baseurl
, por ejemplo,
\hypersetup{baseurl=https://www.latex-project.org/} \href{publications.html}{Publications of the \LaTeX{} Project Team} \href{help/books.html} {Books about \LaTeX}
Esto ahorra un poco de escritura y puede facilitar los cambios posteriores si la mayoría o todas las URL tienen la misma base, pero tenga en cuenta que no todos los programas de visualización pueden lidiar con el hecho de que las URL se dividen en una parte base y un resto y que el La URL base se antepone solo si “hyperref” identifica que la URL hace referencia a un sitio web externo (por ejemplo, a través de la extensión “.html”). Si el espectador cree que es un archivo local, no se antepone ninguna URL base.
El establecimiento de una URL base se puede realizar solo una vez para todo el documento porque esta información está escrita en el catálogo PDF. Los enlaces a todos los demás lugares deben especificarse con su URL completa.
\url{url} \nolinkurl{url}
Un requisito muy común al escribir una URL externa es suprimir la separación de palabras normal y permitir que se rompa después de las barras diagonales y otros lugares. Esto lo proporciona el comando \url
del paquete de URL analizado en la Sección 3.4.7 en la página 198. Este paquete se carga mediante hyperref
y su comando se aumenta para que pueda hacer clic en url para abrirlo. Para escribir una URL sin un enlace, utilice \nolinkurl
.
\url
tiene un argumento opcional y puede, como \hrefurl
, codificar porcentualmente su argumento si contiene letras que no sean ASCII. Sin embargo, esto sólo se puede utilizar con motores Unicode: aunque el enlace está codificado correctamente en pdf\(\TeX\), la salida tipográfica del documento está alterada y muestra algo extraño, como www.kÃűln.de o similar, dependiendo del codificación de fuente actual.
Destacando enlaces
Los diversos enlaces generados automáticamente o mediante los comandos anteriores se pueden resaltar de diferentes maneras a través de una serie de claves, ya sea como opciones de paquete o en una declaración \hypersetup
. De forma predeterminada, las áreas en las que se puede hacer clic están rodeadas por un cuadro con reglas delgadas (en color). Al especificar una de las siguientes claves booleanas, puede cambiar ese comportamiento en todas partes de su documento.
colorlinks
Colorea el texto en el área en la que se puede hacer clic y establece el ancho de las reglas delgadas en cero para hacerlas invisibles.
hidelinks
No marque enlaces de ninguna manera.
El paquete hyperref
ofrece una serie de claves para cambiar los colores del texto y los bordes si están activados. Todas las teclas que configuran colores aceptan dos especificaciones de color: el nombre de un modelo de color junto con una lista de números separados por comas, o la sintaxis de color extendida, como la que se conoce en el paquete xcolor
.
\hypersetup{ linkcolor = [rgb]{1,0,0} } % red in rgb \hypersetup{ urlcolor = red!30!blue } % mix of red and blue
La compatibilidad con el color se crea utilizando código de la capa de programación L3 (que forma parte del formato) y, por lo tanto, está disponible sin necesidad de un paquete de color externo. Los documentos que no utilicen el nuevo código deberían cargar xcolor
.
Los colores utilizados para los enlaces individuales (cuando se usan colorlinks
) se pueden modificar en cualquier momento usando \hypersetup
y la siguiente clave:
linkcolor
Color para enlaces de documentos internos. filecolor
Color para las URL que abren archivos locales. runcolor
Color para ejecutar
: enlaces. urlcolor
Color para URL vinculadas externamente. menucolor
Color para enlaces “con nombre”. Estos son enlaces a funciones del menú del visor de PDF; ver página 108. allcolors
Establece todos los colores de los enlaces en el mismo valor.
Si se queda con los bordes alrededor de los enlaces (o desea usarlos además de obtener un resultado particularmente colorido), los nombres de las claves son los mismos que los anteriores con “bordercolor” en lugar de solo “color” al final del Nombre clave. Todos los colores de los bordes se pueden configurar con “allbordercolors”.
\hypersetup{ linkbordercolor = [rgb]{1,0,0} } \hypersetup{ urlbordercolor = blue!30 } \hypersetup{ allbordercolors = yellow }
Los bordes alrededor de las áreas de enlace (cuando se dibujan) son por defecto muy delgados, por lo que a menudo se vuelven invisibles cuando se representan en los programas de visualización.
Con pdfborder
puedes ajustar su ancho o volver a habilitar los bordes si se han deshabilitado con la tecla colorlinks
. Esta clave tiene una sintaxis algo oscura: debe proporcionar tres números: los dos primeros suelen ser cero y el tercero es positivo y especifica el tamaño de la regla en píxeles.
También existe la clave pdfborderstyle
que le permite subrayar enlaces o colocar guiones alrededor de ellos. Sin embargo, la función sólo es compatible con unos pocos espectadores; consulte el manual para obtener detalles y ejemplos.
Los bordes y estilos de borde también se pueden configurar para tipos de enlaces individuales usando claves como urlborder
o runborderstyle
.
El paquete hyperref
predefine una serie de combinaciones de colores para los colores de los enlaces según las sugerencias de los usuarios. Por defecto utiliza el esquema de color phelype
(llamado así por su autor, un miembro del equipo del proyecto \(\LaTeX\)). Los colores predeterminados utilizados por las versiones anteriores de hyperref
no eran del agrado de todos, pero si se desea, se pueden restaurar usando el esquema primary-colors
.
\hypersetup{ colorscheme = primary-colors }
Marcadores a.k.a también conocidos como vista de esquema
Es posible que un documento PDF contenga una vista de esquema, de manera similar a una tabla de contenido, que se puede utilizar para navegar por el documento en el visor. En la Figura 2.3 de la página siguiente se muestra una captura de pantalla de dicha vista en Adobe Acrobat Pro, con algunas de las opciones de formato descritas en esta sección. Estos “marcadores” pueden ser (y de forma predeterminada lo son) producidos automáticamente por el paquete “hyperref”. La opción del paquete “marcadores” (por defecto “verdadero”) elige si se producen marcadores.
\DocumentMetadata{} \documentclass{book} \usepackage{hyperref} \hypersetup{next-anchor=toc} \tableofcontents \bookmark[dest=toc,bold]{\contentsname} \bookmarksetup{open,openlevel=3} \chapter{Chapter A} \section{Section A.1} \subsection{Subsection A.1.1} \section{Section A.2} \bookmarksetup{openlevel=0} \chapter{Chapter B} \section{Section B.1} \subsection{Subsection B.1.1} \section{Section B.2} \bookmark[uri = {mailto:frank.mittelbach@latex-project.org?subject=Typo found in TLC3}, italic,level=0]{Report Typo in TLC3}
En versiones anteriores, esto requería al menos dos pases por \(\LaTeX\). En la primera pasada se escribió un archivo con extensión .out
que contenía información sobre cada unidad seccional más algunos datos contables. En ejecuciones posteriores, la información de la ejecución anterior se colocó en el documento PDF. Heiko Oberdiek mejoró esto en un paquete separado de “marcadores” que proporcionó una gestión de marcadores mucho más sofisticada, permitiendo formato adicional y el uso de colores en los marcadores y que evitó la necesidad de una segunda compilación.
El paquete “bookmark” ahora se ha fusionado con “hyperref” y reemplaza su código heredado. En sistemas más antiguos o cuando no se utiliza \DocumentMetadata
, el paquete bookmark
debe cargarse después o en lugar de hyperref
.
\bookmarksetup{options}
Los marcadores tienen su propio comando para configurar varios aspectos como el nivel o la profundidad. La lista completa de claves se puede encontrar en la documentación [159]; Presentamos aquí sólo algunos importantes.
Normalmente, los marcadores reflejan el contenido de la tabla de contenido y la profundidad de anidamiento a la que se agregan los marcadores es el valor del contador “toc Depth”. Esto se puede configurar y cambiar explícitamente a través de la opción “profundidad”. La clave acepta como valores números enteros que representan el nivel pero también nombres para el nivel como “sección”. Se puede configurar en cualquier lugar y, por lo tanto, permite cambiar la profundidad localmente. Al utilizar un valor negativo, se pueden suprimir los marcadores de todos los niveles.
\section{section} % shown \subsection{subsection} % shown \bookmarksetup{depth=section} \section{section} % hidden \subsection{subsection} % hidden \bookmarksetup{depth=-1} \section{section} % hidden
Con “numerados” puedes decidir si la cadena del marcador debe incluir los números de sección: de forma predeterminada no es así.
Con la tecla abrir
puedes decidir si la vista debe mostrar inicialmente solo el nivel superior (que es el valor predeterminado) o si debe mostrar todos los marcadores ya abiertos. Además, puede utilizar openlevel
para solicitar que inicialmente se abran los marcadores solo hasta un cierto nivel. El valor es un número entero (a diferencia de “profundidad”, no acepta un nombre) y se puede cambiar en el documento y, por lo tanto, permite ajustar qué partes se abren inicialmente.
Finalmente, con las teclas negrita
, cursiva
y color
se puede formatear el marcador. El formato siempre se aplica a todo el marcador y sólo algunos visores de PDF respetan la configuración. Por ejemplo,
\bookmark[dest=toc,bold,italic,color={red!50!green}]{\contentsname}
Incluso si se generan marcadores, es posible que no desee que se muestren automáticamente cuando se abre el documento. Esto se controla a través de pdfpagemode
, que se describe a continuación.
Los datos textuales en dichos marcadores pueden contener caracteres Unicode arbitrarios, pero no son posibles fórmulas complicadas o construcciones similares. El paquete hyperref
intenta analizar los títulos de las unidades seccionales y coloca solo cadenas permitidas en los marcadores, pero en algunos casos los resultados no son óptimos. Por ejemplo, supongamos que tiene
\section{Discussion of $a \leq b$}
como encabezado de documento. En primer lugar, esto da como resultado tres advertencias de la forma
Token not allowed in a PDF string (Unicode): (hyperref) removing ‘math shift’ on input line 46.
porque ni el $
(cambio matemático) ni el \leq
están permitidos. Peor aún, como consecuencia, el texto de su marcador se convierte en “Discusión de una b
”, lo cual es simplemente incorrecto. En tales casos, puede ayudar al paquete hyperref
usando \texorpdfstring
.
\texorpdfstring{TEX string}{PDF string}
El argumento \(\TeX\) cadena se usa cuando se realiza composición tipográfica normal, mientras que el segundo argumento se usa cuando se escribe un marcador. Este argumento puede incluso contener caracteres UTF-8 que no están disponibles para la composición tipográfica cuando se utiliza pdf\(\TeX\) y normalmente generaría un error. Así, escribiendo
\section{Discussion of \texorpdfstring{$a \leq b$}{a <= b}} % or with \section{Discussion of \texorpdfstring{$a \leq b$}{a _< b}} % U+2264 character
o incluso simplemente usar tres puntos como cadena PDF evitaría las advertencias y daría un mejor resultado como marcador.
\bookmark[options]{bookmark text}
Además de las generaciones automáticas de marcadores mediante comandos de sección, también es posible crear marcadores manualmente para permitir una fácil navegación a lugares que normalmente no se agregan a la tabla de contenido impresa, como el propio TOC. El destino de dicho marcador se proporciona con la clave “dest”, que necesita como valor el nombre del ancla al que debe apuntar. Dichos anclajes se pueden crear con \hypertarget
, pero para la tabla de contenido también puedes anular el nombre del anclaje creado automáticamente con la clave next-anchor
de \hypersetup
:
\hypersetup{next-anchor=toc} \tableofcontents \bookmark[dest=toc,level=0]{\contentsname}
Los marcadores no sólo le permiten saltar a lugares de un documento, sino que también son posibles otras acciones. Así, por ejemplo,
\bookmark[named=Print]{Print this!}
crea un marcador que, si el visor de PDF admite esta acción, abre el cuadro de diálogo de impresión. O para repetir el ejemplo del principio de la sección,
\bookmark[uri = {mailto:frank.mittelbach@latex-project.org?subject=Typo found in TLC3}] {Report Typo in TLC3}
Agregaría el texto “Reportar error tipográfico en TLC3” en los marcadores y, si se hacía clic, abriría el programa de correo del lector con mi dirección de correo electrónico de la misma manera que el enlace en el documento.
Propiedades del documento
Si observa las propiedades de un documento PDF, encontrará información sobre el título, el autor, el tema y las palabras clave. Se pueden configurar en el preámbulo con claves del mismo nombre pero con el prefijo “pdf”, por ejemplo,
\hypersetup{pdfauthor = Frank Mittelbach, pdftitle = {The LaTeX Companion, 3rd edition}, pdfsubject = Typesetting, pdfkeywords = {document structure, layout, design, LaTeX}}
Tenga en cuenta el uso de llaves para ocultar las comas en el título y la lista de palabras clave para que no se malinterpreten como separadores de claves. Al igual que con los marcadores, los valores deben ser datos textuales y hyperref elimina los comandos inadecuados. Esta es la interfaz heredada ofrecida por “hyperref” desde su primer lanzamiento. Sin embargo, es sólo un pequeño subconjunto de los metadatos que hoy en día suelen ser necesarios para que los documentos PDF cumplan con uno u otro estándar. Por lo tanto, eventualmente será reemplazada por claves ofrecidas por \DocumentMetadata
. Una vez que eso suceda, estas claves \hypersetup
quedarán obsoletas pero seguirán siendo funcionales para admitir la reutilización de documentos más antiguos.
Posibilidades de presentación en PDF (disponibles con algunos visores)
Si un documento PDF se abre en un programa de visualización como “Acrobat”, puede comenzar con diferentes configuraciones, por ejemplo, en pantalla completa, en una página diferente a la primera, con o sin algunos menús abiertos, etc. Estas configuraciones variantes pueden ya está especificado en el documento fuente, aunque como ocurre con muchos aspectos del paquete hyperref
, el comportamiento real depende del visor utilizado: todos funcionan con los programas Acrobat
de Adobe, pero no necesariamente en otros lugares. Por lo tanto, el resto de la sección describe la situación con el software “Acrobat”. Algunas de las claves también funcionan con otros visores, pero los resultados pueden diferir de un visor a otro, por lo que es necesario comprobarlo.
Quizás la clave más importante sea pdfpagemode
con la que puedes controlar el diseño de visualización inicial. Los valores posibles son UseNone
, UseThumbs
, UseOutlines
(es decir, mostrar marcadores), FullScreen
, UseOC
(cuando se usan capas superpuestas) y UseAttachments
.
Normalmente, el título de la ventana del documento muestra el nombre del archivo mostrado, pero si prefiere ver su título, agregue la clave pdfdisplaydoctitle
. El título debe configurarse con pdftitle
para esto; usar solo el comando \title
no es suficiente.
De forma predeterminada, Acrobat
comienza con una barra de menú y una barra de herramientas (o panel) abiertas. Su configuración se controla mediante las teclas pdfmenubar
y pdftoolbar
. Especialmente este último ocupa mucho espacio, por lo que prefiero desactivarlo estableciendo su clave en “falso”.
Las páginas se pueden presentar como páginas individuales o como dos páginas una al lado de la otra, y se pueden voltear o solicitar un desplazamiento continuo. Esto se controla a través de la tecla pdfpagelayout
que acepta seis valores diferentes: SinglePage
(voltear páginas al presionar las teclas hacia abajo o hacia arriba), OneColumn
(páginas individuales con desplazamiento), TwoPageRight
(dos páginas con páginas impares en el derecha) y TwoColumnRight
(lo mismo ocurre con el desplazamiento).
Tenga en cuenta que “Acrobat” no mira el número de página lógico, sino que simplemente usa el número físico para determinar pares e impares. Por lo tanto, también ofrece “TwoPageLeft” y “TwoColumnLeft”, pero ninguno de los dos ayuda si sus páginas no son continuas. En tal caso, realmente tendrá que agregar páginas vacías a su documento para que se muestre correctamente.
De forma predeterminada, se muestra la primera página física del archivo PDF. Para especificar una página de inicio diferente, utilice la clave pdfstartpage
. Nuevamente, si sus páginas lógicas están numeradas especialmente, es posible que deba contar para determinar el número de página física correcto para usar como valor. Con enlaces individuales que abren documentos PDF, también puede especificar una página de inicio con la clave “página” en el argumento opcional de “\href”.
Si abre documentos PDF a través de enlaces \href
, entonces Acrobat
reemplaza el documento actual por uno nuevo, lo que a menudo no es deseado. Con la clave booleana global pdfnewwindow
, puede especificar que se debe utilizar una nueva ventana en todos estos casos. Alternativamente, puede hacer esto en enlaces individuales en el argumento opcional de \href
.
También es posible agregar opciones de transición. Por lo general, solo tienen efecto si ve el PDF en modo de pantalla completa y agrega animaciones entre cambios de página, como páginas que vuelan hacia la pantalla o se disuelven en el fondo.
\hypersetup{pdfpagetransition={style=Glitter,duration=2, direction=180}}
Otras características diversas
Para el software de visualización Adobe Acrobat
, el paquete hyperref
ofrece soporte especial para acceder a los menús del programa mediante el comando \Acrobatmenu
. Le permite definir áreas en las que se puede hacer clic que actúan como si hubiera seleccionado el menú correspondiente. Se admite una gran cantidad de elementos de menú (consulte la documentación del paquete), pero probablemente solo algunos de ellos sean útiles.
\Acrobatmenu{FullScreen}{F} \Acrobatmenu{FitWidth}{W} \Acrobatmenu{NextPage}{R} \Acrobatmenu{PrevPage}{L}
Esto coloca “F”, “W”, “L” y “R” en la página, y si hace clic en ellos, se lleva a cabo la acción del menú de Acrobat, por ejemplo, su documento cambia de tamaño o avanza a la página siguiente, etc. Esto puede resultar útil ocasionalmente, pero si conoce los atajos de teclado correspondientes, no le resultará de gran ayuda. También tenga en cuenta que el área en la que se puede hacer clic es tan grande como los glifos en el segundo argumento, por lo que si intenta hacerlos discretos, no habrá mucho en lo que hacer clic a menos que use gris o incluso blanco. El color del borde alrededor del área del enlace se puede configurar con la tecla menubordercolor
o, si el texto del enlace está coloreado, con menucolor
.
El paquete también ofrece un conjunto útil de comandos para crear formularios PDF o HTML con campos, casillas de verificación, botones de opción, etc. Si está interesado en ese tipo de funcionalidad, consulte la documentación del paquete para obtener más detalles.
Como se mencionó al principio, el paquete ofrece más de cien claves para ajustar su comportamiento en determinadas situaciones, de las cuales cubrimos sólo las más importantes en esta sección. Si necesita alguna característica que parece no ser posible, estudie la extensa documentación del paquete; después de todo, es posible que exista.