以下是原帖 有几个人要求提供完整文档:
\documentclass{wileySix}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\begin{document}
\[
\mathbf{y}=
\begin{pmatrix}
y_1 \\
y_2
\end{pmatrix}\mbox{ and }
\boldsymbol{\mu}=\begin{pmatrix}
\mu_1 \\
\mu_2
\end{pmatrix}
\]
\end{document}
当 documentclass 从 更改为 时,此问题便会消失wileySix
。article
我会进行调查。
原始帖子
你好,我想用 LaTeX 编写以下表达式pmatrix
我可以用标准的旧 TeX 来做到这一点:
\mathbf{y}=\left(\begin{array}{c} y_1 \\ y_2
\end{array} \right) \mbox{ and } \boldsymbol{\mu}=
\left(\begin{array}{c} \mu_1\\ \mu_2
\end{array} \right)
不过,我认为我应该能够通过使用包更巧妙地做到这pmatrix
一点amsmath
:
\mathbf{y}=
\begin{pmatrix}
y_1 \\ y_2
\end{pmatrix}\mbox{ and }
\boldsymbol{\mu}=\begin{pmatrix}
\mu_1 \\ \mu_2
\end{pmatrix}
我最终在渲染的文档中得到的是
这显然有问题。我在 MacTeX 上运行,但这从未在其他地方给我带来问题。任何建议都将不胜感激
答案1
该wileysix
课程\@array
在一个很小但具有决定性的细节中重新定义:
LaTeX 内核定义
\def\@array[#1]#2{%
\if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
\bgroup
\setbox\@arstrutbox\hbox{%
\vrule \@height\arraystretch\ht\strutbox
\@depth\arraystretch \dp\strutbox
\@width\z@}%
\@mkpream{#2}%
\edef\@preamble{%
\ialign \noexpand\@halignto
\bgroup \@arstrut \@preamble \tabskip\z@skip \cr}%
\let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
\let\tabularnewline\\%
\let\par\@empty
\let\@sharp##%
\set@typeset@protect
\lineskip\z@skip\baselineskip\z@skip
\ifhmode \@preamerr\z@ \@@par\fi
\@preamble}
wileysix.cls
定义
\def\@array[#1]#2{%
\if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
\bgroup
\setbox\@arstrutbox\hbox{%
\vrule \@height\arraystretch\ht\strutbox
\@depth\arraystretch \dp\strutbox
\@width\z@}%
\@mkpream{@{}#2@{}}%
\edef\@preamble{%
\ialign \noexpand\@halignto
\bgroup \@arstrut \@preamble \tabskip\z@skip \cr}%
\let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
\let\tabularnewline\\%
\let\par\@empty
\let\@sharp##%
\set@typeset@protect
\lineskip\z@skip\baselineskip\z@skip
\ifhmode \@preamerr\z@ \@@par\fi
\@preamble}
不同之处在于
\@mkpream{#2}%
即成为
\@mkpream{@{}#2@{}}%
这样就不会在 的左侧和右侧添加填充array
。另一方面,amsmath
通过在栅栏和矩阵之间添加负空间来手动修复矩阵中的填充:
\renewenvironment{matrix}{%
\matrix@check\matrix\env@matrix
}{%
\endarray \hskip -\arraycolsep
}
\def\env@matrix{\hskip -\arraycolsep
\let\@ifnextchar\new@ifnextchar
\array{*\c@MaxMatrixCols c}}
\renewenvironment{pmatrix}{%
\left(%
\matrix@check\pmatrix\env@matrix
}{
\endmatrix\right)%
}
这\hskip -\arraycolsep
正是我所说的负空间。右边的那个有它的效果,因为 a 的标准前导码matrix
是指定的,直到矩阵有列时才到达最后一列\MaxMatrixCols
。
我发现课堂上的重新定义非常愚蠢:它已经完成了确切地目的相同amsmath
,即栅栏和矩阵系数之间不存在间隙。但治疗比疾病更糟糕。
我认为将 的含义修正为\@array
内核含义没有什么问题。只需记住在使用具有非标准中心对齐的特殊矩阵环境时,@{}
在列规范的两侧手动添加即可。array
\documentclass{wileysix}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\@array}{\@mkpream{@{}#2@{}}}{\@mkpream{#2}}{}{}
\makeatother
\begin{document}
\[
\mathbf{y}=
\begin{pmatrix}
y_1 \\
y_2
\end{pmatrix}\mbox{ and }
\boldsymbol{\mu}=\begin{pmatrix}
\mu_1 \\
\mu_2
\end{pmatrix}
\]
\end{document}