如何增强现有的数学环境

如何增强现有的数学环境

我正在学习 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

arraycollcell和一些内部宏的非常脆弱的混合。

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

在此处输入图片描述

相关内容