排版内联行向量

排版内联行向量

我对排版内联行向量还有另一个问题。我使用的是 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}

在此处输入图片描述

替代,带有\DeclarePairedDelimiterXmatrix内部。

\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环境后,向量的元素被方括号包围(您也可以在这里使用不同类型的外部对,如| |( ){ })。

相关内容