booktabs 列中的向量逐字列

booktabs 列中的向量逐字列

在 中进行大量计算后PythonPandas DataFrame创建了一个包含多个向量的 。幸运的是,Pandas可以 格式导出其表格booktabs,但 LaTeX 会对齐“向量”,我希望保持与导出时相同的间距/对齐方式,即向量的每个元素在列中保持对齐。我发现 可以按\verb元素/单元格使用,但我的表格有很多列,甚至还有更多行。我尝试了 的几个array \newcolumntype定义,\verb但没有一个接近正确渲染,或者只是出现错误。似乎应该有一种方法可以指定整个列所需的格式。

这是一个 MWE,其列和行比我的实际数据少很多,但仍然显示问题。

\documentclass{article}
\usepackage{booktabs}

\begin{document}
\begin{tabular}{rrrrllr}
    \toprule
    ID & n & M   & B    & vector 1          & vector 2              & SC   \\
    \midrule
    -1 & 4 & 123 & 1475 & [ 36   1  43 113] & [ 574  253  636 1266] & 1519 \\
    -3 & 4 & 192 & 2111 & [ 54  74 147  30] & [ 736  913 1567  520] & 2169 \\
    -5 & 4 & 446 & 4125 & [ 68 226 238 155] & [ 855 2278 2389 1637] & 4026 \\
    \bottomrule
\end{tabular}
\end{document}

渲染结果如下:

在此处输入图片描述

如何让 Vector 列保留其元素对齐方式,如 LaTeX 源中所示?

有没有办法使列标题居中并使其下方的列数据右对齐?

答案1

像这样?

在此处输入图片描述

一种方法是将每个矩阵列放在单独的表列中。例如使用tabularray包:

\documentclass{article}
\usepackage{amsmath}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}

\begin{document}
\begin{tblr}{colspec={Q[r,$] ccc r@{\ }r@{\ }r@{\ }r r@{\ }r@{\ }r@{\ }r c}}
    \toprule
\SetCell[c=1]{c} \text{ID}
    & n & M & B      & \SetCell[c=4]{c} vector 1    
                            &     &    &    & \SetCell[c=4]{c} vector 2   
                                                      &      &      &       & SC   \\
    \midrule
-1 & 4 & 123 & 1475 & [ 36 &   1 &  43 & 113] & [ 574 &  253 &  636 & 1266] & 1519 \\
-3 & 4 & 192 & 2111 & [ 54 &  74 & 147 &  30] & [ 736 &  913 & 1567 &  520] & 2169 \\
-5 & 4 & 446 & 4125 & [ 68 & 226 & 238 & 155] & [ 855 & 2278 & 2389 & 1637] & 4026 \\
    \bottomrule
\end{tblr}
\end{document}

当然,这也可以用tabular表格来实现:

\documentclass{article}
\usepackage{amsmath}
\usepackage{array}
\usepackage{booktabs}

\begin{document}
\begin{tabular}{>{$}c<{$} ccc r@{\ }r@{\ }r@{\ }r r@{\ }r@{\ }r@{\ }r c}
    \toprule
\text{ID}
    & n & M & B      & \multicolumn{4}{c}{vector 1}  
                                              & \multicolumn{4}{c}{vector 2}   
                                                                            & SC   \\
    \midrule
-1 & 4 & 123 & 1475 & [ 36 &   1 &  43 & 113] & [ 574 &  253 &  636 & 1266] & 1519 \\
-3 & 4 & 192 & 2111 & [ 54 &  74 & 147 &  30] & [ 736 &  913 & 1567 &  520] & 2169 \\
-5 & 4 & 446 & 4125 & [ 68 & 226 & 238 & 155] & [ 855 & 2278 & 2389 & 1637] & 4026 \\
    \bottomrule
\end{tabular}
\end{document}

答案2

像这样吗?

\documentclass{article}
\usepackage{booktabs}
\usepackage{mathtools}

\begin{document}

