![A la mesa de látex le faltan líneas de borde](https://rvso.com/image/461891/A%20la%20mesa%20de%20l%C3%A1tex%20le%20faltan%20l%C3%ADneas%20de%20borde.png)
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}
Respuesta1
Con tabularray
y siunitx
paquetes 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}
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, \cmidrule
todavía no está definido porque el paquete booktabs
no se ha cargado en este momento. Esto resultará en un error ya que \cline
no 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 booktabs
paquete usando \RequirePackage{booktabs}
antes de usarlo \documentclass
( \usepackage
no funcionará antes \documentclass
).
Sin embargo, dejando de lado este error incorporado, los autores de la clase de documento obviamente quieren que uses el booktabs
paquete 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-jnl
clase ahora se establece \cline
como 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 booktabs
paquete, es decir, evitar el uso de líneas verticales y tal vez incluso prescindir \multirow
de 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}
Otra forma más complicada sería almacenar la \cline
macro 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}
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 \multicolumn
macros. 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
nicematrix
con\usepackage{nicematrix}
masnicematrix
usospgf
y, en la clasesn-jnl
,pgf
hay que cargarloantesel\documentclass
ingenio\RequirePackage
).He reemplazado
\begin{tabular}
yend{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}
Las reglas no se rompen porque, en los entornos de nicematrix
, cline
se redefine (y esa definición sobrescribe localmente la redefinición de \ncline
done 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}