以下是 MWE:
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\begin{document}
The reparameterisation is
\begin{equation}
\label{eqn:linear_ssK3}
\begin{matrix}
s
& = & [ &
s_1 & s_2 & s_3 & s_4 & s_5
& ]^T \\
& = & [ &
\phi_1+ABCD &
\phi_2+ABCD &
\tau_{p3}+ABCD&
\mu_p+ABCD &
\mu_p^2+ABCD &
]^T
\end{matrix}.
\end{equation}
\end{document}
我正在尝试使用这种对齐方式。但请注意句号的.
位置不对。
有没有更好的方法来实现这个目标?
谢谢!!
更新:
抱歉,如果我没有说清楚,可能会造成一些混淆。我希望像更新后的矩阵一样对齐单元格中的元素。许多建议的方法不会以这种方式对齐。
答案1
如果要保持列之间的对齐,请使用array
,并进行一些增强:
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage{array}
\begin{document}
The reparameterisation is
\begin{equation}
\label{eqn:linear_ssK3}
\begin{array}{@{} >{{}}r<{{}} @{}r@{\,} *{5}{c} @{\,}l@{}}
s = & [ & s_1 & s_2 & s_3 & s_4 & s_5 & ]^T \\[1ex]
= & [ & \phi_1^{} & \phi_2^{} & \tau_{p3}^{} & \mu_p^{} & \mu_p^2 & ]^T.
\end{array}
\end{equation}
\end{document}
对于一次性应用程序来说,这很好;如果需要几个类似的显示,您可以定义一个环境和一个命令来简化输入:
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage{array}
\newenvironment{alignedrows}[1]
{\begin{array}{@{} >{{}}r<{{}} @{}r@{\,} *{#1}{c} @{\,}l@{}}}
{\end{array}}
\newcommand{\arow}[2]{%
#1 & [ & #2 & ]^T %
}
\begin{document}
The reparameterisation is
\begin{equation}
\label{eqn:linear_ssK3}
\begin{alignedrows}{5}
\arow{s=}{ s_1 & s_2 & s_3 & s_4 & s_5 } \\[1ex]
\arow{ =}{ \phi_1^{} & \phi_2^{} & \tau_{p3}^{} & \mu_p^{} & \mu_p^2 }.
\end{alignedrows}
\end{equation}
\end{document}
输出是一样的。
答案2
不要将其equation
用于多线方程式align
,也不要将其matrix
用于对齐整个方程式,而仅将其用于制作矩阵,或者在这里您可以bmatrix
按照 sigur 的建议使用。
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\begin{document}
The reparameterisation is
\begin{equation}
\label{eqn:linear_ssK3}
\begin{aligned}
s&=
\begin{bmatrix}
s_1 & s_2 & s_3 & s_4 & s_5
\end{bmatrix}^T \\
&= \begin{bmatrix}
\phi_1 &
\phi_2 &
\tau_{p3}&
\mu_p &
\mu_p^2
\end{bmatrix}^T
\text{.}
\end{aligned}
\end{equation}
\end{document}
如果您希望使用单一对齐来对齐条目,则会破坏表达式的结构,每个矩阵都有一个环境,因此我将使用单独的对齐,但强制宽度相等:
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath,array}
\begin{document}
The reparameterisation is
\begin{equation}
\label{eqn:linear_ssK3}
\begin{aligned}
s&=
(\begin{array}{@{}*{5}{>{\centering\arraybackslash$}p{1.2em}<{$}}@{}}
s_1 & s_2 & s_3 & s_4 & s_5
\end{array})^T \\
&= (\begin{array}{@{}*{5}{>{\centering\arraybackslash$}p{1.2em}<{$}}@{}}
\phi_1 &
\phi_2 &
\tau_{p3}&
\mu_p &
\mu_p^2
\end{array})^T
\text{.}
\end{aligned}
\end{equation}
\end{document}
答案3
以下是 @Sigur 建议的解决方案。(他发表评论时我正在研究这个问题。)
为了获得您想要的内部对齐,我对一些空格进行了硬编码。如果您经常需要这样做,那么您将需要一个更优雅的解决方案。
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\begin{document}
The reparameterisation is
\begin{align}
\label{eqn:linear_ssK3}
s & = \begin{bmatrix}
& s_1 & s_2 \ & s_3 \ & s_4 & s_5 &
\end{bmatrix}^T \\
& = \begin{bmatrix}
&
\phi_1 &
\phi_2 &
\tau_{p3}&
\mu_p &
\mu_p^2 &
\end{bmatrix}^T \quad . \notag
\end{align}
\end{document}
答案4
另外一个选择
\documentclass{scrartcl}
\usepackage{mathtools}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand \vect { s m }
{
\IfBooleanTF { #1 }
{ \chen_v_vector:n { #2 } }
{ \chen_h_vector:n { #2 } }
}
\cs_new_nopar:Npn \chen_h_vector:n { \chen_vector_aux:nn { & } }
\cs_new_nopar:Npn \chen_v_vector:n { \chen_vector_aux:nn { \\ } }
\cs_new_protected:Npn \chen_vector_aux:nn #1 #2
{
\begin { bmatrix }
\seq_set_split:Nnn \l_tmpa_seq { , } { #2 }
\seq_use:Nn \l_tmpa_seq { #1 }
\end { bmatrix }
}
\ExplSyntaxOff
\begin{document}
The reparameterisation is
\begin{equation}
\label{eqn:linear_ssK3}
\begin{split}
s &= \vect{s_1,s_2,s_3,s_4,s_5}^T \\[1ex]
&= \vect{\phi_1,\phi_2,\tau_{p3},\mu_p,\mu_p^2}^T.
\end{split}
\end{equation}
\end{document}
使用我定义的新命令,\vect
您可以轻松输入矩阵向量:\vect{a,b,c}
将创建一个包含三个条目的水平数组(a
,b
,c
,它们以逗号分隔),然后\vect*{a,b,c}
您将得到一个垂直的矩阵。