A la mesa de látex le faltan líneas de borde

A la mesa de látex le faltan líneas de borde

Una vez más, al transferir el código de la tabla Latex de una revista al formato Springer, me faltan líneas de borde (imagen adjunta). El código de látex es el siguiente. Sugiera una solución para el borde faltante y el salto de línea automático para ajustarse al ancho de la página en lugar del manual que he usado\\

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

ingrese la descripción de la imagen aquí

Respuesta1

Con tabularrayy siunitxpaquetes se eliminan los problemas con líneas verticales y los números de la última columna se alinean con puntos decimales:

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

ingrese la descripción de la imagen aquí

Respuesta2

El problema es que la clase de documento sn-jnl(2019/11/18 v0.1, línea 1333) define \let\cline\cmidrule. Sin embargo, en ese momento, \cmidruletodavía no está definido porque el paquete booktabsno se ha cargado en este momento. Esto resultará en un error ya que \clineno está definido. En realidad, esto debería considerarse un error en el código de la clase de documento. Puede solucionar este error cargando el booktabspaquete usando \RequirePackage{booktabs}antes de usarlo \documentclass( \usepackageno funcionará antes \documentclass).

Sin embargo, dejando de lado este error incorporado, los autores de la clase de documento obviamente quieren que uses el booktabspaquete queno admite líneas verticales. El uso de las macros proporcionadas por este paquete, entre las que también se encuentra \cmidrule, insertan algunos espacios verticales que rompen las reglas verticales. La sn-jnlclase ahora se establece \clinecomo alias para \cmidrule, razón por la cual aparecen estos bordes rotos.

Hay dos formas de solucionar esto. La primera forma es seguir lo que probablemente pretendieron los autores de este paquete y adoptar las características proporcionadas por el booktabspaquete, es decir, evitar el uso de líneas verticales y tal vez incluso prescindir \multirowde s:

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

ingrese la descripción de la imagen aquí


Otra forma más complicada sería almacenar la \clinemacro original antes de cargar la clase de documento y luego restaurar la definición de \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}

ingrese la descripción de la imagen aquí

Yo personalmente recomendaría la primera solución.


En cuanto al salto de línea: está bien anidar tabulars, pero no es necesario colocarlos dentro de \multicolumnmacros. Simplifiqué el código a este respecto. Otra forma podría ser aplicar el p{}tipo de columna que le permite dividir líneas, pero necesitaría indicarle a LaTeX el ancho de la columna (por ejemplo, p{1cm}para un ancho de columna de 1 cm).

Respuesta3

Para obtener información, aquí se obtiene lo que se obtiene utilizando {NiceTabular}en lugar de {tabular}.

  • Lo he cargado nicematrixcon \usepackage{nicematrix}mas nicematrixusos pgfy, en la clase sn-jnl, pgfhay que cargarloantesel \documentclassingenio \RequirePackage).

  • He reemplazado \begin{tabular}y end{tabular}por \begin{NiceTabular}y \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}

Salida del código anterior

Las reglas no se rompen porque, en los entornos de nicematrix, clinese redefine (y esa definición sobrescribe localmente la redefinición de \nclinedone by sn-jnl).

Sin embargo, {NiceTabular}la forma estándar de construir su tabla (con las herramientas de nicematrix) es la siguiente.

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

Salida del segundo código.

información relacionada