对齐向量、矩阵、向量、乘法

对齐向量、矩阵、向量、乘法

我已经有一些看起来不错的东西了,但是 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].
\]

新结果

相关内容