Ver canal RSS

Tras la puerta de Tannhäuser

Las matrices, son matrices

Calificación: 1 votos, 5,00 de media.
Como parte de mi trabajo como coordinador de la web, suelo ver bastante texto en LaTeX por parte de colaboradores y usuarios. Muchas veces veo formatos y ecuaciones que, en mi humilde opinión (y tampoco es que sea un mega experto), se podrían hacer mejor. De vez en cuando haré artículos como este en el blog, con comentarios sobre como hacer "mejor" algunas cosas.

Lo que más me llama la atención son las formas de alinear las ecuaciones complejas. Por ejemplo, imagínate que queremos dar el cambio a coordenadas esféricas.

La forma más cutre sería poner cada ecuación en su propio entorno matemático. Es tan cutre, que ni siquiera voy a poner el resultado. El principal problema es que resulta imposible alinear las ecuaciones entre si (lo que mejora mucho el resultado), y además el espacio entre ecuaciones es demasiado grande.


Entorno array

Una forma que he visto muchas veces consiste en utilizar el entorno "array",

Código:
\begin{equation}
\begin{array}{ccl}
x & = & r \sin\theta \cos\varphi \ , \\
y & = & r \sin\theta \sin\varphi \ , \\
z & = & r \cos\theta \ .
\end{array}
\end{equation}
que produce

\begin{equation} 
\begin{array}{ccl} 
x & = & r \sin\theta \cos\varphi \ , \\ 
y & = & r \sin\the...

Es más o menos el efecto que queremos conseguir, pero hay varios problemas. El principal, a mi modo de entender el LaTeX, es que "array" es para hacer matrices (ese es su significado en inglés), y esto no es una matriz. Esto puede ser una diferencia más bien conceptual que importante, para algunos, pero yo prefiero utilizar las cosas para lo que sirven. ¡Llamame quisquilloso!

El segundo problema, este un poco más práctico, es que las diferentes columnas salen con un espacio demasiado grande. No es el mismo espacio al rededor del igual que hay habitualmente. ¡Queda mal! Si, se puede solucionar cambiando la separación entre columnas de un array con el comando

Código:
\setlength{\arraycolsep}{2pt}
pero esto es poco flexible. Para empezar, imagínate que después necesitas el entorno array para crear una matriz de verdad. Tendrías que cambiar la longitud cada vez, es un engorro.

El tercer inconveniente es que el sistema es rígido, poco flexible. Hay que recurrir a trucos para conseguir ciertos efectos. Por ejemplo, si quisiéramos hacer dos columnas de ecuaciones, dejando una separación entre ellas, hay que dejar una columna en blanco con el espacio necesario. Por ejemplo,

Código:
\begin{equation}
\begin{array}{cclcccl}
x & = & r \sin\theta \cos\varphi \ , &\hspace{1em}&
r & = & \sqrt{x^2+y^2+z^2} \ , \\
y & = & r \sin\theta \sin\varphi \ , &\hspace{1em}&
\theta & = & \arctan \frac{\sqrt{x^2+y^2}}{z} \ , \\
z & = & r \cos\theta \ , &\hspace{1em}&
\varphi & = & \arctan\frac y x \ .
\end{array}
\end{equation}
que, compilado, nos da

