![对齐向量、矩阵、向量、乘法](https://linux22.com/image/412721/%E5%AF%B9%E9%BD%90%E5%90%91%E9%87%8F%E3%80%81%E7%9F%A9%E9%98%B5%E3%80%81%E5%90%91%E9%87%8F%E3%80%81%E4%B9%98%E6%B3%95.png)
我已经有一些看起来不错的东西了,但是 latex 实现太丑了。有什么想法可以更干净地做到这一点吗?
\[
\frac{dz}{dt} =
\raisebox{1.02em} {$
\boldsymbol{[}\begin{array}{cc}
1 & -1 \\
\end{array}\boldsymbol{]}$
}
\left[\begin{array}{cc}
\frac{\partial \underline{y}}{\partial \underline{x}} & \frac{\partial \overline{y}}{\partial \underline{x}} \\ [0.5em]
\frac{\partial \underline{y}}{\partial \overline{x}} & \frac{\partial \overline{y}}{\partial \overline{x}} \\
\end{array}\right]
\left[\begin{array}{c}
1 \\[0.5em]
-1 \\
\end{array}\right].
\]
答案1
要与如此不均匀的物体进行对齐,需要进行一些手动调整。
我“目测”地抬高了第一行向量;可以准确计算抬高量,但我这样做只是为了表明这真的很糟糕,对读者没有帮助。为什么是顶部而不是底部?没有理由选择任何一个,所以正确的位置是在中心。
更重要的是,我添加了一些有助于打字和阅读代码的简写。
一些“幻影”使物体排列整齐。
\documentclass{article}
\usepackage{amsmath,bm}
\newenvironment{rowvector}
{\bm{[}\begin{matrix}}
{\end{matrix}\bm{]}}
\newcommand{\pder}[2]{\frac{\partial #1}{\partial #2}}
\newcommand{\ol}{\overline}
\newcommand{\ul}{\underline}
\begin{document}
\[
\frac{dz}{dt} =
\raisebox{3ex}{$\begin{rowvector} 1 & -1 \end{rowvector}$}
\begin{bmatrix}
\pder{\ul{y}}{\ul{x}} & \pder{\ol{y}\vphantom{\ul{y}}}{\ul{x}} \\[0.5em]
\pder{\ul{y}}{\ol{x}} & \pder{\ol{y}\vphantom{\ul{y}}}{\ol{x}}
\end{bmatrix}
\begin{bmatrix}
1 \vphantom{\pder{\ul{y}}{\ul{x}}} \\[0.5em]
-1 \vphantom{\pder{\ul{y}}{\ul{x}}}
\end{bmatrix}
\]
\[
\frac{dz}{dt} =
\begin{rowvector} 1 & -1 \end{rowvector}
\begin{bmatrix}
\pder{\ul{y}}{\ul{x}} & \pder{\ol{y}\vphantom{\ul{y}}}{\ul{x}} \\[0.5em]
\pder{\ul{y}}{\ol{x}} & \pder{\ol{y}\vphantom{\ul{y}}}{\ol{x}}
\end{bmatrix}
\begin{bmatrix}
1 \vphantom{\pder{\ul{y}}{\ul{x}}} \\[0.5em]
-1 \vphantom{\pder{\ul{y}}{\ul{x}}}
\end{bmatrix}
\]
\end{document}
答案2
我会使用bmatrix
环境而不是通用array
环境,并且不会将行向量提升到基线以上。
使用\overline
和\underline
可能是一种后天养成的习惯。但在我看来,这些宏产生的线条看起来确实很重,甚至有些霸道。使用\bar{...}
和\underaccent{\bar}{...}
(\underaccent
由软件包提供accents
)提供了一种看起来更轻便的解决方案;请参见下面的第二行。在该解决方案中,我插入了几个(印刷)支柱(\bstrut
在代码中调用)来微调分子项的位置\partial{\bar{y}}
。
\documentclass{article}
\usepackage{mathtools,accents}
% Create a typographic (bottom) strut:
\newcommand\bstrut{\vphantom{\underaccent{\bar}{y}}}
\begin{document}
\begin{align*}
\frac{dz}{dt}
&= \begin{bmatrix}
1 & -1
\end{bmatrix}
\begin{bmatrix}
\frac{\partial\underline{y}}{\partial\underline{x}} &
\frac{\partial\overline{y}}{\partial\underline{x}}\\[1ex]
\frac{\partial\underline{y}}{\partial\overline{x}} &
\frac{\partial\overline{y}}{\partial\overline{x}}
\end{bmatrix}
\begin{bmatrix*}[r]
1 \\ -1
\end{bmatrix*} \\
&= \begin{bmatrix}
1 & -1
\end{bmatrix}
\begin{bmatrix}
\frac{\partial\underaccent{\bar}{y}}{\partial\underaccent{\bar}{x}} &
\frac{\partial\bar{y}\bstrut}{\partial\underaccent{\bar}{x}}\\[1.25ex]
\frac{\partial\underaccent{\bar}{y}}{\partial\bar{x}} &
\frac{\partial\bar{y}\bstrut}{\partial\bar{x}}
\end{bmatrix}
\begin{bmatrix*}[r]
1 \\ -1
\end{bmatrix*}
\end{align*}
\end{document}
答案3
我建议使用单个blockarray
,\medmath
来自的命令,nccmath
用于在数组内包含中等大小的分数,以及diffcoeff
包,用于偏导数的简单语法。我还用 替换了\overline
,\widebar
这是来自`mathabx 的真正数学口音(无需加载包)。
\documentclass{article}
\usepackage{mathtools}
\usepackage{blkarray, bigstrut}
\usepackage{diffcoeff}
\usepackage{nccmath}
\newcommand{\mdiffp}[2]{\medmath{\diffp{#1}{#2}}}
\usepackage[math]{cellspace}
\setlength{\cellspacetoplimit}{2pt}
\setlength{\cellspacebottomlimit}{3pt}
\DeclareFontFamily{U}{mathx}{\hyphenchar\font45}
\DeclareFontShape{U}{mathx}{m}{n}{
<-6> mathx5 <6-7> mathx6 <7-8> mathx7
<8-9> mathx8 <9-10> mathx9
<10-12> mathx10 <12-> mathx12
}{}
\DeclareSymbolFont{mathx}{U}{mathx}{m}{n}
\DeclareFontSubstitution{U}{mathx}{m}{n}
\DeclareMathAccent{\widebar}{0}{mathx}{"73}
\begin{document}
\[ \setlength{\bigstrutjot}{0.75em}\diff{z}{r} = \begin{blockarray}
{@{}cc@{\hskip 0.65em}[cc][r]}
\boldsymbol{[}\, 1 & -1\, \boldsymbol{]} &\bigstrut\mdiffp{\underline{y}}{ \underline{x}} &\mdiffp{\widebar{y}}{ \underline{x}} & 1\\%[2ex]
& & \bigstrut\mdiffp{\underline{y}}{\widebar{x}} & \mdiffp{\widebar y}{ \widebar x } & -1
\end{blockarray}\]%
\end{document}
答案4
这可能有点傻,但我认为它在某种程度上更干净。结果略有不同。
我使用\vphantom
创建空间来以编程方式排列事物而不使用明确的数字,并定义一个命令来保存较高的部分分数,因此您只需在一个地方更改间距。
我使用\bigl[
而不是\boldsymbol{[}
(\boldsymbol
实际上似乎没有做任何事情)。
我将行向量与其他元素上行的中心对齐,而不是将其推到顶部。
\newcommand{\partialfractall}{\frac{\partial \underline{y}}{\partial \underline{x}}}
\[
\frac{dz}{dt} =
\begin{array}{cc}
\bigl[\begin{array}{cc}
1 & -1
\end{array}\bigr] \\
\vphantom{\partialfractall{}}
\end{array}
\left[\begin{array}{cc}
\frac{\partial \underline{y}}{\partial \underline{x}} & \frac{\partial \overline{y}}{\partial \underline{x}} \\ [0.5em]
\frac{\partial \underline{y}}{\partial \overline{x}} & \frac{\partial \overline{y}}{\partial \overline{x}} \\
\end{array}\right]
\left[%
\vphantom{\begin{array}{cc}
\frac{\partial \underline{y}}{\partial \underline{x}} & \frac{\partial \overline{y}}{\partial \underline{x}} \\ [0.5em]
\frac{\partial \underline{y}}{\partial \overline{x}} & \frac{\partial \overline{y}}{\partial \overline{x}} \\
\end{array}}%
\begin{array}{c}
\vphantom{\partialfractall{}} 1 \\
\vphantom{\partialfractall{}} -1 \\
\end{array}\right].
\]