如何以编程方式在数组的每一行之间插入 \hline

如何以编程方式在数组的每一行之间插入 \hline

我正在尝试创建一个分为四个部分的矩阵环境,如下所示:

在此处输入图片描述

理想情况下,我希望它可以像下面这样使用:

M = 
\left(
\begin{croosmatrix}
   \begin{matrix}
      a & b & c & d \\
      e & f & g & h \\
      i & j & k & l 
   \end{matrix} 
      & B \\
   C & D \\
\end{crossmatrix}
\right)

我已经知道如何手动实现这样的结果,如下所述矩阵中的分界线. 类似下面这样:

M = 
\left(
\begin{array}{c|c}
   \begin{matrix}
      a & b & c & d \\
      e & f & g & h \\
      i & j & k & l 
   \end{matrix} 
      & B \\
   \hline
   C & D \\
\end{array}
\right)

我的问题是,我怎样才能使其成为一个环境?换句话说,有没有办法以编程方式\hile在数组上放置一个“彼此之间”?是否有可能为这样的事情创建一个环境?

答案1

您可以使用nicematrix它来构建矩阵,同时创建 Tikz 节点。您可以使用这些节点在 Tikz 中绘制您想要的内容。

\documentclass{article}
\usepackage{nicematrix,tikz}

\NewDocumentEnvironment {crossmatrix} { }
  { \begin{pNiceArray}{cc}[margin] }
  {
    \CodeAfter
    \tikz \draw (2-|1) -- (2-|3) (1-|2) -- ([yshift=1pt]2-|2) ++ (0,-2pt) -- (3-|2) ;
    \end{pNiceArray}
  }

\begin{document}
$M = 
\begin{crossmatrix}
   \begin{matrix}
      a & b & c & d \\
      e & f & g & h \\
      i & j & k & l 
   \end{matrix}
      & B \\
   C & D 
\end{crossmatrix}$
\end{document}

上述代码的结果

答案2

您想将\halign嵌套表 () 中的项目插入到外部表 ( )中。如果嵌套实现为读取其参数的宏,则\haling没有问题。然后,此类参数可以包含制表符并用于其内部嵌套。但是,如果您想使用带有分隔参数的宏,而不是,那么制表符和此类参数将被解释\halign{...}&\cr\halign{...}&\cr读取参数时作为外部的标签\halign

嵌套\begin{matrix}..&..&.\end{matrix}读取其参数以\end{matrix}(no in {...}) 结尾,因此&此处使用的制表符由外部 解释\halign。当然,您可以通过 隐藏这些制表符,{\begin{mattrix}..&..&.\end{matrix}}但标记表格和使用嵌套 LaTeX 环境的 LaTeX 逻辑会丢失。

以下示例显示了原生 TeX 语言中的问题:

\def\a#1{\vbox{\halign{##&##\cr#1\cr}}}

\halign{X#Y&Z#W\cr    ..\a{b&c}..& d\cr}

有效,因为b&c在内部读取{},所以&这里的不被外部的解释\halign

\def\a[#1]{\vbox{\halign{##&##\cr#1\cr}}}

\halign{X#Y&Z#W\cr    ..\a[b&c]..& d\cr}

不起作用,因为当b&读入参数时,TeX 会将其解释&为外部的选项卡\halign,并且继续读取参数,Y然后\endtemplate禁止将其读入参数。

\def\a[#1]{\vbox{\halign{##&##\cr#1\cr}}}

\halign{X#Y&Z#W\cr    ..{\a[b&c]}..& d\cr}

作品。

答案3

问题在于语法。这里我建议将各部分指定为环境的参数。

\documentclass{article}
\usepackage{amsmath}

\newenvironment{crossmatrix}[3]
 {
  \left(
  \def\crossmatrixfinal{&#1\\\hline#2&#3}
  \begin{array}{@{}c|c@{}}
  \begin{matrix}
 }
 {
  \end{matrix}
  \crossmatrixfinal
  \end{array}
  \right)
 }

\begin{document}

\[
\begin{crossmatrix}{B}{C}{D}
  a & b & c & d \\
  e & f & g & h \\
  i & j & k & l 
\end{crossmatrix}
\]

\end{document}

在此处输入图片描述

相关内容