我刚刚花了几个小时寻找这里最后一个例子中编译错误的原因:
\documentclass[a4paper,draft=true, headsepline=on, twoside
, 11pt,
]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
%matrix environment redef
\makeatletter
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{%
\hskip -\arraycolsep
\let\@ifnextchar\new@ifnextchar
\array{#1}}
\makeatother
\begin{document}
\begin{equation*}
\begin{bmatrix}
& b
\end{bmatrix}
\end{equation*}
\begin{align*}
\begin{bmatrix}
~ & b
\end{bmatrix}
\end{align*}
\begin{align*}
\begin{array}{cc}
& b
\end{array}
\end{align*}
\begin{align*}
\begin{bmatrix}
& b
\end{bmatrix}
\end{align*}
\end{document}
如果我没有像这里讨论的那样重新定义 bmatrix 环境,则不会出现错误: 这个增广矩阵的宏如何工作?
但是,错误似乎只会出现在这种特殊情况下,即使用 align 环境,矩阵的第一列中有空条目。你知道这些错误是从哪里来的吗?我不知道,但如果以后出现类似问题,这肯定会有所帮助。
答案1
由于矩阵中第一个单元格为空,对可选参数的扫描会使对齐解析器感到困惑。
您比较幸运,因为xparse
:
\documentclass[a4paper,draft=true, headsepline=on, twoside
, 11pt,
]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,xparse}
%matrix environment redef
\makeatletter
\RenewDocumentCommand\env@matrix{O{*\c@MaxMatrixCols c}}{%
\hskip -\arraycolsep
\let\@ifnextchar\new@ifnextchar
\array{#1}}
\makeatother
\begin{document}
\begin{align*}
\begin{bmatrix}
& b
\end{bmatrix}
\end{align*}
\end{document}
答案2
您可以添加额外的支撑层以确保前瞻安全。
\documentclass[a4paper,draft=true, headsepline=on, twoside
, 11pt,
]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
%matrix environment redef
\makeatletter
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{%
\hskip -\arraycolsep
\let\@ifnextchar\new@ifnextchar
\array{#1}}
\renewenvironment{bmatrix}
{{\ifnum`}=0 \fi\left[\env@matrix}
{\endmatrix\right]\ifnum`{=0 \fi}}
\makeatother
\begin{document}
\begin{equation*}
\begin{bmatrix}
& b
\end{bmatrix}
\end{equation*}
\begin{align*}
\begin{bmatrix}
~ & b
\end{bmatrix}
\end{align*}
\begin{align*}
\begin{array}{cc}
& b
\end{array}
\end{align*}
\begin{align*}
\begin{bmatrix}
& b
\end{bmatrix}
\end{align*}
\end{document}