¿Cómo funciona esta macro para matrices aumentadas?

¿Cómo funciona esta macro para matrices aumentadas?

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?

  1. \makeatletter: El @carácter por defecto conlleva algún significado especial y este comando elimina temporalmente ese significado especial.
  2. \renewcommand*: Esto es para redefinir una macro existente. La variación destacada aquí evita la inclusión accidental de varios párrafos ( \n\no \par) cuando se utiliza la macro.
  3. \env@matrix: Este es el comando que estamos renovando, presumiblemente. ¿Está definido en algún lugar de amsmath? ¿Realmente tiene algún @símbolo en su nombre?
  4. [1]: Esto significa que el comando recién renovado toma un argumento opcional.
  5. [*\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 en amsmath10 de forma predeterminada? ¿Estamos haciendo algunos cálculos con ella aquí? ¿O restablecerlo? ¿O que? De la final ctampoco tengo ni idea. De hecho, ¿qué es toda esta construcción? ¿Es alguna coincidencia de patrón para el parámetro opcional?
  6. {%: 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.
  7. \hskip -\arraycolsep: Este es un retroceso por la cantidad de\arraycolsep
  8. \let\@ifnextchar\new@ifnextchar: Esto es seguir el comando \@ifnextcharo algo así, pero ¿por qué? Ninguno \@ifnextcharde los dos \new@ifnextcharparece usarse.
  9. \array{#1}}: Esto inserta una matriz sin formato y pasa el parámetro. No estoy seguro si #1aquí se refiere a la [ccc:c]especificación opcional o al contenido real de la matriz.
  10. \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.

  1. \makeatletter: Parece @una letra, por lo que se puede utilizar en un nombre de macro. Ver¿Qué hacen \makeatletter y \makeatother?
  2. Como tú sabes.
  3. Lea el código fuente documentado de amsmath, amsmath.pdf(producido al compilar amsmath.dtx). Es el comienzo de un conjunto de entornos matriciales ( matrix, bmatrix, pmatrix, etc.)
  4. Un argumento. En realidad, en este momento se desconoce si el argumento es opcional o no.
  5. [...]después [1](o [2], [3]) significa que el primer argumento es opcional y especifica el valor predeterminado.

    \c@MaxMatrixColses lo mismo que \value{MaxMatrixCols}, donde MaxMatrixColshay un contador definido en amsmath(predeterminado en 10).

    * \c@MaxMatrixCols cse utiliza como argumento de \array, es equivalente a

    \begin{array}{*{10}{c}}
    
  6. Como tú sabes.
  7. Como tú sabes. El espacio extra \arraycolsepes producido por \arrayel arrayentorno. Lo usaría \begin{@{}*{10}{c}@{}}en lugar de esto, si lo escribo.
  8. \new@ifnextcharse define en amsgen.stycargado por amsmath. Leer elcódigo fuente documentado.
  9. \arrayes el comienzo del arraymedio ambiente. Tenga en cuenta que los entornos matriciales individuales eventualmente llaman a \endarray.
  10. Véase más arriba.

información relacionada