\begin{array}{cclcccl} 
x & = & r \sin\theta \cos\varphi \ , &\hspace{1em}& 
r & = & \sqrt{x^2+y^...

Bueno, por lo menos así conseguimos que funcione; pero en realidad nos estamos cargando uno de los principios fundamentales del LaTeX: dejar que sea él quien se ocupe del aspecto de las cosas, nosotros nos centramos en el contenido. Debería ser él quien se ocupe del ancho de las columnas, y todo eso.


Entorno eqnarray

LaTeX trae de serie un entorno que sirve, precisamente, para poner varias ecuaciones juntas. Se llama "eqnarray", y básicamente equivale a un array con la opción rcl; se usa tal que así:

Código:
\begin{eqnarray}
x & = & r \sin\theta \cos\varphi \ , \\
y & = & r \sin\theta \sin\varphi \ , \\
z & = & r \cos\theta \ .
\end{eqnarray}
que produce



Esto ofrece dos ventajas. En primer lugar, numera todas las ecuaciones, individualmente, que puede ser útil. En segundo lugar, está hecho específicamente para ecuaciones.

Pero, sigue sin ser perfecto. La distancia al rededor del igual sigue siendo incorrecta. Además, a veces puede convenir no numerar todas las ecuaciones; por ejemplo, en el caso de las coordenadas esféricas, ¿vamos a necesitar hacer referencias a las componentes por separado? Sería mejor poner un número general. Otro ejemplo es cuando realizamos un cálculo por pasos. Por ejemplo,

Código:
\begin{eqnarray}
I & = & \int_0^1 \mathrm{d} x\ x \mathrm{e}^{-x^2} \nonumber\\
& = & \left. -\frac12 \mathrm{e}^{-x^2} \right|_0^1\nonumber \\
& = & \frac12 \left( 1 - \frac1e \right) \ .
\end{eqnarray}
Como veis, la única opción para que no saliera el número es utilizar el comando \nonumber. El resultado es



No está mal, pero estaría mejor si el número quedaba en medio. La única forma sería volver a recurrir al entorno array.


Paquetes de la AMS: entornos gather y align

La Sociedad Americana de Matemáticas, la AMS ha desarrollado una serie de paquetes que resultan muy útiles para mejorar las capacidades de LaTeX. Yo, como mucha gente, los cargo en todos mis documentos sistemáticamente. El que nos salvará en este caso es el paquete amsmath y sus entornos avanzados para el modo matemático.

Empezaremos por el entorno gather. Su función, como su nombre en inglés indica, es agrupar ecuaciones, sin más, en múltiples líneas. Es útil para agrupar diferentes ecuaciones que no tienen una estructura común, y que por tanto no tiene sentido alinear. Por ejemplo,

Código:
\begin{gather}
\int_0^1 \mathrm{d} x\ x \mathrm{e}^{-x^2} = \frac12 \left( 1 - \frac1e \right) \ , \\
\mathrm{e} =  2.71828 \ .
\end{gather}
que produce



Pero lo que nos importa a nosotros son ecuaciones alineadas. Para eso tenemos el entorno align. Funciona de una forma muy simple: se sitúa un sólo amperstand (&) en el punto de alineación de las ecuaciones; dos barras invertidas para separar líneas. Y ya está. Volvamos a nuestro ejemplo del cambio a esféricas:

Código:
\begin{align}
x & = r \sin\theta \cos\varphi \ , \\
y & = r \sin\theta \sin\varphi \ , \\
z & = r \cos\theta \ .
\end{align}
Que produce un resultado prácticamente perfecto:



Perfectamente alineado, con un número en cada línea, y el espacio al rededor del igual es el que debe ser.

Pero el entorno array aún esconde más posibilidades. Por ejemplo, podemos hacer varias columnas de ecuaciones; basta con separarlas con un amperstand extra. Por ejemplo,

Código:
\begin{align}
x & = r \sin\theta \cos\varphi \ , &
r & = \sqrt{x^2+y^2+z^2} \ , \\
y & = r \sin\theta \sin\varphi \ , &
\theta & =  \arctan \frac{\sqrt{x^2+y^2}}{z} \ , \\
z & = r \cos\theta \ , &
\varphi & = \arctan\frac y x \ .
\end{align}
Que, de nuevo, deslumbra por su eficacia,



El propio align se encarga de calcular la distancia justa entre columnas de ecuaciones. De eso se trata, que LaTeX se encarga de estas cosas por si solo. Esta característica es útil, por ejemplo, para dar varios valores a la vez:

Código:
\begin{align}
e & = 1.60217646 \cdot 10^{-19}\mathrm{C}\ , &
\hbar & = 1.05457148 \cdot 10^{-34}\mathrm{Js}\ , &
m_e & = 9.10938188\cdot 10^{-31}\mathrm{kg} \ .
\end{align}
que produce

\begin{aligned} 
e & = 1.60217646 \cdot 10^{-19}\mathrm{C}\ , & 
\hbar & = 1.05457148 \cdot 10^{-...

Por supuesto, existe la versión de algin que no numera las ecuaciones, basta con añadir un asterisco al nombre: align*.

Dentro de otras ecuaciones

A menudo, también se recurre a array para generar partes de una ecuación con varias lineas, dentro de una ecuación de una sóla linea. Es un poco de trabalenguas, si no lo has entendido el siguiente ejemplo te lo aclarará (espero), una función definida a trozos:
Código:
\begin{equation}
\Theta(x) = \left\{
\begin{array}{cl}
x & \text{si}\ x>0 \\
0 & \text{si}\ x=0 \\
-x& \text{si}\ x<0
\end{array}
\right.
\end{equation}
que compilado toma el siguiente aspecto:

 \Theta(x) = \left\{ 
\begin{array}{cl} 
x & \text{si}\ x>0 \\ 
0 & \text{si}\ x=0 \\ 
-x& \text{...

Con lo que sabemos, todos nos iría mejor si pudiéramos usar las capacidades de align dentro de otra ecuación. Pues bien, alegraos por que podemos. El paquete de las AMS viene con otro entorno, llamado aligned, que hace lo mismo que align, pero estando dentro de otro entorno. Por ejemplo,

Código:
\begin{equation}
\left.
\begin{aligned}
r & = \text{constante}\\
0 & \le \theta \le \pi\\
0 & \le \varphi \le 2\pi
\end{aligned} \right\} \Longrightarrow \text{Superficie esf\'erica}
\end{equation}
que, compilado, queda de nuevo perfecto.

  
\left. 
\begin{aligned} 
r & = \text{constante}\\ 
0 & \le \theta \le \pi\\ 
0 & \le \varphi \...

También existe una versión para usar gather dentro de otras ecuaciones; su nombre es gathered. Y el funcionamiento es idéntico,
Código:
\begin{equation}
 \left.
 \begin{gathered}
 r = \text{constante}\\
 0 \le \theta \le \pi\\
 0 \le \varphi \le 2\pi
 \end{gathered} \right\} \Longrightarrow \text{Superficie esf\'erica}
\end{equation}
que produce un resultado similar, pero con las tres sub-ecuaciones centradas en vez de alineadas,

  
\left. 
\begin{gathered} 
r = \text{constante}\\ 
0 \le \theta \le \pi\\ 
0 \le \varphi \le 2\...

Este sistema también nos permite crear ecuaciones bien alineadas con un sólo número bien centrado. Volviendo a la integral anterior,

Código:
\begin{equation}
\begin{aligned}
I & =  \int_0^1 \mathrm{d} x\ x \mathrm{e}^{-x^2} \nonumber\\
& = \left. -\frac12 \mathrm{e}^{-x^2} \right|_0^1\nonumber \\
& = \frac12 \left( 1 - \frac1e \right) \ .
\end{aligned}
\end{equation}
que produce el efecto deseado




Nota sobre el uso en el foro

Como sabéis, en el foro (y blogs) se puede usar la etiqueta [tex]ecuación[/tex] para introducir ecuaciones LaTeX en los mensajes. El foro, internamente, pone el texto entre las etiquetas dentro de un entorno matemático, así que no podemos usar align y gather directamente. Pero, por supuesto, sí podemos utilizar las versiones acabadas en ed. Por ejemplo, la ecuación del último ejemplo dado se puede poner en el foro directamente como:

Código:
[tex=1]\begin{aligned}
I & =  \int_0^1 \mathrm{d} x\ x \mathrm{e}^{-x^2} \nonumber\\
& = \left. -\frac12 \mathrm{e}^{-x^2} \right|_0^1\nonumber \\
& = \frac12 \left( 1 - \frac1e \right) \ .
\end{aligned}[/tex]
Y aún hay más

En el paquete AMSmath hay definidos muchos más entornos y comandos útiles. Por ejemplo, habréis notado que para escribir texto normal uso \text en vez del usual \textrm. Hay más entornos especiales para alinear ecuaciónes. Destacan multline, subequations, split, flalign, alignat y alignedat, entre muchas otras opciones. Puedes leer más acerca de las inmensas posibilidades del paquete en su documentación.

Enviar "Las matrices, son matrices" a del.icio.us Enviar "Las matrices, son matrices" a Google Enviar "Las matrices, son matrices" a Yahoo! Enviar "Las matrices, son matrices" a Digg Enviar "Las matrices, son matrices" a Diigo Enviar "Las matrices, son matrices" a StumbleUpon Enviar "Las matrices, son matrices" a Gennio Enviar "Las matrices, son matrices" a Menéame

Etiquetas: align, aligned, ams, entorno, latex, paquete, tex
Categorías
LaTeX

Comentarios

  1. Avatar de [Beto]
    La costumbre siempre me gana y acabo usando el array
  2. Avatar de Toni
    Qué interesante ésto de saber escribir en Latex!, se pueden hacer unos hermosos apuntes y muchasmás aplicaciones.
    Mi pregunta, de principiante, sería qué cosas debería irme estudiando para iniciarme en esto del Latex. Porque veo que se utiliza un lenguaje de programación. Y yo lo veo muy difícil, por ahora. ¿Debería iniciarme en algún lenguaje de programación en concreto? ¿o esto del Latex es mucho más sencillo y debería estudiarme alguna guía básica del tema que se pueda encontrar en el mercado, y que no esté en inglés?
    Es que me gustaría en poco tiempo realizar algún trabajillo en este entorno (Latex). Y si lo hago bien prometo cogarlo en la webdefisica, si es algo que merezca la pena, claro.
  3. Avatar de [Beto]
    Hola Toni, no necesitas aprender ningún lenguaje de programación, la web de física dispone de diversos manuales para poder aprender, están en el siguiente link:

    http://www.lawebdefisica.com/latex/

    Mira el apartado 12, ese es un bonito manual introductorio para aprender, y está en español.
  4. Avatar de Toni
    Gracias, N30F3B0, leeré ese manual introductorio, a ver como se me da. Qué bien que esté en español!, pues el inglés...aún me queda mucho por aprender.
  5. Avatar de RudyMendez
    Muy buena información pod, no conocía todos esos entornos para escribir ecuaciones. Pero quiero aclarar algo, en el entorno eqnarray, cuando dice que seguramente se vería mejor las tres ecuaciones si la del medio tuviera el número, esto se puede hacer. Simplemente se coloca \nonumber en la primera y en la tercera ecuación, así la segunda será una ecuación numerada. El problema se complica si se desea escribir un número par de ecuaciones, ¿en donde colocar la Ec. no numerada si se queire que el número aparezca centrado ?. En fin....todas las opciones que nos ofrece latex...
  6. Avatar de _FoX_
    Muy buen artículo para aprender a utilizar mejor \mathbf{L\!\!^{{}_{\scriptstyle A}} \!\!\!\!\!\;\; T\!_{\displaystyle E} \! X}, o mejor dicho, para aprender a utilizarlo de manera perfecta, como le gusta a pod.
  7. Avatar de No registrado
    Impresionante artículo, muchas gracias.
    Por fin me ha aclarado los usos de eqnarray, align, aligned, etc.
    Estoy recomendándole este artículo a todo el mundo que me pregunta por esto, espero que se note en las visitas!

Trackbacks

Trackbacks totales 0
URL de trackback: