Latex 表格缺少边框线

Latex 表格缺少边框线

再次,当我将 Latex Table 代码从一个期刊移植到 Springer 格式时,我得到了缺少边框线(附图片)。Latex 代码如下。请提出缺少边框和自动换行以适应页面宽度的解决方案,而不是手动操作,我已经使用\\

\usepackage{adjustbox} 
%\usepackage{tabularx}
\usepackage{tabularx,ragged2e}
\documentclass{sn-jnl}
\begin{document}

    \begin{table*}[!h]
        %\tiny
        \centering
        \small
        \caption{Result}
        \begin{tabular}{|c|c|c|c|}
            \hline
            \multicolumn{1}{|l|}{\begin{tabular}[c]{@{}l@{}}Users Set\\Size (USS)\end{tabular}} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}} Range of Users \\ Individual \end{tabular}} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}Index of scalar array \\ for mapping\end{tabular}} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}Transfer \\ Failure\end{tabular}} \\ \hline
            \multirow{6}{*}{6}                                                                        & \multirow{2}{*}{6}                    & 10                                                                                                       & 23                                                                                           \\ \cline{3-4} 
            &                                       & 4                                                                                                      & \textbf{18.3}                                                                                           \\ \cline{2-4} 
            & \multirow{2}{*}{7}                    & 0                                                                                                      & 13.3                                                                                          \\ \cline{3-4} 
            &                                       & 4                                                                                                       & \textbf{33.3}                                                                                           \\ \cline{2-4} 
            & \multirow{2}{*}{7}                    & 1                                                                                                       & 17                                                                                           \\ \cline{3-4} 
            &                                       & 2                                                                                                       & \textbf{66.6}                                                                                           \\ \hline
        \end{tabular}
   \end{table}

\end{document}

在此处输入图片描述

答案1

使用tabularraysiunitx包可以消除垂直线的问题,并且最后一列的数字在小数点处对齐:

\documentclass{sn-jnl}

\usepackage{xcolor}
\usepackage{tabularray}
\UseTblrLibrary{siunitx}

\begin{document}
    \begin{table*}[ht]
    \caption{Result}
\sisetup{table-format=2.1,
         detect-weight, % <--
         }
\begin{tblr}{hlines, vlines,
             colspec = {X[c] X[1.2,c] X[1.8,c] X[c, si]},
             cell{even}{2} = {r=2}{},
             cell{odd[3]}{Z} = {font=\bfseries},
             row{1} = {guard}
             } 
Users Set Size (USS)
    &   Range of Users Individual
        &   Index of scalar array for mapping
            &   Transfer Failure        \\
\SetCell[r=6]{c}    6
    & 6 & 10& 23                        \\
    &   & 4 & 18.3                      \\
    & 7 & 0 & 13.3                      \\
    &   & 4 & 33.3                      \\
    & 7 & 1 & 17                        \\
    &   & 2 & 66.6                      \\
\end{tblr}
   \end{table*}
\end{document}

在此处输入图片描述

答案2

问题在于文档类sn-jnl(2019/11/18 v0.1,第 1333 行)定义了\let\cline\cmidrule。但是,此时仍未定义,因为此时\cmidrule包尚未加载。这将导致错误,因为未定义。这实际上应该被视为文档类代码中的错误。您可以通过加载booktabs\clinebooktabs\RequirePackage{booktabs}未定义。这实际上应该被视为文档类代码中的错误。您可以通过在使用 之前使用\documentclass\usepackage在 之前不起作用\documentclass)。

然而,抛开这个内置错误不谈,文档类的作者显然希望你booktabs使用不支持垂直线。使用此包提供的宏(其中还包括)\cmidrule插入一些破坏垂直规则的垂直间距。sn-jnl现在设置\cline为别名\cmidrule,这就是您得到这些破损边框的原因。

有两种方法可以解决这个问题。第一种方法是遵循此软件包作者的意图并采用软件包提供的功能booktabs,即避免使用垂直线,甚至可以不使用\multirows:

\documentclass{sn-jnl}
\begin{document}

    \begin{table*}[!h]
        \centering
        \small
        \caption{Result}
        \begin{tabular}{ c c c c }
            \toprule
            \begin{tabular}{@{}l@{}} Users Set \\ Size (USS) \end{tabular} & 
            \begin{tabular}{@{}l@{}} Range of Users \\ Individual \end{tabular} & 
            \begin{tabular}{@{}l@{}} Index of scalar array \\ for mapping \end{tabular} &
            \begin{tabular}{@{}l@{}} Transfer \\ Failure \end{tabular} \\ 
            \midrule
            6  & 6  & 10  & 23            \\ \cline{3-4} 
               &    & 4   & \textbf{18.3} \\ \cline{2-4} 
               & 7  & 0   & 13.3          \\ \cline{3-4} 
               &    & 4   & \textbf{33.3} \\ \cline{2-4} 
               & 7  & 1   & 17            \\ \cline{3-4} 
               &    & 2   & \textbf{66.6} \\ 
            \bottomrule
        \end{tabular}
    \end{table*}

