Alinhando dígitos na tabela com sinal de porcentagem na primeira linha

Alinhando dígitos na tabela com sinal de porcentagem na primeira linha

Gostaria de alinhar os dígitos levando em consideração os símbolos de porcentagem na primeira linha.

MWE:

\documentclass{article}
\usepackage{booktabs}
\begin{document}

\begin{table}
    \centering
        \begin{tabular}{@{}rrrr@{}}\toprule
            Col1 & Col2 & Col3 & Col4\\ \midrule
            10\% & 20\% & 30\% & 40\%\\
            5    &  6   &  7   &  8  \\
          115    &116   &117   &118  \\
            \bottomrule
        \end{tabular}
\end{table}

\end{document}

Eu recebo a seguinte saída:

insira a descrição da imagem aqui

No entanto, gostaria de alinhar os dígitos conforme mostrado nesta imagem, levando em consideração o símbolo de porcentagem na primeira linha e recuando os números seguintes de acordo.

insira a descrição da imagem aqui

Responder1

Seus leitores não terão certeza de que cada entrada se refere a uma porcentagem: indique isso no cabeçalho.

\documentclass{article}
\usepackage{siunitx,booktabs}

\begin{document}

\begin{tabular}{
  @{}
  l
  *{2}{S[table-format=3.0]}
  @{}
}
\toprule
Debt/Assets & {2003} & {2004} \\
            & {(\%)} & {(\%)}   \\
\midrule
\SI{<50}{\percent}           & {--} &  10 \\
\SIrange{50}{59.9}{\percent} &  20  &   5 \\
\SIrange{60}{69.9}{\percent} & {--} &  10 \\
\SIrange{70}{79.9}{\percent} & {--} &  10 \\
\SIrange{80}{89.9}{\percent} &  40  &  10 \\
\SI{\ge90}{\percent}         &  40  &  55 \\
\cmidrule(lr){2-2} \cmidrule(l){3-3}
Total                        & 100  & 100 \\
Mean                         &  85  &  80 \\
Median                       &  85  &  94 \\
\midrule
Number of projects           & {5}  & {20} \\
\bottomrule
\end{tabular}

\end{document}

A final \midruleajuda a deixar claro que a linha trata de dados diferentes.

insira a descrição da imagem aqui

Se você prefere o estilo ruim da foto…

\documentclass{article}
\usepackage{siunitx,booktabs}

\newcommand{\dashpercent}{%
  \makebox[1.5em][r]{--\makebox[0pt][l]{\,\%}}%
}
\newcommand{\dash}{\makebox[1.5em][r]{--}}%
\newcommand{\ppercent}{\makebox[0pt][l]{\,\%}}

\begin{document}

\begin{tabular}{
  @{}
  l
  *{2}{S[table-format=3.0]@{\hspace{1.2em}}}
  @{}
}
\toprule
Debt/Assets & {2003} & {2004} \\
\midrule
\SI{<50}{\percent}           & {\dashpercent} &  10\ppercent \\
\SIrange{50}{59.9}{\percent} &  20  &   5 \\
\SIrange{60}{69.9}{\percent} & {\dash} &  10 \\
\SIrange{70}{79.9}{\percent} & {\dash} &  10 \\
\SIrange{80}{89.9}{\percent} &  40  &  10 \\
\SI{\ge90}{\percent}         &  40  &  55 \\
\cmidrule(lr){2-2} \cmidrule(lr){3-3}
Total                        & 100\ppercent  & 100\ppercent \\
Mean                         &  85\ppercent  &  80\ppercent \\
Median                       &  85\ppercent  &  94\ppercent \\
\midrule
Number of projects           & {5}  & {20} \\
\bottomrule
\end{tabular}

\end{document}

insira a descrição da imagem aqui

Responder2

Você poderia definir um \phantom %símbolo:

\newcommand{\pct}{\phantom{\%}}

Então

\begin{tabular}{@{}rrrr@{}}\toprule
    Col1 & Col2 & Col3 & Col4\\ \midrule
    10\% & 20\% & 30\% & 40\%\\
    5\pct    &  6\pct   &  7\pct   &  8\pct  \\
    115\pct   &116\pct   &117\pct   &118\pct  \\
    \bottomrule
\end{tabular}

produz a saída desejada, sem que o %sinal ultrapasse a borda da coluna.

insira a descrição da imagem aqui

Responder3

Redefinir temporariamente \%como um arquivo \rlap. Além disso, estenda a tabela à direita pela largura de a \%. A vantagem é que o conteúdo da tabulardefinição não muda.

\documentclass{article}
\usepackage{booktabs,calc}
\begin{document}

\begin{table}
    \centering
    \let\svpc\%
    \setbox0=\hbox{\%}
    \edef\tmp{\the\wd0}
    \renewcommand\%{\rlap{\svpc}}
        \begin{tabular}{@{}rrrr@{\hspace{\tmp}}}\toprule
            Col1 & Col2 & Col3 & Col4\\ \midrule
            10\% & 20\% & 30\% & 40\%\\
            5    &  6   &  7   &  8  \\
          115    &116   &117   &118  \\
            \bottomrule
        \end{tabular}
\end{table}

\end{document}

insira a descrição da imagem aqui

informação relacionada