diff options
author | Karl Berry <karl@freefriends.org> | 2016-10-07 22:24:58 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-10-07 22:24:58 +0000 |
commit | d30aa38d9b8e86cd7916fb2de8db58c73be41f03 (patch) | |
tree | 13d9be1a0d1399c554c2bcdc633cdf57f73027ff /Master/texmf-dist/tex/latex | |
parent | a54d580a3fabbe9506227e953f7e31598ada525c (diff) |
spalign (7oct16)
git-svn-id: svn://tug.org/texlive/trunk@42225 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r-- | Master/texmf-dist/tex/latex/spalign/spalign.sty | 301 |
1 files changed, 301 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/spalign/spalign.sty b/Master/texmf-dist/tex/latex/spalign/spalign.sty new file mode 100644 index 00000000000..bbc25ba109e --- /dev/null +++ b/Master/texmf-dist/tex/latex/spalign/spalign.sty @@ -0,0 +1,301 @@ +%% +%% This is file `spalign.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% spalign.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Copyright (C) 2016 by Joseph Rabinoff <rabinoff@math.gatech.edu> +%% +%% This file may 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 +%% 2005/12/01 or later. +%% +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\ProvidesPackage{spalign} + [2016/10/05 aligns delimited by spaces] + +\makeatletter + +\RequirePackage{kvoptions} +\SetupKeyvalOptions{family=spalign,prefix=spalign@} + +\DeclareStringOption[()]{delims} +\DeclareStringOption[\{.]{sysdelims} +\DeclareStringOption[\,]{matdelimskip} +\DeclareStringOption[]{vecdelimskip} +\DeclareStringOption[\,]{sysdelimskip} +\DeclareStringOption[1pt]{systabspace} +\DeclareStringOption[;]{endofrow} +\DeclareStringOption[,]{separator} + +\ProcessLocalKeyvalOptions* + +\def\spaligndelims#1#2{% + \def\spalign@leftdelim{#1}\def\spalign@rightdelim{#2}} +\expandafter\spaligndelims\spalign@delims +\def\spalignsysdelims#1#2{% + \def\spalign@sysleftdelim{#1}\def\spalign@sysrightdelim{#2}} +\expandafter\spalignsysdelims\spalign@sysdelims +\let\spalignmatdelimskip=\spalign@matdelimskip +\let\spalignvecdelimskip=\spalign@vecdelimskip +\let\spalignsysdelimskip=\spalign@sysdelimskip +\newdimen\spalignsystabspace +\spalignsystabspace=\spalign@systabspace +\let\spalignendofrow=\spalign@endofrow +\let\spalignseparator=\spalign@separator +\def\spalignendline{\\} +\def\spalignaligntab{&} +\begingroup +\def\\{\global\let\spalign@space= } \\ % +\endgroup +\def\spalign@end{\spalign@end} +\def\spalign@bgroup{\bgroup} +\newcount\spalign@curcols +\newif\ifspalign@ignorespaces +\newif\ifspalign@saw@space +\def\spalign@gobble@next{% + \afterassignment\spalign@gobble@spaces\let\spalign@atoken= } +\def\spalign@check@space{% + \ifx\spalign@nexttok\spalign@space% + \spalign@saw@spacetrue% + \let\spalign@next=\spalign@gobble@next% + \else% + \let\spalign@next=\spalign@parsetoks% + \fi% + \spalign@next% + } +\def\spalign@gobble@spaces{% + \futurelet\spalign@nexttok\spalign@check@space} +\def\spalign@append#1{% + \begingroup% + \toks255={#1}% + \xdef\spalign@settok{% + \spaligntoks={\the\spaligntoks\the\toks255}}% + \endgroup% + \spalign@settok% + } +\def\spalign@addcol{% + \expandafter\spalign@append\expandafter{\spalignaligntab}% + \advance\spalign@curcols by 1 % + } +\def\spalign@endrow{% + \advance\spalign@curcols by 1 % + \ifnum\spalign@curcols>\spalignmaxcols% + \spalignmaxcols=\spalign@curcols% + \fi% + \spalign@curcols=0% + \spalign@ignorespacestrue% + } +\def\spalign@normaltok{% + \ifspalign@saw@space% + \ifspalign@ignorespaces% + \else% + \spalign@addcol% + \fi% + \fi% + \spalign@ignorespacesfalse% + } +\def\spalign@parsetoks#1{% + \let\spalign@next=\spalign@gobble@spaces% + \def\spalign@arg{#1}% + \ifx\spalign@nexttok\bgroup% + \spalign@normaltok% + \ifx\spalign@arg\spalign@bgroup% + \spalign@append{#1}% + \else% + \spalign@append{{#1}}% + \fi% + \else% + \ifx\spalign@arg\spalignendofrow% + \expandafter\spalign@append\expandafter{\spalignendline}% + \spalign@endrow% + \else% + \ifx\spalign@arg\spalignseparator% + \spalign@addcol% + \spalign@ignorespacestrue% + \else% + \ifx\spalign@arg\spalign@end% + \let\spalign@next=\relax% + \spalign@endrow% + \else% + \spalign@normaltok% + \spalign@append{#1}% + \fi% + \fi% + \fi% + \fi% + \spalign@saw@spacefalse% + \spalign@next% + } +\def\spalign@process{% + \spaligntoks={}% + \spalignmaxcols=0% + \spalign@curcols=0% + \spalign@ignorespacestrue% + \spalign@saw@spacefalse% + \spalign@gobble@spaces% + } +\newif\ifspalign@star +\def\spalign@gobble@one#1{} + +\def\spalign@def@star#1{% + \def\spalign@cmd{#1}% + \edef\spalign@cmd@x{% + \csname\expandafter\spalign@gobble@one\string#1@x\endcsname}% + \edef\spalign@cmd@star{% + \csname\expandafter\spalign@gobble@one\string#1@star\endcsname}% + \expandafter\let\spalign@cmd@x=\relax + \expandafter\edef\spalign@cmd{% + \futurelet\noexpand\spalign@nexttok\spalign@cmd@x}% + \def\spalign@mkcmd##1{% + \expandafter\def\spalign@cmd@x{% + \ifx\spalign@nexttok*% + \spalign@startrue% + \let\spalign@next=\spalign@gobble@one% + \else% + \spalign@starfalse% + \def\spalign@next{}% + \fi% + \expandafter##1\spalign@next% + }% + }% + \expandafter\spalign@mkcmd\spalign@cmd@star% + \expandafter\def\spalign@cmd@star% + } +\newtoks\spaligntoks +\newcount\spalignmaxcols +\def\spalignrun#1#2{% + \begingroup% + \spalign@process#2\spalign@end% + %\showthe\spaligntoks% For debugging + #1% + \endgroup% + } +\def\spalignenv#1#2{% + \spalignrun{% + #1% + \the\spaligntoks% + #2% + }% + } +\def\spalignretokenize#1{% + \begingroup% + \spalign@process#1\spalign@end% + \expandafter\endgroup\the\spaligntoks% + } +\def\spaligntabular#1#2{% + \begin{tabular}{#1}\spalignretokenize{#2}\end{tabular}} +\def\spalign@maybedelim#1#2#3{% + \spalignenv% + {\ifspalign@star\else\left\spalign@leftdelim#3\fi#1}% + {#2\ifspalign@star\else#3\right\spalign@rightdelim\fi}% + } +\spalign@def@star\spalignarray#1{% + \spalign@maybedelim% + {\begin{array}{#1}}% + {\end{array}}% + {\hskip-\arraycolsep\spalignmatdelimskip}% + } +\spalign@def@star\spalignvector{} +\renewcommand\spalignvector@star[2][c]{% + \begingroup% + \def\spalignaligntab{\\}% + \spalign@maybedelim% + {\begin{array}{#1}}% + {\end{array}}% + {\hskip-\arraycolsep\spalignvecdelimskip}% + {#2}% + \endgroup% + } +\def\spalign@repeat#1#2{% + \begingroup% + \count255=0 % + \toks255={}% + \loop\ifnum\count255<#2% + \edef\spalign@settok{\toks255={\the\toks255 #1}}% + \spalign@settok% + \advance\count255 by 1 % + \repeat% + \xdef\spalign@repeated{\the\toks255}% + \endgroup + } +\spalign@def@star\spalignmat{} +\renewcommand\spalignmat@star[1][c]{% + \spalign@maybedelim{% + \spalign@repeat{#1}{\spalignmaxcols}% + \edef\spalign@barray{\noexpand\begin{array}{% + \spalign@repeated}}% + \spalign@barray% + }{\end{array}% + }{\hskip-\arraycolsep\spalignmatdelimskip}% + } +\spalign@def@star\spalignaugmatn{} +\renewcommand\spalignaugmatn@star[2][r]{% + \spalign@maybedelim{% + \advance\spalignmaxcols by -#2 % + \spalign@repeat{#1}{\spalignmaxcols}% + \let\spalign@repeated@one=\spalign@repeated% + \spalign@repeat{#1}{#2}% + \let\spalign@repeated@two=\spalign@repeated% + \edef\spalign@barray{\noexpand\begin{array}{% + \spalign@repeated@one|\spalign@repeated@two}}% + \spalign@barray% + }{\end{array}% + }{\hskip-\arraycolsep\spalignmatdelimskip}% + }% +\spalign@def@star\spalignaugmat{} +\renewcommand\spalignaugmat@star[1][r]{% + \spalignaugmatn@star[#1]{1}% + }% +\spalign@def@star\spalignaugmathalf{} +\renewcommand\spalignaugmathalf@star[1][r]{% + \spalign@maybedelim{% + \count255=\spalignmaxcols% + \divide\spalignmaxcols by 2 % + \advance\count255 by -\spalignmaxcols% + \spalign@repeat{#1}{\spalignmaxcols}% + \let\spalign@repeated@one=\spalign@repeated% + \spalignmaxcols=\count255% + \spalign@repeat{#1}{\spalignmaxcols}% + \let\spalign@repeated@two=\spalign@repeated% + \edef\spalign@barray{\noexpand\begin{array}{% + \spalign@repeated@one|\spalign@repeated@two}}% + \spalign@barray% + }{\end{array}% + }{\hskip-\arraycolsep\spalignmatdelimskip}% + }% +\spalign@def@star\spalignsys#1{% + \ifspalign@star\else% + \left\spalign@sysleftdelim\spalignsysdelimskip% + \fi% + \vcenter{% + \def\spalignendline{\cr}% + \openup1pt% + \tabskip=0pt% + \def\+{\mathbin{\phantom{+}}}% + \def\={\mathrel{\phantom{=}}}% + \def\.{}% + \halign{% + \tabskip=\spalignsystabspace% + &$\hfil##$&${}##{}$\cr% + \spalignretokenize{#1}\crcr% + }% + }\hskip-\spalignsystabspace% + \ifspalign@star\else% + \spalignsysdelimskip\right\spalign@sysrightdelim% + \fi% + } +\makeatother +\endinput +%% +%% End of file `spalign.sty'. |