summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/xltabular/xltabular.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/xltabular/xltabular.sty')
-rw-r--r--macros/latex/contrib/xltabular/xltabular.sty109
1 files changed, 109 insertions, 0 deletions
diff --git a/macros/latex/contrib/xltabular/xltabular.sty b/macros/latex/contrib/xltabular/xltabular.sty
new file mode 100644
index 0000000000..4684191127
--- /dev/null
+++ b/macros/latex/contrib/xltabular/xltabular.sty
@@ -0,0 +1,109 @@
+%%
+%% This file is distributed under the terms of the LaTeX Project Public
+%% License from CTAN archives in directory macros/latex/base/lppl.txt.
+%% Either version 1.3 or, at your option, any later version.
+%%
+% Copyright 2018 Herbert Voss <hvoss@tug.org>
+% Rolf Niepraschk <Rolf.Niepraschk@gmx.de>
+%%
+\ProvidesPackage{xltabular}[2019/01/30 v0.2b `xltabular' package (hv,RN)]
+\RequirePackage{tabularx}
+\let\XLT@i@tabularx=\tabularx
+\let\XLT@i@endtabularx=\endtabularx
+\let\XLT@i@TX@endtabularx=\TX@endtabularx
+%
+\RequirePackage{ltablex}
+\keepXColumns% xltabular behaves like tabularx
+%
+\let\XLT@ii@tabularx=\tabularx
+\let\XLT@ii@TX@endtabularx=\TX@endtabularx
+\let\XLT@longtable=\longtable
+\let\XLT@LT@start=\LT@start
+\let\XLT@LT@array=\LT@array
+\@ifundefined{scr@LT@array}{%
+ \AtBeginDocument{%
+ \@ifundefined{adl@LT@array}{}{\let\XLT@adl@LT@array=\adl@LT@array}
+ }
+}{\let\XLT@scr@LT@array=\scr@LT@array}%
+
+%
+% restore original tabularx
+\renewenvironment{tabularx}%
+{\let\TX@endtabularx=\XLT@i@TX@endtabularx\XLT@i@tabularx}
+{\XLT@i@endtabularx}
+%
+% define a new tabularx like the one from "ltablex"
+%
+\newenvironment{xltabular}[1][x]%
+{\if l#1%
+ \LTleft\z@ \LTright\fill
+ \else\if r#1%
+ \LTleft\fill \LTright\z@
+ \else\if c#1%
+ \LTleft\fill \LTright\fill
+ \fi\fi\fi
+ \let\TX@endtabularx=\XLT@ii@TX@endtabularx
+ \let\endtabularx\endxltabular
+ \XLT@ii@tabularx}
+{\def\@currenvir{tabularx}}
+
+\def\LT@caption{%
+ \noalign\bgroup\XLT@refstepcounter{\LTcaptype}%
+ % because we are inside a group
+ \global\let\@currentlabel=\@currentlabel
+ \@ifundefined{cref@currentlabel}{}{% from package "cleveref"
+ \global\let\cref@currentlabel=\cref@currentlabel
+ }
+ \ifXLT@HypRef
+ % revert to the patched version
+ \global\let\LT@start=\XLT@Hy@LT@start
+ \hyper@makecurrent{\LTcaptype}%
+ \global\let\Hy@LT@currentHref\@currentHref
+ \fi
+ \@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n
+}%
+%
+\providecommand*\LTcaptype{table}% support of package "caption"
+\def\longtable{%
+ \ifXLT@HypRef
+ % revert to the unpatched version when \caption is not used
+ \global\let\LT@start=\XLT@LT@start
+ \fi
+ \XLT@longtable
+}
+
+\newif\ifXLT@HypRef
+\AtBeginDocument{%
+ \let\XLT@refstepcounter=\refstepcounter
+ \@ifpackageloaded{hyperref}{\XLT@HypReftrue}{\XLT@HypReffalse}%
+ \ifXLT@HypRef
+ % save the patched version
+ \let\XLT@Hy@LT@start=\LT@start
+ % revert to the unpatched versions
+ \@ifundefined{scr@LT@array}{%
+ \@ifundefined{adl@LT@array}{%
+ % hyperref has \LT@array patched directly
+ \let\LT@array=\XLT@LT@array
+ }{%
+ % hyperref has \adl@LT@array patched, not \LT@array
+ \let\adl@LT@array=\XLT@adl@LT@array
+ }%
+ }{%
+ % hyperref has \scr@LT@array patched, not \LT@array
+ \let\scr@LT@array=\XLT@scr@LT@array
+ }%
+ \fi
+ \def\LT@array{%
+ % make the call of \refstepcounter inside of \XLT@LT@array ineffective
+ \renewcommand*\refstepcounter[2][]{%
+ % make next calls effective again
+ \let\refstepcounter=\XLT@refstepcounter
+ }%
+ \XLT@LT@array
+ }%
+}
+%
+\endinput
+%%
+%% End of file `xltabular.sty'.
+