
Utilicé este código que encontré en algún lugar para componer literalmente cientos de matrices aumentadas, y ha sido increíble:
\documentclass[a4paper,12pt]{article}
\usepackage{amsmath}
\usepackage{arydshln}
\makeatletter
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{%
\hskip -\arraycolsep
\let\@ifnextchar\new@ifnextchar
\array{#1}}
\makeatother
\begin{document}
\(\begin{bmatrix}[ccc:c]
1&2&3&0 \\
4&5&6&0 \\
7&8&9&0 \\
\end{bmatrix}\)
\end{document}
Mis habilidades con TeX y LaTeX son, eh, incipientes. Pero estoy haciendo lo mejor que puedo para aprender.
Sin embargo, tengo problemas para entender exactamente cómo funciona el comando de matriz redefinido como el anterior. Aquí está mi mejor suposición. ¿Puedes corregirme y/o completar los vacíos?
\makeatletter
: El@
carácter por defecto conlleva algún significado especial y este comando elimina temporalmente ese significado especial.\renewcommand*
: Esto es para redefinir una macro existente. La variación destacada aquí evita la inclusión accidental de varios párrafos (\n\n
o\par
) cuando se utiliza la macro.\env@matrix
: Este es el comando que estamos renovando, presumiblemente. ¿Está definido en algún lugar deamsmath
? ¿Realmente tiene algún@
símbolo en su nombre?[1]
: Esto significa que el comando recién renovado toma un argumento opcional.[*\c@MaxMatrixCols c]
: No sé qué*
hace al principio de esto.\c
(afaik) es para hacer cedillas, pero eso no parece encajar aquí.MaxMatrixCols
¿Hay una variable definida enamsmath
10 de forma predeterminada? ¿Estamos haciendo algunos cálculos con ella aquí? ¿O restablecerlo? ¿O que? De la finalc
tampoco tengo ni idea. De hecho, ¿qué es toda esta construcción? ¿Es alguna coincidencia de patrón para el parámetro opcional?{%
: Se supone que el uso inteligente de un comentario aquí es ignorar la nueva línea. Sin embargo, no veo ninguna diferencia en el espaciado sin él.\hskip -\arraycolsep
: Este es un retroceso por la cantidad de\arraycolsep
\let\@ifnextchar\new@ifnextchar
: Esto es seguir el comando\@ifnextchar
o algo así, pero ¿por qué? Ninguno\@ifnextchar
de los dos\new@ifnextchar
parece usarse.\array{#1}}
: Esto inserta una matriz sin formato y pasa el parámetro. No estoy seguro si#1
aquí se refiere a la[ccc:c]
especificación opcional o al contenido real de la matriz.\makeatother
: Esto presumiblemente devuelve el@
símbolo a su estado normal.
Respuesta1
Si aún no está familiarizado con el uso de \renewcommand
, es posible que necesite aprender más para comprender el código.
\makeatletter
: Parece@
una letra, por lo que se puede utilizar en un nombre de macro. Ver¿Qué hacen \makeatletter y \makeatother?- Como tú sabes.
- Lea el código fuente documentado de
amsmath
,amsmath.pdf
(producido al compilaramsmath.dtx
). Es el comienzo de un conjunto de entornos matriciales (matrix
,bmatrix
,pmatrix
, etc.) - Un argumento. En realidad, en este momento se desconoce si el argumento es opcional o no.
[...]
después[1]
(o[2]
,[3]
) significa que el primer argumento es opcional y especifica el valor predeterminado.\c@MaxMatrixCols
es lo mismo que\value{MaxMatrixCols}
, dondeMaxMatrixCols
hay un contador definido enamsmath
(predeterminado en 10).* \c@MaxMatrixCols c
se utiliza como argumento de\array
, es equivalente a\begin{array}{*{10}{c}}
- Como tú sabes.
- Como tú sabes. El espacio extra
\arraycolsep
es producido por\array
elarray
entorno. Lo usaría\begin{@{}*{10}{c}@{}}
en lugar de esto, si lo escribo. \new@ifnextchar
se define enamsgen.sty
cargado poramsmath
. Leer elcódigo fuente documentado.\array
es el comienzo delarray
medio ambiente. Tenga en cuenta que los entornos matriciales individuales eventualmente llaman a\endarray
.- Véase más arriba.