\[ \begin{array}{*{4}{r}*{2}{r@{\enspace}r@{\enspace}r@{\enspace}r}r}
    ID & n & M & B & \multicolumn{4}{c}{\text{vector 1}} & \multicolumn{4}{c}{\text{vector 2}} & SC \\
    \midrule
    -1 & 4 & 123 & 1475 & [\, 36 & 1 & 43 & 113\,] & [\, 574 & 253 & 636 & 1266\,] & 1519 \\[0.5ex]
    -3 & 4 & 192 & 2111 & [\, 54 & 74 & 147 & 30\,] & [\, 736 & 913 & 1567 & 520\,] & 2169 \\[0.5ex]
    -5 & 4 & 446 & 4125 & [\, 68 & 226 & 23 & 55\,] & [\, 855 & 2278 & 2389 & 1637\,] & 4026 \\
    \bottomrule
\end{array} \]

\end{document} 

在此处输入图片描述

答案3

恐怕您必须编辑表格以插入更多&标记。

由于我们不能确保向量第一个条目的所有数字都有相同的数字长度,我们需要为开括号保留一列;为了对称和方便输入,我还为闭括号保留了一列。

\documentclass{article}
\usepackage{amsmath}
\usepackage{booktabs}

\begin{document}

\[
\begin{array}{
  @{}
  *{4}{r} % the first four columns
  c@{\,} % for the open bracket
  *{4}{r} % the first vector
  @{\,}c % for the closed brace
  c@{\,} % for the open bracket
  *{4}{r} % the second vector
  @{\,}c % for the closed brace
  r % the last column
  @{}
}
\toprule
% the headers
\multicolumn{1}{@{}c}{\text{ID}} &
\multicolumn{1}{c}{n} &
\multicolumn{1}{c}{M} &
\multicolumn{1}{c}{B} &
\multicolumn{6}{c}{\text{vector 1}} &
\multicolumn{6}{c}{\text{vector 2}} &
\multicolumn{1}{c@{}}{\text{SC}} \\
\midrule
-1 & 4 & 123 & 1475 & [ & 36 &   1 &  43 & 113 & ] & [ & 574 &  253 &  636 & 1266 & ] & 1519 \\
-3 & 4 & 192 & 2111 & [ & 54 &  74 & 147 &  30 & ] & [ & 736 &  913 & 1567 &  520 & ] & 2169 \\
-5 & 4 & 446 & 4125 & [ & 68 & 226 & 238 & 155 & ] & [ & 855 & 2278 & 2389 & 1637 & ] & 4026 \\
\bottomrule
\end{array}
\]

\end{document}

在此处输入图片描述

答案4

这种方法可能一般不适用,但对于 OP 的情况有效。优点是:需要额外的表格格式,并且第 5 列和第 6 列居中对齐,但带有右对齐向量,正如 OP 所要求的那样。

这种方法适用的限制也很重要:标记[只能出现在表格中以表示向量的开始,并且给定向量的列宽由该向量的最宽元素定义,而不考虑相邻行或列中向量的列宽。这样的限制对于 OP 来说可能是或可能不是可以接受的。如果后一种限制被证明是麻烦的,那么有一些补救措施,但这需要将输入格式更改为 OP 希望的其他格式。

该方法涉及在[的持续时间内使其处于活动状态tabular并使用的特征tabstackengine使向量内部右对齐且具有固定宽度的列。

\documentclass{article}
\usepackage{booktabs,tabstackengine}
\setstackTAB{ }
\fixTABwidth{T}
\setstacktabbedgap{1ex}% INTER-COLUMN GAP SIZE
\renewcommand\stackalignment{r}% ALIGNMENT WITHIN VECTOR
\begin{document}
\catcode`\[=\active
\def[#1]{\string[\Matrixstack{#1}\string]}
\begin{tabular}{rrrrccr}
    \toprule
    ID & n & M   & B    & vector 1          & vector 2              & SC   \\
    \midrule
    -1 & 4 & 123 & 1475 & [ 36   1  43 113] & [ 574  253  636 1266] & 1519 \\
    -3 & 4 & 192 & 2111 & [ 54  74 147  30] & [ 736  913 1567  520] & 2169 \\
    -5 & 4 & 446 & 4125 & [ 68 226 238 155] & [ 855 2278 2389 1637] & 4026 \\
    \bottomrule
\end{tabular}
\catcode`\[=12
\end{document}

在此处输入图片描述

相关内容