martes, 8 de noviembre de 2011

Cómo modificar el texto de una figura vectorial

Una de las ventajas de LaTeX es su tratamiento de figuras vectoriales. En esta entrada mostraré cómo se puede modificar en LaTeX el texto de una figura vectorial. Nuestro documento .tex tendrá la forma siguiente, donde además se cargan las librerias graphicx y psfrag, necesarias para insertar figuras y para tratar el texto de figuras, respectivamente:

\documentclass[a4paper,openright,12pt]{report}
\usepackage[spanish]{babel} % espanol, ingles
\usepackage[latin1]{inputenc} % acentos sin codigo
\usepackage{graphicx} % graficos
\usepackage{psfrag} % modificar texto en graficos

\begin{document}

\end{document}

Supongamos que tenemos un dibujo vectorial con un texto (dragon.eps). Entre los distintos programas que se pueden usar para crear el dibujo en eps, yo utilizo Diaw.exe, que es muy sencillo y gratuito. En el siguiente enlace puedes ver un tutorial de dicho programa (click aquí), realizado por el grupo CAChemE.org.


Insertamos el dibujo fácilmente en nuestro documento con las instrucciones siguientes:

\begin{figure}[htb]
\centering
\includegraphics[width=0.4\textwidth]{./dragon}
\caption{Farola y dragón.} \label{fig:dragon}
\end{figure}



Sin embargo, nos encontramos con un pequeño inconveniente. El formato del texto del dibujo, no coincide con el formato del texto del resto del documento. Para solucionarlo, usamos la instrucción psfrag{texto1}{texto2}, que busca en el dibujo vectorial el texto "texto1" y lo sustituye por "texto2", con la fuente, tamaño y formato correspondiente.

\begin{figure}[htb]
\centering
\psfrag{Bicho}{Dragón}
\includegraphics[width=0.4\textwidth]{./dragon}
\caption{Farola y dragón.} \label{fig:dragon}
\end{figure}

14 comentarios:

Laura dijo...

Hola! Enhorabuena por el blog.
Estoy intentando cambiar el nombre a los ejes a una imagen .eps tal y como explicas en el post, pero me está dando problemas. Te copio mi trozo de código:

\begin{figure}[htbp]
\psfrag{x(t)}{x(t)}
\psfrag{Time (s)}{Time (s)}
\begin{center}
\includegraphics[width=0.45\textwidth]{lorenz.eps}
\caption{Lorenz signal in x axis }
\label{figLorenz}
\end{center}
\end{figure}

La imagen la inserta bien, pero simplemente no cambia nada. También he puesto al principio \usepackage{psfrag}. Gracias de antemano!

Luis dijo...

Hola Laura, ¡gracias!

Pues no sabría decirte cuál es el problema. Se me ocurren varias posibilidades:

1) Que estes compilando en pdfLaTeX, no en LaTeX. (Si usas TeXnicCenter, hay que poner "LaTeX=>PS=>PDF")

2) Que aunque la imagen sea eps, el texto no se creo como eps. Es decir, no vale hacer una imagen con el Paint, y luego transformarla a eps...

3) Que en la imagen no esté el texto que estás intentando cambiar. ¿Quizás en tu imagen original, pone "Time(s)" en vez de "Time (s)" (sin el espacio)? ¿O quizás pone "X(t)" en vez de "x(t)" (con mayúscula)?

4) Por cierto, cómo estás haciendo la imagen eps. ¿Lo haces con Matlab y salvando la figura en eps?

Ya sabes que con Matlab, puedes generar el texto de los ejes, directamente con formato de LaTeX, con los comandos:

ylabel('Time (s)','Interpreter','latex');
xlabel('x(t)','Interpreter','latex');

pero esto luego no permitirá poder cambiar el texto con psfrag. Para poder cambiarlo, hay que poner sencillamente:

xlabel('x(t)')
ylabel('Time (s)')

Y otra cosa más. Si al final con psfrag, el texto te queda muy grande, ya sabes que puedes cambiar el tamaño fácilmente:

\psfrag{x(t)}{\scriptsize{x(t)}}


No se me ocurre nada más. Si lo consigues, dímelo. :-)
Hasta luego.

Laura dijo...

Hola!

Utilizo TexShop para Mac, y compilo en pdflatex, que es la opción que venía por defecto. Es posible que sea ese el problema, pero no he conseguido compilar en Latex.

La imagen la creo en MatLab y la guardo en eps directamente, sí. Por cierto, como has deducido que uso MatLab?? ;)

