Formatos de imagen e inclusión

Para poner una foto, una gráfica o un diagrama en un artículo o un libro, se incorpora un archivo de imagen externo al documento. La entrada es el comando \includegraphics del paquete graphicx. Esta página ordena la sintaxis básica, las opciones de escala, rotación y recorte, cómo configurar la ruta de búsqueda de imágenes y, sobre todo, qué formatos puede leer cada motor TeX. Dos ideas lo sostienen todo: la diferencia entre imágenes vectoriales y raster, y que los formatos aceptados dependen del motor con el que compilas.

graphicx y \includegraphics

La inclusión de imágenes la gestiona el paquete estándar graphicx. Cárgalo en el preámbulo con \usepackage{graphicx} y después escribe en el cuerpo \includegraphics[options]{filename}. graphicx amplía el paquete antiguo graphics; su rasgo distintivo es que las opciones se dan en forma key=value. Ambos vienen en el paquete estándar latex-graphics de LaTeX, así que no hay nada extra que instalar.

document.tex
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics[width=0.6\textwidth]{plot}
\end{document}

Lo importante aquí es omitir la extensión del nombre de archivo. En el ejemplo anterior, si existe plot.pdf o plot.png, LaTeX elige automáticamente el formato adecuado según el motor. Escribir la extensión dificulta cambiar de formato más adelante y puede fallar con nombres que contienen puntos, como plot.tar.gz. Por la misma razón, lo más seguro es evitar espacios y puntos en los nombres de archivos de imagen.

Si las imágenes están en otra carpeta, añade una ruta de búsqueda con \graphicspath. Cada nombre de directorio debe ir entre sus propias llaves, incluso si solo hay uno, y terminar con una barra /, también en Windows. LaTeX busca primero en el directorio actual y después en los directorios listados, en orden. Una ruta con espacios se encierra entre comillas, como {"my figures/"}.

latex
\usepackage{graphicx}
\graphicspath{ {figures/} {../shared-figures/} }

Opciones de tamaño, rotación y recorte

Dentro de los corchetes de \includegraphics se listan opciones como pares key=value. En la práctica, especificar el tamaño es casi obligatorio. width= y height= fijan directamente la anchura o la altura de salida; si se escriben relativas a \textwidth (anchura del texto) o \linewidth, como width=0.8\textwidth, la imagen se ajusta a la página. scale= es un multiplicador de su tamaño natural.

Dar a la vez width= y height= deforma la imagen al romper su relación de aspecto. keepaspectratio lo evita: con esa opción, la imagen se escala para caber dentro de la anchura y altura dadas conservando sus proporciones. Para rotarla, da en angle= un ángulo en grados medido en sentido antihorario; por ejemplo, angle=90 la gira un cuarto de vuelta.

Para recortar los bordes de una imagen, combina trim= con clip. trim recibe cuatro valores en el orden izquierda, abajo, derecha, arriba (no es el orden intuitivo arriba-abajo-izquierda-derecha). La unidad predeterminada es bp (big points). Y añade siempre clip: sin él, la parte que querías quitar no se descarta, sino que sobresale sobre el texto. Los valores negativos hacen lo contrario y añaden margen. También existe viewport=, que especifica la ventana de recorte con coordenadas absolutas.

latex
% 幅を本文幅の半分に
\includegraphics[width=0.5\textwidth]{photo}

% 縦横比を保って枠に収める
\includegraphics[width=8cm,height=5cm,keepaspectratio]{photo}

% 反時計回りに 90 度回転
\includegraphics[angle=90,width=6cm]{diagram}

% 左20 下20 右30 上10(bp) を切り落として表示
\includegraphics[trim=20 20 30 10,clip,width=6cm]{scan}

Las opciones principales pueden resumirse en una tabla. En la práctica, normalmente se combinan varias.

