Как улучшить существующую математическую среду

Как улучшить существующую математическую среду

Я делаю следующий шаг в изучении LaTeX и начинаю изучать возможность создания пользовательских сред. Однако ресурсы, к которым я обращался, не содержат сведений о том, как создать среду, подобную той, bmatrixкоторая не имеет предопределенного количества аргументов.

В частности, я хотел бы определить вариант bmatrix(и подобный), который позволяет мне раскрашивать строки/столбцы.

В идеале мне бы хотелось найти способ определить окружающую среду, чтобы я мог:

  • указать цвет каждой строки / столбца в начале среды (или в первом элементе строки / столбца). Например, если \ca, \cbи \ccявляются макросами для разных цветов, то что-то вроде \begin{cbmatrix}{\ca \ca \cb}запустит bmatrixсреду, в которой записи в первой строке будут каждая обернута в \ca, аналогично для второй строки, а записи третьей строки будут обернуты в cb,

т.е. желаемый результат будет эквивалентен:

\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}
  • легко переключаться между применением команды цвета к строкам или столбцам (возможно, с отмеченной звездочкой версией среды)?

Я понимаю, что это очень специфический конечный результат, но мне вообще интересно узнать, с чего начать, чтобы иметь возможность определить этот тип среды, где количество входов/аргументов не предопределено?

решение1

Очень хрупкая смесь array, collcell, и некоторых внутренних макросов.

\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}

введите описание изображения здесь

Связанный контент