lunes, 23 de enero de 2012

Referencias a imágenes y tablas en LaTeX.


Una de las características que mas me llamo la atención al comenzar a utilizar LaTeX fue la forma en que maneja las referencias tanto a imágenes como a tablas, permitiendo no solo referenciarlas desde el documento si no también generar de forma automática una lista tanto de figuras como de tablas, donde se visualizara tanto el numero de figura, como la pagina donde se encuentra.

Para lograr esto es necesario utilizar una serie de comandos, tanto para agregar las imágenes y tablas al documento, como para hacerles referencia.
Si bien esto puede sonar a mas trabajo, tiene la ventaja de dar acceso a mas opciones y a un formato de apariencia mas profesional, permitiendo llevar de forma automática la numeración de figuras y tablas y agregarles algo de texto.

Para esto se utilizaran los “entornos” figure y table los cuales ya están definidos en LaTeX, estos “entornos” son unidades que el compilador de LaTeX posicionara de modo que no interrumpan el flujo del texto y tampoco queden “cortados” por el cambio de pagina, lo cual es muy importante para las tablas.

El formato básico de cada uno de esos entornos se describe a continuación.

\begin{figure}
\includegraphics[scale=0.25]{./tex/Img_2/trama}
\caption{Trama Capturada.}
\label{c2_trama}
\end{figure}

Donde cada comando tiene estas funciones:
  • \begin{figure} : Inicia el entorno figura.
  • \includegraphics[scale=0.25]{./tex/Img_2/trama}: Agrega la imagen ubicada en ./tex/Img_2/trama y cambia su tamaño a un 25%.
  • \caption{Trama Capturada.}: El texto que se desplegara debajo de la imagen.
  • \label{c2_trama}: Define c2_trama como la etiqueta que referencia esta figura en particular.
  • \end{figure}: Termina el entorno figura.

El resultado luce como la figura 1

Figura 1: Ejemplo de figura.
Notara en la figura la presencia de un rectángulo de color rojo rodeando el numero 2.2, esta es una referencia a la figura generada por el código anterior, la cual se puede crear en cualquier punto del documento, anterior o posterior a la imagen por medio del comando \ref{etiqueta}, este comando sera sustituido en el documento por el numero que identifica la figura con esa etiqueta.

Con respecto a las tablas el formato de es similar, siendo la principal diferencia el hecho que incluye el código que genera la tabla, como se ve a continuación

\begin{table}

\begin{tabular}{|c|c|c|c|c|}
\hline
0-3 Bits & 4-7 Bits & 8-15 Bits & 16-18 Bits & 19-31 Bits \\ \hline
Versión & Tamaño Cabecera & Tipo Servicio & \multicolumn{2}{|c|}{Longitud Total} \\ \hline
\multicolumn{3}{|c|}{Identificador} & Banderas & Posición Fragmento \\ \hline
\multicolumn{2}{|c|}{Tiempo de Vida} & Protocolo & \multicolumn{2}{|c|}{Suma de Verificación del encabezado} \\ \hline
\multicolumn{5}{|c|}{Dirección IP Origen} \\ \hline
\multicolumn{5}{|c|}{Dirección IP Destino} \\ \hline
\multicolumn{4}{|c|}{Opciones} & Relleno \\ \hline
\end{tabular}

\caption{Cabecera IP.}
\label{c2_tabla_cabecera_ip}
\end{table}

Los comandos usados aquí son:
  • \begin{table}: Inicia el entorno tabla.
  • \begin{tabular}: Inicia los comandos para generar la tabla.
  • \end{tabular}: Termina los comandos de generación de tablas.
  • \caption{Cabecera IP.}: Define el texto que aparecerá debajo de la tabla
  • \label{c2_tabla_cabecera_ip}: Indica al compilador que c2_tabla_cabecera_ip es la etiqueta que identifica esa tabla
  • \end{table}: Termina el entorno tabular.
Notara que no se menciono que hace el código entre \begin{tabular} y \end{tabular} esto se debe a que la generación de tablas no es el propósito de esta entrada.

Este código generara la tabla mostrada en la figura

Figura 2: Tabla ejemplo.
De nuevo la tabla tiene un numero identificador generado automáticamente y que puede obtenerse por medio del comando \ref{etiqueta} desde cualquier punto del documento.

Otra de las características del uso de estos entornos es el poder generar la lista de figuras y de tablas con solo un comando para cada lista, basta usar \listoffigures y \listoftables para conseguir la lista de todas las figuras o tablas del documento como muestran las figuras 3 y 4 respectivamente.


Figura 3: Resultado de \listoffigures

Figura 4: Salida de \listoftables

Observaciones sobre los entornos figure y table

Antes de concluir es necesario hacer hincapié en una serie de detalles que tienen ambos entornos, que pueden causar resultados no deseados y pueden ser difícil detectar.

Primero es muy importante que el comando \label se declare dentro del entorno, ya sea table o figure y después del comando \caption, no hacer esto hará que el compilador le regrese el numero equivocado al comando\ref.

Lo segundo tiene mas que ver con el compilador Tex live, es posible que se pase con otros, pero no lo he podido comprobar de primera mano, y es que al modificar el documento, sobretodo al agregar una nueva figura o tabla es necesario compilar el documento dos veces, el no hacerlo hará que el comando \ref regrese signos de interrogación en lugar de la referencia, esto es facil de detectar pues el compilador mandara un mensaje de advertencia.

Referencias


10 comentarios:

  1. Buen día, quería hacer la siguiente consulta, ¿qué diferencia hay al citar la tabla creada de esta forma tabla~\ref{tab:etiqueta_tabla} con esta otra tabla\ref{tab:etiqueta_tabla}?

    Lo he intentado de las dos formas y me da el mismo resultado aparentemente.

    ResponderEliminar
    Respuestas
    1. Si deveria de dar el mismo resultado, ya que en ambos casos estas usando la instrucción para hacer referencia, en este caso \ref{tab:etiqueta_tabla}.

      Eliminar
  2. quiero hacerte una pregunta como hago para que el rectangulo de color rojo no aparezaca.

    ResponderEliminar
  3. Eso se logra poniéndole la opción [hidelinks] al paquete hyperref
    Para hacer esto remplaza la linea \usepackage{hyperref} por
    \usepackage[hidelinks]{hyperref}

    ResponderEliminar
  4. Como puedo poner la etiqueta de la imagen en la parte superior de la misma?

    ResponderEliminar
  5. Gracias por aclarar que hay que escribir el comando \label después del comando \caption. No sabía porqué me generaba signos de interrogación en vez de los números.

    ResponderEliminar
  6. Hola, una duda, ¿existe algún comando para nombrar una tabla sin convertirla en un objeto flotante? ya que debo ponerla con texto a dos columnas y si bien el entorno table me las etiqueta no me deja ponerla entre el texto, muchas gracias!

    ResponderEliminar
  7. Estimado, como puedo hacer que la referencia no sea un argumento solo numérico sino que tenga la forma "texto. número" como por ejemplo que al pinchar la frase "Fig.1" me dirija a la figura 1???

    ResponderEliminar
  8. Buenas tengo una consulta, cuando referencia la imagen el texto me sale signos de preguntas, en lugar del número de la figura, me pueden indicar como solucionarlo?

    ResponderEliminar
  9. Como puedo poner la etiqueta de la imagen en la parte superior de la misma?

    ResponderEliminar