diff options
Diffstat (limited to 'macros/latex/contrib/threeparttablex/threeparttablex.sty')
-rw-r--r-- | macros/latex/contrib/threeparttablex/threeparttablex.sty | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/macros/latex/contrib/threeparttablex/threeparttablex.sty b/macros/latex/contrib/threeparttablex/threeparttablex.sty new file mode 100644 index 0000000000..b186a9f68b --- /dev/null +++ b/macros/latex/contrib/threeparttablex/threeparttablex.sty @@ -0,0 +1,164 @@ +\ProvidesPackage{threeparttablex}[2013/07/23 v0.3 by daleif] + +%% +%% This package can be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This work has the LPPL maintenance status "maintained". +%% +%% The Current Maintainer of this work is Lars Madsen (daleif@imf.au.dk). +%% + + +\newif\ifTPTL@referable +\DeclareOption{referable}{\TPTL@referabletrue} +\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{threeparttable}} + +\ProcessOptions\relax + +\RequirePackage{threeparttable} +\RequirePackage{environ} + + +\newcommand\TPTL@font{} +\newcommand\setTableNoteFont[1]{\renewcommand\TPTL@font{#1}} + +% length to store the longtable width in +\newlength\TPTL@width +% macro to store the optional argument for tablenotes +\def\TPTL@optarg{} +% wrapper env used to collect the tablenotes for later use +\newenvironment{TableNotes}[1][]{ + \gdef\TPTL@optarg{#1}% + \Collect@Body\TPTL@collector}{} +\newcommand\TPTL@collector[1]{% + \long\gdef\TPTL@body{#1}} +% the macro used to store the tablenotes contents +\gdef\TPTL@body{} +\newcommand\insertTableNotes{% + % first we need to know the width of the longtable, remember that it + % will only settle after a few compilations + \noalign{\begingroup + \setlength\TPTL@width{0pt} + \renewcommand\LT@entry[2]{\global\advance\TPTL@width by ##2} + \@nameuse{LT@\romannumeral\c@LT@tables} + \ifdim\TPTL@width<\TPTminimum\relax\global\TPTL@width=\TPTminimum\fi + \endgroup} + % then add the table notes inside a \parbox of the required width + \multicolumn{\LT@cols}{c}{% + \makebox[0pt][c]{% + \parbox{\TPTL@width}{% + \let\TPT@hsize\@empty% otherwise the width is not reset + % correctly as \TPT@hsize messes with + % \@parboxrestore + \let\TPToverlap\relax% + \begin{tablenotes}[\TPTL@optarg]% + \TPTL@font% + \TPTL@body + \end{tablenotes} + }% + }% + }% +} + +% the alternative threeparttable env, it only enables \TPToverlap +\newenvironment{ThreePartTable}{\let\TPToverlap\TPTrlap}{} + + + +\ifTPTL@referable\else\endinput\fi + +% we only come here if we need to make tablenotes referable + + +% define an extra \tnote command that table a label instead of a string +\DeclareRobustCommand\tnotex{\@ifstar{\TPTL@tnotex{01}}{\TPTL@tnotex{00}}} + +\newcommand\TPTL@tnotex[2]{\tnote{\ref{#2}}} + +% if hyperref is loaded we activate a starred version +\AtBeginDocument{% + \@ifpackageloaded{hyperref}{% + \renewcommand\TPTL@tnotex[2]{% + \if#1\relax% + \tnote{\ref{#2}}% + \else% + \tnote{\ref*{#2}}% + \fi}}{}} + + +\newcommand\TPTL@generator[2]{% + \providecommand{#1}{}% just to make it exist + \renewcommand#1[1][#2]{% + \let\TPTL@oldmakelabel=\makelabel% + \renewcommand\makelabel[1]{\TPTLnotesnamefontcommand{##1:}}% + \item% + \let\makelabel=\TPTL@oldmakelabel}} + +\newcommand\TPTL@generator@para[2]{% + \providecommand{#1}{}% just to make it exist + \renewcommand#1[1][#2]{% + \TPTLnotesnamefontcommand{##1: }% + }} + + +\providecommand\TPTLnotename{Note} +\providecommand\TPTLsourcename{Source} +\providecommand\TPTLnotesnamefontcommand{\textit} + + + +\let\TPTL@tablenotes=\tablenotes + +% \makelabel (i.e. \item) hides its argument inside a group, making it +% difficult to set \@currentlabel, so we locally overload \item to get +% the argument and set \@currentlabel AFTER \item[...] + + +\renewcommand\tablenotes{% + \let\TPTL@item=\item + \renewcommand\item[1][]{\TPTL@item[##1]% + \phantomsection\protected@edef\@currentlabel{##1}} + \TPTL@generator\note{\TPTLnotename} + \TPTL@generator\source{\TPTLsourcename} + \TPTL@font\TPTL@tablenotes} + + +% this is a copy from threeparttable, since adding to it failed +\def\TPT@doparanotes{\par + \prevdepth\z@ \TPT@hsize + \TPTnoteSettings + \parindent\z@ \pretolerance 8 + \linepenalty 200 + \renewcommand\item[1][]{\relax\ifhmode \begingroup + \unskip + \advance\hsize 10em % \hsize is scratch register, based on real hsize + \penalty -45 \hskip\z@\@plus\hsize \penalty-19 + \hskip .15\hsize \penalty 9999 \hskip-.15\hsize + \hskip .01\hsize\@plus-\hsize\@minus.01\hsize + \hskip 1em\@plus .3em + \endgroup\fi + \tnote{##1}% + \phantomsection\protected@edef\@currentlabel{##1}% + \,\ignorespaces}% + \let\TPToverlap\relax% + \TPTL@generator@para\note{\TPTLnotename}% + \TPTL@generator@para\source{\TPTLsourcename}% + \TPTL@font% + \def\endtablenotes{\par}% + } + + + +% just in case it is not already there +\providecommand\phantomsection{} + + +\endinput + +The End |