ltablex y libretas

ltablex y libretas

Necesito una tabla que tenga más de una página y que tenga un tamaño fijo. Para mejorar el aspecto, utilizo booktabs. Sin embargo, el pie de la mesa no es bonito en todas las páginas, excepto en la última. ingrese la descripción de la imagen aquí Aqui esta mi MWE

\documentclass{scrartcl}
\usepackage{booktabs}
\usepackage{ltablex}
\usepackage{blindtext}
\begin{document}
\begin{tabularx}{\linewidth}{XX}
left & right\\\toprule
\endhead
\bottomrule
\endfoot
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\
\end{tabularx}
\end{document}

¿Existe la posibilidad de detectar si una fila será la última fila de una página? Entonces podría evitar la doble línea. Como el siguiente pseudocódigo

is row last row of the page than \bottomrule else \midrule

Me gustaría tener solo un \bottomruleal final de cada página pero sin doble línea

ingrese la descripción de la imagen aquí

Respuesta1

Solución A)No estoy seguro de seguir la pregunta, pero no es necesario \bottomruleen absoluto, es una regla simple en la que solo puedes establecer un ancho. En mi ejemplo, lo elimino y agrego una regla adicional al final de la tabla.

%! *latex mal-ltablex-a.tex
\documentclass{scrartcl}
\usepackage{booktabs}
\usepackage{ltablex}
\usepackage{blindtext}

\begin{document}
\begin{tabularx}{\linewidth}{XX}
left & right\\\toprule
\endhead
%\bottomrule
\endfoot
\blindtext & \blindtext\\*\midrule 
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\*\midrule
\end{tabularx}
\end{document}

mwe 1

Editar, Solución B)En caso de que realmente lo necesites, estoy usando este truco como parche. Estoy guardando información sobre el número de página ( \label) al final de cada fila y en las próximas ejecuciones de TeX estoy decidiendo si escribir \midruleo \bottomrule(estoy comparando la fila real y la siguiente; es una situación de anticipación).

En caso de que desee tenerlo \bottomruleal final de su tabla, comente \mycountingescrito antes de la última línea.

%! *latex mal-ltablex-b.tex
\documentclass{scrartcl}
\usepackage{booktabs}
\usepackage{ltablex}
\usepackage{blindtext}
\usepackage{refcount}

\let\oldmidrule=\midrule
\newcount\malic 
\global\malic=0
\newcount\maltempa \maltempa=0
\newcount\maltempb \maltempb=0

\def\midrule{%
\mycounting
\ifnum\maltempa=\maltempb
  \\*\oldmidrule
\else
  \\*\bottomrule[6pt]
\fi
}%End of \midrule...

\def\mycounting{%
\global\advance\malic by 2%
\maltempb=\getpagerefnumber{mycounter-\the\malic}%
\global\advance\malic by -1%
\maltempa=\getpagerefnumber{mycounter-\the\malic}%
\typeout{\the\maltempa, \the\maltempb}
\label{mycounter-\the\malic}%
}% End of \mycounting...


\begin{document}
\begin{tabularx}{\linewidth}{XX}
left & right\\\toprule
\endhead
%\bottomrule
\endfoot
\blindtext & \blindtext \midrule 
\blindtext & \blindtext \midrule
\blindtext & \blindtext \midrule
\blindtext & \blindtext \midrule 
\blindtext & \blindtext \midrule
\blindtext & \blindtext \midrule
\blindtext & \blindtext \midrule 
%\blindtext & \blindtext \midrule
\end{tabularx}

\mycounting % Comment out this line in case you would like to have \bottomrule at the very end of the table...
\end{document}

mwe 2

Respuesta2

En su ejemplo, parece tener poco sentido (tipográficamente hablando) tener reglas "pesadas" (generadas por \topruley \bottomrule) y reglas "ligeras" (generadas por \midrule). Por lo tanto, le sugiero que utilice sólo un ancho de regla, digamos, \heavyrulewidthparatodas las reglas. Así es como podría implementar dicha configuración:

\documentclass{scrartcl}
\usepackage{booktabs,ltablex,blindtext}
\setlength\lightrulewidth{\heavyrulewidth}
\begin{document}
\begin{tabularx}{\linewidth}{XX}
left & right\\ \toprule
\endhead
\bottomrule % use \bottomrule only on final page
\endlastfoot
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\
\end{tabularx}
\end{document}

Por el contrario, si prefiere que todas las reglas tengan el grosor de \lightrulewidth, emitirá la instrucción

\setlength\heavyrulewidth{\lightrulewidth}

Respuesta3

Esto soluciona el problema moviendo verticalmente un faux \bottomrule(el \raiseboxcontenido) para superponer cualquier residual \midrule, evitando así la apariencia de una regla doble. Sin embargo, hay un efecto secundario: esta manipulación ocupa una línea adicional de espacio vertical, por lo que uno tiene una fila menos para trabajar por página. Para ver esto, comente mi \raiseboxy descomente el original \bottomruley encontrará que la fila "X Y" se mueve desde la parte superior de la página 2 hasta la parte inferior de la página 1.

\documentclass{scrartcl}
\usepackage{booktabs}
\usepackage{ltablex}
\usepackage{blindtext}
\begin{document}
\begin{tabularx}{\linewidth}{XX}
left & right\\\toprule
\endhead
\raisebox{9pt}{\smash{\makebox[.972\textwidth]{\rule{\textwidth}{1pt}}}}%
%\bottomrule
\endfoot
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\*\midrule
X & Y\\*\midrule
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\
\end{tabularx}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta4

No es una solución real:

\documentclass{scrartcl}
\usepackage{booktabs}
\usepackage{ltablex,tabu}
\usepackage{blindtext}
\begin{document}
\begin{tabularx}{\linewidth}{XX}
left & right\\\midrule[\heavyrulewidth]
\endhead
\multicolumn{2}{@{}c@{}}{continues next page} \\*\bottomrule
\endfoot
\bottomrule
\endlastfoot
\blindtext & \blindtext\\\midrule
\blindtext & \blindtext\\\midrule
\blindtext & \blindtext\\
\end{tabularx}
\end{document}

ingrese la descripción de la imagen aquí

información relacionada