diff options
Diffstat (limited to 'macros/latex-dev/required/tools/longtable.dtx')
-rw-r--r-- | macros/latex-dev/required/tools/longtable.dtx | 165 |
1 files changed, 121 insertions, 44 deletions
diff --git a/macros/latex-dev/required/tools/longtable.dtx b/macros/latex-dev/required/tools/longtable.dtx index cc3a939e7a..061d7b5610 100644 --- a/macros/latex-dev/required/tools/longtable.dtx +++ b/macros/latex-dev/required/tools/longtable.dtx @@ -28,7 +28,7 @@ %</dtx> %<package>\NeedsTeXFormat{LaTeX2e}[1995/06/01] %<package> -% Try the 2020 version for any rollback before that date: +% Try the 2020 version for any rollback before that date: %<package>\DeclareRelease{}{1994-06-01}{longtable-2020-01-07.sty} %<package> %<package>\DeclareRelease{v4.13}{2020-01-02}{longtable-2020-01-07.sty} @@ -38,7 +38,7 @@ %<driver> \ProvidesFile{longtable.drv} % \fi % \ProvidesFile{longtable.dtx} - [2024-04-26 v4.20 Multi-page Table package (DPC)] + [2024-10-27 v4.22 Multi-page Table package (DPC)] % % \iffalse %<*driver> @@ -179,7 +179,7 @@ % \env{longtable}, which has most of the features of the \env{tabular} % environment, but produces tables which may be broken by \TeX's % standard page-breaking algorithm. It also shares some features with -% the \env{table} environment. In particular it uses the same counter, +% the \env{table} environment. In particular it uses by default the same counter, % \texttt{table}, and has a similar "\caption" command. Also, the % standard "\listoftables" command lists tables produced by either the % \env{table} or \env{longtable} environments. @@ -335,6 +335,29 @@ % \caption{A floating table} % \end{table} % +% \section{Counter and Caption Types} +% +% As mentioned in the introduction \env{longtable} uses and updates by default +% the \texttt{table} counter, the "\caption" command creates a table caption +% which is added to the list of tables. +% Packages like \pkg{ltcaption} added more flexibility here by adding the +% command "\LTcaptype" which allowed to change the type, e.g. to a listing. +% Starting with version 4.21 \pkg{longtable} supports this command directly. +% \DescribeMacro{\LTcaptype}% +% By redefining this command it is possible to change the counter and caption type. +% After "\renewcommand\LTcaptype{"\meta{counter}"}" \env{longtable} will update +% the counter \meta{counter}, use "\fnum@"\meta{counter} in the caption (which +% typically will make use of "\"\meta{counter}"name" and "\the"\meta{counter}), and +% write content line entries into the file with the extension stored in the +% command "\ext@"\meta{counter}. When \pkg{hyperref} is loaded the name of +% the anchor will use \meta{counter} too. Packages or documents that change +% "\LTcaptype" to some nonstandard value must ensure that the counter +% \meta{counter} and the commands "\fnum@"\meta{counter} +% and "\ext@"\meta{counter} exist and do not error. +% If "\LTcaptype" is empty no counter is advanced and "\"\meta{counter}"name" in +% the caption is suppressed. +% +% % \section{Captions and Headings} % % At the start of the table one may specify lines which are to appear at @@ -907,6 +930,15 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\LTcaptype} +% The name used as counter, in caption, "\addcontentsline" and in targets. +% "\providecommand" is used for compability with \pkg{ltcaption} +% \changes{v4.21}{2024/07/04} +% {Added \cs{LTcaptype} to support other types beside table.} +% \begin{macrocode} +\providecommand\LTcaptype{table} +% \end{macrocode} +% \end{macro} % \subsection{Internal Parameters} % % \begin{macro}{\LT@head} @@ -957,8 +989,11 @@ % are preserved correctly when "\includeonly" is used. In the rest of % the file "\LT@tables" has been replaced by "\c@LT@tables" without % further comment. +% \changes{v4.21}{2024/07/04} +% {Provide a \cs{theH}-representation for targets.} % \begin{macrocode} \newcounter{LT@tables} +\providecommand\theHLT@tables{\theLT@tables} % \end{macrocode} % \end{macro} % @@ -1050,12 +1085,12 @@ \LT@err{longtable not in 1-column mode}\@ehc \fi % \end{macrocode} -% +% % \changes{v4.19}{2023/12/16}{Support for tagged PDF} % \begin{macrocode} \UseTaggingSocket{tbl/vmode/begin}% % \end{macrocode} -% +% % \begin{macrocode} \begingroup % \end{macrocode} @@ -1080,6 +1115,9 @@ % Since Version 3.02, \package{longtable} has used the internal counter % "\c@LT@tables". The \LaTeX\ counter "table" is still incremented % so that "\caption" works correctly. +% \changes{v4.21}{2024/07/04} +% {Use \cs{LTcaptype} instead of \texttt{table} in various places +% to support other types beside table.} % \begin{macrocode} \def\LT@array[#1]#2{% % \end{macrocode} @@ -1097,25 +1135,31 @@ % TODO: When a line is killed the structure subtree is there already % too and must be removed. If hard to do, then maybe at first warn if the % construction is used. -% +% % \cs{LT@array} is executed in a group, so we can disable para-tagging here. % \changes{v4.19}{2023/12/16}{Support for tagged PDF} % \begin{macrocode} \UseTaggingSocket{tbl/init} - \@kernel@refstepcounter{table}\stepcounter{LT@tables} + \tl_if_empty:eTF { \LTcaptype } + { + \tl_gset:Ne \@currentHref {LT@tables.\theHLT@tables} + } + { + \@kernel@refstepcounter{\LTcaptype}\stepcounter{LT@tables} % \end{macrocode} -% The target is created rather late and a \cs{label} can come earlier, +% The target is created rather late and a \cs{label} can come earlier, % so we have to define \cs{@currentHref} explicitly. We can't currently % assume that \cs{theHtable} is defined always. % \begin{macrocode} - \tl_gset:Ne \@currentHref {table.\cs_if_exist_use:N\theHtable} + \tl_gset:Ne \@currentHref {\LTcaptype.\cs_if_exist_use:c {theH\LTcaptype}} + } % \end{macrocode} -% +% % \changes{v4.19}{2023/12/16}{Managing cell indexes} % \begin{macrocode} \tbl_gzero_row_count: % \end{macrocode} -% +% % \changes{v4.19}{2023/12/16}{Support for tagged PDF} % \begin{macrocode} \UseTaggingSocket{tbl/longtable/init} @@ -1225,7 +1269,7 @@ \begingroup \@mkpream{#2}% % \end{macrocode} -% +% % \changes{v4.19}{2023/12/16}{Managing cell indexes} % \begin{macrocode} \tbl_count_table_cols: @@ -1271,12 +1315,12 @@ \tabskip\z@ \@arstrut % \end{macrocode} % Insert the tagging socket to start the row and initialize the cell -% data for the row. +% data for the row. % \changes{v4.19}{2023/12/16}{Support for tagged PDF} % \begin{macrocode} \UseTaggingSocket{tbl/row/begin}% % \end{macrocode} -% +% % \changes{v4.19}{2023/12/16}{Managing cell indexes} % \begin{macrocode} \tbl_init_cell_data_for_row: @@ -1314,7 +1358,7 @@ column:~ \the\g_@@_col_int } % \end{macrocode} -% +% % \changes{v4.19}{2023/12/16}{Support for tagged PDF} % \begin{macrocode} \tbl_if_row_was_started:T @@ -1399,7 +1443,7 @@ % We also have to make sure that this breakpoint doesn't affect how the next % page is broken, so we make the penalty 9999 (10000 is infinite and thus not % a legal breakpoint) and cancel out the "\kern" with a new "\kern". -% +% % I don't think this is the \emph{right} solution to the problem (that would be % that the standard output routine has a feature for syncronizing with % typesetting, as part of the preparations for switching output routine), but @@ -1476,9 +1520,17 @@ \maxdepth\z@ \fi % \end{macrocode} -% +% \changes{v4.21}{2024/07/04} +% {Use \cs{LTcaptype} to support other types beside table and handle +% the case if it is empty.} % \begin{macrocode} - \MakeLinkTarget{table} + \tl_if_empty:eTF{\LTcaptype} + { + \MakeLinkTarget{LT@tables} + } + { + \MakeLinkTarget{\LTcaptype} + } % \end{macrocode} % Put the table head on the page, and then switch to the new output % routine. @@ -1487,12 +1539,12 @@ % \begin{macrocode} \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak % \end{macrocode} -% +% % \changes{v4.19}{2023/12/16}{Support for tagged PDF} % \begin{macrocode} \UseTaggingSocket{tbl/longtable/head} % \end{macrocode} -% +% % \begin{macrocode} \output{\LT@output}} \ExplSyntaxOff @@ -1524,18 +1576,18 @@ % \begin{macrocode} \tbl_crcr:n {endlongtable} % \end{macrocode} -% +% % \changes{v4.01}{1996/04/11} % {(DPC) use \cs{noalign} to sneak in \cs{LT@entry@chop}} % \begin{macrocode} \noalign{% % \end{macrocode} -% +% % \changes{v4.19}{2023/12/16}{Support for tagged PDF} % \begin{macrocode} \UseTaggingSocket{tbl/longtable/finalize} % \end{macrocode} -% +% % \begin{macrocode} \let\LT@entry\LT@entry@chop \xdef\LT@save@row{\LT@save@row}}% @@ -1579,19 +1631,28 @@ \ifx\LT@save@row\LT@@@@save@row \else \LT@warn{Column~ widths~ have~ changed\MessageBreak - in~ table~ \thetable}% + in~ + \tl_if_empty:eTF{\LTcaptype} + {longtable~ \theLT@tables} + {\LTcaptype\c_space_tl\use:c{the\LTcaptype}} + } \LT@final@warn \fi % \end{macrocode} -% Force one more go with the \env{longtable} output routine. +% Force one more go with the \env{longtable} output routine. +% Guard the special start of page value of "\pagegoal". % \changes{v4.14}{2020/02/07} % {Rearrange vertical space tests for tools/3512 (floats on same page)} +% \changes{v4.22}{2024/10/27} +% {Keep \cs{pagegoal} below \cs{maxdimen} gh1495} % \begin{macrocode} \endgraf\penalty -\LT@end@pen \ifvoid\LT@foot\else \global\advance\vsize\ht\LT@foot \global\advance\@colroom\ht\LT@foot - \dimen@\pagegoal\advance\dimen@\ht\LT@foot\pagegoal\dimen@ + \ifdim\pagegoal<\maxdimen + \dimen@\pagegoal\advance\dimen@\ht\LT@foot\pagegoal\dimen@ + \fi \fi % \end{macrocode} % Now close the group to return to the standard routine. @@ -1613,7 +1674,7 @@ % \begin{macrocode} \ifvoid\footins\else\insert\footins{}\fi % \end{macrocode} -% +% % \changes{v4.19}{2023/12/16}{Support for tagged PDF} % \begin{macrocode} \UseTaggingSocket{tbl/vmode/end}% @@ -2161,7 +2222,6 @@ \tbl_gdecr_row_count: \penalty\@M} \@gtempa} -\ExplSyntaxOff %<@@=> % \end{macrocode} % \end{macro} @@ -2187,14 +2247,22 @@ % {Add new control argument} % \changes{v4.16}{2021/05/07} % {use \cs{ext@table} gh/561} -% \begin{macrocode} -\def\LT@c@ption#1[#2]#3{% - \LT@makecaption#1\fnum@table{#3}% - \def\@tempa{#2}% - \ifx\@tempa\@empty\else - {\let\\\space - \addcontentsline{\ext@table}{table}{\protect\numberline{\thetable}{#2}}}% - \fi} +% \changes{v4.21}{2024/07/04} +% {Use \cs{LTcaptype} to support other types beside table.} +% \begin{macrocode} +\def\LT@c@ption#1[#2]#3{ + \tl_if_empty:eTF{\LTcaptype} + {\LT@makecaption\@gobble{}{#3}} + {\LT@makecaption#1{\csname fnum@\LTcaptype\endcsname}{#3} + \def\@tempa{#2} + \ifx\@tempa\@empty\else + {\let\\\space + \addcontentsline + {\@nameuse{ext@\LTcaptype}} + {\LTcaptype} + {\protect\numberline{\@nameuse{the\LTcaptype}}{#2}}} + \fi}} +\ExplSyntaxOff % \end{macrocode} % \end{macro} % @@ -2375,7 +2443,7 @@ \ExplSyntaxOn \def\LT@end@hd@ft#1{% % \end{macrocode} -% +% % This command is used to store the head and foot boxes. % We need to retrieve and store the row so that we can clean % up the structure in the finalize code. @@ -2388,7 +2456,7 @@ % \end{macrocode} % TODO: This is exposing internal counters, so it should be encapsulated % in some interface command (but I'm not sure what that should be -% called, so not done yet. +% called, so not done yet. % \changes{v4.19}{2023/12/16}{Managing cell indexes} % \begin{macrocode} \tbl_count_missing_cells:n {head/foot} @@ -2413,19 +2481,28 @@ % To get out of this trap we run \cs{crcr} (which would normally % come inside \cs{LT@echunk}. That will then trigger \cs{everycr} % and update row counter unnecessarily, but now we have a defined state, so -% we can use \cs{noalign} to undo that. +% we can use \cs{noalign} to undo that. % We also change \cs{LT@rows} so that further \cs{cr}s do not do % any harm (as explained above. % % The \cs{crcr} inside \cs{LT@echunk} will be bypassed in that case % as we have just executed a \cs{crcr} and are still in scanning modus for -% \cs{omit} or \cs{noalign}. +% \cs{omit} or \cs{noalign}. % \begin{macrocode} { \crcr \noalign{ % \end{macrocode} -% +% \changes{v4.22}{2024/08/13}{Store header row numbers} +% \begin{macrocode} + \int_step_inline:nn + { \LT@rows } + { + \seq_gput_left:ce + {g_@@_\cs_to_str:N #1 _rows_seq } + { \int_eval:n {\g_@@_row_int - ##1 } } + } +% \end{macrocode} % \changes{v4.19}{2023/12/16}{Managing cell indexes} % \begin{macrocode} \tbl_gdecr_row_count: % undo the increment @@ -2442,7 +2519,7 @@ {Increase~ LTchunksize}% \fi \setbox#1\box\z@ - \@@_trace:n {-->>~ Saving~\noexpand#1} + \@@_trace:n {-->>~ Saving~\noexpand#1} \LT@get@widths \LT@bchunk} % \end{macrocode} @@ -2501,7 +2578,7 @@ \bgroup % \end{macrocode} % \changes{v4.12}{2019/02/06}{Color group to match array package} -% \changes{v4.18}{2023/08/25}{Use \cs{everypar} to match array package, github 1128}% +% \changes{v4.18}{2023/08/25}{Use \cs{everypar} to match array package, github 1128} % \begin{macrocode} \color@begingroup \let\@footnotetext\LT@p@ftntext @@ -2509,7 +2586,7 @@ \@arrayparboxrestore \everypar{% \vrule \@height \ht\@arstrutbox \@width \z@ - \everypar{}}% + \everypar{}}% } % \end{macrocode} % \end{macro} |