对齐块未正确对齐

对齐块未正确对齐

我正在使用 amsmath,想要显示一个状态空间表示,其中所有等号都对齐,中间的元素居中。align据我所知,就像应该做的那样。但我得到了这个,其中所有块都正确对齐。更不用说每个后面插入了奇怪的空格=在此处输入图片描述

代码:

\documentclass{article}
\usepackage{amsmath}
\renewcommand{\vec}{\textbf}
\begin{document}
    \begin{align}
    \dot{\vec{x}} &=& \begin{bmatrix}
    \dot{n}\\\dot{x}\\\dot{x_c}\\\dot{V_v}\\\dot{V_m}\\\dot{H}
    \end{bmatrix} &=& \begin{bmatrix}
    f_2(f_1(I),n)\\
    f_4(x, x_c, f_3(f_1(I),n,x,x_c))\\
    f_5(x, x_c, f_3(f_1(I),n,x,x_c))\\
    f_8(f_7(f_6(x, x_c),H), V_v, f_9(V_m))\\
    f_{10}(V_m, f_{11}(V_v))\\
    f_{12}(H, f_9(V_m))
    \end{bmatrix} &=& \vec{f}(\vec{x}, \vec{u}; \theta)
    \label{eq:state}\text{, and}\\
    \vec{z} &=& \begin{bmatrix}
    S_w
    \end{bmatrix} &=& \begin{bmatrix}
    h_1(f_9(V_m))
    \end{bmatrix} &=& \vec{h}(\vec{x}; \theta)
    \label{eq:output}\text{.}
    \end{align}
\end{document}

答案1

这是 的标准行为align,因为它会根据 的使用插入间隙(水平)&。假设多个方程要分散开来。并且您当前在&=&关系周围的使用类似于使用 时所需的eqnarray。但 并非如此amsmathalign朋友。

为了强制中心对齐,您可以将内容存储在一个盒子中,然后使用测量值将较小的盒子推到正确的位置。eqparbox提供开箱即用的功能\eqmakebox[<tag>][<align>]{<stuff>}<align>ing(left、centre/default、right)全部<stuff>与所需相同<tag>

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath,bm}
\usepackage{eqparbox,xparse}

% https://tex.stackexchange.com/a/34412/5764
\makeatletter
\NewDocumentCommand{\eqmathbox}{o O{c} m}{%
  \IfValueTF{#1}
    {\def\eqmathbox@##1##2{\eqmakebox[#1][#2]{$##1##2$}}}
    {\def\eqmathbox@##1##2{\eqmakebox{$##1##2$}}}
  \mathpalette\eqmathbox@{#3}
}
\renewcommand{\vec}{\bm}

\begin{document}

\begin{align}
  \dot{\vec{x}} &= \eqmathbox[left]{\begin{bmatrix}
    \dot{n} \\ \dot{x} \\ \dot{x_c} \\ \dot{V_v} \\ \dot{V_m} \\ \dot{H}
  \end{bmatrix}} = \eqmathbox[middle]{\begin{bmatrix}
    f_2( f_1( I ), n) \\
    f_4( x, x_c, f_3( f_1( I ), n, x, x_c ) ) \\
    f_5( x, x_c, f_3( f_1( I ), n, x, x_c ) ) \\
    f_8( f_7( f_6( x, x_c ), H ), V_v, f_9( V_m ) ) \\
    f_{10}( V_m, f_{11}( V_v ) ) \\
    f_{12}( H, f_9( V_m ) )
  \end{bmatrix}} = \eqmathbox[right]{\vec{f}( \vec{x}, \vec{u}; \theta ),}
  \label{eq:state} \text{ and} \\
  \vec{z} &= \eqmathbox[left]{\begin{bmatrix}
    S_w
  \end{bmatrix}} = \eqmathbox[middle]{\begin{bmatrix}
    h_1( f_9( V_m ) )
  \end{bmatrix}} = \eqmathbox[right]{\vec{h}( \vec{x}; \theta ).}
  \label{eq:output}
\end{align}

\end{document}

这要求对 中的每个内容更改进行至少两次编译\eqmathbox

答案2

我认为在两个方程之间提供多个对齐点并不能真正帮助阐明这两个方程的“含义”。为什么不使用环境gather来创建两个以单独为中心的方程呢?

在此处输入图片描述

\documentclass{article}
\usepackage{mathtools} % for '\shortintertext' macro
\renewcommand{\vec}{\mathbf} % use '\mathbf', not '\textbf' 
\begin{document}
    \begin{gather}
    \dot{\vec{x}} =
    \begin{bmatrix}
      \dot{n}\\ \dot{x}\\ \dot{x_c}\\ \dot{V_v}\\ \dot{V_m}\\ \dot{H}
    \end{bmatrix} =
    \begin{bmatrix}
      f_2(f_1(I),n)\\
      f_4(x, x_c, f_3(f_1(I),n,x,x_c))\\
      f_5(x, x_c, f_3(f_1(I),n,x,x_c))\\
      f_8(f_7(f_6(x, x_c),H), V_v, f_9(V_m))\\
      f_{10}(V_m, f_{11}(V_v))\\
      f_{12}(H, f_9(V_m))
    \end{bmatrix} =
    \vec{f}(\vec{x}, \vec{u}; \theta)
    \label{eq:state}\\
    \shortintertext{and}
    \vec{z} =
    \begin{bmatrix}
      S_w
    \end{bmatrix} =
    \begin{bmatrix}
      h_1(f_9(V_m))
    \end{bmatrix} =
    \vec{h}(\vec{x}; \theta).
    \label{eq:output}
    \end{gather}
\end{document}

相关内容