
Ich mache den nächsten Schritt in meinem LaTeX-Lernprozess und beginne, die Möglichkeit der Erstellung benutzerdefinierter Umgebungen zu erkunden. In den Ressourcen, die ich konsultiert habe, wird jedoch nicht erwähnt, wie man eine Umgebung wie die bmatrix
Umgebung erstellt, die keine vordefinierte Anzahl von Argumenten hat.
Insbesondere möchte ich eine Variante bmatrix
(und ähnliches) definieren, die es mir ermöglicht, die Zeilen/Spalten einzufärben.
Idealerweise würde ich gerne eine Möglichkeit finden, die Umgebung so zu definieren, dass ich:
- Geben Sie die Farbe jeder Zeile / Spalte beim Öffnen der Umgebung an (oder beim ersten Element der Zeile / Spalte). Wenn beispielsweise und
\ca
Makros für unterschiedliche Farben sind, dann würde etwas wie eine Umgebung starten , in der die Einträge in der ersten Zeile jeweils in umschlossen werden , ebenso für die zweite Zeile, und die Einträge der dritten Zeile würden in umschlossen werden ,\cb
\cc
\begin{cbmatrix}{\ca \ca \cb}
bmatrix
\ca
cb
d. h. die gewünschte Ausgabe wäre gleichwertig mit:
\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}
- Einfach zwischen der Anwendung des Farbbefehls auf Zeilen oder Spalten wechseln (möglicherweise mit einer mit einem Sternchen versehenen Version der Umgebung)?
Mir ist bewusst, dass dies ein sehr spezifisches Endergebnis ist, aber ich möchte grundsätzlich wissen, wo ich anfangen soll, um diese Art von Umgebung definieren zu können, in der die Anzahl der Eingaben/Argumente nicht vordefiniert ist?
Antwort1
Sehr fragile Mischung aus array
, collcell
, und einigen internen Makros.
\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}