
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 bmatrix
entorno 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\cb
y\cc
son macros para diferentes colores, entonces algo así\begin{cbmatrix}{\ca \ca \cb}
iniciaría unbmatrix
entorno 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 encb
,
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
, collcell
y 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}