对于报告,我需要将一些稀疏矩阵打印为完整矩阵,这意味着有很多零。如果我用与有意义的条目相同的颜色打印它们,它看起来就不太有条理。而且当我根本不打印零时,它看起来也不太好。所以我想用更浅的颜色打印零。
当然,我可以定义一种颜色(例如 \definecolor{lightgrey}{RGB}{200,200,200},然后为每个 0 写入 \textcolor{lightgrey}{0}。但这不是很有效。也可以定义一个新命令,最好使用简短的名称,只插入灰色的 0。但我想知道,是否有其他更简洁的方法来实现这一点?
对于相对较小的矩阵,MWE:
\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\begin{document}
\begin{align}
\left(\begin{array}{ccccccccc}
1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & \frac{1}{2} & \frac{1}{2} & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & \frac{1}{2} & \frac{1}{2} & 0 & 0 & 0\\
0 & 0 & 0 & \frac{1}{2} & 0 & 0 & \frac{1}{2} & 0 & 0\\
0 & 0 & 0 & 0 & \frac{1}{2} & 0 & 0 & \frac{1}{2} & 0\\
0 & 0 & 0 & 0 & \frac{1}{4} & \frac{1}{4} & 0 & \frac{1}{4} & \frac{1}{4}
\end{array}\right)
\end{align}
\end{document}
答案1
我基本上输入了太多带有大量数字等的矩阵,因此对我来说使用 TikZ 来做这件事是很自然的,但可以理解的是,你可能不想使用它。但是,matrix
库中有一个特定选项,你可以决定当特定条目为空时要做什么。这是一个例子
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
I like lower triangular matrices so does Gauss while eliminating.
\[
\begin{tikzpicture}[baseline=(current bounding box.center)]% To center the matrix in the equation
\matrix[matrix of math nodes,execute at empty cell={\node[black!20]{0};},%Node color and text "0"
every left delimiter/.style={xshift=1ex},%tighter delimiter spacing
every right delimiter/.style={xshift=-1ex},
left delimiter={(},right delimiter={)}
] {
1 & & & & & & & & \\
& 1 & & & & & & & \\
& \frac{1}{2} & \frac{1}{2} & & & & & & \\
& & & 1 & & & & & \\
& & & & 1 & & & & \\
& & & & \frac{1}{2} & \frac{1}{2} & & &\\
& & & \frac{1}{2} & & & \frac{1}{2} & & \\
& & & & \frac{1}{2} & & & \frac{1}{2} & \\
& & & & \frac{1}{4} & \frac{1}{4} & & \frac{1}{4} & \frac{1}{4} \\
};
\end{tikzpicture}
\]
\end{document}
答案2
如果您想避免重新编码您的文档,那么您可以使用array
包来改变颜色:
\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{color,array}
\def\zerotest{0}
\newcommand\greytest[2]{%
\def\test{#2}%
\ifx\test\zerotest
\def\next{\textcolor[gray]{0.7}{0}}%
\else
\def\next{#1#2}%
\fi
\next}
\begin{document}
\begin{align}
\left(\begin{array}{*{9}{>{\greytest}c}}
1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & \frac{1}{2} & \frac{1}{2} & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & \frac{1}{2} & \frac{1}{2} & 0 & 0 & 0\\
0 & 0 & 0 & \frac{1}{2} & 0 & 0 & \frac{1}{2} & 0 & 0\\
0 & 0 & 0 & 0 & \frac{1}{2} & 0 & 0 & \frac{1}{2} & 0\\
0 & 0 & 0 & 0 & \frac{1}{4} & \frac{1}{4} & 0 & \frac{1}{4} & \frac{1}{4}
\end{array}\right)
\end{align}
\end{document}