1

Assume I have the matrix

A = [ a_11 a_12 a_13 a_14; a_21 a_22 a_23 a_24; a_31 a_23 _a33 a_34; ]

where a_ij are numbers and I want to draw in red color the elements of the 3 x 3 block A(1:3, 1:3). Is there an easy way to draw them at once instead of using the command \textcolor{red}{a_11}, \textcolor{red}{a_22} e.t.c?

4

TeX is a macro language. The lengthy expression \textcolor{red}{a_{12}} can be abbreviated with as simple macro definition, e.g.:

\documentclass{article}
\usepackage{amsmath}
\usepackage{color}
\begin{document}
  \[
    A =
    \def\ba#1#2{a_{#1#2}}
    \def\ra{\color{red}\ba}
    \begin{bmatrix}
      \ra11 & \ra12 & \ra13 & \ba14 \\
      \ra21 & \ra22 & \ra23 & \ba24 \\
      \ra31 & \ra32 & \ra33 & \ba34
    \end{bmatrix}
  \]
\end{document}

Result

6

Update

You can declare a new column type including the color:

\documentclass[table]{article}
\usepackage{xcolor}
\usepackage{array}

\newcolumntype{E}{>{\color{red}}c}

\begin{document}

\[
\left[
\begin{array}{*{3}{E}c}
1 & 2 & 3 & 0 \\
4 & 5 & 6 & 0 \\
7 & 8 & 9 & 0 
\end{array}
\right]
\]

\end{document}

enter image description here

This can be done using collcell:

\documentclass[table]{article}
\usepackage{tikz}
\usepackage{collcell}

\newcommand\ColCell[1]{%
  \pgfmathparse{#1>0?1:0}%
    \ifnum\pgfmathresult=1\relax\color{red}\fi#1}

\newcolumntype{E}{>{\collectcell\ColCell}c<{\endcollectcell}}

\begin{document}

\[
\left[
\begin{array}{*{6}{E}}
1 & 2 & 3 & 4 & 0 \\
5 & 0 & 7 & 8 & 0 \\
1 & 2 & 0 & 4 & 0 \\
5 & 6 & 7 & 8 & 0 \\
\end{array}
\right]
\]

\end{document}

enter image description here

  • Though the answer is pretty useful and I upvoted it, what I really need is how to draw at once the elements of that 3 x 3 block (the last zero column could be substituted by any other column with different elements). I guess a modification of that code should work, right? – thanasissdr Sep 9 '15 at 20:24
  • 1
    @thanasissdr Your question didn't mentions this. doest it? The title is "Coloring elements of a block of a matrix" and the first line of the body is "Assume I have the matrix". I assumed you have the matrix and provided the answer. If you meant something different you should have stated that clearly from the beginning. – Gonzalo Medina Sep 9 '15 at 20:29
  • I'm really sorry for that. I tried to edit the question. – thanasissdr Sep 9 '15 at 20:34
  • Where does the question say that positive elements should be colored? – egreg Sep 9 '15 at 20:49
  • @egreg Check the edit history. Original phrasing " I want to draw in red color the elements of the 3 x 3 block which are not zero". Since entries were non negative, I assumed not zero meant possitive. – Gonzalo Medina Sep 9 '15 at 21:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.