diff options
author | Manuel Pégourié-Gonnard <mpg@elzevir.fr> | 2008-07-04 10:49:07 +0000 |
---|---|---|
committer | Manuel Pégourié-Gonnard <mpg@elzevir.fr> | 2008-07-04 10:49:07 +0000 |
commit | ffb3d536f57670f1c85792d133bdaee30cf23a70 (patch) | |
tree | 07e7f21cf8d9b10aa5c03b20688738e7b9b6ee78 /Master/texmf-dist/tex/latex/vwcol | |
parent | 3808f9582452443de2e1a2a2b857a00ae7eb79aa (diff) |
new vwcol package
git-svn-id: svn://tug.org/texlive/trunk@9225 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/vwcol')
-rw-r--r-- | Master/texmf-dist/tex/latex/vwcol/vwcol.sty | 414 |
1 files changed, 414 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/vwcol/vwcol.sty b/Master/texmf-dist/tex/latex/vwcol/vwcol.sty new file mode 100644 index 00000000000..3e958054408 --- /dev/null +++ b/Master/texmf-dist/tex/latex/vwcol/vwcol.sty @@ -0,0 +1,414 @@ +%% +%% This is file `vwcol.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% vwcol.dtx (with options: `package') +%% +%% __________________________________ +%% Copyright (C) 2008 Will Robertson +%% +%% License information appended. +%% +\ProvidesPackage{vwcol} + [2008/06/24 v0.1 Variable-width multicolumn text] +\RequirePackage{calc} +\RequirePackage{environ}[2008/06/18] +\RequirePackage{keyval} +\RequirePackage{ragged2e} +\newlength\vwcol@sep +\newlength\vwcol@rule +\newlength\vwcol@totalwidth +\newlength\vwcol@averagewidth +\newlength\vwcol@parindent +\newcount\vwcol@last +\newcount\vwcol@Ncols +\newcount\vwcol@Nlines +\newcount\vwcol@maxrecursion +\newbox\vwcol@box +\newbox\vwcol@plainbox +\newbox\vwcol@outputbox +\newif\if@vwcol@boxready +\newif\if@vwcol@prerule +\newif\if@vwcol@postrule +\newif\if@vwcol@presep +\newif\if@vwcol@postsep +\newcommand\vwcol@PackageError[2]{% + \PackageError{vwcol}{^^J\space\space#1}{#2}} +\newcommand\vwcol@PackageWarning[1]{% + \PackageWarning{vwcol}{% + ^^J\space\space#1^^JThis warning occurred}} +\newcommand\vwcol@PackageInfo[1]{% + \PackageWarning{vwcol}{% + ^^J\space\space#1^^JThis warning occurred}} +\DeclareOption{quiet}{% + \renewcommand\vwcol@PackageError[2]{% + \vwcol@PackageWarning{#1.}}% + \let\vwcol@PackageInfo\@gobble} +\ProcessOptions +\def\vwcol@test@length#1#2{% + \afterassignment\vwcol@test@@ + \@tempdima=#1#2\@nil} +\def\vwcol@test@@#1\@nil{% + \ifx\@nil#1\@nil + \@tempswatrue + \else + \@tempswafalse + \fi} +\def\vwcolsetup{\setkeys{vwcol}} +\define@key{vwcol}{widths}{\def\vwcol@widths{#1}} +\define@key{vwcol}{maxrecursion}{\vwcol@maxrecursion=#1} +\vwcolsetup{maxrecursion=5} +\define@key{vwcol}{rule}{% + \def\@tempa{#1}% + \def\@tempb{none}% + \ifx\@tempa\@tempb + \vwcol@rule=0pt + \else + \vwcol@test@length{#1}{\linewidth}% + \vwcol@rule=\@tempdima + \fi} +\vwcolsetup{rule=0.4pt} +\define@key{vwcol}{lines}{% + \def\@tempa{#1}% + \def\@tempb{auto}% + \ifx\@tempa\@tempb + \vwcol@Nlines=0 + \else + \vwcol@Nlines=#1 + \fi} +\vwcolsetup{lines=auto} +\define@key{vwcol}{sep}{% + \def\@tempa{#1}% + \def\@tempb{fill}% + \ifx\@tempa\@tempb + \vwcol@sep=1sp + \else + \vwcol@test@length{#1}{\linewidth}% + \vwcol@sep=\@tempdima + \fi} +\vwcolsetup{sep=0.05} +\define@key{vwcol}{presep}[true]{% + \def\@tempa{#1}% + \def\@tempb{true}% + \ifx\@tempa\@tempb + \@vwcol@preseptrue + \else + \def\@tempb{false}% + \ifx\@tempa\@tempb + \@vwcol@presepfalse + \else + \vwcol@PackageWarning{% + '#1' not a valid option for option 'presep'; + 'true' or 'false' only.}% + \fi + \fi} +\vwcolsetup{presep=false} + +\define@key{vwcol}{postsep}[true]{% + \def\@tempa{#1}% + \def\@tempb{true}% + \ifx\@tempa\@tempb + \@vwcol@postseptrue + \else + \def\@tempb{false}% + \ifx\@tempa\@tempb + \@vwcol@postsepfalse + \else + \vwcol@PackageWarning{% + '#1' not a valid option for option 'postsep'; + 'true' or 'false' only.}% + \fi + \fi} +\vwcolsetup{postsep=false} +\define@key{vwcol}{sidesep}[true]{% + \def\@tempa{#1}% + \def\@tempb{true}% + \ifx\@tempa\@tempb + \@vwcol@preseptrue + \@vwcol@postseptrue + \else + \def\@tempb{false}% + \ifx\@tempa\@tempb + \@vwcol@presepfalse + \@vwcol@postsepfalse + \else + \vwcol@PackageWarning{% + '#1' not a valid option for option 'sidesep'; + 'true' or 'false' only.}% + \fi + \fi} +\define@key{vwcol}{prerule}[true]{% + \def\@tempa{#1}% + \def\@tempb{true}% + \ifx\@tempa\@tempb + \@vwcol@preseptrue + \@vwcol@preruletrue + \else + \def\@tempb{false}% + \ifx\@tempa\@tempb + \@vwcol@prerulefalse + \else + \vwcol@PackageWarning{% + '#1' not a valid option for option 'prerule'; + 'true' or 'false' only.}% + \fi + \fi} +\vwcolsetup{prerule=false} +\define@key{vwcol}{postrule}[true]{% + \def\@tempa{#1}% + \def\@tempb{true}% + \ifx\@tempa\@tempb + \@vwcol@postseptrue + \@vwcol@postruletrue + \else + \def\@tempb{false}% + \ifx\@tempa\@tempb + \@vwcol@postrulefalse + \else + \vwcol@PackageWarning{% + '#1' not a valid option for option 'postrule'; + 'true' or 'false' only.}% + \fi + \fi} +\vwcolsetup{postrule=false} +\define@key{vwcol}{siderule}[true]{% + \def\@tempa{#1}% + \def\@tempb{true}% + \ifx\@tempa\@tempb + \@vwcol@preseptrue + \@vwcol@postseptrue + \@vwcol@preruletrue + \@vwcol@postruletrue + \else + \def\@tempb{false}% + \ifx\@tempa\@tempb + \@vwcol@prerulefalse + \@vwcol@postrulefalse + \else + \vwcol@PackageWarning{% + '#1' not a valid option for option 'siderule'; + 'true' or 'false' only.}% + \fi + \fi} +\define@key{vwcol}{justify}{% + \def\@tempa{#1}% + \def\@tempb{ragged}% + \ifx\@tempa\@tempb + \let\vwcol@justify\RaggedRight + \else + \def\@tempb{flush}% + \ifx\@tempa\@tempb + \let\vwcol@justify\justifying + \else + \def\@tempb{raggedleft}% + \ifx\@tempa\@tempb + \let\vwcol@justify\RaggedLeft + \else + \def\@tempb{center}% + \ifx\@tempa\@tempb + \let\vwcol@justify\Centering + \else + \vwcol@PackageWarning{% + '#1' not a valid option for option 'justify'; + one of 'flush'/'ragged'/'raggedleft'/'center' only.}% + \fi + \fi + \fi + \fi} +\vwcolsetup{justify=ragged} +\define@key{vwcol}{indent}{\setlength\vwcol@parindent{#1}} +\vwcolsetup{indent=1.5em} +\NewEnviron{vwcol}[1][]{% + \par\noindent + \@vwcol@boxreadyfalse + \vwcolsetup{#1}% + \splittopskip=\ht\strutbox + \expandafter\vwcol@process@widths\expandafter{\vwcol@widths}% + \vwcol@para@setup + \ifdim\vwcol@sep=1sp + \vwcol@totalwidth=\linewidth + \else + \vwcol@totalwidth=\numexpr + \vwcol@totalwidth+(\vwcol@Ncols-1)*\vwcol@sep + \relax sp + \if@vwcol@presep + \advance\vwcol@totalwidth\dimexpr(\vwcol@sep-\vwcol@rule)/2\relax + \fi + \if@vwcol@postsep + \advance\vwcol@totalwidth\dimexpr(\vwcol@sep-\vwcol@rule)/2\relax + \fi + \if@vwcol@prerule \advance\vwcol@totalwidth \vwcol@rule\fi + \if@vwcol@postrule\advance\vwcol@totalwidth \vwcol@rule\fi + \fi + \ifdim\vwcol@totalwidth > \linewidth + \vwcol@PackageWarning{% + Total width of columns plus their separations + is greater than the linewidth^^J\space\space + (by \the\vwcol@totalwidth\space - \the\linewidth\space = + \the\dimexpr \vwcol@totalwidth-\linewidth\relax)}% + \fi + \ifnum\vwcol@Nlines=0% + \@tempcnta=\hbadness + \hbadness=\maxdimen + \setbox\vwcol@plainbox\hbox{% + \parbox{\vwcol@averagewidth}{\vwcol@justify\BODY}}% + \hbadness=\@tempcnta + \vwcol@Nlines=\numexpr + (\ht\vwcol@plainbox+\dp\vwcol@plainbox)/ + (\baselineskip*\vwcol@Ncols) + \relax + \@tempcnta=1% + \loop\unless\if@vwcol@boxready + \savebox\vwcol@outputbox{% + \hbox to \vwcol@totalwidth{\vwcol@{\BODY}}}% + \unless\if@vwcol@boxready + \advance\@tempcnta 1% + \advance\vwcol@Nlines 1% + \ifnum\@tempcnta>\vwcol@maxrecursion + \@vwcol@boxreadytrue + \vwcol@PackageError{% + The estimated number of lines is greater than + \the\vwcol@maxrecursion\space lines too small,% + ^^J\space\space + so I gave up (last tried maximum value of + [lines=\the\vwcol@Nlines])% + }{% + Text will be truncated in the multicolumns; + please select the% + ^^J\space\space + number of lines explicitly or increase + [maxrecursion=\the\vwcol@maxrecursion].% + }% + \fi + \fi + \repeat + \usebox\vwcol@outputbox + \else + \hbox to \vwcol@totalwidth{\vwcol@{\BODY}}% + \unless\if@vwcol@boxready + \vwcol@PackageError{% + Not enough lines to fit the entire text; + some text has been truncated.^^J\space\space + Increase [lines=\the\vwcol@Nlines] to fit more% + }{% + Or remove [lines=\the\vwcol@Nlines] altogether + to have 'vwcol' estimate the value.}% + \fi + \fi\par} +\def\vwcol@para@setup{% + \vwcol@justify + \@tempswafalse + \ifx\vwcol@justify\RaggedRight + \@tempswatrue + \else\ifx\vwcol@justify\justifying + \@tempswatrue + \fi\fi + \if@tempswa + \parindent=\vwcol@parindent + \else + \vwcol@PackageInfo{% + 'indent' ignored for [justify=raggedleft] + or [justify=center]} + \fi + \parskip=0pt} +\def\vwcol@process@widths#1{% + \@for\@ii:=#1\do{\advance\vwcol@Ncols 1}% + \ifdim\vwcol@sep=1sp + \@tempdimb=\numexpr + \linewidth-(\vwcol@Ncols-1)*\vwcol@rule + \relax sp + \else + \ifdim\vwcol@rule > \vwcol@sep + \vwcol@sep=\vwcol@rule + \vwcol@PackageWarning{% + 'sep' must be greater than or equal to 'rule'}% + \fi + \@tempdimb=\numexpr + \linewidth-(\vwcol@Ncols-1)*\vwcol@sep + \relax sp + \if@vwcol@presep + \advance\@tempdimb\dimexpr(-\vwcol@sep+\vwcol@rule)/2\relax + \fi + \if@vwcol@postsep + \advance\@tempdimb\dimexpr(-\vwcol@sep+\vwcol@rule)/2\relax + \fi + \fi + \if@vwcol@prerule\advance\@tempdimb-\vwcol@rule\fi + \if@vwcol@postrule\advance\@tempdimb-\vwcol@rule\fi + \@for\@ii:=#1\do{% + \vwcol@test@length\@ii\@tempdimb + \advance\vwcol@totalwidth\@tempdima + \expandafter\expandafter\expandafter\def + \expandafter\expandafter\expandafter\vwcol@setup@parlines + \expandafter\expandafter\expandafter{% + \expandafter\vwcol@setup@parlines + \expandafter\vwcol@addlines + \expandafter{\the\@tempdima}}}% + \vwcol@averagewidth=\dimexpr \vwcol@totalwidth/\vwcol@Ncols \relax} +\def\vwcol@setup@parlines{\let\vwcol@parlines\@empty} +\def\vwcol@addlines#1{% + \@tempcnta=0 + \loop\ifnum\@tempcnta<\vwcol@Nlines + \advance\@tempcntb 1 + \ifnum\@tempcntb>\vwcol@last + \xdef\vwcol@parlines{\vwcol@parlines 0cm #1 }% + \fi + \advance\@tempcnta 1 + \repeat} +\newcommand\vwcol@[1]{% + \setbox\vwcol@box\vbox{% + \def\par{\endgraf\advance\vwcol@last\the\prevgraf}% + \everypar{% + \@tempcntb=0 + \vwcol@setup@parlines + \parshape=\numexpr \vwcol@Nlines*\vwcol@Ncols-\vwcol@last \relax + \vwcol@parlines}% + \noindent\strut#1}% + \if@vwcol@presep + \if@vwcol@prerule + \vrule width \vwcol@rule + \fi + \hskip\dimexpr (\vwcol@sep-\vwcol@rule)/2 \relax + \fi + \@tempcnta=0 + \loop\ifnum\@tempcnta < \vwcol@Ncols + \advance\@tempcnta 1 + \unless\ifnum\@tempcnta=1 + \ifdim\vwcol@sep=1sp + \hfill\vrule width \vwcol@rule\hfill + \else + \@tempdima=\dimexpr (\vwcol@sep-\vwcol@rule)/2 \relax + \hskip\@tempdima\vrule width \vwcol@rule\hskip\@tempdima + \fi + \fi + \vsplit\vwcol@box to \numexpr + (\vwcol@Nlines-1)*\baselineskip+\ht\strutbox \relax sp + \repeat + \if@vwcol@postsep + \hskip\dimexpr (\vwcol@sep-\vwcol@rule)/2 \relax + \if@vwcol@postrule + \vrule width \vwcol@rule + \fi + \fi + \ifvoid\vwcol@box + \global\@vwcol@boxreadytrue + \fi} +%% +%% Copyright (C) 2008 by Will Robertson <wspr81@gmail.com> +%% +%% Distributable under the LaTeX Project Public License, +%% version 1.3c or higher (your choice). The latest version of +%% this license is at: http://www.latex-project.org/lppl.txt +%% +%% This work is "maintained" (as per LPPL maintenance status) +%% by Will Robertson. +%% +%% This work consists of the file vwcol.dtx +%% and the derived files vwcol.sty, +%% vwcol.ins, and +%% vwcol.pdf. +%% +%% +%% End of file `vwcol.sty'. |