Cómo mejorar un entorno matemático existente

Cómo mejorar un entorno matemático existente

Estoy dando el siguiente paso en mi aprendizaje de LaTeX y empezando a explorar la posibilidad de crear entornos personalizados; sin embargo, los recursos que he consultado no mencionan cómo crear un entorno como el bmatrixentorno que no tiene una cantidad predefinida de argumentos.

En particular, me gustaría definir una variante de bmatrix(y similar) que me permita colorear las filas/columnas.

Idealmente, me gustaría encontrar una manera de definir el entorno para poder:

  • especifique el color de cada fila/columna en la apertura del entorno (o en el primer elemento de la fila/columna). Por ejemplo \ca, si \cby \ccson macros para diferentes colores, entonces algo así \begin{cbmatrix}{\ca \ca \cb}iniciaría un bmatrixentorno donde las entradas de la primera fila se envolverían en \ca, de manera similar para la segunda fila, y las entradas de la tercera fila se envolverían en cb,

es decir, el resultado deseado sería equivalente a:

\begin{bmatrix}
\ca{e1} & \ca{e2} & \ca{e3} & \ca{e4} \\
\ca{e5} & \ca{e6} & \ca{e7} & \ca{e8} \\
\cb{e9}& \cb{e10} & \cb{e11} & \cb{e12} \\
e13 & e14 & e15 & e16
\end{bmatrix}
  • ¿cambiar fácilmente entre aplicar el comando de color a filas o columnas (quizás con una versión destacada del entorno)?

Me doy cuenta de que este es un resultado final muy específico, pero en general tengo curiosidad por saber por dónde empezar para poder definir este tipo de entorno, donde la cantidad de entradas/argumentos no está predefinida.

Respuesta1

Mezcla muy frágil de array, collcelly algunas macros internas.

\documentclass{article}
\usepackage{amsmath}
\usepackage{array}
\usepackage{collcell}
\usepackage{xcolor}

\newcommand\ca{\textcolor{red}}
\newcommand\cb{\textcolor{green}}
\newcommand\cc{\textcolor{blue}}

\newcounter{row}
\newcounter{col}
\makeatletter
\newenvironment{triplecolorbmatrix}[1]
  {\setcounter{row}{1}%
   \@for\name:=#1\do{%
       \expandafter\def\csname rowcolor\number\value{row}\expandafter\endcsname\expandafter{\name}%
       \stepcounter{row}%
   }%
   \setcounter{row}{0}%
   \setcounter{col}{0}%
   \newcommand\colorrow{\csname rowcolor\number\value{row}\endcsname}%
   \let\@arraycrnormal\@arraycr
   \def\@arraycr{\setcounter{col}{0}\@arraycrnormal}%
   \left[\hspace{-\tabcolsep}\array{*{10}{>{\ifnum\value{col}=0\stepcounter{row}\fi\stepcounter{col}\collectcell\colorrow}c<{\endcollectcell}}}}
  {\endmatrix\right]}
\makeatother

\begin{document}
\begin{equation*}
  \begin{triplecolorbmatrix}{\ca,\cb,\cc}
    e1  & e2  & e3  & e4  \\
    e5  & e6  & e7  & e8  \\
    e9  & e10 & e11 & e12 \\
    e13 & e14 & e15 & e16 \\
  \end{triplecolorbmatrix}
\end{equation*}
\end{document}

ingrese la descripción de la imagen aquí

información relacionada