OpciónQué hace
width=Anchura de salida; son útiles valores relativos como 0.8\textwidth
height=Altura de salida
scale=Multiplicador del tamaño natural (scale=0.5 es la mitad)
angle=Ángulo de rotación antihorario (grados)
keepaspectratioMantiene las proporciones cuando se dan anchura y altura
trim= … clipRecorta izquierda, abajo, derecha y arriba; requiere clip, unidad predeterminada bp
page=Selecciona qué página incluir de un PDF multipágina

Vectorial frente a raster

Las imágenes se dividen en dos grandes familias, y la elección afecta al resultado. Las imágenes vectoriales describen puntos, líneas, curvas y texto mediante coordenadas matemáticas; PDF, EPS y SVG son los ejemplos principales. Como los contornos se recalculan a partir de esa descripción, se mantienen nítidos a cualquier aumento, y el texto también. Las imágenes raster (mapas de bits) son una cuadrícula de píxeles de color, principalmente PNG y JPEG. Al ampliarlas, cada píxel crece, de modo que los bordes se vuelven dentados o borrosos.

La regla práctica es esta: todo lo hecho de líneas y texto, como gráficas, dibujos de línea, circuitos o figuras con ecuaciones, debería ser vectorial (PDF/EPS/SVG). No depende de la resolución de impresión y se ve siempre bien en papel o pantalla. Las imágenes de tono continuo, como fotografías y capturas de pantalla, deberían ser raster (PNG/JPEG). Convertir una foto en vector no aporta nada y aumenta el archivo. Si usas raster, parte de datos con resolución adecuada para imprimir, normalmente 300 dpi o más. Si generas figuras dentro de LaTeX (TikZ, pgfplots, etc.), la salida es naturalmente vectorial.

También conviene distinguir PNG y JPEG. JPEG es compresión con pérdida pensada para fotografías; los archivos son pequeños, pero aparece ruido de compresión en los bordes de líneas y texto. PNG es sin pérdida y va bien para capturas de pantalla, gráficos de color plano y cualquier imagen que necesite transparencia. En caso de duda: JPEG para fotos, PNG para el resto de imágenes raster.

Qué formatos lee cada motor

Aquí es donde es más fácil equivocarse. Los formatos que acepta \includegraphics dependen de qué motor TeX procesa el archivo y qué controlador produce finalmente la salida. La ruta moderna principal, pdfLaTeX, LuaLaTeX y XeLaTeX con salida directa a PDF, lee PDF, PNG y JPEG de forma nativa. Pero esos motores no pueden leer EPS directamente. En cambio, la ruta clásica latex + dvips, que pasa por DVI, maneja EPS de forma nativa, pero no es adecuada para PDF o PNG.

Para japonés, pLaTeX / upLaTeX suele emitir DVI y convertirlo a PDF con dvipdfmx. Esta ruta maneja PDF, PNG, JPEG y EPS. Para PNG, JPEG y PDF puede hacer falta un archivo auxiliar (.xbb) que registre las dimensiones de la imagen, es decir, su caja delimitadora, generado con extractbb. Al usar graphicx con pLaTeX/upLaTeX, lo más seguro es indicar explícitamente el controlador de salida, como en \usepackage[dvipdfmx]{graphicx}; pdfLaTeX y similares lo detectan automáticamente.

Ruta de procesamientoFormatos nativos¿EPS?
pdfLaTeXPDF, PNG, JPEGNo; convertir con epstopdf
LuaLaTeXPDF, PNG, JPEGNo; convertir con epstopdf
XeLaTeXPDF, PNG, JPEGNo; convertir con epstopdf
pLaTeX/upLaTeX + dvipdfmxPDF, PNG, JPEG, EPSSí (requiere caja delimitadora)
latex + dvipsEPS (familia PostScript)Es su formato nativo

