ラテックステーブルに境界線がない

ラテックステーブルに境界線がない

もう一度、Latexテーブルコードをあるジャーナルから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

tabularrayおよびパッケージを使用するとsiunitx、縦線の問題が解消され、最後の列の数字が小数点で揃えられます。

\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がロードされていないため、 はまだ未定義です。 は未定義なので、エラーが発生します。これは、実際にはドキュメント クラスのコード内のバグと見なす必要があります。を使用する前にを使用してパッケージ\clineをロードすることで、このバグを回避できます(の前では動作しません)。booktabs\RequirePackage{booktabs}\documentclass\usepackage\documentclass

しかし、この組み込みのバグを脇に置いておくと、ドキュメントクラスの作者は明らかにbooktabs縦線はサポートされていませんこのパッケージで提供されるマクロ ( も含まれる) を使用すると、\cmidrule垂直方向の規則を破る垂直方向のスペースが挿入されます。クラスはを のエイリアスとしてsn-jnl設定するようになったため、境界線が壊れてしまいます。\cline\cmidrule

これを回避するには 2 つの方法があります。最初の方法は、このパッケージの作成者が意図したとおりに、パッケージが提供する機能を採用することです。つまり、縦線の使用を避け、場合によってはsbooktabsも使用しないことです。\multirow

\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}

ここに画像の説明を入力してください


もう 1 つの、よりハッキーな方法は、ドキュメント クラスをロードする前に元の\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 に列の幅 (たとえば、列幅を 1cm にする場合) を伝える必要がありますp{1cm}

答え3

{NiceTabular}参考までに、の代わりにを使用するとどうなるかを以下に示します{tabular}

  • 私は負荷をかけましたがnicematrix\usepackage{nicematrix}クラスでは、nicematrixpgfsn-jnlpgfをロードする必要があります。前に\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が再定義されるため、規則は破られません (そしてその定義は\nclineによって行われたの再定義をローカルに上書きしますsn-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}

2番目のコードの出力

関連情報