
私は LaTeX の学習の次のステップに進み、カスタム環境を作成する可能性を探り始めています。ただし、私が参照したリソースには、bmatrix
事前定義された数の引数を持たない環境のような環境を作成する方法については記載されていません。
特に、bmatrix
行/列に色を付けることができる (および同様の) のバリアントを定義したいと考えています。
理想的には、次のことができるように環境を定義する方法を見つけたいと思います。
- 環境の開始時(または行/列の最初の要素)に各行/列の色を指定します。たとえば、、およびが
\ca
異なる\cb
色\cc
のマクロである場合、 のようなコードは、最初の行のエントリがそれぞれ でラップされ、2 番目の行についても同様で、3 番目の行のエントリが でラップされる環境\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}