La conclusión práctica es sencilla: si empiezas desde cero, prepara las figuras como PDF, PNG o JPEG, y pasarán directamente por pdfLaTeX, LuaLaTeX, XeLaTeX o dvipdfmx. Las conversiones de las dos secciones siguientes solo hacen falta cuando lo único que tienes es EPS o SVG. Para las rutas de procesamiento en sí, consulta la página “How processing works”.

Incorporar EPS y SVG

EPS (Encapsulated PostScript) es un formato vectorial antiguo que todavía exigen algunas normas de envío heredadas. Para usar EPS con pdfLaTeX y similares hay que convertirlo a PDF; pero si cargas epstopdf package, el archivo EPS se convierte automáticamente a PDF durante la compilación y se incluye directamente. El mecanismo se engancha al procesamiento de graphicx, convierte con Ghostscript y omite el trabajo si ya existe un PDF con el mismo nombre. Como esta conversión automática ejecuta un programa externo, compila con --shell-escape (o -shell-escape). Al manejar EPS sin convertir, su BoundingBox, la línea inicial que indica la extensión de la imagen, debe existir y ser correcta.

latex
\usepackage{graphicx}
\usepackage{epstopdf}  % EPS をコンパイル時に PDF へ自動変換
% コンパイル例: pdflatex --shell-escape main.tex

SVG es el formato vectorial estándar en la web, pero ningún motor TeX lo lee directamente. Para incluirlo, usa el svg package. Proporciona \includesvg{file} y llama internamente a la línea de comandos de Inkscape para convertir el SVG a PDF (o a EPS cuando se produce salida DVI). También exporta el texto del SVG a un archivo separado que LaTeX compone, de modo que las etiquetas salen limpias con la fuente del documento. Como invoca Inkscape, también requiere --shell-escape y una instalación funcional de Inkscape. Si no, lo más fiable es convertir antes el SVG a PDF con Inkscape u otra herramienta.

Para el camino inverso, es decir, producir SVG a partir de la salida de TeX, existe dvisvgm. Convierte DVI (también EPS y PDF) a SVG, admite DVI vertical de pTeX y XDV de XeTeX, e incrusta en el SVG los contornos de los glifos necesarios. Es útil cuando quieres una ecuación o figura como SVG independiente para la web.

El flotante figure y problemas comunes

\includegraphics solo coloca la imagen en ese punto; no añade número ni caption. En un artículo, normalmente se pone la imagen dentro de un figure environment para que sea una “figura” numerada. Entonces LaTeX la hace flotar hasta una posición adecuada según la página, \caption{…} le da una descripción numerada, y \label/\ref permiten citarla desde el texto como “véase la figura 3”.

latex
\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.7\textwidth]{plot}
  \caption{測定値と理論曲線の比較。}
  \label{fig:plot}
\end{figure}

図~\ref{fig:plot} に示すように……

La colocación de flotantes, el significado de [htbp] y cómo poner figuras en paralelo se tratan en “Floats & placement”; el estilo de caption y las subfiguras en “Captions & subfigures”. Aquí se listan los problemas más habituales al incorporar imágenes.

  • Formato incorrecto para el motor: pasar EPS a pdfLaTeX produce errores como “Cannot determine size of graphic”. Haz la figura en PDF/PNG/JPEG o conviértela con epstopdf.
  • EPS BoundingBox: una línea BoundingBox ausente o incorrecta implica mala colocación. Corrígela con ps2eps o epstool.
  • PDF multipágina: por defecto solo se incluye la primera página. Elige una página con page=; para un documento completo, usa el pdfpages package.
  • Espacio en blanco en un PDF: márgenes grandes en un PDF de figura hacen que se vea pequeña. Recórtalos antes con pdfcrop (CTAN).
  • Espacios o puntos en nombres de archivo: espacios o puntos en la ruta o el nombre suelen romper la inclusión. Renombra el archivo o pon entre comillas una ruta con espacios.
  • Extensión fijada en el código: escribir la extensión impide cambiar de formato con facilidad. Como regla, escribe el nombre sin extensión.