Manual de LaTeX/Inclusión de gráficos/ Graficos con picture

El entorno de la imagen picture permite programar imágenes directamente en LaTeX. Por un lado, existen restricciones bastante severas, ya que las pendientes de los segmentos de línea y los radios de los círculos están restringidos a una elección estrecha de valores. Por otro lado, el entorno de imagen de LaTeX2e trae consigo el comando \qbezier, "q" que significa cuadrático. Muchas curvas de uso frecuente, como circunferencias, elipses y catenarias, se pueden aproximar satisfactoriamente mediante curvas cuadráticas de Bézier, aunque esto puede requerir cierto esfuerzo matemático. Si se usa un lenguaje de programación como Java para generar bloques \qbezier de archivos de entrada LaTeX, el entorno de la imagen se vuelve bastante poderoso.

Aunque la programación de imágenes directamente en LaTeX está severamente restringida y, a menudo, es bastante cansador, existen hay razones para hacerlo. Los documentos producidos son "pequeños" con respecto a los bytes, y no hay archivos gráficos adicionales para arrastrar.

Paquetes como pict2e, epic, eepic o pstricks mejoran el entorno de la imagen original y fortalecen enormemente el poder gráfico de LaTeX.

Comandos básicos

editar

Un entorno de imagen picture está disponible en cualquier distribución de LaTeX, sin la necesidad de cargar ningún paquete externo. Este entorno se crea con uno de los dos comandos.

\begin{picture}(x, y)
 ...
\end{picture}

o

\begin{picture}(x, y)(x0, y0)
...
\end{picture}

El primer par,  , afecta la reserva del espacio rectangular para la imagen dentro del documento,.

El segundo par opcional , asigna coordenadas arbitrarias a la esquina inferior izquierda del rectángulo reservado.

Los números x, y, x0, y0 son números en las unidades de \unitlength (longitudes), que se pueden restablecer en cualquier momento (pero no dentro de un entorno de imagen) con un comando como

\setlength{\unitlength}{1.2cm}

El valor predeterminado de \unitlength es 1pt.

La mayoría de los comandos de dibujo tienen una de las dos formas

\put(x, y){object}

o

\multiput(x, y)(dx, dy){n}{object}


Las curvas de Bézier son una excepción. Se dibujan con el comando

\qbezier(x1, y1)(x2, y2)(x3, y3)

Con paquete de imagen picture, se permiten la dimensión absoluta (como 15pt) y la expresión, además de los números relativos a \unitlength.

Segmentos de líneas

editar

Los segmentos de línea se dibujan con el comando:

\put(x, y){ \line(x1, y1){length} }

El comando \line tiene dos argumentos:

# un vector de dirección,
# una "longitud" (más o menos: este argumento es la longitud vertical en el caso de un segmento de línea vertical y en todos los demás casos la distancia horizontal de la línea, en lugar de la longitud del segmento en sí).

Los componentes del vector de dirección están restringidos a los enteros (−6, −5, ..., 5, 6) y deben ser primos (sin divisor común excepto 1). La siguiente figura ilustra los 25 valores de pendiente posibles en el primer cuadrante. La longitud es relativa a \unitlength.

\setlength{\unitlength}{5cm} \begin{picture}(1,1) \put(0,0){\line(0,1){1}} \put(0,0){\line(1,0){1}} \put(0,0){\line(1,1){1}} \put(0,0){\line(1,2){.5}} \put(0,0){\line(1,3){.3333}} \put(0,0){\line(1,4){.25}} \put(0,0){\line(1,5){.2}} \put(0,0){\line(1,6){.1667}} \put(0,0){\line(2,1){1}} \put(0,0){\line(2,3){.6667}} \put(0,0){\line(2,5){.4}} \put(0,0){\line(3,1){1}} \put(0,0){\line(3,2){1}} \put(0,0){\line(3,4){.75}} \put(0,0){\line(3,5){.6}} \put(0,0){\line(4,1){1}} \put(0,0){\line(4,3){1}} \put(0,0){\line(4,5){.8}} \put(0,0){\line(5,1){1}} \put(0,0){\line(5,2){1}} \put(0,0){\line(5,3){1}} \put(0,0){\line(5,4){1}} \put(0,0){\line(5,6){.8333}} \put(0,0){\line(6,1){1}} \put(0,0){\line(6,5){1}} \end{picture}

 

Flechas

editar

Las flechas se dibujan con el comando:

\put(x, y){\vector(x1, y1){length}}

