我应该在一道数学题中使用以下矩阵:
但根据我对 LaTeX 表格和矩阵的经验,我知道这超出了我的能力范围。
有人能告诉我如何制作以下矩阵吗?任何帮助都很好。我想我需要使用,bmatrix
但之后我被难住了。
答案1
以下是我的做法:
\documentclass{article}
\usepackage{mathtools}
\usepackage{bm}
\DeclareMathOperator{\Hess}{Hess}
\newcommand*\vect[1]{\mathbf{#1}}
% http://tex.stackexchange.com/a/59955/15874
% The following piece of code measures the length of math expressions
% in order to get the length of the two horizontal rules (based on
% the chosen width of the whitespaces) in the matrix.
\makeatletter
\newcommand*\settowidthofalign[2]{%
\setbox\z@=\vbox{
\begin{align*}
#2
\ifmeasuring@\else\global\let\got@maxcolwd\maxcolumn@widths\fi
\end{align*}
}%
\begingroup
\def\or{+}\edef\x{\endgroup#1=\dimexpr\got@maxcolwd\relax}\x}
\makeatother
\newlength{\mylenA}
\newlength{\mylenB}
% Calculate length of rules.
\if \mylenA < \mylenB
\newcommand*\ruleLength{\the\dimexpr(\mylenA-\mylenB-4*(\WhiteSpace))/2\relax}
\else
\newcommand*\ruleLength{\the\dimexpr(\mylenB-\mylenA-4*(\WhiteSpace))/2\relax}
\fi
% Matrix construction.
\newcommand*\Matrix[4]{%
\left[
\begin{array}{@{} c | c @{}}
#1
& \begin{array}{c}
\vert\\
#2\\
\vline
\vspace{0.5ex}
\end{array}\\
\hline
\vspace{0.5ex}
\raisebox{-0.3ex}{%
$\rule[0.5ex]{\ruleLength}{0.4pt}
\hspace{\WhiteSpace} #3 \hspace{\WhiteSpace}
\rule[0.5ex]{\ruleLength}{0.4pt}$%
}
& \raisebox{-0.3ex}{$#4$}
\end{array}
\right]%
}
% Matrix entries.
\newcommand*\entryA{\Hess(f)(\vect{a}) - \lambda\Hess(g)(\vect{a})}
\newcommand*\entryB{\bm{\nabla} g(\vect{a})}
\newcommand*\entryC{D g(\vect{a})}
\newcommand*\entryD{0}
\begin{document}
% Widths of expressions in matrix entries.
\settowidthofalign{\mylenA}{\entryA}
\settowidthofalign{\mylenB}{\entryB}
\begin{equation*}
% Width of whitespace on each side of horizontal lines.
\def\WhiteSpace{12pt}
% Math expression.
H_{f,g} \binom{\vect{a}}{\lambda}
= \Matrix{\entryA}{\entryB}{\entryC}{\entryD}
\end{equation*}
\end{document}
在这种特殊情况下,这可能有点过头了,但你现在有了一个可以重复用于其他矩阵的工作构造。你所要做的就是
- 定义新矩阵的条目(例如
\entryE
), - 定义要使用的新长度(使用
\newlength
), - 让 TeX 计算数学表达式的宽度(使用
\settowidthofalign
), - 对整个过程进行排版(使用
\Matrix
)。
注意:我不会将其\nabla
加粗;我认为它对阅读的干扰大于帮助。
答案2
array
以下是使用和一些\rule
命令来处理额外行的方法里面单元格。请注意,该数组实际上由四行组成。
代码
\documentclass[varwidth]{standalone}
\usepackage{amsmath,bm}
\DeclareMathOperator\Hess{Hess}
\begin{document}
\begin{equation*}
\renewcommand*\a{\mathbf{a}}
\newcommand*\vl{\rule[-.3em]{.4pt}{1em}}
\newcommand*\hl{\rule[.5ex]{2em}{.4pt}}
%
H_{f,g}\binom{\a}{\lambda} = \left[\begin{array}{c|c}
& \vl \\
\Hess(f)(\a)-\lambda\Hess(g)(\a) & \nabla g(\a) \\
& \vl \\ \hline
\hl\quad Dg(\a) \quad\hl & 0
\end{array}\right]
\end{equation*}
\end{document}
输出
答案3
类似这样的事?
\documentclass{article}
\usepackage{amssymb}
\usepackage{mathtools, array}
\DeclareMathOperator{\hess}{Hess}
\def\longline{\relbar\mkern-6mu\relbar}
\begin{document}
\[\setlength\extrarowheight{1pt}
\begin{bmatrix}
\begin{array}{c@{\,}c@{\,}c|c}
& & & \vrule \\
\multicolumn{3}{c|}{\hess_{f, g}(f)(\mathbf a)} & \nabla g(\mathbf a)\\
& & & \vrule \\[-2.6ex] & & & \\
\hline
\longline & Dg(\mathbf a) &\longline & 0
\end{array}
\end{bmatrix} \]%
\end{document}
答案4
如何使用普通 TeX 工具执行此操作:
\def\vec#1{{\bf#1}}
\def\lrule{\leaders\hrule height3pt depth-2.6pt\hskip2em \relax}
\def\Hess{\mathop{\rm Hess}\nolimits}
$$
H_{f,g} {\vec a \choose \lambda} =
\left[
\vcenter{\offinterlineskip
\halign{\hfil$#$\ \hfil\vrule height10pt depth5pt&\hfil\ $#$\hfil\cr
& | \cr
\Hess(f)(\vec a) - \lambda \Hess(g)(\vec a) & \nabla g(\vec a) \cr
& | \cr
\noalign{\hrule}
\lrule\ Dg(\vec a)\ \lrule & 0 \cr
}}
\right]
$$