我只是试图让每个元素与方程 1 中的相关符号对齐。如果问题太明显,请见谅。我尝试查看其他示例,但没有一个与我遇到完全相同的问题。
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\maketitle
\begin{align}
&\underline{s}_{t+1} &= s_t + &T_s \cdot \dot{\underline{s}_t} \\
\begin{pmatrix}
&\theta_{t+1} \\
\dot{\theta}_{t+1} \\
x_{t+1} \\
\dot{x}_{t+1}
\end{pmatrix}%_{4\times1}
\mkern5mu &= \mkern5mu
\begin{pmatrix}
\theta_t \\
\dot{\theta}_t \\
x_t \\
\dot{x}_t
\end{pmatrix}
\mkern5mu + \mkern5mu &T_s \mkern5mu \cdot
\begin{pmatrix}
\dot{\theta}_t \\
\ddot{\theta}_t \\
\dot{x}_t \\
\ddot{x}_t
\end{pmatrix}
\end{align}
\end{document}
编辑:我忘了说了,我希望两个方程都分配一个数字。显然,环境方程中的数组无法解决问题。
答案1
这种情况align
不太适合。您可以使用alignat
,但只要您只需要一个方程编号,我就会使用简单的array
。
\documentclass[twocolumn]{article} % twocolumn for smaller snapshot
\usepackage{amsmath}
\begin{document}
\begin{equation}
\begin{array}[t]{ % or [b] to align the number with the bottom equation
c
@{{}={}}
c
@{{} + \; T_s \; \cdot{}} % change the two \; to spacings you like
c
}
\underline{s}_{t+1} & s_t & \underline{\dot{s}}_t \\[2ex]
\begin{pmatrix}
\theta_{t+1} \\
\dot{\theta}_{t+1} \\
x_{t+1} \\
\dot{x}_{t+1}
\end{pmatrix}%_{4\times1}
&
\begin{pmatrix}
\theta_t \\
\dot{\theta}_t \\
x_t \\
\dot{x}_t
\end{pmatrix}
&
\begin{pmatrix}
\dot{\theta}_t \\
\ddot{\theta}_t \\
\dot{x}_t \\
\ddot{x}_t
\end{pmatrix}
\end{array}
\end{equation}
\end{document}
您可以根据需要更改+
、T_s
和之间的空格。另请注意,我使用了\cdot
\underline{\dot{s}}_t
而不是你的
\dot{\underline{s}_t}
后者会将点置于整个子公式的中心,而不是单独的下标s
。
编辑:如果两个方程都应该编号,那么就应该把所有东西都放在盒子里,让 TeX 测量它们的宽度。使用包可以使其更加自动化,eqparbox
但我对它不熟悉。
\documentclass[twocolumn]{article} % twocolumn for smaller snapshot
\usepackage{mathtools}% loads amsmath
\begin{document}
% measure larger vector
\sbox0{$\begin{pmatrix}
\theta_{t+1} \\
\dot{\theta}_{t+1} \\
x_{t+1} \\
\dot{x}_{t+1}
\end{pmatrix}$}%
% measure thinner vector
\sbox1{$\begin{pmatrix}
\dot{\theta}_t \\
\ddot{\theta}_t \\
\dot{x}_t \\
\ddot{x}_t
\end{pmatrix}$}
\begin{gather}
\mathmakebox[\wd0]{\underline{s}_{t+1}} = \mathmakebox[\wd1]{s_t} + \; T_s \; \cdot \mathmakebox[\wd1]{\underline{\dot{s}}_t} \\[2ex]
\copy0
=
\mathmakebox[\wd1]{
\begin{pmatrix}
\theta_t \\
\dot{\theta}_t \\
x_t \\
\dot{x}_t
\end{pmatrix}}
+ \; T_s \; \cdot \copy1
\end{gather}
\end{document}
答案2
您可以使用 eqparbox。要使用的标签对于要排版且宽度相同的框组应该是唯一的。
代码
\documentclass{article}
\usepackage{amsmath}
\usepackage{eqparbox}
\newcommand{\eqmath}[3][c]{%
% #1 = alignment, default c, #2 = label, #2 = math material
\eqmakebox[#2][#1]{$\displaystyle#3$}%
}
\begin{document}
\begin{align}
\eqmath{1A}{\underline{s}_{t+1}} &=
\eqmath{1B}{s_t} +
T_s \cdot \eqmath{1C}{\dot{\underline{s}}_t}
\\
\eqmath{1A}{
\begin{pmatrix}
\theta_{t+1} \\
\dot{\theta}_{t+1} \\
x_{t+1} \\
\dot{x}_{t+1}
\end{pmatrix}
} &=
\eqmath{1B}{
\begin{pmatrix}
\theta_t \\
\dot{\theta}_t \\
x_t \\
\dot{x}_t
\end{pmatrix}
} +
T_s \cdot \eqmath{1C}{
\begin{pmatrix}
\dot{\theta}_t \\
\ddot{\theta}_t \\
\dot{x}_t \\
\ddot{x}_t
\end{pmatrix}
}
\end{align}
\end{document}
现在比较
并决定这样做更好,因为它假设读者可以阅读。代码
\documentclass{article}
\usepackage{amsmath}
\usepackage{eqparbox}
\begin{document}
\begin{gather}
\underline{s}_{t+1} = s_t + T_s \cdot \dot{\underline{s}}_t
\\
\begin{pmatrix}
\theta_{t+1} \\
\dot{\theta}_{t+1} \\
x_{t+1} \\
\dot{x}_{t+1}
\end{pmatrix} =
\begin{pmatrix}
\theta_t \\
\dot{\theta}_t \\
x_t \\
\dot{x}_t
\end{pmatrix} +
T_s \cdot
\begin{pmatrix}
\dot{\theta}_t \\
\ddot{\theta}_t \\
\dot{x}_t \\
\ddot{x}_t
\end{pmatrix}
\end{gather}
\end{document}
甚至更好,添加一些解释性文字:
\documentclass{article}
\usepackage{amsmath,mathtools}
\begin{document}
\begin{equation}
\underline{s}_{t+1} = s_t + T_s \cdot \dot{\underline{s}}_t
\end{equation}
which becomes, in our particular case,
\begin{equation}
\begin{pmatrix}
\theta_{t+1} \\
\dot{\theta}_{t+1} \\
x_{t+1} \\
\dot{x}_{t+1}
\end{pmatrix} =
\begin{pmatrix}
\theta_t \\
\dot{\theta}_t \\
x_t \\
\dot{x}_t
\end{pmatrix} +
T_s \cdot
\begin{pmatrix}
\dot{\theta}_t \\
\ddot{\theta}_t \\
\dot{x}_t \\
\ddot{x}_t
\end{pmatrix}
\end{equation}
\end{document}
答案3
这是一个基于标准array
环境的简单方法。您可以使用长度选择列之间的分隔\arraycolsep
。
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{equation}
\setlength{\arraycolsep}{.3em}
\begin{array}{ccccccc}
\underline{s}_{t+1}
&=& s_t &+& T_s &\cdot& \dot{\underline{s}_t}\\[1ex]
\begin{pmatrix}
\theta_{t+1}\\
\dot{\theta}_{t+1}\\
x_{t+1}\\
\dot{x}_{t+1}
\end{pmatrix}
&=&
\begin{pmatrix}
\theta_t \\
\dot{\theta}_t \\
x_t \\
\dot{x}_t
\end{pmatrix}
&+& T_s &\cdot&
\begin{pmatrix}
\dot{\theta}_t \\
\ddot{\theta}_t \\
\dot{x}_t \\
\ddot{x}_t
\end{pmatrix}
\end{array}
\end{equation}
\end{document}
答案4
如果您只需要一个方程编号,则可以将顶部方程堆叠在底部方程的元素上。在这里,我使用 ongstackL
来获取方程之间的固定基线跳跃,我将其设置为38pt
。
\documentclass{article}
\usepackage{amsmath,stackengine}
\stackMath
\begin{document}
\renewcommand\stacktype{L}
\setstackgap{L}{38pt}
\begin{align}
\stackon{\begin{pmatrix}
\theta_{t+1} \\
\dot{\theta}_{t+1} \\
x_{t+1} \\
\dot{x}_{t+1}
\end{pmatrix}}{\underline{s}_{t+1}}
&\stackon{{}={}}{=}
\stackon{\begin{pmatrix}
\theta_t \\
\dot{\theta}_t \\
x_t \\
\dot{x}_t
\end{pmatrix}}{s_t}
\stackon{{}+ T_s \cdot{}}{{}+ T_s \cdot{}}
\stackon{\begin{pmatrix}
\dot{\theta}_t \\
\ddot{\theta}_t \\
\dot{x}_t \\
\ddot{x}_t
\end{pmatrix}}{\dot{\underline{s}_t}}
\end{align}
\end{document}