diff options
Diffstat (limited to 'macros/latex/contrib/xltabular/xltabular.sty')
-rw-r--r-- | macros/latex/contrib/xltabular/xltabular.sty | 109 |
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'. + |