%%% ====================================================================
%%%  @LaTeX-style-file{
%%%     author          = "Enrico Bertolazzi",
%%%     version         = "0.9",
%%%     date            = "16-MAR-99",
%%%     filename        = "easyvector.sty",
%%%     address         = "Laboratorio di Matematica Applicata
%%%                        e Meccanica Strutturale,
%%%                        Trento University,
%%%                        Via Mesiano, Trento, Italy",
%%%     FAX             = "+39 (461) 882599",
%%%     email           = "enrico.bertolazzi@ing.unitn.it (Internet)",
%%%     supported       = "yes. Please send comments via E-mail",
%%%     docstring       = "package for easy typing of vectors 
%%%                        matrices.
%%%
%%% INSTALLATION:
%%%   Put this file where your TeX looks for inputs.
%%%
%%% DOCUMENTATION:
%%%   Compile docvector.tex.
%%%
%%%   Copyright  1999 Enrico Bertolazzi
%%%
%%%   This program can be redistributed and/or modified under the terms
%%%   of the LaTeX Project Public License Distributed from CTAN
%%%   archives in directory macros/latex/base/lppl.txt; either
%%%   version 1 of the License, or any later version.
%%%
%%% }
%%% v 0.1
%%% v 0.2 15-MAY-96 added \newvector()[] command
%%% v 0.3 27-JULY-96 now \newvector[X,Y]{Z} accept commands for X, Y
%%% v 0.4-0.6 15-SEPT-96 make the commands more roboust and efficient
%%% v 0.7 22-OCT-97 fixed an error in the warning message
%%% v 0.8 28-OCT-97 fixed an incompatibility with easyeqn
%%% v 0.9 11-NOV-97 added @ command
%%% v 1.0 16-MAR-99 changed copyright
%%% ====================================================================%%%
%%%       ___    ____  ___   _   _         ___    ____  ___   _   _     %%%
%%%      /   \  /     /   \  \  /         /   \  /     /   \  \  /      %%%
%%%     /____/ /__   /____/   \/         /____/ /__   /____/   \/       %%%
%%%    /   \  /     /  \      /         /   \  /     /  \      /        %%%
%%%   /____/ /____ /    \    /         /____/ /____ /    \    /         %%%
%%% ====================================================================%%%
\def\filedate{1999/03/16}
\def\fileversion{v1.0}
\typeout{Document Style `easyvector'  \fileversion\space<\filedate>.}
%% BEGIN easyvector.sty
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{easyvector}[\filedate\space\fileversion]

\catcode`\ =9\endlinechar=-1

\let\@VET@separator=,
\let\@VET@dot@symbol=\bullet
\newcount\@VET@bracecnt

\begingroup
   \makeatother
   \let\tmp=@
   \makeatletter
   \global\let\@VET@at\tmp
\endgroup

\let\@VET@bold\mathbf
\let\@VET@nobold\mathit

\def\newvector{\@ifnextchar(\@newvector\@@newvector}
\def\@newvector(#1)[#2]{\@@newvector[\@VET@nobold{#1},\@VET@bold{#1}]{#2}}
\def\@@newvector[#1,#2]#3{\@@@newvector[#1,#2]{#3}\@VET@parse@start{}}
\def\@@@newvector[#1,#2]#3#4#5{%
   \@ifundefined{#3}{%
      \edef\@tempb{%
          \noexpand\DeclareRobustCommand{\csname#3\endcsname}{%
          \noexpand\gdef\noexpand\@VET@indices{%
              \noexpand\if@VET@scal\noexpand#1
              \noexpand\else\noexpand#2\noexpand\fi}
          \noexpand#4\noexpand#5}}
      \@tempb
      }{%
      \PackageWarningNoLine{`easyvector'}%
      {Command\space\@backslashchar\expandafter\string#3\space already\space defined}}}

\def\newvectora#1#2{\@@newvector[#1,#1]{#2}}

\def\newcustomvector[#1,#2]#3#4{\@@@newvector[#1,#2]{#3}\@VET@parse@custom{#4}}

\def\@VET@addtoindices#1{%
{\toks@\expandafter{\@VET@indices#1}\xdef\@VET@indices{\the\toks@}}}

\def\@VET@parse@custom#1{%
   \@ifnextchar[{\let\if@VET@scal\iftrue\@VET@indices#1}
                {\let\if@VET@scal\iffalse\@VET@indices}}
  
\def\@VET@parse@start{%
    \global\let\if@VET@scal\iffalse%
    \@ifnextchar!{\@VET@test}{%
        \@ifnextchar[{\global\let\if@VET@scal\iftrue\@VET@parsea}{\@VET@indices}}}

\def\@VET@test#1{\@ifnextchar[\@VET@parsea{\@VET@indices#1}}

\def\@VET@parsea{\global\@VET@bracecnt\@ne\@VET@parseb}
\def\@VET@parseb{\futurelet\@tempb\@VET@parsec}
\def\@VET@parsec{%
    \let\next\@VET@eat%
    \ifx[\@tempb\let\next\@VET@open\else%
    \ifx]\@tempb\let\next\@VET@close\else%
    \ifx\bgroup\@tempb\let\next\@VET@bgroup\else%
    \ifnum\@VET@bracecnt=\tw@% can be morecommand
       \ifx ,\@tempb\let\next\@VET@sep\else%
       \ifx ;\@tempb\let\next\@VET@up\else%
       \ifx\@VET@at\@tempb\let\next\@VET@dot\else%
       \fi\fi\fi%
    \fi%
    \fi\fi\fi%
    \next}%
%
\def\@VET@open#1{%
     \ifnum\@VET@bracecnt=\@ne\@VET@addtoindices{_\bgroup}%
     \else\@VET@addtoindices[\fi%
     \global\advance\@VET@bracecnt\@ne\@VET@parseb}%
%
\def\@VET@close#1{%
      \global\advance\@VET@bracecnt\m@ne%
      \ifnum\@VET@bracecnt=\@ne%
         \@VET@addtoindices\egroup\expandafter\@VET@indices%
      \else%
         \@VET@addtoindices]\expandafter\@VET@parseb%
      \fi}%
%
\def\@VET@sep#1{\@VET@eat\@VET@separator}%
\def\@VET@up#1{\@VET@eat{\egroup^\bgroup}}%
\def\@VET@bgroup#1{\@VET@eat{\bgroup#1\egroup}}
\def\@VET@eat#1{\@VET@addtoindices{#1}\futurelet\@tempb\@VET@parsec}
\def\@VET@dot#1{\global\let\if@VET@scal\iffalse\@VET@eat\@VET@dot@symbol}
%

\DeclareOption{boldcm}{%
  \let\@VET@bold\relax
  \let\@VET@nobold\relax
  \DeclareMathAlphabet{\@VET@bold}{OML}{cmm} {b}{it}
  \DeclareMathAlphabet{\@VET@nobold}{OML}{cmm}{m}{it}
}

\DeclareOption{boldcc}{%
%   \RequirePackage{concmath}
  \let\@VET@bold\relax
  \let\@VET@nobold\relax
  \DeclareMathAlphabet{\@VET@bold}{OT1}{ccr}{bx}{it}
  \DeclareMathAlphabet{\@VET@nobold}{OT1}{ccr}{m}{it}
}

\DeclareOption{definevectors}{%

  \global\let\oldaa=\aa \let\aa=\relax%
  \global\let\oldAA=\AA \let\AA=\relax%
  \global\let\oldgg=\gg \let\gg=\relax%
  \global\let\oldll=\ll \let\ll=\relax%
  \global\let\oldaa=\ss \let\ss=\relax%
  \global\let\oldaa=\SS \let\SS=\relax%
  \global\let\oldaa=\tt \let\tt=\relax%
  
  \@tfor\lettera:=ABCDEFGHIJKLMNOPQRSTUVWXYZ%
     \do { \newvector(\lettera)[\lettera\lettera] }

  \@tfor\lettera:=abcdefghijklmnopqrstuvwxyz%
     \do { \newvector(\lettera)[\lettera\lettera] }

  \DeclareSymbolFont{boperators}{OT1}{cmr}{bx}{it}
  \DeclareSymbolFont{bsymbols}{OML}{cmr}{bx}{it}

  \def\@VET@def@symbol#1#2{%
       \expandafter\DeclareMathSymbol\csname B@#1\endcsname\mathord{bsymbols}{#2}
       \newvector[\csname#1\endcsname,\csname B@#1\endcsname]{B#1}
  }

  \@VET@def@symbol{alpha}{"0B}
  \@VET@def@symbol{beta}{"0C}
  \@VET@def@symbol{gamma}{"0D}
  \@VET@def@symbol{delta}{"0E}
  \@VET@def@symbol{epsilon}{"0F}
  \@VET@def@symbol{zeta}{"10}
  \@VET@def@symbol{eta}{"11}
  \@VET@def@symbol{theta}{"12}
  \@VET@def@symbol{iota}{"13}
  \@VET@def@symbol{kappa}{"14}
  \@VET@def@symbol{lambda}{"15}
  \@VET@def@symbol{mu}{"16}
  \@VET@def@symbol{nu}{"17}
  \@VET@def@symbol{xi}{"18}
  \@VET@def@symbol{pi}{"19}
  \@VET@def@symbol{rho}{"1A}
  \@VET@def@symbol{sigma}{"1B}
  \@VET@def@symbol{tau}{"1C}
  \@VET@def@symbol{upsilon}{"1D}
  \@VET@def@symbol{phi}{"1E}
  \@VET@def@symbol{chi}{"1F}
  \@VET@def@symbol{psi}{"20}
  \@VET@def@symbol{omega}{"21}
  \@VET@def@symbol{varepsilon}{"22}
  \@VET@def@symbol{vartheta}{"23}
  \@VET@def@symbol{varpi}{"24}
  \@VET@def@symbol{varrho}{"25}
  \@VET@def@symbol{varsigma}{"26}
  \@VET@def@symbol{varphi}{"27}

  \def\@VET@def@symbol#1#2{
      \expandafter\DeclareMathSymbol\csname B@#1\endcsname\mathalpha{boperators}{#2}
      \newvector[\csname#1\endcsname,\csname B@#1\endcsname]{B#1}
  }

  \@VET@def@symbol{Gamma}{"00}
  \@VET@def@symbol{Delta}{"01}
  \@VET@def@symbol{Theta}{"02}
  \@VET@def@symbol{Lambda}{"03}
  \@VET@def@symbol{Xi}{"04}
  \@VET@def@symbol{Pi}{"05}
  \@VET@def@symbol{Sigma}{"06}
  \@VET@def@symbol{Upsilon}{"07}
  \@VET@def@symbol{Phi}{"08}
  \@VET@def@symbol{Psi}{"09}
  \@VET@def@symbol{Omega}{"0A}
  
  \let\@VET@def@symbol=\relax
}

\DeclareOption{spacesep}{\global\let\@VET@separator=\smallskip}
\ProcessOptions

\catcode`\ =10\endlinechar=`\^^M
\endinput

%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%