我对排版内联行向量还有另一个问题。我使用的是 amsmath 和 mathtools。我知道 smallmatrix 环境。不幸的是,向量的元素会被缩放。这对我来说似乎完全没有必要。此外,bmatrix 环境对我来说不是一个解决方案,因为分隔符比“正常”文本括号大。
我希望有更多类似的东西
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathtools}
\begin{document}
Text $[\,x^* \quad y^*\,]^*$
instead of
$
\begin{bmatrix}
x^* & y^*
\end{bmatrix}^*
or
\begin{bsmallmatrix}
x^* & y^*
\end{bsmallmatrix}^*
$
\end{document}
答案1
我推荐一种通用解决方案,这样您以后就可以更改行为,除了使用更干净的输入代码之外。下面是使用 expl3 的解决方案。
\documentclass{scrartcl}
\usepackage{xparse,mathtools}
\ExplSyntaxOn
\NewDocumentCommand \vect { s o m }
{
\IfBooleanTF {#1}
{ \vectaux*{#3} }
{ \IfValueTF {#2} { \vectaux[#2]{#3} } { \vectaux{#3} } }
^*
}
\DeclarePairedDelimiterX \vectaux [1] {\lbrack} {\rbrack}
{ \, \dbacc_vect:n { #1 } \, }
\cs_new_protected:Npn \dbacc_vect:n #1
{
\seq_set_split:Nnn \l_tmpa_seq { , } { #1 }
\seq_use:Nn \l_tmpa_seq { \enspace }
}
\ExplSyntaxOff
\begin{document}
Text
$\vect{x^*,y^*}$
instead of
$\begin{bsmallmatrix} x^* & y^* \end{bsmallmatrix}^*$
\end{document}
您还可以输入\vect{x,y,z,t,u,v}
、 或\vect*{\int,\sum,\prod}
或\vect[\Big]{a,b,\frac{n}{z}}
等其他分隔符\DeclarePairedDelimiter
。替换\enspace
为您想要的任何空格。
添加
如果你想要输入\vect{x,y,z}
并得到 [x^* y^* z^*]^* 只需更改一个命令
\cs_new_protected:Npn \dbacc_vect:n #1
{
\seq_clear:N \l_tmpb_seq
\seq_set_split:Nnn \l_tmpa_seq { , } { #1 }
\seq_map_inline:Nn \l_tmpa_seq { \seq_put_right:Nn \l_tmpb_seq { ##1^* } }
\seq_use:Nn \l_tmpb_seq { \enspace }
}
答案2
我的建议是直接输入
\begin{bmatrix} x^* & y^* \end{bmatrix}
也许有适当的定义,例如
\newcommand{\rvect}[1]{\begin{bmatrix} #1 \end{bmatrix}}
并输入
\rvect{x^* & y^*}
如果您认为这&
很麻烦,可以使用逗号分隔列表:
\documentclass{scrartcl}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\rvect}{m}
{
\seq_set_split:Nnn \l_tmpa_seq { , } { #1 }
\begin{bmatrix}
\seq_use:Nn \l_tmpa_seq { & }
\end{bmatrix}
}
\ExplSyntaxOff
\begin{document}
Text
$\rvect{x^*,y^*}$
\end{document}
替代,带有\DeclarePairedDelimiterX
和matrix
内部。
\documentclass{scrartcl}
\usepackage{xparse,mathtools}
\DeclarePairedDelimiterX{\rvect}[1]{[}{]}{\,\makervect{#1}\,}
\ExplSyntaxOn
\NewDocumentCommand{\makervect}{m}
{
\seq_set_split:Nnn \l_tmpa_seq { , } { #1 }
\begin{matrix}
\seq_use:Nn \l_tmpa_seq { & }
\end{matrix}
}
\ExplSyntaxOff
\begin{document}
Text
$\rvect{x^*,y^*}$
\end{document}
您可以使用常用的可选参数手动增加分隔符的大小\rvect
。
答案3
回答已经很晚了,但我想贡献另一种使用该physics
包排版行向量的方法。根据包的文档,您可以使用\mqty
(矩阵数量)宏(参见第 7 页和第 8 页,它有很多示例)。对于我们的情况,我们只需要写
\mqty[X_1 & X_2 & \cdots X_n]
为行向量。
请注意,声明\mqty
环境后,向量的元素被方括号包围(您也可以在这里使用不同类型的外部对,如| |
、 ( )
或{ }
)。