Me gustaría hacer una pregunta sobre longtable
el paquete. Ya lo he publicado en otros foros.
Tengo una tabla larga (de varias páginas) que usa longtable
el paquete y me gustaría agregar un título de tabla en la parte inferior de cada parte de la tabla, pero uno diferente en la PRIMERA página.
longtable
El paquete permite un "encabezado" diferente en la primera página de la tabla ( \endfirsthead
) y/o un "pie de página" diferente en la ÚLTIMA página de la tabla ( \endlastfoot
). Lo que me gustaría hacer es un título de pie diferente en la PRIMERA página de la tabla.
Mi ejemplo sería algo como esto:
Pie de tabla de primera página: "Tabla 1.2: Descripción de la tabla y así, y así...".
Pie de tabla de la siguiente página: "Tabla 1.2 (cont.): Descripción de la tabla y tal, y tal...".
Es similar al ejemplo disponible en la documentación del longtable
paquete sobre el uso de \endfirsthead
, pero quiero colocarlo al final de las tablas porque los títulos de todas las figuras y tablas de mi documento están al pie, no al principio.
¿Es tan extraño lo que quiero hacer? ¿Cómo puedo hacerlo con longtable
?
Estaría muy agradecido si pudiera darme alguna pista o consejo.
¡Gracias de antemano por sus respuestas! :)
Respuesta1
Puedes probar el siguiente ejemplo. Eso suma \endfirstfoot
.
\documentclass{article}
\usepackage[a6paper,showframe]{geometry}
\usepackage{longtable}
\makeatletter
\newbox\LT@firstfoot
\def\endfirstfoot{\LT@end@hd@ft\LT@firstfoot}
\newdimen\LT@footdiff
\def\LT@start{%
\let\LT@start\endgraf
\endgraf\penalty\z@
\vskip\LTpre\endgraf
\LT@footdiff-\ht\LT@foot
\advance\LT@footdiff\ht\LT@firstfoot
\dimen@\pagetotal
\advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
\advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
\advance\dimen@ \ht\ifvoid\LT@firstfoot\LT@foot\else\LT@firstfoot\fi
\dimen@ii\vfuzz
\vfuzz\maxdimen
\setbox\tw@\copy\z@
\setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
\setbox\tw@\vbox{\unvbox\tw@}%
\vfuzz\dimen@ii
\advance\dimen@ \ht
\ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
\advance\dimen@\dp
\ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
\advance\dimen@ -\pagegoal
\ifdim \dimen@>\z@\vfil\break\fi
\global\@colroom\@colht
\ifvoid\LT@firstfoot
\ifvoid\LT@foot
\else
\advance\vsize-\ht\LT@foot
\global\advance\@colroom-\ht\LT@foot
\dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
\maxdepth\z@
\fi
\else
\advance\vsize-\ht\LT@firstfoot
\global\advance\@colroom-\ht\LT@firstfoot
\dimen@\pagegoal\advance\dimen@-\ht\LT@firstfoot\pagegoal\dimen@
\maxdepth\z@
\fi
\ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak
\output{\LT@output}%
}
\def\LT@output{%
\ifnum\outputpenalty <-\@Mi
\ifnum\outputpenalty > -\LT@end@pen
\LT@err{floats and marginpars not allowed in a longtable}\@ehc
\else
\setbox\z@\vbox{\unvbox\@cclv}%
\ifdim \ht\LT@lastfoot>\ht\LT@foot
\dimen@\pagegoal
\advance\dimen@-\ht\LT@lastfoot
\ifdim\dimen@<\ht\z@
\setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}%
\@makecol
\@outputpage
\setbox\z@\vbox{\box\LT@head}%
\fi
\fi
\global\@colroom\@colht
\global\vsize\@colht
\vbox
{\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}%
\fi
\else
\ifvoid\LT@firstfoot
\setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
\@makecol
\@outputpage
\global\vsize\@colroom
\else
\setbox\@cclv\vbox{\unvbox\@cclv\box\LT@firstfoot\vss}%
\@makecol
\@outputpage
\global\advance\@colroom\LT@footdiff
\global\vsize\@colroom
\fi
\copy\LT@head\nobreak
\fi
}
\makeatother
\begin{document}
\begin{longtable}{l}
\hline first head\\\hline\endfirsthead
\hline head\\\hline\endhead
\hline first foot\\\hline\endfirstfoot
\hline (continued)\\foot\\\hline\endfoot
\hline last foot\\\hline\endlastfoot
A\\B\\C\\D\\E\\F\\G\\H\\I\\J\\K\\L\\M\\N\\O\\P\\Q\\R\\S\\T\\U\\V\\W\\X\\Y\\Z\\
a\\b\\c\\d\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\p\\q\\r\\s\\t\\u\\v\\w\\x\\y\\z\\
0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\
\end{longtable}
\end{document}
Anexo de Skillmon:
El enfoque anterior utilizará el normal foot
en lugar del firstfoot
si longtable
solo ocupará una página y lastfoot
no se utilizó. El siguiente es casi idéntico al código anterior, pero utilizará el firstfoot
en una sola página longtable
.
La precedencia para el pie de página en una sola página longtable
será:
lastfoot
, y si eso está vacíofirstfoot
, y si eso está vacíofoot
.
Código:
\documentclass{article}
\usepackage[a6paper,showframe]{geometry}
\usepackage{longtable}
\makeatletter
\newbox\LT@firstfoot
\def\endfirstfoot{\LT@end@hd@ft\LT@firstfoot}
\newdimen\LT@footdiff
\def\LT@start{%
\let\LT@start\endgraf
\endgraf\penalty\z@
\vskip\LTpre\endgraf
\LT@footdiff-\ht\LT@foot
\advance\LT@footdiff\ht\LT@firstfoot
\dimen@\pagetotal
\advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
\advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
\advance\dimen@ \ht\ifvoid\LT@firstfoot\LT@foot\else\LT@firstfoot\fi
\dimen@ii\vfuzz
\vfuzz\maxdimen
\setbox\tw@\copy\z@
\setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
\setbox\tw@\vbox{\unvbox\tw@}%
\vfuzz\dimen@ii
\advance\dimen@ \ht
\ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
\advance\dimen@\dp
\ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
\advance\dimen@ -\pagegoal
\ifdim \dimen@>\z@\vfil\break\fi
\global\@colroom\@colht
\ifvoid\LT@firstfoot
\ifvoid\LT@foot
\else
\advance\vsize-\ht\LT@foot
\global\advance\@colroom-\ht\LT@foot
\dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
\maxdepth\z@
\fi
\else
\advance\vsize-\ht\LT@firstfoot
\global\advance\@colroom-\ht\LT@firstfoot
\dimen@\pagegoal\advance\dimen@-\ht\LT@firstfoot\pagegoal\dimen@
\maxdepth\z@
\fi
\ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak
\output{\LT@output}%
}
\def\LT@output{%
\ifnum\outputpenalty <-\@Mi
\ifnum\outputpenalty > -\LT@end@pen
\LT@err{floats and marginpars not allowed in a longtable}\@ehc
\else
\setbox\z@\vbox{\unvbox\@cclv}%
\ifdim \ht\LT@lastfoot>\ht\LT@foot
\dimen@\pagegoal
\advance\dimen@-\ht\LT@lastfoot
\ifdim\dimen@<\ht\z@
\setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}%
\@makecol
\@outputpage
\setbox\z@\vbox{\box\LT@head}%
\fi
\fi
\global\@colroom\@colht
\global\vsize\@colht
\vbox
{%
\unvbox\z@
\box
\ifvoid\LT@lastfoot
\ifvoid\LT@firstfoot
\LT@foot
\else
\LT@firstfoot
\fi
\else
\LT@lastfoot
\fi
}%
\fi
\else
\ifvoid\LT@firstfoot
\setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
\@makecol
\@outputpage
\global\vsize\@colroom
\else
\setbox\@cclv\vbox{\unvbox\@cclv\box\LT@firstfoot\vss}%
\@makecol
\@outputpage
\global\advance\@colroom\LT@footdiff
\global\vsize\@colroom
\fi
\copy\LT@head\nobreak
\fi
}
\makeatother
\begin{document}
\begin{longtable}{l}
\hline first head\\\hline\endfirsthead
\hline head\\\hline\endhead
\hline first foot\\\hline\endfirstfoot
\hline (continued)\\foot\\\hline\endfoot
\hline last foot\\\hline\endlastfoot
A\\B\\C\\D\\E\\F\\G\\H\\I\\J\\K\\L\\M\\N\\O\\P\\Q\\R\\S\\T\\U\\V\\W\\X\\Y\\Z\\
a\\b\\c\\d\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\p\\q\\r\\s\\t\\u\\v\\w\\x\\y\\z\\
0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\
\end{longtable}
\end{document}
Respuesta2
El nuevo paquete LaTeX3tabularray
Recientemente (en la versión 2021L) se agregó soporte para tablas largas con estas plantillas: firsthead
, firstfoot
, middlehead
, middlefoot
y .lasthead
lastfoot
\documentclass[12pt]{article}
\usepackage[a6paper,margin=15mm]{geometry}
\usepackage{tabularray}
\usepackage{xcolor}
\usepackage{hyperref}
\hypersetup{colorlinks}
\begin{document}
\DefTblrTemplate{head}{default}{}
\DefTblrTemplate{firstfoot}{default}{
\UseTblrTemplate{caption}{default}
}
\DefTblrTemplate{middlefoot,lastfoot}{default}{
\UseTblrTemplate{capcont}{default}
}
\SetTblrStyle{firstfoot}{blue3}
\SetTblrStyle{middlefoot}{\itshape}
\SetTblrStyle{caption-tag}{red3}
Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text.
Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text.
\begin{longtblr}[
caption = {Long Long Long Long Long Long Tabular},
entry = {Short Caption},
label = {tblr:test},
]{
colspec = {XXX}, width = \linewidth,
rowhead = 2, rowfoot = 1
}
\hline
\SetRow{purple7} Head & Head & Head \\
\hline
\SetRow{purple7} Head & Head & Head \\
\hline
Alpha & Beta & Gamma \\
\hline
Epsilon & Zeta & Eta \\
\hline
Iota & Kappa & Lambda \\
\hline
Nu & Xi & Omicron \\
\hline
Rho & Sigma & Tau \\
\hline
Phi & Chi & Psi \\
\hline
Alpha & Beta & Gamma \\
\hline
Epsilon & Zeta & Eta \\
\hline
Iota & Kappa & Lambda \\
\hline
Nu & Xi & Omicron \\
\hline
Rho & Sigma & Tau \\
\hline
Phi & Chi & Psi \\
\hline
Alpha & Beta & Gamma \\
\hline
Epsilon & Zeta & Eta \\
\hline
Iota & Kappa & Lambda \\
\hline
Nu & Xi & Omicron \\
\hline
Rho & Sigma & Tau \\
\hline
Phi & Chi & Psi \\
\hline
Alpha & Beta & Gamma \\
\hline
Epsilon & Zeta & Eta \\
\hline
Iota & Kappa & Lambda \\
\hline
Nu & Xi & Omicron \\
\hline
Rho & Sigma & Tau \\
\hline
Phi & Chi & Psi \\
\hline
Alpha & Beta & Gamma \\
\hline
Epsilon & Zeta & Eta \\
\hline
Iota & Kappa & Lambda \\
\hline
Nu & Xi & Omicron \\
\hline
Rho & Sigma & Tau \\
\hline
Phi & Chi & Psi \\
\hline
\SetRow{blue7} Foot & Foot & Foot \\
\hline
\end{longtblr}
Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text.
Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text.
\end{document}