Para las flechas, los componentes del vector de dirección están aún más restringidos que para los segmentos de línea, a saber, los enteros (−4, −3, ..., 3, 4). Los componentes también tienen que ser coprimos (sin divisor común excepto 1). Observe el efecto del comando \thicklines en las dos flechas que apuntan a la esquina superior izquierda.

\setlength{\unitlength}{0.75mm} \begin{picture}(60,40) \put(30,20){\vector(1,0){30}} \put(30,20){\vector(4,1){20}} \put(30,20){\vector(3,1){25}} \put(30,20){\vector(2,1){30}} \put(30,20){\vector(1,2){10}} \thicklines \put(30,20){\vector(-4,1){30}} \put(30,20){\vector(-1,4){5}} \thinlines \put(30,20){\vector(-1,-1){5}} \put(30,20){\vector(-1,-4){5}} \end{picture}

 


Círculos

editar

El comando

\put(x, y){\circle{diameter}}

dibuja un círculo con centro (x, y) y diámetro (no radio) especificado por diámetro. El entorno de la imagen solo admite diámetros de hasta aproximadamente 14 mm, e incluso por debajo de este límite, no todos los diámetros son posibles. El comando \circle* produce discos (círculos rellenos). Como en el caso de los segmentos de línea, uno puede tener que recurrir a paquetes adicionales, como eepic, pstricks, o tikz.

\setlength{\unitlength}{1mm} \begin{picture}(60, 40) \put(20,30){\circle{1}} \put(20,30){\circle{2}} \put(20,30){\circle{4}} \put(20,30){\circle{8}} \put(20,30){\circle{16}} \put(20,30){\circle{32}} \put(40,30){\circle{1}} \put(40,30){\circle{2}} \put(40,30){\circle{3}} \put(40,30){\circle{4}} \put(40,30){\circle{5}} \put(40,30){\circle{6}} \put(40,30){\circle{7}} \put(40,30){\circle{8}} \put(40,30){\circle{9}} \put(40,30){\circle{10}} \put(40,30){\circle{11}} \put(40,30){\circle{12}} \put(40,30){\circle{13}} \put(40,30){\circle{14}} \put(15,10){\circle*{1}} \put(20,10){\circle*{2}} \put(25,10){\circle*{3}} \put(30,10){\circle*{4}} \put(35,10){\circle*{5}} \end{picture}

 

Hay otra posibilidad dentro del entorno de la imagen. Si uno no tiene miedo de hacer los cálculos necesarios (o dejarlos a un programa), los círculos arbitrarios y las elipses se pueden unir a partir de las curvas cuadráticas de Bézier. Consulte Gráficos en LaTeX2e para ver ejemplos y archivos fuente Java.

Texto y fórmulas

editar

Como muestra este ejemplo, el texto y las fórmulas se pueden escribir en el entorno con el comando \put de la manera habitual:

\setlength{\unitlength}{0.8cm} \begin{picture}(6,5) \thicklines \put(1,0.5){\line(2,1){3}} \put(4,2){\line(-2,1){2}} \put(2,3){\line(-2,-5){1}} \put(0.7,0.3){$A$} \put(4.05,1.9){$B$} \put(1.7,2.95){$C$} \put(3.1,2.5){$a$} \put(1.3,1.7){$b$} \put(2.5,1.05){$c$} \put(0.3,4){$F=\sqrt{s(s-a)(s-b)(s-c)}$} \put(3.5,0.4){$\displaystyle s:=\frac{a+b+c}{2}$} \end{picture}

 

Comandos \multiput y \linethickness

editar

EL comando

\multiput(x, y)(dx, dy ){n}{object}

tiene 4 argumentos: el punto de partida, el vector de traducción de un objeto al siguiente, el número de objetos y el objeto a dibujar. El comando \linethickness se aplica a segmentos de línea horizontales y verticales, pero no a segmentos de línea oblicuos ni a círculos. Sin embargo, se aplica a las curvas cuadráticas de Bézier.

\setlength{\unitlength}{2mm} \begin{picture}(30,20) \linethickness{0.075mm} \multiput(0,0)(1,0){26}% {\line(0,1){20}} \multiput(0,0)(0,1){21}% {\line(1,0){25}} \linethickness{0.15mm} \multiput(0,0)(5,0){6}% {\line(0,1){20}} \multiput(0,0)(0,5){5}% {\line(1,0){25}} \linethickness{0.3mm} \multiput(5,0)(10,0){2}% {\line(0,1){20}} \multiput(0,5)(0,10){2}% {\line(1,0){25}} \end{picture}

 


Ovalos

editar

Los comandos

\put(x, y){\oval(w, h)}

o

\put(x, y){\oval(w, h)[position]}

