Alinear dígitos en la tabla con el signo de porcentaje en la primera fila

Alinear dígitos en la tabla con el signo de porcentaje en la primera fila

Me gustaría alinear los dígitos teniendo en cuenta los símbolos de porcentaje en la primera fila.

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}

Obtengo el siguiente resultado:

ingrese la descripción de la imagen aquí

Sin embargo, me gustaría alinear los dígitos como se muestra en esta imagen, teniendo en cuenta el símbolo de porcentaje en la primera fila y sangrando los siguientes números en consecuencia.

ingrese la descripción de la imagen aquí

Respuesta1

Tus lectores no estarán seguros de que cada entrada se refiera a un porcentaje: indícalo en el encabezado.

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

El final \midruleayuda a dejar en claro que la fila trata sobre datos diferentes.

ingrese la descripción de la imagen aquí

Si prefieres el mal estilo de la imagen…

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

ingrese la descripción de la imagen aquí

Respuesta2

Podrías definir un \phantom %símbolo:

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

Entonces

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

produce el resultado deseado, sin que el %signo pase el borde de la columna.

ingrese la descripción de la imagen aquí

Respuesta3

Redefinirlo temporalmente \%como \rlap. Además, extienda la tabla de la derecha por el ancho de un \%. La ventaja es que el contenido de la tabulardefinición no cambia.

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

ingrese la descripción de la imagen aquí

información relacionada