![Tabela de látex sem linhas de borda](https://rvso.com/image/461891/Tabela%20de%20l%C3%A1tex%20sem%20linhas%20de%20borda.png)
Mais uma vez, ao portar o código da tabela Latex de um diário para o formato Springer, estou perdendo linhas de borda (imagem em anexo). O código do látex é o seguinte. Por favor, sugira uma solução para a falta de borda e quebra automática de linha para ajustar a largura da página em vez do manual que fiz usando\\
\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}
Responder1
Com pacotes tabularray
e siunitx
problemas com linhas verticais são eliminados e os números na última coluna são alinhados em casas decimais:
\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}
Responder2
O problema é que a classe do documento sn-jnl
(2019/11/18 v0.1, linha 1333) define \let\cline\cmidrule
. Porém, nesse ponto, \cmidrule
ainda está indefinido, porque o pacote booktabs
ainda não foi carregado. Isso resultará em um erro, pois \cline
é indefinido. Na verdade, isso deve ser considerado um bug no código da classe do documento. Você pode contornar esse bug carregando o booktabs
pacote usando \RequirePackage{booktabs}
antes de usar \documentclass
( \usepackage
não funcionará antes \documentclass
).
Entretanto, deixando de lado esse bug embutido, os autores da classe document obviamente querem que você use o booktabs
pacote quenão suporta linhas verticais. A utilização das macros fornecidas por este pacote, entre as quais também está \cmidrule
, insere algum espaçamento vertical que quebra as regras verticais. A sn-jnl
classe agora é definida \cline
como alias para \cmidrule
, e é por isso que você obtém essas bordas quebradas.
Existem duas maneiras de contornar isso. A primeira forma é seguir o que os autores deste pacote provavelmente pretendiam e abraçar os recursos fornecidos pelo booktabs
pacote, ou seja, evitar o uso de linhas verticais e talvez até ficar sem \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}
Outra maneira mais hackeada seria armazenar a \cline
macro original antes de carregar a classe do documento e depois restaurar a definição 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}
Eu pessoalmente recomendaria a primeira solução.
Quanto à quebra de linha: é totalmente aceitável aninhar tabulars
, mas você não precisa colocá-los dentro de \multicolumn
macros. Simplifiquei o código nesse sentido. Outra maneira poderia ser aplicar o p{}
tipo de coluna que permite quebrar linhas, mas você precisaria informar ao LaTeX a largura da coluna (por exemplo, p{1cm}
para uma largura de coluna de 1cm).
Responder3
Para obter informações, aqui o que você obtém usando {NiceTabular}
em vez de {tabular}
.
Carreguei
nicematrix
com\usepackage{nicematrix}
masnicematrix
usapgf
e, na classesn-jnl
,pgf
deve ser carregadoanteso\documentclass
(com\RequirePackage
).Eu substituí
\begin{tabular}
eend{tabular}
por\begin{NiceTabular}
e\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}
As regras não são quebradas porque, nos ambientes de nicematrix
, cline
é redefinido (e essa definição substitui localmente a redefinição de \ncline
feito por sn-jnl
).
Porém, {NiceTabular}
a forma padrão de construir sua tabela (com as ferramentas de nicematrix
) é a seguinte.
\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}