Como melhorar um ambiente matemático existente

Como melhorar um ambiente matemático existente

Estou dando o próximo passo no meu aprendizado de LaTeX e começando a explorar a possibilidade de criar ambientes customizados; entretanto, os recursos que consultei não mencionam como criar um ambiente como o bmatrixambiente que não possui um número predefinido de argumentos.

Em particular, gostaria de definir uma variante bmatrix(e semelhante) que me permita colorir as linhas/colunas.

Idealmente, gostaria de descobrir uma maneira de definir o ambiente para poder:

  • especifique a cor de cada linha/coluna na abertura do ambiente (ou no primeiro elemento da linha/coluna). Por exemplo \ca, se \cbe \ccsão macros para cores diferentes, então algo como \begin{cbmatrix}{\ca \ca \cb}iniciaria um bmatrixambiente onde as entradas da primeira linha seriam agrupadas \ca, da mesma forma para a segunda linha, e as entradas da terceira linha seriam agrupadas cb,

ou seja, a saída desejada seria 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}
  • alternar facilmente entre aplicar o comando color a linhas ou colunas (talvez com uma versão estrelada do ambiente)?

Sei que este é um resultado final muito específico, mas geralmente estou curioso para saber por onde começar para poder definir este tipo de ambiente, onde o número de entradas/argumentos não é predefinido?

Responder1

Mistura muito frágil de array, collcelle algumas 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}

insira a descrição da imagem aqui

informação relacionada