produce un óvalo centrado en (x, y) y que tiene un ancho w y una altura h. Los argumentos opcionales de posición b, t, l, r se refieren a "abajo","arriba", "izquierda", "derecha" y pueden combinarse, como lo ilustra el ejemplo. El grosor de línea se puede controlar mediante dos tipos de comandos: \linethickness{''length''} por un lado, \thinlines y \thicklines por el otro. Mientras que \linethickness{''length''} se aplica solo a líneas horizontales y verticales (y curvas de Bézier cuadráticas), \thinlines y \thicklines se aplican a segmentos de línea oblicua, así como a círculos y óvalos.

\setlength{\unitlength}{0.75cm} \begin{picture}(6,4) \linethickness{0.075mm} \multiput(0,0)(1,0){7}% {\line(0,1){4}} \multiput(0,0)(0,1){5}% {\line(1,0){6}} \thicklines \put(2,3){\oval(3,1.8)} \thinlines \put(3,2){\oval(3,1.8)} \thicklines \put(2,1){\oval(3,1.8)[tl]} \put(4,1){\oval(3,1.8)[b]} \put(4,3){\oval(3,1.8)[r]} \put(3,1.5){\oval(1.8,0.4)} \end{picture}

 

Uso múltiple de cuadros de imagen predefinidos

editar

El cuadro se puede declarar con el comando:

\newsavebox{name}

luego definida por

\savebox{name}(width,height)[position]{content}

y finalmente arbitrariamente a menudo ser dibujado por

\put(x, y){\usebox{name}}

El parámetro de posición opcional tiene el efecto de definir el "punto de anclaje" del savebox. En el ejemplo, se establece en "bl", que coloca el punto de anclaje en la esquina inferior izquierda del savebox. Los otros especificadores de posición son arriba y derecha.

El argumento de nombre se refiere a un contenedor de almacenamiento de LaTeX y, por lo tanto, es de naturaleza de comando (que representa las barras invertidas en el ejemplo actual). Las imágenes en recuadro se pueden anidar: en este ejemplo, \foldera se usa dentro de la definición de \folderb. El comando \oval tuvo que usarse ya que el comando \line no funciona si la longitud del segmento es inferior a aproximadamente 3 mm.

\setlength{\unitlength}{0.5mm} \begin{picture}(120,168) \newsavebox{\foldera} \savebox{\foldera} (40,32)[bl]{% definition \multiput(0,0)(0,28){2} {\line(1,0){40}} \multiput(0,0)(40,0){2} {\line(0,1){28}} \put(1,28){\oval(2,2)[tl]} \put(1,29){\line(1,0){5}} \put(9,29){\oval(6,6)[tl]} \put(9,32){\line(1,0){8}} \put(17,29){\oval(6,6)[tr]} \put(20,29){\line(1,0){19}} \put(39,28){\oval(2,2)[tr]} } \newsavebox{\folderb} \savebox{\folderb} (40,32)[l]{% definition \put(0,14){\line(1,0){8}} \put(8,0){\usebox{\foldera}} } \put(34,26){\line(0,1){102}} \put(14,128){\usebox{\foldera}} \multiput(34,86)(0,-37){3} {\usebox{\folderb}} \end{picture}

 

Curvas cuadráticas de Bézier

editar

El comando

\qbezier(x1, y1)(x, y)(x2, y2)

dibuja una curva bezier cuadrática donde  ,   denotan los puntos finales y   denota el punto de control intermedio. Las pendientes tangentes respectivas,   y  , se pueden obtener de las ecuaciones

 

Vea Gráficos en LaTeX2e para un programa Java que genera la línea de comando \qbezier necesaria.

\setlength{\unitlength}{0.8cm} \begin{picture}(6,4) \linethickness{0.075mm} \multiput(0,0)(1,0){7} {\line(0,1){4}} \multiput(0,0)(0,1){5} {\line(1,0){6}} \thicklines \put(0.5,0.5){\line(1,5){0.5}} \put(1,3){\line(4,1){2}} \qbezier(0.5,0.5)(1,3)(3,3.5) \thinlines \put(2.5,2){\line(2,-1){3}} \put(5.5,0.5){\line(-1,5){0.5}} \linethickness{1mm} \qbezier(2.5,2)(5.5,0.5)(5,3) \thinlines \qbezier(4,2)(4,3)(3,3) \qbezier(3,3)(2,3)(2,2) \qbezier(2,2)(2,1)(3,1) \qbezier(3,1)(4,1)(4,2) \end{picture}

 


