diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/cals/table.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/cals/table.dtx | 103 |
1 files changed, 75 insertions, 28 deletions
diff --git a/Master/texmf-dist/source/latex/cals/table.dtx b/Master/texmf-dist/source/latex/cals/table.dtx index e4eb37dfb7b..94670200024 100644 --- a/Master/texmf-dist/source/latex/cals/table.dtx +++ b/Master/texmf-dist/source/latex/cals/table.dtx @@ -59,8 +59,12 @@ \let\cals@current@context=\cals@backup@context \fi\fi\fi % \end{macrocode} -% Typeset the row. +% Typeset the row. If the width of the row is more than hsize, then +% the issue-code should not fit the row to hsize. % \begin{macrocode} +\ifdim\wd\cals@current@row>\hsize\relax +\def\cals@tohsize{}% +\fi \cals@issue@row % \end{macrocode} % Consider a table such that thead+row1 do not fit to a page @@ -76,8 +80,15 @@ % the first row of a table chunk. % \begin{macrocode} \ifx b\cals@last@context - \ifx h\cals@last@context@bak \vskip0pt \penalty10000 \fi - \ifx n\cals@last@context@bak \vskip0pt \penalty10000 \fi + {\dimen0=\pagetotal\relax + \advance\dimen0 by \cals@tfoot@height\relax + \advance\dimen0 by -\pagegoal + \ifdim\dimen0>0pt\relax + \vskip\dimen0 + \penalty9999 % with 10000, the output page builder is not called + \vskip-\dimen0\relax + \fi + }% \fi } % \end{macrocode} @@ -100,6 +111,7 @@ \setbox\cals@backup@row=\vbox{\box\cals@current@row}% \setbox\cals@backup@cs=\box\cals@current@cs \let\cals@backup@rs@above=\cals@current@rs@above + \let\cals@backup@last@rs@below=\cals@last@rs@below \let\cals@backup@context=\cals@last@context \cals@backup@leftskip=\leftskip\relax \cals@backup@rightskip=\rightskip\relax @@ -120,6 +132,7 @@ \setbox\cals@current@row=\box\cals@backup@row \setbox\cals@current@cs=\box\cals@backup@cs \let\cals@current@rs@above=\cals@backup@rs@above + \let\cals@last@rs@below=\cals@backup@last@rs@below \let\cals@last@context=\cals@backup@context \leftskip=\cals@backup@leftskip \rightskip=\cals@backup@rightskip @@ -190,6 +203,7 @@ % If the user sets |\cals@tbreak@tokens| (using |\tbreak|), % break is forced. Otherwise, no break is allowed: % \begin{itemize} +% \item inside a box (= inside a float) % \item In the header % \item In the footer % \item Immediately after the header @@ -206,22 +220,23 @@ \let\cals@tmp=\cals@iffalse \let\cals@tmpII=\cals@iftrue \ifx\relax\cals@tbreak@tokens - \ifx h\cals@current@context \else - \ifx f\cals@current@context \else - \ifx h\cals@last@context \else - \ifx n\cals@last@context \else - \dimen0=\pagetotal\relax - \advance\dimen0 by \ht\cals@current@row\relax - %\showthe\ht\cals@current@row\relax - \ifx \cals@tfoot@tokens\relax \else - %\show\cals@tfoot@height\relax - \advance\dimen0 by \cals@tfoot@height\relax - \fi - %\showthe\dimen0\relax - \ifdim \dimen0>\pagegoal\relax - \let\cals@tmp=\cals@tmpII - \fi - \fi\fi\fi\fi + \ifinner\else + \ifx h\cals@current@context \else + \ifx f\cals@current@context \else + \ifx h\cals@last@context \else + \ifx n\cals@last@context \else + \dimen0=\pagetotal\relax + \advance\dimen0 by \ht\cals@current@row\relax + %\showthe\ht\cals@current@row\relax + \ifx \cals@tfoot@tokens\relax \else + %\show\cals@tfoot@height\relax + \advance\dimen0 by \cals@tfoot@height\relax + \fi + %\showthe\dimen0\relax + \ifdim \dimen0>\pagegoal\relax + \let\cals@tmp=\cals@tmpII + \fi + \fi\fi\fi\fi\fi \else \let\cals@tmp=\cals@tmpII % tbreak@tokens \fi \cals@tmp} @@ -261,6 +276,9 @@ % \begin{macro}{\cals@deactivate@rtl} % \begin{macro}{\cals@hbox} % For bidi support, use |\hboxR| instead of |\hbox|. +% Actually, more is required for bidi support, and +% these macros are retained only as "legacy". +% Otherwise I'd move the code into the beginning of `calstable`. % \begin{macrocode} \newcommand\cals@hbox{} \newcommand\cals@activate@rtl{\let\cals@hbox=\hboxR} @@ -278,11 +296,11 @@ % \begin{macrocode} \newcommand\cals@issue@rowsep@alone{% \setbox0=\cals@hbox\cals@tohsize{% - \hskip\leftskip + \cals@hskip@lr\leftskip\rightskip \cals@rs@sofar@reset \cals@rs@joinOne\cals@framers@width\cals@current@rs@above \cals@rs@sofar@end - \hskip\rightskip}% + \cals@hskip@lr\rightskip\leftskip}% \ht0=0pt \dp0=0pt \box0 } % \end{macrocode} % \end{macro} @@ -304,11 +322,11 @@ \let\cals@tmpIII=\cals@rs@width \else \let\cals@tmpIII=\cals@bodyrs@width \fi \setbox0=\cals@hbox\cals@tohsize{% - \hskip\leftskip + \cals@hskip@lr\leftskip\rightskip \cals@rs@sofar@reset \cals@rs@joinTwo\cals@tmpIII\cals@last@rs@below\cals@current@rs@above \cals@rs@sofar@end - \hskip\rightskip}% + \cals@hskip@lr\rightskip\leftskip}% \ht0=0pt \dp0=0pt \box0 % \fi} % \end{macrocode} @@ -332,7 +350,8 @@ % Decorations: first the column separation, then the row separation. % \begin{macrocode} \nointerlineskip -\setbox0=\vtop{\cals@hbox\cals@tohsize{\hskip\leftskip \box\cals@current@cs \hskip\rightskip}}% +\setbox0=\vtop{\cals@hbox\cals@tohsize{\cals@hskip@lr\leftskip\rightskip +\box\cals@current@cs \cals@hskip@lr\rightskip\leftskip}}% \ht0=0pt\relax\box0 \nointerlineskip \cals@issue@rowsep @@ -340,9 +359,11 @@ % \end{macrocode} % Output the row, update the last context. % \begin{macrocode} -\cals@hbox\cals@tohsize{\hskip\leftskip \box\cals@current@row \hskip\rightskip}% +\cals@hbox\cals@tohsize{\cals@hskip@lr\leftskip\rightskip +\box\cals@current@row \cals@hskip@lr\rightskip\leftskip}% \let\cals@last@rs@below=\cals@current@rs@below -\let\cals@last@context=\cals@current@context} +\let\cals@last@context=\cals@current@context +\nobreak} % \end{macrocode} % \end{macro} @@ -351,14 +372,16 @@ % \begin{environment}{\calstable} % Setup the parameters and let the row dispatcher to do all the work. % \begin{macrocode} -\newenvironment{calstable}{% +\newenvironment{calstable}[1][\cals@table@alignment]{% +\if@RTL\@RTLtabtrue\cals@activate@rtl\fi \let\cals@thead@tokens=\relax \let\cals@tfoot@tokens=\relax \let\cals@tbreak@tokens=\relax \cals@tfoot@height=0pt \relax \let\cals@last@context=n% \let\cals@current@context=b% -\parindent=0pt % +\parindent=0pt \relax% +\cals@setup@alignment{#1}% \cals@setpadding{Ag}\cals@setcellprevdepth{Al}\cals@set@tohsize% %% Alignment inside is independent on center/flushright outside \parfillskip=0pt plus1fil\relax @@ -366,6 +389,14 @@ \let\cals@borderR=\relax \let\cals@borderT=\relax \let\cals@borderB=\relax +% \end{macrocode} +% Bug fix for \url{http://tex.stackexchange.com/questions/167400/fancyhdr-and-cals-vertical-merge-problem}. +% Table inside a table is ok, but when there are 1) page break inside +% a table in the text flow, and 2) a table with a vertically straddled +% cell is created in the output procedure, then this table inside table +% needs additional cleaning. +% \begin{macrocode} +\setbox\cals@backup@row=\box\voidb@x\relax \cals@AtBeginTable }{% End of the table \cals@tfoot@tokens\lastrule\cals@AtEndTable} @@ -432,3 +463,19 @@ \newcommand\tbreak[1]{\def\cals@tbreak@tokens{#1}} % \end{macrocode} % \end{macro} + +% \begin{macro}{\cals@table@alignment} +% The default alignment of tables in the text flow. +% Doesn't affect the text alignment inside cells. +% \begin{itemize} +% \item |n|: no settings, the default |\leftskip| and |\rightskip| are used +% \item |l|: align left +% \item |c|: align center +% \item |r|: align right +% \end{itemize} +% This setting is appeared in the version 2.3. Earlier versions +% worked as it were |n|. +% \begin{macrocode} +\newcommand\cals@table@alignment{l} +% \end{macrocode} +% \end{macro} |