Na tabela a seguir, a coluna "Concordância média vs. aleatória" é logicamente apenas uma coluna, mas precisa de um monte de alinhamento interno: supõe-se que todos os pontos decimais estejam alinhados, assim como os sinais de desigualdade. Para que esse alinhamento interno aconteça, dividi-o em cinco colunas e mais duas para preenchimento, porque "concordância média versus aleatória" é muito mais ampla do que as desigualdades. Estou feliz com essa parte como está.
O realproblemaO que estou tendo é que não consigo descobrir como fazer com que as colunas de preenchimento sejam dimensionadas automaticamente para que o bloco de desigualdades pareça, em geral, centralizado sob o cabeçalho. No momento, tenho preenchimento manual de largura fixa usando m
colunas, que posso fazer com que pareça bom o suficiente com ajuste manual, mas isso é tedioso e precisa ser ajustado se eu alterar o layout geral novamente.
Tentei alterar as m
especificações da coluna para m{0pt plus1fill}
, mas o "plus1fill" não é reconhecido como parte da especificação de largura e aparece incorporado na tabela. Também tentei usar c
para as colunas de preenchimento, \hspace{\fill}
nas células superiores de ambas; que faz com que as desigualdades sejamalinhado à esquerdasob seu cabeçalho.
Sugestões?
\documentclass{article}
\usepackage{array}
\usepackage{booktabs}
\begin{document}
% approximate \thickmuskip outside math mode
\def\relskip{\hskip 0.27778em plus0.27778em\relax}
\begin{tabular}[b]{lrm{2.5em}@{}r@{.}l@{\relskip}c@{\relskip}r@{.}l@{}m{1.5em}}
\toprule
\textbf{Type} &
\textbf{\# clusters} &
\multicolumn{7}{c}{\textbf{Mean agreement vs. random}} \\
\midrule
\textbf{ASes} & 534 & & 99 & 28\% & $>$ & 99 & 20\% & \\
\textbf{Cities} & 481 & & 99 & 62 & $>$ & 98 & 99 & \\
\textbf{Countries} & 96 & & 93 & 88 & $\ll$ & 96 & 32 & \\
\textbf{Continents} & 6 & & 83 & 08 & $<$ & 84 & 05 & \\
\bottomrule
\end{tabular}
\end{document}
Responder1
Isso calcula o espaço necessário para centralizar as colunas em relação ao arquivo \multicolumn
. Devo confessar que isso -\tabcolsep
é mais um fator de fraude, já que não consigo entender por que é necessário.
\documentclass{article}
\usepackage{array}
\usepackage{booktabs}
\usepackage{siunitx}
\newlength{\myspace}
\begin{document}
% approximate \thickmuskip outside math mode
\bgroup
\sbox0{\textbf{Mean agreement vs. random}}
\sbox1{\begin{tabular}{S@{}c@{}S}
99.28\% & $>$ & 99.20\%
\end{tabular}}% one row will do
\global\myspace=\dimexpr 0.5\wd0-0.5\wd1-\tabcolsep\relax
\egroup
\begin{tabular}[b]{lr p{\myspace} S @{}c@{} Sl}
\toprule
\textbf{Type} &
\textbf{\# clusters} &
\multicolumn{5}{c}{\textbf{Mean agreement vs. random}} \\
\midrule
\textbf{ASes} & 534 & & 99.28\% & $>$ & 99.20\% & \\
\textbf{Cities} & 481 & & 99.62 & $>$ & 98.99 & \\
\textbf{Countries} & 96 & & 93.88 & $\ll$ & 96.32 & \\
\textbf{Continents} & 6 & & 83.08 & $<$ & 84.05 & \\
\bottomrule
&&\multicolumn{5}{c}{\rule{0.5pt}{\ht\strutbox}}
\end{tabular}
\end{document}
Responder2
Eu provavelmente usaria menos pontos de alinhamento:
\documentclass{article}
\usepackage{array}
\usepackage{booktabs}
\begin{document}
\newcommand\p{\phantom{\%}}
\begin{tabular}{lr@{\qquad}r@{}>{${}}l<{{}$}@{}l}
\toprule
\textbf{Type} &
\multicolumn{1}{c}{\textbf{\# clusters}} &
\multicolumn{1}{r@{}}{\textbf{Mean agreement}}&
\multicolumn{2}{l}{\textbf{vs. random}} \\
\midrule
\textbf{ASes} & 534 & 99.28\% & >& 99.20\% \\
\textbf{Cities} & 481 & 99.62\p & >& 98.99 \\
\textbf{Countries} & 96 & 93.88\p &\ll& 96.32 \\
\textbf{Continents} & 6 & 83.08\p & <& 84.05 \\
\bottomrule
\end{tabular}
\end{document}
Responder3
Eu encurtaria o cabeçalho.
\documentclass{article}
\usepackage{array}
\usepackage{booktabs}
\usepackage{siunitx}
\begin{document}
\begin{table}[htp]
\centering
\begin{tabular}{
@{}
l
S[table-format=3.0]
S[table-format=2.2]
>{$}c<{$}
S[table-format=2.2]
@{}
}
\toprule
Type &
{\# clusters} &
\multicolumn{3}{c@{}}{%
\begin{tabular}[t]{@{}c@{}}Mean agreement \\ vs.\ random (\%)\end{tabular}%
} \\
\midrule
ASes & 534 & 99.28 & > & 99.20 \\
Cities & 481 & 99.62 & > & 98.99 \\
Countries & 96 & 93.88 & \ll & 96.32 \\
Continents & 6 & 83.08 & < & 84.05 \\
\bottomrule
\end{tabular}
\caption{Some caption}
\end{table}
\end{document}
Responder4
O código a seguir combina a ideia de pré-calcular a largura da tabela de John Kormylo e tabularray
. Além disso, o preâmbulo da tabela especifica: fonte para a primeira linha e coluna (não há necessidade de usar \textbf
em todas as células), tipo matemático para a coluna com sinais de desigualdade (com adição {}
no início e no final para usar o espaçamento matemático usual em torno das relações binárias ) e remove lacunas entre colunas com números e sinais de desigualdade. Os números são formatados usando siunitx
, embora seja desnecessário aqui (usar l
colunas seria suficiente).
\documentclass{article}
\usepackage{tabularray}
\UseTblrLibrary{booktabs,siunitx}
\newdimen\myspace
\begin{document}
\bgroup
\sbox0{%
\begin{booktabs}{
colspec={lll},
row{1}={font=\bfseries},
}
Continents & \# clusters & Mean agreement vs. random \\
\end{booktabs}%
}
\global\myspace=\wd0
\egroup
\begin{booktabs}[
baseline=b,
]{
width={\myspace},
colspec={lrXS[table-format=2.2{\%}]cS[table-format=2.2{\%}]X},
row{1}={font=\bfseries},
column{1}={font=\bfseries},
column{5}={mode=math,preto={{}},appto={{}},colsep=0pt},
column{4}={rightsep=0pt},
column{6}={leftsep=0pt},
cell{1}{3}={c=5}{c},
}
\toprule
Type & \# clusters & Mean agreement vs. random \\
\midrule
ASes & 534 & & 99.28\% & > & 99.20\% & \\
Cities & 481 & & 99.62 & > & 98.99 & \\
Countries & 96 & & 93.88 & \ll & 96.32 & \\
Continents & 6 & & 83.08 & < & 84.05 & \\
\bottomrule
\end{booktabs}
\end{document}