Como ilustra este ejemplo, dividir un círculo en 4 curvas Bézier cuadráticas no es satisfactorio. Se necesitan al menos 8. La figura muestra nuevamente el efecto del comando \linethickness en líneas horizontales o verticales, y de los comandos \thinlines y \thicklines en segmentos de línea oblicua. También muestra que ambos tipos de comandos afectan a las curvas cuadráticas de Bézier, y cada comando anula a todos los anteriores.

Catenarias

editar

\setlength{\unitlength}{1cm} \begin{picture}(4.3,3.6)(-2.5,-0.25) \put(-2,0){\vector(1,0){4.4}} \put(2.45,-.05){$x$} \put(0,0){\vector(0,1){3.2}} \put(0,3.35){\makebox(0,0){$y$}} \qbezier(0.0,0.0)(1.2384,0.0) (2.0,2.7622) \qbezier(0.0,0.0)(-1.2384,0.0) (-2.0,2.7622) \linethickness{.075mm} \multiput(-2,0)(1,0){5} {\line(0,1){3}} \multiput(-2,0)(0,1){4} {\line(1,0){4}} \linethickness{.2mm} \put( .3,.12763){\line(1,0){.4}} \put(.5,-.07237){\line(0,1){.4}} \put(-.7,.12763){\line(1,0){.4}} \put(-.5,-.07237){\line(0,1){.4}} \put(.8,.54308){\line(1,0){.4}} \put(1,.34308){\line(0,1){.4}} \put(-1.2,.54308){\line(1,0){.4}} \put(-1,.34308){\line(0,1){.4}} \put(1.3,1.35241){\line(1,0){.4}} \put(1.5,1.15241){\line(0,1){.4}} \put(-1.7,1.35241){\line(1,0){.4}} \put(-1.5,1.15241){\line(0,1){.4}} \put(-2.5,-0.25){\circle*{0.2}} \end{picture}

 

En esta figura, cada mitad simétrica de la catenaria   se aproxima mediante una curva de Bézier cuadrática. La mitad derecha de la curva termina en el punto (2, 2.7622), donde la pendiente tiene el valor m = 3.6269. Usando nuevamente la ecuación (*), podemos calcular los puntos de control intermedios. Resultan ser (1.2384, 0) y (−1.2384, 0). Las cruces indican puntos de la catenaria real. El error apenas se nota, siendo menos del uno por ciento. Este ejemplo señala el uso del argumento opcional del comando Plantilla:LaTeX / LaTeX. La imagen se define en convenientes coordenadas "matemáticas", mientras que mediante el comando

\begin{picture}(4.3,3.6)(-2.5,-0.25)

su esquina inferior izquierda (marcada por el disco negro) tiene asignadas las coordenadas (−2.5, −0.25).

Dibujando gráficos

editar

\setlength{\unitlength}{1cm} \begin{picture}(6,6)(-3,-3) \put(-1.5,0){\vector(1,0){3}} \put(2.7,-0.1){$\chi$} \put(0,-1.5){\vector(0,1){3}} \multiput(-2.5,1)(0.4,0){13} {\line(1,0){0.2}} \multiput(-2.5,-1)(0.4,0){13} {\line(1,0){0.2}} \put(0.2,1.4) {$\beta=v/c=\tanh\chi$} \qbezier(0,0)(0.8853,0.8853) (2,0.9640) \qbezier(0,0)(-0.8853,-0.8853) (-2,-0.9640) \put(-3,-2){\circle*{0.2}} \end{picture}

 

Los puntos de control de las dos curvas de Bézier se calcularon con fórmulas (*). La rama positiva está determinada por  ,   y  , < math> m_2 = 1 / \ cosh ^ 2 2 </math>. Nuevamente, la imagen se define en coordenadas matemáticamente convenientes, y a la esquina inferior izquierda se le asignan las coordenadas matemáticas (−3, −2) (disco negro).

El entorno picture y gnuplot

editar

El poderoso paquete de trazado científico gnuplot tiene la capacidad de enviar directamente a un entorno de imagen picture LaTeX. A menudo es mucho más conveniente dibujar directamente a LaTeX, ya que esto ahorra tener que lidiar con archivos postscript potencialmente problemáticos. Dibujar los datos científicos (o, de hecho, las cifras matemáticas) de esta manera proporciona un control mucho mayor y, por supuesto, la capacidad de composición tipográfica, de lo que está disponible por otros medios (como postscript). Dichas imágenes se pueden agregar a un documento mediante un comando \include{}.

Notar que gnuplot es una potente pieza de software con una amplia gama de comandos. Una discusión completa de gnuplot está más allá del alcance de esta nota. Consulte [1] para obtener un tutorial.