我正在尝试排版稀疏矩阵:
\documentclass{article}
\usepackage{amsmath}
\newcommand{\z}{0} % Zero entry
\begin{document}
$$
\begin{pmatrix}
\dot{\mathit{vx}} & \dot{\mathit{vy}} & \dot{x} & \dot{y} & F \\
\hline \\
\z & \z & -1 & \z & \\
\z & \z & \z & -1 & \z \\
1 & \z & \z & \z & -x \\
\z & 1 & \z & \z & -gy \\
\z & \z & \z & \z & \z
\end{pmatrix}
$$
\end{document}
为了提高可读性,我可以设置\z
为使用浅灰色。但我还想测试不同的选项(或在幻灯片等中重复使用代码),例如将每个非零单元格设置为粗体。
除了定义一个非零命令(这可能有点繁琐)之外,有没有一种简单的方法可以将每个条目设置为粗体\z
?
答案1
您只能\boldmath
申请\unboldmath
:\z
\documentclass{article}
\usepackage{amsmath}
\usepackage{booktabs}
\newcommand{\z}{\mbox{\unboldmath$0$}}
\begin{document}
\[
\mbox{\boldmath
$ \begin{pmatrix}
\dot{\mathit{vx}} & \dot{\mathit{vy}} & \dot{x} & \dot{y} & F \\
\cmidrule(lr){1-5}
\z & \z & -1 & \z & \\
\z & \z & \z & -1 & \z \\
1 & \z & \z & \z & -x \\
\z & 1 & \z & \z & -gy \\
\z & \z & \z & \z & \z
\end{pmatrix}$%
}
\]
\end{document}
答案2
因为我们知道\z
扩展为0
,我们可以收集每个单元格并将其内容与进行比较0
(使用字符串比较- \pdfstrcmp
):
\documentclass{article}
\usepackage{amsmath,collcell}
\newcommand{\z}{0} % Zero entry
\newcommand{\nonzero}[1]{\ifnum\pdfstrcmp{\z}{#1}=0 \z\else\mathbf{#1}\fi}
\newcommand{\hdr}{\multicolumn{1}{c}}
\newcolumntype{B}{>{\collectcell\nonzero}c<{\endcollectcell}}
\begin{document}
\[
\left(\begin{array}{ *{5}{B} }
\hdr{\dot{\mathit{vx}}} & \hdr{\dot{\mathit{vy}}} & \hdr{\dot{x}} & \hdr{\dot{y}} & \hdr{F} \\
\hline
\z & \z & -1 & \z & \\
\z & \z & \z & -1 & \z \\
1 & \z & \z & \z & -x \\
\z & 1 & \z & \z & -gy \\
\z & \z & \z & \z & \z
\end{array}\right)
\]
\end{document}
由于我们需要访问列类型才能应用于\nonzero
列中的每个元素,因此我们定义了一种新的列类型B
并使用\left(\begin{array}
...\end{array}\right)
构造而不是pmatrix
环境。此外,不应粗体必须在 内设置\multicolumn
以避免被 格式化\nonzero
。为了便于编码,我已通过 实现了这一点\hdr
。