De todas formas, no sabía de la opción para generar los nombres de los ejes con el formato de Latex. De momento, la solución me sirve. Pero seguiré investigando..

Muchas gracias :)

Luis dijo...

Hola Laura,

pues creo que el problema está en el pdfLaTeX. Porque el paquete psfrag, trabaja con el fichero PS, que el pdfLaTeX no crea.

Hasta luego

Unknown dijo...

Hola Luís, a mi me está pasando lo siguiente.

Estoy usando WinEdt y el siguiente código:


\begin{figure}[htb]
\centering
\psfrag{+}{$+$}
\psfrag{Z}{$Z$}
\psfrag{V1}{$V_1$}
\psfrag{V2}{$V_2$}
\psfrag{V3}{$V_3$}
\includegraphics[scale = 0.27]{Diagrama1.eps}
\end{figure}

El resultado que obtengo es una imagen y al costado me dice:

PSfrag replacements

+
Z
V1
V2
V3

Pero la cuestión es que no me cambia las letras de la imagen (que fue creada en dia y exportada en .eps) por letras de latex. ¿Alguna solución?

Luis dijo...

Hola Matías, ¿qué tal?

¿qué tipo de \documentclass estás usando? ¿"report", "article", "book"... u otro distinto? A lo mejor estás usando un formato específico de alguna revista o congreso, que no esté preparado para trabajar con psfrag... Si es así, mira a ver si te funciona con "report", para ver si ese es el problema.

Ya me dirás.

Hasta luego, y suerte. :-)

Unknown dijo...

Hola, estoy cambiando el texto a unas fuguras y me funciona bién, pero cuando compilo las rayas de las fracciones y otras se ven más gruesas, alguién sabe como puedo solucionar eso.

Saludos y gracias

Luis dijo...

Hola jfvc84

con \dfrac, en vez de con \frac, a mí me funciona bien.

Hasta luego

dai dijo...

hola, estoy creando unas figuras en matlab, utilizo el interprete de latex para las etiquetas de los ejes y titulo pero los números de las coordenadas tienen otro tipo de letra (ej. helvetica).

Sabes como puedo lograr que todo tenga el mismo estilo de latex?

Luis dijo...

Hola Dai,

que yo sepa, para los ejes aún no funciona el interprete de LaTeX de Matlab. En internet, he visto que hay gente que ha desarrollado aplicaciones de Matlab para hacer eso. Pero aún no es algo que venga implícito en el programa.

http://blogs.mathworks.com/pick/2007/09/24/tex-interpreter-in-x-tick-and-y-tick-labels/

Otra posibilidad, es hacerlo con psfrag.

Hasta luego

Unknown dijo...

Hola, disculpa tengo unas preguntas:
1. ¿es posible realizar lo mismo si en ves de crear una imagen eps usando el corel, creara una imagen pdf?
2. Tengo un problema, yo estoy trabajando con un documento tipo boock y cuando ingreso la imagen eps me sale error. cabe mencionar que estoy trabajando con el tsmaker

Luis dijo...

Hola Son,
Cuando trabajamos con imágenes en eps, compilamos LaTeX->PS->PDF.
Cuando trabajamos con imágenes en pdf (y también cuando trabajamos con algunos paquetes especiales), compilamos LaTeX->PDF (sin pasar por PS).

El paquete {psfrag}, trabaja con el archivo PS. En el segundo caso, no se crea el archivo PS, y por tanto, no funciona.

Hasta luego

Luis dijo...

Hola, estaba buscando formas de añadir documentos completos o páginas de PDF al archivo .tex, de tal forma que al compilar no sólo aparezca lo que hay en el .tex, sino también las páginas que le agregué de los otros documentos. Vi que esto puede hacerse con un paquete llamado "pdfpages", pero lamentablemente toda la información que encontré está en inglés y a la hora de intentar usarlo obtengo algunos errores. ¿Crees que podrías hacer un tutorial sobre esto?

Unknown dijo...


Hola, intento cambiar la palabra Neuron por Neurona en un archivo .eps que inserto pero no hace nada. Compila bien, pero no produce el cambio.
Compilo con el comando pdflayex.
Hay alguna otra opción?
Abajo copie el codigo, gracias!
Alejandro
\begin{figure}[htbp]
\centering
\psfrag{Neuron}{Neurona}
{\includegraphics[width=80mm]{./figuras/fig1neurogenesis}}
\caption{\small {\textbf{Reglas para la generaci\'on de \'arboles de linaje.}}}
\end{figure}