\end{document}

在此处输入图片描述


另一种更棘手的方法是在加载文档类之前存储原始\cline宏,然后恢复其定义\cline

\let\clineorig\cline
\documentclass{sn-jnl}
\usepackage{multirow}

\begin{document}

    \begin{table*}[!h]
        \centering
        \small
        \caption{Result}
        \let\cline\clineorig
        \begin{tabular}{|c|c|c|c|}
            \hline
            \begin{tabular}{@{}l@{}} Users Set \\ Size (USS) \end{tabular} & 
            \begin{tabular}{@{}l@{}} Range of Users \\ Individual \end{tabular} & 
            \begin{tabular}{@{}l@{}} Index of scalar array \\ for mapping \end{tabular} & 
            \begin{tabular}{@{}l@{}} Transfer \\ Failure \end{tabular} \\ 
            \hline
            \multirow{6}{*}{6} & \multirow{2}{*}{6} & 10  & 23            \\ \cline{3-4} 
                               &                    & 4   & \textbf{18.3} \\ \cline{2-4} 
                               & \multirow{2}{*}{7} & 0   & 13.3          \\ \cline{3-4} 
                               &                    & 4   & \textbf{33.3} \\ \cline{2-4} 
                               & \multirow{2}{*}{7} & 1   & 17            \\ \cline{3-4} 
                               &                    & 2   & \textbf{66.6} \\ 
        \hline
        \end{tabular}
    \end{table*}

\end{document}

在此处输入图片描述

我个人推荐第一个解决方案。


至于换行:嵌套是完全没问题的tabulars,但您不需要将它们放在\multicolumn宏内。我在这方面简化了代码。另一种方法是应用p{}允许您换行的列类型,但您需要告诉 LaTeX 列的宽度(例如,p{1cm}列宽为 1cm)。

答案3

供参考,您可以使用以下方法{NiceTabular}代替{tabular}所获得的信息。

  • 我已经nicematrix加载\usepackage{nicematrix}nicematrix使用pgf在类中sn-jnl必须pgf加载\documentclass\RequirePackage)。

  • 我已将\begin{tabular}和替换end{tabular}\begin{NiceTabular}\end{NiceTabular}

\RequirePackage{pgf}
\documentclass{sn-jnl}
\usepackage{nicematrix}

\begin{document}

\begin{NiceTabular}{|c|c|c|c|}
    \hline
    \multicolumn{1}{|l|}{\begin{tabular}[c]{@{}l@{}}Users Set\\Size (USS)\end{tabular}} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}} Range of Users \\ Individual \end{tabular}} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}Index of scalar array \\ for mapping\end{tabular}} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}Transfer \\ Failure\end{tabular}} \\ \hline
    \multirow{6}{*}{6}                                                                        & \multirow{2}{*}{6}                    & 10                                                                                                       & 23                                                                                           \\ \cline{3-4} 
    &                                       & 4                                                                                                      & \textbf{18.3}                                                                                           \\ \cline{2-4} 
    & \multirow{2}{*}{7}                    & 0                                                                                                      & 13.3                                                                                          \\ \cline{3-4} 
    &                                       & 4                                                                                                       & \textbf{33.3}                                                                                           \\ \cline{2-4} 
    & \multirow{2}{*}{7}                    & 1                                                                                                       & 17                                                                                           \\ \cline{3-4} 
    &                                       & 2                                                                                                       & \textbf{66.6}                                                                                           \\ \hline
\end{NiceTabular}

\end{document}

上述代码的输出

规则没有被打破,因为在的环境中,nicematrix被重新定义(并且该定义在本地覆盖了对cline的重新定义\nclinesn-jnl)。

但是,{NiceTabular}构建表的标准方法(使用 工具nicematrix)如下。

\RequirePackage{pgf}
\documentclass{sn-jnl}
\usepackage{nicematrix}
\usepackage{siunitx}

\begin{document}

\sisetup{table-format = 2.1,detect-weight}

\begin{NiceTabular}{cccS}[hvlines]
\Block[l]{}{Users Set\\ Size (USS)}
& \Block[l]{}{Range of Users\\ Individual}
& \Block[l]{}{Index of scalar array\\ for mapping}
& \Block[l]{}{Transfer\\ Failure} \\
\Block{6-1}{6} & \Block{2-1}{6} & 10 & 23   \\
               &                & 4  & \bfseries 18.3 \\
               & \Block{2-1}{7} & 0  & 13.3 \\
               &                & 4  & \bfseries 33.3 \\
               & \Block{2-1}{7} & 1  & 17   \\
               &                & 2  & \bfseries 66.6 \\
\end{NiceTabular}

\end{document}

第二段代码的输出

相关内容