summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/easy
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/easy
Initial commit
Diffstat (limited to 'macros/latex/contrib/easy')
-rw-r--r--macros/latex/contrib/easy/README61
-rw-r--r--macros/latex/contrib/easy/doc/docbib.pdfbin0 -> 82589 bytes
-rw-r--r--macros/latex/contrib/easy/doc/docbmat.pdfbin0 -> 78378 bytes
-rw-r--r--macros/latex/contrib/easy/doc/doceqn.pdfbin0 -> 99132 bytes
-rw-r--r--macros/latex/contrib/easy/doc/docmat.pdfbin0 -> 77741 bytes
-rw-r--r--macros/latex/contrib/easy/doc/doctable.pdfbin0 -> 38773 bytes
-rw-r--r--macros/latex/contrib/easy/doc/docvector.pdfbin0 -> 64893 bytes
-rw-r--r--macros/latex/contrib/easy/easy.sty653
-rw-r--r--macros/latex/contrib/easy/easybib.sty168
-rw-r--r--macros/latex/contrib/easy/easybmat.sty152
-rw-r--r--macros/latex/contrib/easy/easyeqn.sty426
-rw-r--r--macros/latex/contrib/easy/easymat.sty179
-rw-r--r--macros/latex/contrib/easy/easytable.sty150
-rw-r--r--macros/latex/contrib/easy/easyvector.sty236
-rwxr-xr-xmacros/latex/contrib/easy/for-latex2html/easybib.perl75
-rwxr-xr-xmacros/latex/contrib/easy/for-latex2html/easybmat.perl46
-rwxr-xr-xmacros/latex/contrib/easy/for-latex2html/easyeqn.perl333
-rwxr-xr-xmacros/latex/contrib/easy/for-latex2html/easymat.perl46
-rwxr-xr-xmacros/latex/contrib/easy/for-latex2html/easytable.perl46
-rwxr-xr-xmacros/latex/contrib/easy/for-latex2html/easyvector.perl65
-rw-r--r--macros/latex/contrib/easy/mydoc.sty21
21 files changed, 2657 insertions, 0 deletions
diff --git a/macros/latex/contrib/easy/README b/macros/latex/contrib/easy/README
new file mode 100644
index 0000000000..48e0b90779
--- /dev/null
+++ b/macros/latex/contrib/easy/README
@@ -0,0 +1,61 @@
+# the easy family macros
+# Copyright 1999 - Enrico Bertolazzi
+
+The following files are enclosed.
+
+ README - This file
+ *.sty - the style files
+ doc.html/ - doumentation in html format
+ doc.dvi/ - doumentation in dvi format
+ doc.ps/ - doumentation in postscript format
+ perl/ - support for latex2html
+
+The style file files are the following:
+
+easy.sty
+easyeqn.sty
+easybmat.sty
+easymat.sty
+easytable.sty
+easyvector.sty
+easybib.sty
+
+* easy.sty is a file which contains common definitions for all the packages.
+ It is included from the others style files.
+
+* easyeqn.sty introduces some equation environments that simplify writing
+ of equations. It uses a syntax similar to the array environment to
+ define the column alignment. The label field is fully customizable. A
+ package option permits to number only those equations that were ``labeled
+ and referenced''. Some additional macros are also included to facilitate
+ typing of formulae.
+
+* easymat.sty and easybmat.sty are useful for writing block matrices, with
+ equal column widths or equal rows heights or both, with various kinds of
+ rules~(lines) between rows and columns. It uses an array/tabular-like
+ syntax.
+
+* easytable.sty is a macro package for writing tables, with equal column
+ widths or equal rows heights or both, with various kinds of rules~(lines)
+ between rows and columns. It uses an array/tabular-like syntax.
+
+* easyvector.sty is a simple macro package that provides a C-like syntax
+ for writing vectors or matrices.
+
+* easybib.sty introduces some new items for easy customization of the
+ bibliography.
+
+The support for latex2html contained in the perl/ directory is in an early
+stage and is quite complete only for easyeqn package.
+
+____________________________________________________________________________
+Enrico Bertolazzi
+Dipartimento di Ingegneria Meccanica e Strutturale
+Universitý degli Studi di Trento
+Via Mesiano 77 Tel: +39-461-882589/90
+I-38050 Trento Fax: +39-461-882599
+Italy mailto:enrico.bertolazzi@ing.unitn.it
+____________________________________________________________________________
+
+P.S. if you are an happy user of one of these macros I will appreciate
+a postcard with a photo of your city.
diff --git a/macros/latex/contrib/easy/doc/docbib.pdf b/macros/latex/contrib/easy/doc/docbib.pdf
new file mode 100644
index 0000000000..8dbdb837ff
--- /dev/null
+++ b/macros/latex/contrib/easy/doc/docbib.pdf
Binary files differ
diff --git a/macros/latex/contrib/easy/doc/docbmat.pdf b/macros/latex/contrib/easy/doc/docbmat.pdf
new file mode 100644
index 0000000000..e24e584132
--- /dev/null
+++ b/macros/latex/contrib/easy/doc/docbmat.pdf
Binary files differ
diff --git a/macros/latex/contrib/easy/doc/doceqn.pdf b/macros/latex/contrib/easy/doc/doceqn.pdf
new file mode 100644
index 0000000000..15dd93054b
--- /dev/null
+++ b/macros/latex/contrib/easy/doc/doceqn.pdf
Binary files differ
diff --git a/macros/latex/contrib/easy/doc/docmat.pdf b/macros/latex/contrib/easy/doc/docmat.pdf
new file mode 100644
index 0000000000..9fdbc9a4af
--- /dev/null
+++ b/macros/latex/contrib/easy/doc/docmat.pdf
Binary files differ
diff --git a/macros/latex/contrib/easy/doc/doctable.pdf b/macros/latex/contrib/easy/doc/doctable.pdf
new file mode 100644
index 0000000000..696bffe7ad
--- /dev/null
+++ b/macros/latex/contrib/easy/doc/doctable.pdf
Binary files differ
diff --git a/macros/latex/contrib/easy/doc/docvector.pdf b/macros/latex/contrib/easy/doc/docvector.pdf
new file mode 100644
index 0000000000..2d1c3772b0
--- /dev/null
+++ b/macros/latex/contrib/easy/doc/docvector.pdf
Binary files differ
diff --git a/macros/latex/contrib/easy/easy.sty b/macros/latex/contrib/easy/easy.sty
new file mode 100644
index 0000000000..af00522312
--- /dev/null
+++ b/macros/latex/contrib/easy/easy.sty
@@ -0,0 +1,653 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Enrico Bertolazzi",
+%%% version = "1.1",
+%%% date = "31-MAY-2001",
+%%% filename = "easy.sty",
+%%% address = "Dipartimento di Ingeneria Meccanica e Strutturale,
+%%% Trento University,
+%%% Via Mesiano 77, Trento, Italy",
+%%% FAX = "+39 (461) 882599",
+%%% email = "enrico.bertolazzi@ing.unitn.it (Internet)",
+%%% supported = "yes. Please send comments via E-mail",
+%%%
+%%% ====================================================================
+%%%
+%%% INSTALLATION:
+%%% Put this file where your TeX looks for inputs.
+%%%
+%%% DOCUMENTATION:
+%%% no documentation
+%%%
+%%% 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.
+%%%
+%%% }
+%%% ====================================================================%%%
+%%% ___ ____ ___ _ _ ___ ____ ___ _ _ %%%
+%%% / \ / / \ \ / / \ / / \ \ / %%%
+%%% /____/ /__ /____/ \/ /____/ /__ /____/ \/ %%%
+%%% / \ / / \ / / \ / / \ / %%%
+%%% /____/ /____ / \ / /____/ /____ / \ / %%%
+%%% ====================================================================%%%
+%%%
+%%% v1.0 30-AUG-1999
+%%% v1.1 31-MAY-2001 changed \@roman with \romannumeral (thanks to Claudio Beccari)
+%%% added \easydashlen \easydashsep
+
+\def\filedate{2001/05/31}
+\def\fileversion{v1.1}
+\typeout{Document Style `easy' \fileversion\space<\filedate>.}
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{easy}[\filedate\space\fileversion]
+
+\def\@easy@disable@space{\catcode`\ =9\endlinechar=-1}
+\def\@easy@enable@space{\catcode`\ =10\endlinechar=`\^^M}
+
+\@easy@disable@space
+
+\newcount\@easy@level\@easy@level=\z@\relax
+\newcount\@easy@ncol
+\newcount\@easy@nrow
+\newcount\@easy@cnt
+
+%
+% define boxes for internal computation.
+%
+\@tempcnta=8\relax
+\@whilenum\@tempcnta>\z@\do{
+ \expandafter\global\expandafter\newbox\csname @easy@box\romannumeral\@tempcnta\endcsname
+ \expandafter\global\expandafter\newdimen\csname @easy@minx\romannumeral\@tempcnta\endcsname
+ \expandafter\global\expandafter\newdimen\csname @easy@miny\romannumeral\@tempcnta\endcsname
+ \expandafter\global\expandafter\newdimen\csname @easy@maxx\romannumeral\@tempcnta\endcsname
+ \expandafter\global\expandafter\newdimen\csname @easy@maxy\romannumeral\@tempcnta\endcsname
+ \advance\@tempcnta by\m@ne
+}
+%
+% define dimens for internal computation.
+%
+\@tempcnta=30\relax
+\@whilenum\@tempcnta>\z@\do{%
+ \expandafter\global\expandafter\newdimen\csname @easy@hsize\romannumeral\@tempcnta\endcsname%
+ \expandafter\global\expandafter\newdimen\csname @easy@vsize\romannumeral\@tempcnta\endcsname%
+ \advance\@tempcnta by\m@ne
+}
+
+\def\@easy@ifnextchar#1#2#3{%
+ \let\reserved@d=#1%
+ \def\reserved@a{#2}
+ \def\reserved@b{#3}%
+ \futurelet\@let@token\@easy@ifnch}
+\def\@easy@ifnch{%
+ \ifx\@let@token\reserved@d
+ \let\reserved@c\reserved@a
+ \else
+ \let\reserved@c\reserved@b
+ \fi
+ \reserved@c}
+
+\def\@easy@edef(#1)#2{\expandafter\edef\csname#1\endcsname{#2}}
+\def\@easy@xdef(#1)#2{\expandafter\xdef\csname#1\endcsname{#2}}
+\def\@easy@gdef(#1)#2{\expandafter\gdef\csname#1\endcsname{#2}}
+\def\@easy@def(#1)#2{\expandafter\def\csname#1\endcsname{#2}}
+
+\def\@easy@let(#1)#2{%
+ \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}
+\def\@easy@glet(#1)#2{%
+ \expandafter\global\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}
+
+% \@easy@rotate{\macro}
+% rotate the contens of a macro, for example:
+%
+% \def\macro{abc}
+% \@easy@rotate{\macro}
+%
+% now macro contains {bca}
+\def\@easy@rotate@#1#2\end{#2#1}%
+\def\@easy@rotate#1{\xdef#1{\expandafter\@easy@rotate@#1\end}}%
+
+% \@easy@firstchar{string}
+% get the first character of a string.
+% If the string is empty return `-'
+\def\@easy@firstchar@#1#2\end{#1}%
+\def\@easy@firstchar#1{\expandafter\@easy@firstchar@#1-\end}%
+
+\def\@easy@parse@cols#1{%
+ \gdef\@easy@list@align{lrc}%
+ \global\let\@easy@rules\@empty%
+ \global\let\@easy@align\@empty%
+ \expandafter\@easy@parsea#1\end%
+ \@easy@xdef(@easy@col@align\romannumeral\@easy@level){`\@easy@align}%
+ \@easy@xdef(@easy@col@rules\romannumeral\@easy@level){`\@easy@rules}%
+}
+
+\def\@easy@parse@rows#1{%
+ \gdef\@easy@list@align{tbc}%
+ \global\let\@easy@rules\@empty%
+ \global\let\@easy@align\@empty%
+ \expandafter\@easy@parsea#1\end%
+ \@easy@xdef(@easy@row@align\romannumeral\@easy@level){`\@easy@align}%
+ \@easy@xdef(@easy@row@rules\romannumeral\@easy@level){`\@easy@rules}%
+}
+
+% \@easy@list@align{string}
+% Parse a string with alignement definitions and separate
+% rules definition.
+% \@easy@list@align muist contains the possible alignments.
+% the rules coding is fixed as:
+% @ => no rule
+% . => dotted rule
+% ; => dot-dash rule
+% : => dased rule
+% | => solid rule
+% 0123456789 => solid rule 0 => thin 9 => thick
+%
+% The output are
+% \@easy@align: which will contain alignement string
+% \@easy@rules: which will contain rule definition string
+%
+% for example
+% \def\@easy@list@align{rcl}
+% \@easy@list@align{|r;cl}
+% results in
+% \@easy@align => rcl
+% \@easy@rules => |;@@
+%
+\def\@easy@parsea{\futurelet\@tempb\@easy@parseb}
+\def\@easy@parseb{%parse column separator
+ \def\next{\xdef\@easy@rules{@\@easy@rules}\@easy@parsec}%
+ \@tfor\@tempa:=@.;:|0123456789\do{%
+ \expandafter\ifx\expandafter\@tempb\@tempa%
+ \xdef\@easy@rules{\@tempa\@easy@rules}
+ \def\next##1{\@easy@parsec}%
+ \@break@tfor%
+ \fi%
+ }
+ \next}
+
+\def\@easy@parsec{\futurelet\@tempb\@easy@parsed}
+\def\@easy@parsed{% parse column alignment
+ \def\next{\@easy@parse@error}%
+ \ifx\@tempb\end%
+ \def\next##1{}% eat end
+ \else
+ \expandafter\@tfor\expandafter\@tempa\expandafter:\expandafter=\@easy@list@align\do{%
+ \expandafter\ifx\expandafter\@tempb\@tempa%
+ \xdef\@easy@align{\@tempa\@easy@align}%
+ \def\next##1{\@easy@parsea}%
+ \@break@tfor%
+ \fi%
+ }
+ \fi%
+ \next}
+
+\@easy@enable@space
+\def\@easy@parse@error{%
+\PackageWarningNoLine{`easy'}%
+{unrecognized command \meaning\@tempb \space on line \the\inputlineno}}
+\@easy@disable@space
+
+\newdimen\@easy@dash@len \@easy@dash@len=5pt\relax
+\newdimen\@easy@dash@sep \@easy@dash@sep=2pt\relax
+
+\def\easydashlen#1{\@easy@dash@len=#1\relax}
+\def\easydashsep#1{\@easy@dash@sep=#1\relax}
+
+% \@easy@h@dash{height}{width}{sep}
+% +----+ |
+% #1 | | |
+% +----+ |
+% #2 #3
+% \@easy@v@dash{width}{height}{sep}
+% #1
+% +----+
+% #2 | |
+% +----+
+% #3
+% -----
+\def\@easy@h@dash#1#2#3{\hbox{\vrule\@width#2\@height#1\@depth\z@\kern#3}}
+\def\@easy@v@dash#1#2#3{\vbox{\hrule\@width#1\@height#2\@depth\z@\kern#3}}
+% \@easy@h@dashes{totalwidth}{height}{sep1}{width}{sep2}
+% |-------- totalwidth --------- |
+% +---+ +----------+ |
+% height | | | | |
+% +---+ +----------+ |
+% height sep1 width sep2
+%
+\def\@easy@h@dashes#1#2#3#4#5{%
+ \setbox\@tempboxa\hbox{}%
+ \@tempdima=#1\relax%
+ \@tempcnta=\@ne%
+ \loop\advance\@tempcnta by\@ne%
+ \ifodd\@tempcnta\setbox0\@easy@h@dash{#2}{#2}{#3}\else\setbox0\@easy@h@dash{#2}{#4}{#5}\fi%
+ \@tempdimb=\wd\@tempboxa\relax\advance\@tempdimb by\wd0\relax
+ \ifdim\@tempdimb<\@tempdima\relax%
+ \setbox\@tempboxa\hbox{\unhbox\@tempboxa\unhbox0}%
+ \repeat%
+ \advance\@tempdima by -\wd\@tempboxa\relax%
+ \@tempdimb=\ht\@tempboxa\relax%
+ \hbox{\unhbox\@tempboxa\vrule\@width\@tempdima\@height\@tempdimb\@depth\z@}
+}
+\def\@easy@v@dashes#1#2#3#4#5{%
+ \setbox\@tempboxa\vbox{}%
+ \@tempdima=#1\relax%
+ \@tempcnta=\@ne%
+ \loop\advance\@tempcnta by\@ne%
+ \ifodd\@tempcnta\setbox0\@easy@v@dash{#2}{#2}{#3}\else\setbox0\@easy@v@dash{#2}{#4}{#5}\fi%
+ \@tempdimb=\ht\@tempboxa\relax\advance\@tempdimb by\ht0\relax%
+ \ifdim\@tempdimb<\@tempdima\relax%
+ \setbox\@tempboxa\vbox{\unvbox\@tempboxa\unvbox0}%
+ \repeat%
+ \advance\@tempdima by -\ht\@tempboxa\relax%
+ \@tempdimb=\wd\@tempboxa\relax%
+ \vbox{\unvbox\@tempboxa\hrule\@width\@tempdimb\@height\@tempdima\@depth\z@}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@easy@hdots(#1,#2){\@easy@h@dashes{#1}{#2}\@easy@dash@sep\z@\z@}
+\def\@easy@vdots(#1,#2){\@easy@v@dashes{#1}{#2}\@easy@dash@sep\z@\z@}
+
+\def\@easy@hdashes(#1,#2){\@easy@h@dashes{#1}{#2}\z@\@easy@dash@len\@easy@dash@sep}
+\def\@easy@vdashes(#1,#2){\@easy@v@dashes{#1}{#2}\z@\@easy@dash@len\@easy@dash@sep}
+
+\def\@easy@hdotdash(#1,#2){\@easy@h@dashes{#1}{#2}\@easy@dash@sep\@easy@dash@len\@easy@dash@sep}
+\def\@easy@vdotdash(#1,#2){\@easy@v@dashes{#1}{#2}\@easy@dash@sep\@easy@dash@len\@easy@dash@sep}
+
+\def\@easy@hrule(#1,#2){\hbox{\vrule\@width#1\@height#2\@depth\z@}}
+\def\@easy@vrule(#1,#2){\vbox{\hrule\@width#2\@height#1\@depth\z@}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@easy@h@draw#1#2{%
+ \expandafter\ifx#1.\@easy@hdots(#2,\@easy@size@dash)\else%
+ \expandafter\ifx#1;\@easy@hdotdash(#2,\@easy@size@dash)\else%
+ \expandafter\ifx#1:\@easy@hdashes(#2,\@easy@size@dash)\else%
+ \expandafter\ifx#1|\@easy@hrule(#2,\@easy@size@rule)\else%
+ \expandafter\ifx#1-\@easy@hrule(#2,\@easy@size@rule)\else%
+ \expandafter\ifx#1@\else%
+ \@easy@set@size{#1}
+ \@easy@hrule(#2,\@tempdima)%
+ \fi\fi\fi\fi\fi\fi%
+}
+
+\def\@easy@v@draw#1#2{%
+ \expandafter\ifx#1.\@easy@vdots(#2,\@easy@size@dash)\else%
+ \expandafter\ifx#1;\@easy@vdotdash(#2,\@easy@size@dash)\else%
+ \expandafter\ifx#1:\@easy@vdashes(#2,\@easy@size@dash)\else%
+ \expandafter\ifx#1|\@easy@vrule(#2,\@easy@size@rule)\else%
+ \expandafter\ifx#1@\else
+ \@easy@set@size{#1}
+ \@easy@vrule(#2,\@tempdima)%
+ \fi\fi\fi\fi\fi%
+}
+
+\def\@easy@set@size#1{
+ \@tempdima=\@easy@size@rule\relax
+ \ifcase\number#1
+ \divide\@tempdima5
+ \or\divide\@tempdima4
+ \or\divide\@tempdima3
+ \or\divide\@tempdima2
+ \or\divide\@tempdima1
+ \or\multiply\@tempdima2
+ \or\multiply\@tempdima3
+ \or\multiply\@tempdima4
+ \or\multiply\@tempdima5
+ \or\multiply\@tempdima6
+ \fi
+}
+
+\def\@easy@kern@size#1{%
+ \expandafter\ifx#1.\@tempdima=\@easy@size@dash\else%
+ \expandafter\ifx#1;\@tempdima=\@easy@size@dash\else%
+ \expandafter\ifx#1:\@tempdima=\@easy@size@dash\else%
+ \expandafter\ifx#1|\@tempdima=\@easy@size@rule\else%
+ \expandafter\ifx#1-\@tempdima=\@easy@size@rule\else%
+ \expandafter\ifx#1@\@tempdima=\z@\else\@easy@set@size{#1}%
+ \fi\fi\fi\fi\fi\fi%
+}
+
+\def\@easy@kern#1{\@easy@kern@size{#1}\kern\@tempdima}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \@easy@hbox[halign,valign,width,heigth,sep,content]
+%
+\def\@easy@hbox[#1,#2,#3,#4,#5,#6]{%
+ \hbox{\vbox to#4{\expandafter\ifx#2t\else\vss\fi%
+ \kern#5\hbox to#3{%
+ \expandafter\ifx#1l\else\hss\fi%
+ \kern#5\vphantom{\copy#6}\unhbox#6\kern#5%
+ \expandafter\ifx#1r\else\hss\fi}%
+ \kern#5\expandafter\ifx#2b\else\vss\fi}}}
+%
+% evaluate dimensions of box of boxes, it return
+% \@easy@vsize max heigth + \@easy@spread
+% \@easy@hsize max width + \@easy@spread
+%
+\def\@easy@evaldim{%
+ \@tempcnta=30\relax
+ \@whilenum\@tempcnta>\z@\do{%
+ \global\@nameuse{@easy@hsize\romannumeral\@tempcnta}=\z@%
+ \global\@nameuse{@easy@vsize\romannumeral\@tempcnta}=\z@%
+ \advance\@tempcnta by \m@ne}%
+ \setbox0\vbox{%
+ \unvcopy\@easy@mainbox%
+ \global\@easy@nrow=\z@%
+ \loop%
+ \unskip\global\setbox\@ne\lastbox%
+ \ifhbox\@ne%
+ \global\advance\@easy@nrow\@ne%%%%
+ \global\@easy@ncol=\z@
+ \@tempdima\dp\@ne\relax
+ \advance\@tempdima\ht\@ne\relax
+ \advance\@tempdima\@easy@spread\relax
+ \advance\@tempdima\@easy@spread\relax
+ \global\@nameuse{@easy@vsize\romannumeral\@easy@nrow}=\@tempdima%
+ \setbox0=\hbox{%
+ \unhbox\@ne%
+ \loop%
+ \unskip\global\setbox\tw@=\lastbox%
+ \ifhbox\tw@%
+ \global\advance\@easy@ncol\@ne%%%%
+ \@tempdima\wd\tw@\relax
+ \advance\@tempdima\@easy@spread\relax
+ \advance\@tempdima\@easy@spread\relax
+ \ifdim\@tempdima>\@nameuse{@easy@hsize\romannumeral\@easy@ncol}\relax
+ \global\@nameuse{@easy@hsize\romannumeral\@easy@ncol}=\@tempdima%
+ \fi%
+ \repeat%
+ }%
+ \repeat%
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@easy@loop@cols#1{\@tempcnta=\@easy@ncol\relax%
+\@whilenum\@tempcnta>\z@\do{#1\advance\@tempcnta by\m@ne}}
+
+\def\@easy@loop@rows#1{\@tempcnta=\@easy@nrow\relax%
+\@whilenum\@tempcnta>\z@\do{#1\advance\@tempcnta by\m@ne}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@easy@balance@cols#1{%
+ \@tempdima=#1\relax%
+ \@easy@loop@cols{\@tempdimb=\@nameuse{@easy@hsize\romannumeral\@tempcnta}\relax
+ \ifdim\@tempdima<\@tempdimb\relax\@tempdima=\@tempdimb\fi}
+ \@easy@loop@cols{\global\@nameuse{@easy@hsize\romannumeral\@tempcnta}=\@tempdima\relax}
+}
+
+\def\@easy@balance@rows#1{%
+ \@tempdima=#1\relax%
+ \@easy@loop@rows{\@tempdimb=\@nameuse{@easy@vsize\romannumeral\@tempcnta}\relax
+ \ifdim\@tempdima<\@tempdimb\relax\@tempdima=\@tempdimb\fi}
+ \@easy@loop@rows{\global\@nameuse{@easy@vsize\romannumeral\@tempcnta}=\@tempdima\relax}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@easy@balance@equalize#1{%
+ \@tempdima=#1\relax%
+ \@easy@loop@cols{\@tempdimb=\@nameuse{@easy@hsize\romannumeral\@tempcnta}\relax%
+ \ifdim\@tempdima<\@tempdimb\relax\@tempdima=\@tempdimb\fi}
+ \@easy@loop@rows{\@tempdimb=\@nameuse{@easy@vsize\romannumeral\@tempcnta}\relax%
+ \ifdim\@tempdima<\@tempdimb\relax\@tempdima=\@tempdimb\fi}
+ \@easy@loop@cols{\global\@nameuse{@easy@hsize\romannumeral\@tempcnta}=\@tempdima\relax}
+ \@easy@loop@rows{\global\@nameuse{@easy@vsize\romannumeral\@tempcnta}=\@tempdima\relax}
+}
+
+\def\@easy@balance@row@col{%
+ \expandafter\ifx\@easy@balance c\@easy@balance@cols{\@easy@minx}\else%
+ \expandafter\ifx\@easy@balance r\@easy@balance@rows{\@easy@miny}\else%
+ \expandafter\ifx\@easy@balance b\@easy@balance@cols{\@easy@minx}\@easy@balance@rows{\@easy@miny}\else%
+ \expandafter\ifx\@easy@balance e\@easy@balance@equalize{\@easy@minx}%
+ \else% no balancing
+ \@tempdima=\@easy@minx\relax
+ \@tempdimb=\@easy@miny\relax
+ \@easy@loop@cols{\ifdim\@tempdima>\@nameuse{@easy@hsize\romannumeral\@tempcnta}%
+ \global\@nameuse{@easy@hsize\romannumeral\@tempcnta}=\@tempdima\fi}
+ \@easy@loop@rows{\ifdim\@tempdimb>\@nameuse{@easy@vsize\romannumeral\@tempcnta}%
+ \global\@nameuse{@easy@vsize\romannumeral\@tempcnta}=\@tempdimb\fi}
+ \fi\fi\fi\fi%
+%
+ \ifdim\@easy@maxx>\z@
+ \@tempdimc=\@easy@maxx\relax
+ \loop
+ \@easy@rotate\@easy@col@rules%
+ \edef\@tempc{\@easy@firstchar\@easy@col@rules}%
+ \expandafter\ifx\@tempc`\else
+ \@easy@kern@size\@tempc
+ \advance\@tempdimc by -\@tempdima\relax
+ \repeat
+ \@easy@loop@cols{\advance\@tempdimc by -\@nameuse{@easy@hsize\romannumeral\@tempcnta}\relax}
+ \divide\@tempdimc by\@easy@ncol\relax
+ \ifdim\@tempdimc>\z@
+ \@easy@loop@cols{\global\advance\@nameuse{@easy@hsize\romannumeral\@tempcnta} by \@tempdimc\relax}
+ \fi
+ \fi
+%
+ \ifdim\@easy@maxy>\z@
+ \@tempdimc=\@easy@maxy\relax
+ \loop
+ \@easy@rotate\@easy@row@rules%
+ \edef\@tempc{\@easy@firstchar\@easy@row@rules}%
+ \expandafter\ifx\@tempc`\else
+ \@easy@kern@size\@tempc
+ \advance\@tempdimc by -\@tempdima\relax
+ \repeat
+ \@easy@loop@rows{\advance\@tempdimc by -\@nameuse{@easy@vsize\romannumeral\@tempcnta}\relax}
+ \divide\@tempdimc by\@easy@nrow\relax
+ \ifdim\@tempdimc>\z@
+ \@easy@loop@rows{\global\advance\@nameuse{@easy@vsize\romannumeral\@tempcnta} by \@tempdimc\relax}
+ \fi
+ \fi
+ }
+
+\def\@easy@buildbox{%
+ \setbox0=\vbox{%
+ \unvbox\@easy@mainbox%
+ \@easy@rotate\@easy@row@rules%
+ \edef\@tempc{\@easy@firstchar\@easy@row@rules}%
+ \global\setbox\@easy@mainbox\vbox{\@easy@kern\@tempc}%
+ \global\@easy@nrow=\z@%
+ \loop%
+ \unskip\global\setbox\@ne=\lastbox%
+ \ifhbox\@ne%
+ \global\advance\@easy@nrow\@ne%
+ \@easy@rotate\@easy@row@rules%
+ \@easy@rotate\@easy@row@align%
+ \@easy@buildboxa%
+ \edef\@tempc{\@easy@firstchar\@easy@row@rules}%
+ \global\setbox\@easy@mainbox\vbox
+ {\@easy@kern\@tempc\box\tw@\unvbox\@easy@mainbox}%
+ \repeat
+ \@easy@rotate\@easy@row@rules% elim `
+ \@easy@rotate\@easy@row@align% elim `
+ }
+}
+
+\def\@easy@buildboxa{%
+ \setbox0\hbox{%
+ \unhbox\@ne%
+ \@easy@rotate\@easy@col@rules%
+ \edef\@tempc{\@easy@firstchar\@easy@col@rules}%
+ \global\setbox\tw@\hbox{\@easy@kern\@tempc}%
+ \global\@easy@ncol=\z@%
+ \loop%
+ \unskip\global\setbox\@ne=\lastbox%
+ \ifhbox\@ne%
+ \global\advance\@easy@ncol\@ne%
+ \@easy@rotate\@easy@col@rules%
+ \@easy@rotate\@easy@col@align%
+ \edef\@tempa{\@easy@firstchar\@easy@col@align}%
+ \edef\@tempb{\@easy@firstchar\@easy@row@align}%
+ \edef\@tempc{\@easy@firstchar\@easy@col@rules}%
+ \global\setbox\tw@\hbox{%
+ \@easy@kern\@tempc%
+ \@easy@hbox[\@tempa,\@tempb,%
+ \@nameuse{@easy@hsize\romannumeral\@easy@ncol},%
+ \@nameuse{@easy@vsize\romannumeral\@easy@nrow},%
+ \@easy@spread,\@ne]%
+ \unhbox\tw@}%
+ \repeat
+ \@easy@rotate\@easy@col@rules% elim `
+ \@easy@rotate\@easy@col@align% elim `
+ }
+}
+
+%%%%%%%%%%%%%%% Vertical lines %%%%%%%%%%%%%%%%%%
+\def\@easy@vlines{%
+ \@tempcntb=\z@%
+ \@easy@rotate\@easy@col@rules%
+ \edef\@tempc{\@easy@firstchar\@easy@col@rules}
+ \global\setbox\@ne\hbox{\@easy@v@draw\@tempc{\ht\@easy@mainbox}}%
+ \loop%
+ \advance\@tempcntb\@ne%
+ \@easy@rotate\@easy@col@rules%
+ \edef\@tempc{\@easy@firstchar\@easy@col@rules}%
+ \expandafter\ifx\@tempc`\relax\else%
+ \global\setbox\@ne\hbox{%
+ \@easy@v@draw\@tempc{\ht\@easy@mainbox}
+ \kern\@nameuse{@easy@hsize\romannumeral\@tempcntb}
+ \unhbox\@ne}%
+ \repeat%
+}
+
+%%%%%%%%%%%%%%% Horizontal lines %%%%%%%%%%%%%%%%%%
+\def\@easy@hlines{%
+ \@tempcntb=\z@%
+ \@easy@rotate\@easy@row@rules%
+ \edef\@tempc{\@easy@firstchar\@easy@row@rules}%
+ \global\setbox\tw@\vbox{\@easy@h@draw\@tempc{\wd\@easy@mainbox}}%
+ \loop%
+ \advance\@tempcntb\@ne%
+ \@easy@rotate\@easy@row@rules%
+ \edef\@tempc{\@easy@firstchar\@easy@row@rules}%
+ \expandafter\ifx\@tempc`\relax\else%
+ \global\setbox\tw@\vbox{%
+ \@easy@h@draw\@tempc{\wd\@easy@mainbox}
+ \kern\@nameuse{@easy@vsize\romannumeral\@tempcntb}
+ \unvbox\tw@}%
+ \repeat%
+}
+
+
+%%%%%%%%%%%%%%% PATH COMMANDS %%%%%%%%%%%%%%%
+
+\def\addpath#1{\g@addto@macro\@easy@path{[#1]}}
+
+\def\@easy@dopath{%adjust size boxex
+ \global\setbox\thr@@\hbox{}
+ \@tempcntb=\z@%
+ \@easy@rotate\@easy@col@rules%
+ \edef\@tempc{\@easy@firstchar\@easy@col@rules}
+ \@easy@kern@size\@tempc%
+ \loop%
+ \advance\@tempcntb\@ne%
+ \global\advance\@nameuse{@easy@hsize\romannumeral\@tempcntb}\@tempdima
+ \@easy@rotate\@easy@col@rules%
+ \edef\@tempc{\@easy@firstchar\@easy@col@rules}%
+ \expandafter\ifx\@tempc`\relax\else%
+ \@easy@kern@size\@tempc
+ \divide\@tempdima\tw@
+ \global\advance\@nameuse{@easy@hsize\romannumeral\@tempcntb}\@tempdima
+ \repeat%
+ \global\advance\@nameuse{@easy@hsize\romannumeral\@tempcntb}\@tempdima
+%
+ \@tempcntb=\z@%
+ \@easy@rotate\@easy@row@rules%
+ \edef\@tempc{\@easy@firstchar\@easy@row@rules}
+ \@easy@kern@size\@tempc%
+ \loop%
+ \advance\@tempcntb\@ne%
+ \global\advance\@nameuse{@easy@vsize\romannumeral\@tempcntb}\@tempdima
+ \@easy@rotate\@easy@row@rules%
+ \edef\@tempc{\@easy@firstchar\@easy@row@rules}%
+ \expandafter\ifx\@tempc`\relax\else%
+ \@easy@kern@size\@tempc
+ \divide\@tempdima\tw@
+ \global\advance\@nameuse{@easy@vsize\romannumeral\@tempcntb}\@tempdima
+ \repeat%
+ \global\advance\@nameuse{@easy@vsize\romannumeral\@tempcntb}\@tempdima
+ \expandafter\@easy@do@path@parse\@easy@path`}
+
+\def\@easy@do@path@parse{\futurelet\@tempa\@easy@do@path@parsea}
+\def\@easy@do@path@parsea{%
+ \ifx`\@tempa\expandafter\@gobble
+ \else\expandafter\@easy@do@path\fi}
+
+\def\@easy@do@path[(#1,#2,#3)#4]{%
+ \xdef\@easy@k@line{#3}%
+ \global\@tempcnta\@easy@ncol%
+ \global\advance\@tempcnta-#1%
+ \global\@tempcntb#2%
+ \expandafter\@easy@do@path@path#4`\@easy@do@path@parse}
+
+\def\@easy@do@path@path{\futurelet\@tempa\@easy@do@path@patha}
+\def\@easy@do@path@patha{%
+ \def\next##1{\@easy@do@path@path}
+ \ifx r\@tempa
+ \ifnum\@tempcnta=\z@\global\@tempcnta\@easy@ncol\fi
+ \global\advance\@tempcnta\m@ne
+ \@easy@add@h@tobox
+ \global\advance\@tempcnta\m@ne
+ \else\ifx l\@tempa
+ \@easy@add@h@tobox
+ \else\ifx u\@tempa
+ \@easy@add@v@tobox
+ \else\ifx d\@tempa
+ \ifnum\@tempcntb=\z@\global\@tempcntb\@easy@nrow\fi
+ \global\advance\@tempcntb\m@ne
+ \@easy@add@v@tobox
+ \global\advance\@tempcntb\m@ne
+ \else\def\next##1{}
+ \fi\fi\fi\fi\next}
+
+\def\@easy@add@h@tobox{%
+ \ifnum\@tempcnta=\@easy@ncol\global\@tempcnta\z@\fi
+ \global\setbox\thr@@\hbox{%
+ \rlap{\box\thr@@}
+ \@easy@ycoord{\@tempcntb}\raise\@tempdimc
+ \hb@xt@\z@{%
+ \@easy@xcoord{\@tempcnta}\kern\@tempdimc
+ \global\advance\@tempcnta\@ne
+ \kern-\@nameuse{@easy@hsize\romannumeral\@tempcnta}
+ \@easy@h@draw\@easy@k@line{\@nameuse{@easy@hsize\romannumeral\@tempcnta}}\hss}
+ }
+}
+
+\def\@easy@add@v@tobox{%
+ \ifnum\@tempcntb=\@easy@nrow\global\@tempcntb\z@\fi
+ \global\setbox\thr@@\hbox{%
+ \rlap{\box\thr@@}
+ \@easy@ycoord{\@tempcntb}\raise\@tempdimc
+ \hb@xt@\z@{%
+ \@easy@xcoord{\@tempcnta}\kern\@tempdimc
+ \global\advance\@tempcntb\@ne
+ \@easy@v@draw\@easy@k@line{\@nameuse{@easy@vsize\romannumeral\@tempcntb}}\hss}
+ }
+}
+
+\def\@easy@xcoord#1{%
+ \@tempdimc=\wd\@easy@mainbox
+ \@easy@cnt=\z@
+ \@whilenum\@easy@cnt<#1\do{%
+ \advance\@easy@cnt\@ne
+ \advance\@tempdimc-\@nameuse{@easy@hsize\romannumeral\@easy@cnt}
+ }}
+
+\def\@easy@ycoord#1{%
+ \@tempdimc=\z@\@easy@cnt=\z@
+ \@whilenum\@easy@cnt<#1\do{%
+ \advance\@easy@cnt\@ne
+ \advance\@tempdimc\@nameuse{@easy@vsize\romannumeral\@easy@cnt}
+ }}
+
+\@easy@enable@space
+
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex/contrib/easy/easybib.sty b/macros/latex/contrib/easy/easybib.sty
new file mode 100644
index 0000000000..b7288027b6
--- /dev/null
+++ b/macros/latex/contrib/easy/easybib.sty
@@ -0,0 +1,168 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Enrico Bertolazzi",
+%%% version = "0.7",
+%%% date = "16-MAR-99",
+%%% filename = "easybib.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 customization of bibliography."
+%%%
+%%% INSTALLATION:
+%%% Put this file where your TeX looks for inputs.
+%%%
+%%% DOCUMENTATION:
+%%% Compile docbib.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.
+%%%
+%%% }
+%%% ====================================================================%%%
+%%% ___ ____ ___ _ _ __ __ ____ ______ %%%
+%%% / \ / / \ \ / / \ / \ / / %%%
+%%% /____/ /__ /____/ \/ \ / / /__ / %%%
+%%% / \ / / \ / \ / / / / %%%
+%%% /____/ /____ / \ / \__/ \__/ / / %%%
+%%% ====================================================================%%%
+\def\filedate{1999/03/16}
+\def\fileversion{v0.7}
+\typeout{Document Style `easybib' \fileversion\space<\filedate>.}
+%% BEGIN easybib.sty
+%%
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{easy}
+\ProvidesPackage{easybib}[\filedate\space\fileversion]
+
+\@ifundefined{refname}{\gdef\refname{References}}{}
+\@ifundefined{bibname}{\gdef\refname{Bibliography}}{}
+
+\newif\if@bib@first@item
+
+\def\@bib@init@cmds{\global\@bib@first@itemtrue\global\let\@bib@old@fmtclo\@empty%
+\expandafter\@for\expandafter\@name\expandafter:\expandafter=\csname \@bib@act@fmt list\endcsname
+\do{\expandafter\let\csname\@name\expandafter\endcsname%
+\csname @bib@\@bib@act@fmt @\@name @cmd\endcsname%
+\expandafter\global\expandafter\setbox\csname @bib@\@name @box\endcsname=\box\voidb@x}}
+
+\def\@bib@begin{\begingroup\gdef\@bib@first@punct{}\@bib@init@cmds\bgroup\ignorespaces}
+
+\def\@bib@out{\@bib@old@fmtclo\egroup\@killglue%
+\expandafter\@for\expandafter\@name\expandafter:\expandafter=\csname \@bib@act@fmt list\endcsname
+\do{\@bib@out@if@exist[\@bib@act@fmt,\@name]}}
+
+\def\@bib@end#1{\@bib@out#1\endgroup}
+
+\def\moreref{\@ifnextchar[\@bib@moreref{\@bib@moreref[;]}}%
+\def\@bib@moreref[#1]#2{\@bib@out\gdef\@bib@act@fmt{#2}%
+\gdef\@bib@first@punct{\@killglue#1\space}%
+\@bib@init@cmds\bgroup\ignorespaces}
+
+\def\endref{\@ifnextchar[\@endref{\@endref[;]}}
+\def\@endref[#1]{\@bib@end{#1}}
+
+\def\@bib@out@if@exist[#1,#2]{%
+\ifdim\wd\@nameuse{@bib@#2@box}>0pt%
+\@killglue\unhbox\@nameuse{@bib@#2@box}\@killglue\fi}
+
+\def\bibsetfmt[#1,#2]#3#4#5{%
+\@easy@gdef(@bib@#1@#2@punct){\@killglue#3\space}
+\@easy@gdef(@bib@#1@#2@fmt){#4}
+\@easy@gdef(@bib@#1@#2@fmtclo){\@killglue#5}}
+
+\def\bibdefinestyle#1#2{\bibsetfmt[#1,#2]{,}{\rmfamily}{}%
+\@ifundefined{@bib@#2@box}{\expandafter\global\expandafter\newbox\csname @bib@#2@box\endcsname}{}
+\expandafter\xdef\csname @bib@#1@#2@cmd\endcsname{\noexpand\@bib@old@fmtclo\egroup
+\noexpand\global\noexpand\setbox\csname @bib@#2@box\endcsname\hbox\bgroup
+\noexpand\global\noexpand\let\noexpand\@bib@old@fmtclo%
+\expandafter\noexpand\csname @bib@#1@#2@fmtclo\expandafter\noexpand\endcsname%
+\noexpand\if@bib@first@item\noexpand\@bib@first@punct\noexpand\else%
+\expandafter\noexpand\csname @bib@#1@#2@punct\expandafter\noexpand\endcsname\noexpand\fi
+\noexpand\global\noexpand\@bib@first@itemfalse%
+\expandafter\noexpand\csname @bib@#1@#2@fmt\expandafter\noexpand\endcsname}}
+
+\def\@BIB@lbibitem[#1]#2{\@lbibitem[#1]{#2}\@bib@begin}
+\def\@BIB@bibitem#1{\@bibitem{#1}\@bib@begin}
+
+\def\bibdefinestyles#1{%
+\@easy@xdef(#1ref){\noexpand\gdef\noexpand\@bib@act@fmt{#1}
+\noexpand\@ifnextchar[\noexpand\@BIB@lbibitem\noexpand\@BIB@bibitem}
+\expandafter\@for\expandafter\@name\expandafter:\expandafter=\csname#1list\endcsname
+\do{\bibdefinestyle{#1}{\@name}}}
+
+\def\paperlist{by,bysame,title,transl,jour,toappear,inbook,publ,eds,publaddr,vol,yr,pages,finalinfo,lang}
+\def\booklist{by,bysame,title,bookinfo,publ,publaddr,pages,yr,lang,transl}
+
+\bibdefinestyles{paper}
+\bibdefinestyles{book}
+%
+\bibsetfmt[paper,by]{}{\bfseries}{}
+\bibsetfmt[paper,bysame]{,}{\hbox to3em{\hrulefill\hskip.1em}}{}
+\bibsetfmt[paper,title]{,}{\itshape}{}
+\bibsetfmt[paper,toappear]{}{(to appear}{)}
+\bibsetfmt[paper,yr]{}{(}{)}
+\bibsetfmt[paper,lang]{}{(}{)}
+\bibsetfmt[paper,vol]{}{\bfseries}{}
+\bibsetfmt[paper,eds]{}{(}{\@killglue, eds.)}
+\bibsetfmt[paper,transl]{}{}{}
+%
+\bibsetfmt[book,by]{}{\bfseries}{}
+\bibsetfmt[book,bysame]{}{\hbox to3em{\hrulefill\hskip.1em}}{}
+\bibsetfmt[book,title]{,}{\scshape}{}
+\bibsetfmt[book,lang]{}{(}{)}
+
+\def\@bib@styleA#1{#1.}
+\def\@bib@styleB#1{[#1]}
+\def\@bib@styleC#1{}
+
+\def\refstyle#1{\@easy@glet(@biblabel){@bib@style#1}}
+\refstyle{A}
+
+\def\@bib@citeA#1#2{[{#1\if@tempswa , #2\fi}]}
+\def\@bib@citeB#1#2{\@killglue$^{\hbox{\tiny[{#1\if@tempswa , #2\fi}]}}$}
+\def\@bib@citeC#1#2{\@killglue$^{\hbox{\tiny#1\if@tempswa , #2\fi}}$}
+
+\def\citestyle#1{\@easy@glet(@cite){@bib@cite#1}}
+\citestyle{A}
+
+
+\DeclareOption{definethebibliography}{%
+ \def\bibindent{1.5em}
+ \def\thebibliography{\@ifnextchar[{\@bib@init}{\@bib@init[\refname]}}
+ \def\@bib@init[#1]{\@ifnextchar({\@bib@inita[#1]}{\@bib@inita[#1](\section*,\z@)}}
+ \def\@bib@inita[#1](#2,#3)#4{%
+ #2{#1\@mkboth{\MakeUppercase#1}{\MakeUppercase#1}}%
+ \kern#3
+ \list{\@biblabel{\@arabic\c@enumiv}}%
+ {\settowidth\labelwidth{\@biblabel{#4}}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \@openbib@code
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \renewcommand\theenumiv{\@arabic\c@enumiv}}%
+ \sloppy
+ \clubpenalty4000
+ \@clubpenalty \clubpenalty
+ \widowpenalty4000%
+ \sfcode`\.\@m}
+ \def\endthebibliography{%
+ \def\@noitemerr{\@latex@warning{Empty `thebibliography' environment}}%
+ \endlist}
+}
+
+
+\ProcessOptions
+
+\endinput
+%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff --git a/macros/latex/contrib/easy/easybmat.sty b/macros/latex/contrib/easy/easybmat.sty
new file mode 100644
index 0000000000..3dc665be6a
--- /dev/null
+++ b/macros/latex/contrib/easy/easybmat.sty
@@ -0,0 +1,152 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Enrico Bertolazzi",
+%%% version = "1.0",
+%%% date = "13-JUN-2001",
+%%% filename = "easybmat.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 block matrices."
+%%%
+%%% INSTALLATION:
+%%% Put this file where your TeX looks for inputs.
+%%%
+%%% DOCUMENTATION:
+%%% Compile docbmat.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 1.0 13-JUN-2001 changed \@roman with \romannumeral (thanks to Claudio Beccari)
+\def\filedate{2001/06/13}
+\def\fileversion{v1.0}
+\typeout{Document Style `easybmat' \fileversion\space<\filedate>.}
+%% BEGIN easybmat.sty
+%%
+
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{easy}
+\ProvidesPackage{easybmat}[\filedate\space\fileversion]
+
+\DeclareOption{thinlines}{%
+ \@bmat@size@rule=.7pt\relax
+ \@bmat@size@dash=.5pt\relax
+}
+
+\DeclareOption{thiklines}{%
+ \@bmat@size@rule=1.5pt\relax
+ \@bmat@size@dash=1.2pt\relax
+}
+
+\DeclareOption{thicklines}{%
+ \@bmat@size@rule=1.5pt\relax
+ \@bmat@size@dash=1.2pt\relax
+}
+
+\newdimen\@bmat@size@rule\@bmat@size@rule=1pt\relax
+\newdimen\@bmat@size@dash\@bmat@size@dash=.7pt\relax
+
+\ProcessOptions
+
+\@easy@disable@space
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@bmat@addcol{\g@addto@macro\@bmat@preamble{$\displaystyle{##}$&}}
+\def\@bmat@make@preamble{%
+ \@easy@let(@easy@align){@easy@col@align\romannumeral\@easy@level}%
+ \@easy@let(@easy@rules){@easy@col@rules\romannumeral\@easy@level}%
+ \gdef\@bmat@preamble{%
+ \vbox\bgroup\lineskip\z@skip%
+ \tabskip\z@skip%
+ \baselineskip\z@skip%
+ \everycr{}\halign\bgroup}%
+ \@easy@rotate\@easy@align%
+ \loop%
+ \@easy@rotate\@easy@align%
+ \edef\@tempa{\@easy@firstchar\@easy@align}%
+ \expandafter\ifx\@tempa`\relax\else%
+ \@bmat@addcol%
+ \repeat%
+ \g@addto@macro\@bmat@preamble{$\displaystyle{##}$\crcr}
+}
+
+
+\def\BMAT{\advance\@easy@level\@ne\@easy@ifnextchar({\@BMAT}{\@BMAT(@)}}
+\def\@BMAT(#1){
+ \def\@bmat@split##1,##2,##3,##4\end{
+ \@easy@xdef(@bmat@balance\romannumeral\@easy@level){##1}%
+ \global\@nameuse{@easy@minx\romannumeral\@easy@level}=##2
+ \global\@nameuse{@easy@miny\romannumeral\@easy@level}=##3
+ }
+ \expandafter\@bmat@split#1,\z@,\z@, \end
+ \@@BMAT}
+
+\def\@@BMAT{\@easy@ifnextchar[{\@@@BMAT}{\@@@BMAT[2pt]}}
+
+\def\@@@BMAT[#1]#2#3{
+ \def\@bmat@split##1,##2,##3,##4\end{
+ \@easy@xdef(@bmat@spread\romannumeral\@easy@level){##1}%
+ \global\@nameuse{@easy@maxx\romannumeral\@easy@level}=##2
+ \global\@nameuse{@easy@maxy\romannumeral\@easy@level}=##3
+ }
+ \expandafter\@bmat@split#1,\z@,\z@, \end
+ \@easy@parse@cols{#2}
+ \@easy@parse@rows{#3}%
+ \@bmat@make@preamble%
+ \def\\{\crcr}%
+ \global\let\@easy@path\@empty%
+ \setbox\@nameuse{@easy@box\romannumeral\@easy@level}\@bmat@preamble%
+}
+\def\endBMAT{%
+ \crcr\egroup\egroup%
+ \@easy@glet(@easy@mainbox) {@easy@box\romannumeral\@easy@level}%
+ \@easy@glet(@easy@col@align) {@easy@col@align\romannumeral\@easy@level}%
+ \@easy@glet(@easy@col@rules) {@easy@col@rules\romannumeral\@easy@level}%
+ \@easy@glet(@easy@row@align) {@easy@row@align\romannumeral\@easy@level}%
+ \@easy@glet(@easy@row@rules) {@easy@row@rules\romannumeral\@easy@level}%
+ \@easy@glet(@easy@minx) {@easy@minx\romannumeral\@easy@level}%
+ \@easy@glet(@easy@miny) {@easy@miny\romannumeral\@easy@level}%
+ \@easy@glet(@easy@maxx) {@easy@maxx\romannumeral\@easy@level}%
+ \@easy@glet(@easy@maxy) {@easy@maxy\romannumeral\@easy@level}%
+ %
+ \@easy@glet(@easy@balance) {@bmat@balance\romannumeral\@easy@level}%
+ \@easy@glet(@easy@spread) {@bmat@spread\romannumeral\@easy@level}%
+ %
+ \global\let\@easy@size@dash\@bmat@size@dash
+ \global\let\@easy@size@rule\@bmat@size@rule
+ %
+ \@easy@evaldim%
+% \typeout{Easybmat [row:\the\@easy@nrow,col:\the\@easy@ncol]}
+ \@easy@balance@row@col%
+ \@easy@buildbox%
+ \@easy@vlines%
+ \@easy@hlines%
+ \vcenter{\hbox{\rlap{\box\@ne}
+ \rlap{\box\tw@}
+ \ifx\@easy@path\@empty\else\@easy@dopath\rlap{\box\thr@@}\fi
+ \box\@easy@mainbox}}%
+ \advance\@easy@level\m@ne%
+}
+
+\@easy@enable@space
+
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex/contrib/easy/easyeqn.sty b/macros/latex/contrib/easy/easyeqn.sty
new file mode 100644
index 0000000000..5954b1a940
--- /dev/null
+++ b/macros/latex/contrib/easy/easyeqn.sty
@@ -0,0 +1,426 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Enrico Bertolazzi",
+%%% version = "1.94",
+%%% date = "18-MAR-2002",
+%%% filename = "easyeqn.sty",
+%%% address = "Dipatimento di Ingegneria
+%%% Meccanica e 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 equations."
+%%%
+%%% INSTALLATION:
+%%% Put this file where your TeX looks for inputs.
+%%%
+%%% DOCUMENTATION:
+%%% Compile doceqn.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.2 15/may/96 first release
+%%% v 0.3 27/july/96
+%%% addedd fleq, leqno options
+%%% EQA environment
+%%% \numberright and \equationcenter commands
+%%% improved \label command
+%%% v 0.4 improved tracing algorithm
+%%% v 0.5 improved spacing in the formulae, added cosmetic commands
+%%% v 0.6 correct label alignment in single equation
+%%% v 0.7 added additional macros
+%%% v 0.8 \ParDer now work also with easyvector
+%%% v 0.9 \ParDer now work also with easyvector with indices
+%%% v 1.0 Added ~ convection for eqlabel fixed an error in showkeys
+%%% v 1.1 added additional macros
+%%% v 1.2 compatibility with hyper macros
+%%% v 1.3 chaged copyright
+%%% v 1.4 added commands \eqlabeltop, \eqlabelbot, \eqlabelcenter
+%%% v 1.5 fixed a bug on allnumber
+%%% v 1.6 fixed a bug on equation number alignment
+%%% v 1.7 fixed a bug on equation number vertical alignment
+%%% v 1.8 fixed a bad spacing with \baselinestretch
+%%% v 1.9 13-JUN-2001 changed \@roman with \romannumeral (thanks to Claudio Beccari)
+%%% v 1.91 19-JUN-2001 fixed a bug in \eqlabel introduced in version 1.9
+%%% v 1.92 18-JULY-2001 improved equation spacing
+%%% v 1.93 23-AUG-2001 correct a bug with showkeys
+%%% v 1.94 18-MAR-2002 fixed a bug compatibility with hyperref
+%%% ====================================================================%%%
+%%% ___ ____ ___ _ _ ___ ____ ___ _ _ %%%
+%%% / \ / / \ \ / / \ / / \ \ / %%%
+%%% /____/ /__ /____/ \/ /____/ /__ /____/ \/ %%%
+%%% / \ / / \ / / \ / / \ / %%%
+%%% /____/ /____ / \ / /____/ /____ / \ / %%%
+%%% ====================================================================%%%
+\def\filedate{2002/03/18}
+\def\fileversion{v1.94}
+\typeout{Document Style `easyeqn' \fileversion\space<\filedate>.}
+%% BEGIN easyeqn.sty
+%%
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{easy}
+\ProvidesPackage{easyeqn}[\filedate\space\fileversion]
+
+\@easy@disable@space
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newdimen\@EQ@leftmargin\@EQ@leftmargin\leftmargini
+\newdimen\@EQ@col@sep\@EQ@col@sep=2pt
+
+\newcommand{\equationcenter}{\gdef\@EQ@indent{\tabskip\@centering}}%
+\newcommand{\equationleft}{\gdef\@EQ@indent{\tabskip\@EQ@leftmargin}}%
+%
+\newcommand{\eqspacing}[1]{\xdef\@EQ@surround{\noexpand\abovedisplayskip#1\noexpand\belowdisplayskip#1}}
+\newcommand{\eqleftmargin}[1]{\global\@EQ@leftmargin=#1}
+%
+\newcommand{\eqcolumnsep}[1]{\@tempdima=#1\divide\@tempdima2\global\@EQ@col@sep=\@tempdima}
+%
+\newcommand{\eqrowsep}[1]{\def\@tempa##1{%
+ \gdef\@EQ@rowsep{\penalty\@M\vskip##1}}
+ \expandafter\@tempa{#1}}
+%
+\newcommand{\numberleft}{\global\let\@EQ@NUM\@EQ@NUM@LEFT}
+\newcommand{\numberright}{\global\let\@EQ@NUM\@EQ@NUM@RIGHT}
+
+\def\@EQ@reset@numbering{\global\let\if@EQ@numbering\iffalse}
+
+\DeclareOption{allnumber}{%
+ \gdef\@EQ@reset@numbering{\global\let\if@EQ@numbering\iftrue}
+ \gdef\@EQ@eqnum{\refstepcounter{equation}\@EQ@base@eqnum}
+}
+
+\DeclareOption{fleqn}{\equationleft}
+
+\global\let\if@EQ@number@left\iffalse
+\DeclareOption{leqno}{\global\let\if@EQ@number@left\iftrue}
+
+\DeclareOption{math}{%
+
+ \def\binom#1#2{{#1\atopwithdelims()#2}}
+
+ \def\abs#1{\left\vert#1\right\vert}
+ \def\norm#1{\left\Vert#1\right\Vert}
+
+ \def\frac{\@ifnextchar[\@EQ@frac\@EQ@frac@}
+ \def\@EQ@frac[#1]#2#3{{\begingroup#2\endgroup\above#1#3}}
+ \def\@EQ@frac@#1#2{{\begingroup#1\endgroup\over#2}}
+
+ \providecommand{\dfrac}{\@ifnextchar[\@EQ@dfrac\@EQ@dfrac@}
+ \def\@EQ@dfrac[#1]#2#3{\displaystyle{\begingroup#2\endgroup\above#1#3}}
+ \def\@EQ@dfrac@#1#2{\displaystyle{\begingroup#1\endgroup\over#2}}
+
+ \providecommand{\tfrac}{\@ifnextchar[\@EQ@tfrac\@EQ@tfrac@}
+ \def\@EQ@tfrac[#1]#2#3{\scriptstyle{\begingroup#2\endgroup\above#1#3}}
+ \def\@EQ@tfrac@#1#2{\scriptstyle{\begingroup#1\endgroup\over#2}}
+
+ \def\boxed#1{\fbox{$\displaystyle{#1}$}}
+ \def\eqbox{\@ifnextchar(\@EQ@box{\@EQ@box(.25pt,3pt)}}
+ \def\@EQ@box(#1,#2)#3{\fboxrule#1\fboxsep#2\fbox{$\displaystyle#3$}}
+
+ \newcount\@EQ@DP@n\@EQ@DP@n=\z@
+ \newcount\@EQ@DP@nt\@EQ@DP@nt=\m@ne
+
+ \def\ParDer[{%
+ \global\@EQ@DP@n=\z@
+ \global\@EQ@DP@nt=\z@
+ \global\let\@EQ@DP@x\@empty
+ \global\let\@EQ@DP@oldx\@empty
+ \futurelet\@tempb\@EQ@DP@parsea}
+%
+ \def\@EQ@DP@parsea{\futurelet\@tempb\@EQ@DP@parseb}
+ \def\@EQ@DP@parseb{%
+ \let\next\@EQ@DP@eat%
+ \ifx]\@tempb\let\next\@EQ@DP@close\else%
+ \ifx\bgroup\@tempb\let\next\@EQ@DP@bgroup\fi\fi%
+ \next}%
+%
+ \def\@EQ@DP@close#1#2{%
+ \@EQ@DP@eat\end
+ \ifnum\@ne=\@EQ@DP@nt\let\tmp\@empty\else\def\tmp{^{\the\@EQ@DP@nt}}\fi
+ \frac{\partial\tmp#2}{\@EQ@DP@x}}%
+%
+ \def\@EQ@DP@bgroup#1{\@EQ@DP@eat{#1}}
+
+ \gdef\@EQ@DP@eat#1{%
+ \let\@EQ@DP@tmpa\@empty
+ \g@addto@macro\@EQ@DP@tmpa{#1}
+ \ifx\@EQ@DP@oldx\@EQ@DP@tmpa
+ \else% new symbol added
+ \ifx\@EQ@DP@oldx\@empty\else
+ \g@addto@macro\@EQ@DP@x{\partial\bgroup}
+ \expandafter\g@addto@macro\expandafter\@EQ@DP@x\expandafter{\@EQ@DP@oldx\egroup}
+ \ifnum\@ne=\@EQ@DP@n\else%
+ \edef\@EQ@DP@tmpb{\noexpand\g@addto@macro\noexpand\@EQ@DP@x{^{\the\@EQ@DP@n}}}
+ \@EQ@DP@tmpb
+ \fi
+ \global\advance\@EQ@DP@nt by \@EQ@DP@n\global\@EQ@DP@n=\z@
+ \fi
+ \global\let\@EQ@DP@oldx\@EQ@DP@tmpa
+ \fi
+ \global\advance\@EQ@DP@n by \@ne
+ \ifx#1\end\else\expandafter\@EQ@DP@parsea\fi
+ }
+
+ \newcommand{\DIV}[1]{\nabla\cdot#1}
+ \newcommand{\GRAD}[1]{\nabla#1}
+ \newcommand{\LAPLA}[1]{\Delta#1}
+
+ \newcommand{\SUM}{\@ifnextchar[\@SUM\@@SUM}
+ \def\@SUM[#1]#2#3{{\sum\limits_{#2}^{#3}\!\vphantom{\sum\limits_{#2}^{#3}}^{^{(#1)}}}}
+ \def\@@SUM#1#2{\sum\limits_{#1}^{#2}}
+
+ \newcommand{\PROD}{\@ifnextchar[\@PROD\@@PROD}
+ \def\@PROD[#1]#2#3{{\prod\limits_{#2}^{#3}\!\vphantom{\prod\limits_{#2}^{#3}}^{^{(#1)}}}}
+ \def\@@PROD#1#2{\prod\limits_{#1}^{#2}}
+
+
+ \def\@EQ@parse@extra{%
+ \gdef\@EQ@bformat{\vcenter\bgroup\normalbaselines\m@th\ialign\bgroup}%
+ \global\let\@EQ@cmdadd\@empty\@EQ@parsea}
+
+ \newenvironment{ARRAY}[1]
+ {\expandafter\@EQ@parse@extra#1\end\let\@EQ@rowsep\smallskip\let\\\@EQ@CR\@EQ@bformat\crcr}
+ {\crcr\egroup\egroup}
+
+ \newenvironment{MATRIX}
+ {\,\vcenter\bgroup\everycr{}\let\@EQ@rowsep\smallskip\let\\\@EQ@CR
+ \halign\bgroup\hfil$\mathstrut##$\hfil&&\quad\hfil$\mathstrut##$\hfil\crcr}
+ {\crcr\egroup\egroup\,}
+
+}
+
+\@easy@enable@space
+
+\let\@EQ@file@input\jobname
+
+\DeclareOption{warning}{%
+ \newcount\@EQ@level\@EQ@level=\@ne%
+ \xdef\@EQ@file@inputi{\jobname.tex}
+ \xdef\@EQ@file@input{\jobname.tex}
+ \global\let\@EQ@old@input\input
+ \gdef\@EQ@input@shade{%
+ \@ifnextchar\bgroup{\@EQ@input}{%
+ \PackageWarning{`easyeqn'}%
+ {you must use \string\input\space with file within braces for
+ correct cross referencing}\@EQ@old@input}%
+ }
+ \gdef\@EQ@input#1{%
+ \global\advance\@EQ@level by \@ne
+ \expandafter\xdef\csname @EQ@file@input\romannumeral\@EQ@level\endcsname{#1}
+ \xdef\@EQ@file@input{\csname @EQ@file@input\romannumeral\@EQ@level\endcsname}
+ \@EQ@old@input{#1}%
+ \global\advance\@EQ@level by \m@ne
+ \xdef\@EQ@file@input{\csname @EQ@file@input\romannumeral\@EQ@level\endcsname}
+ }
+ \global\let\@EQ@old@input\input%
+ \AtBeginDocument{\global\let\input\@EQ@input@shade}%
+ \AtEndDocument{\global\let\input\@EQ@old@input}%
+
+ \gdef\@EQ@write@warning#1{%
+ \edef\@temp{\noexpand\AtEndDocument{\noexpand\PackageWarningNoLine{`easyeqn'}%
+ {Label `#1' may be not referenced, in \@EQ@file@input\space line \the\inputlineno}}}%
+ \@temp%
+ }
+}
+
+\DeclareOption{easyold}{%
+
+ \def\EQS{\@EQ@NUMBER\@easy@ifnextchar[\@EQ@ALIGN{\@EQ@ALIGN[rl]}}
+ \let\endEQS\end@EQ@ALIGN
+
+ \@easy@def(EQ*) {\@EQ@NO@NUMBER\@easy@ifnextchar[\@EQ@ALIGN{\@EQ@ALIGN[c]}}
+ \@easy@def(EQS*){\@EQ@NO@NUMBER\@easy@ifnextchar[\@EQ@ALIGN{\@EQ@ALIGN[rl]}}
+ \@easy@def(EQA*){\@EQ@NO@NUMBER\@easy@ifnextchar[\@EQ@A@ALIGN{\@EQ@A@ALIGN[rl]}}
+
+ \@easy@let(EQ*) {end@EQ@ALIGN}
+ \@easy@let(EQS*){end@EQ@ALIGN}
+ \@easy@let(EQA*){end@EQ@A@ALIGN}
+}
+
+\def\@EQ@warning@nolabel{%
+ \PackageWarning{`easyeqn'}%
+ {\string\label\space and \string\eqlabel\space disabled in EQx* environments}
+}
+
+\@easy@disable@space
+
+\def\@EQ@newreference#1{\@easy@glet(r@eq@#1){@empty}}
+\def\@EQ@addreference#1{\@bsphack\protected@write\@auxout{}{\string\@EQ@newreference{#1}}\@esphack}
+
+\def\refeq#1{\protect\@EQ@addreference{#1}\@EQ@old@ref{#1}}
+\def\eqref#1{\hbox{\@EQ@base@format(\refeq{#1})}}
+
+\def\@EQ@write@warning#1{}
+
+\def\@EQ@NUMBER{\let\label\eqlabel\@EQ@reset@numbering}
+\def\@EQ@NO@NUMBER{\let\label\@EQ@warning@nolabel}
+
+\eqrowsep{7pt}
+\equationcenter
+\eqspacing{12pt plus 3pt minus 3pt}
+
+\ProcessOptions
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@EQ@base@format{\normalfont\normalcolor}%
+\def\@EQ@base@eqnum{\@EQ@base@format(\theequation)}%
+\def\@EQ@stepnumber{\refstepcounter{equation}}
+
+\newcommand{\yesnumber}{%
+\@EQ@stepnumber%
+\global\let\if@EQ@numbering\iftrue%
+\global\let\@EQ@eqnum\@EQ@base@eqnum}
+
+\newcommand{\eqlabel}{\global\let\@EQ@eqnum\@EQ@base@eqnum\@ifnextchar[\@EQ@a\@EQ@x}
+\def\@EQ@x{\@ifnextchar(\@EQ@b\@EQ@c}
+\def\@EQ@a[#1]{\@EQ@customlabel{#1}{#1}}
+\def\@EQ@b(#1){\@EQ@customlabel{(#1)}{#1}}
+\def\@EQ@customlabel#1#2{%
+ \begingroup
+ \def~{\theequation}
+ \xdef\@EQ@eqnum{\noexpand\@EQ@base@format#1}
+ \xdef\@currentlabel{#2}
+ \endgroup
+ \global\let\if@EQ@numbering\iftrue
+ \@ifnextchar\bgroup{\@EQ@d}{}}
+
+\def\@EQ@c#1{%
+ \@EQ@SK@label{#1}
+ \@ifundefined{r@eq@#1}{\@EQ@write@warning{#1}}
+ {\@EQ@stepnumber\global\let\if@EQ@numbering\iftrue\@EQ@old@label{#1}}
+}
+
+\def\@EQ@d#1{\@EQ@SK@label{#1}\@EQ@old@label{#1}}
+
+\def\@EQ@CR{\global\let\@EQ@eqbox@do\@EQ@eqbox{\ifnum0=`}\fi\@EQ@CR@}
+\def\@EQ@CR@{\@ifnextchar[\@EQ@CR@@{\@EQ@CR@@[\z@]}}
+\def\@EQ@CR@@[#1]{%
+ \ifnum0=`{\fi}
+ \crcr\noalign{\@EQ@rowsep\vskip#1\relax}
+}
+
+\def\@EQ@NL{{\ifnum0=`}\fi\@EQ@NL@}
+\def\@EQ@NL@{\@ifnextchar[\@EQ@NL@@{\@EQ@NL@@[\z@]}}
+\def\@EQ@NL@@[#1]{%
+ \ifnum0=`{\fi}&\@EQ@NUM%
+ \@EQ@reset@numbering\crcr\noalign{\@EQ@rowsep\vskip#1\relax}
+}
+
+\newcommand{\eqmulticol}[3]{%
+ \multispan{#1}
+ \ifx#2l\else\hfil\fi
+ $\displaystyle#3$
+ \ifx#2r\else\hfil\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Do Label
+
+\def\@EQ@SK@label#1{}
+\let\@EQ@SK@left\@empty
+\let\@EQ@SK@right\@empty
+
+\def\@EQ@NUM@LEFT{\llap{\hb@xt@\displaywidth{\@EQ@SK@left\if@EQ@numbering\@EQ@eqnum\fi\hss}}}
+\def\@EQ@NUM@RIGHT{\@EQ@SK@right\if@EQ@numbering\llap{\@EQ@eqnum}\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Parser zone
+\def\@EQ@addcol{%
+ \g@addto@macro\@EQ@bformat{\tabskip\z@skip\hskip\@EQ@col@sep&\hskip\@EQ@col@sep}}
+
+\def\@EQ@addcola{%
+ \g@addto@macro\@EQ@bformat{\tabskip\z@skip&}}
+
+\def\@EQ@parse{%
+ \gdef\@EQ@bformat{\everycr{}\@EQ@indent\halign to\displaywidth\bgroup}%
+ \global\let\@EQ@cmdadd\@empty\@EQ@parsea}
+
+\def\@EQ@parsea#1{\ifx#1\end\else\@EQ@cmd{#1}\expandafter\@EQ@parsea\fi}%
+
+\def\@EQ@alignl{\g@addto@macro\@EQ@bformat{$\displaystyle##$\hfil}}
+\def\@EQ@alignr{\g@addto@macro\@EQ@bformat{\hfil$\displaystyle##$}}
+\def\@EQ@alignc{\g@addto@macro\@EQ@bformat{\hfil$\displaystyle##$\hfil}}
+
+\def\@EQ@cmd#1{%
+ \ifx#1.
+ \global\let\@EQ@cmdadd\@EQ@addcola%
+ \else
+ \@EQ@cmdadd
+ \global\let\@EQ@cmdadd\@EQ@addcol%
+ \expandafter\let\expandafter\@tempa\csname @EQ@align#1\endcsname
+ \ifx\@tempa\relax\PackageWarningNoLine{`easyeqn'}
+ {Alignment\space`#1'\space not \space defined \space
+ `c'\space substituted,\space in \space
+ \@EQ@file@input\space line\space \the\inputlineno}
+ \@EQ@alignc
+ \else
+ \@tempa
+ \fi
+ \fi}
+
+\def\@EQ@skip{\vskip\baselinestretch\floatsep}
+\def\eqlabeltop{\def\@EQ@eqbox##1{\vtop{##1\@EQ@skip}}}
+\def\eqlabelbot{\def\@EQ@eqbox##1{\vbox{\@EQ@skip##1}}}
+\def\eqlabelcenter{\def\@EQ@eqbox##1{\vbox{\@EQ@skip}\vcenter{##1}\vbox{\@EQ@skip}}}
+
+\eqlabelcenter
+
+
+\newbox\@EQ@EQN@BOX
+%
+\def\@EQ@A@ALIGN[#1]{%
+ \expandafter\@EQ@parse#1\end
+ \let\\\@EQ@NL%
+ $$\@EQ@surround\@EQ@bformat\tabskip\@centering&\tabskip\z@skip\hb@xt@\z@{\hss##}\crcr}
+%
+\def\end@EQ@A@ALIGN{&\@EQ@NUM\crcr\egroup$$\@ignoretrue}
+
+\def\@EQ@ALIGN[#1]{%
+ \expandafter\@EQ@parse#1\end
+ \let\\\@EQ@CR%
+% \def\@EQ@eqbox@do##1{\vbox{\@EQ@skip}\vbox{##1}\vbox{\@EQ@skip}}
+ \let\@EQ@eqbox@do\vbox
+ $$\@EQ@surround\setbox\@EQ@EQN@BOX\vbox\bgroup\@EQ@bformat\tabskip\@centering\crcr}
+%
+\def\end@EQ@ALIGN{\crcr\egroup\egroup\@EQ@eqbox@do{\unvbox\@EQ@EQN@BOX}\@EQ@NUM$$\@ignoretrue}
+
+\def\EQ{\@EQ@NUMBER\@easy@ifnextchar[\@EQ@ALIGN{\@EQ@ALIGN[c]}}
+\let\endEQ\end@EQ@ALIGN
+
+\def\EQA{\@EQ@NUMBER\@easy@ifnextchar[\@EQ@A@ALIGN{\@EQ@A@ALIGN[rcl]}}
+\let\endEQA\end@EQ@A@ALIGN
+
+
+\AtBeginDocument{%
+%
+ \let\@EQ@old@ref\ref
+ \let\@EQ@old@label\label
+%
+ \@ifundefined{SK@label}{%
+ }{%
+ \def\@EQ@SK@left{\llap{\@EQ@SK@lab\kern\marginparsep}\global\let\SK@lab\@empty}
+ \def\@EQ@SK@right{\rlap{\kern\marginparsep\@EQ@SK@lab}\global\let\SK@lab\@empty}
+ \def\@EQ@SK@label#1{%
+ \gdef\@EQ@SK@lab{%
+ \edef\@tempa{#1}
+ \smash{\SK@labelcolor\fbox{\normalfont\small\ttfamily\expandafter\strip@prefix\meaning\@tempa}}%
+ }
+ }
+ \@ifundefined{ltx@label}{\let\@EQ@old@label\SK@label}{}
+ }
+ \if@EQ@number@left\numberleft\else\numberright\fi
+ \let\if@EQ@number@left\relax
+}
+
+\@easy@enable@space
+
+\endinput
diff --git a/macros/latex/contrib/easy/easymat.sty b/macros/latex/contrib/easy/easymat.sty
new file mode 100644
index 0000000000..f263189eed
--- /dev/null
+++ b/macros/latex/contrib/easy/easymat.sty
@@ -0,0 +1,179 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Enrico Bertolazzi",
+%%% version = "0.4",
+%%% date = "13-JUN-2001",
+%%% filename = "easybmat.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 equations."
+%%%
+%%% INSTALLATION:
+%%% Put this file where your TeX looks for inputs.
+%%%
+%%% DOCUMENTATION:
+%%% Compile docbmat.tex.
+%%%
+%%% COPYING:
+%%% 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.4 13-JUN-2001 changed \@roman with \romannumeral (thanks to Claudio Beccari)
+\def\filedate{2001/06/13}
+\def\fileversion{v0.4}
+\typeout{Document Style `easybmat' \fileversion\space<\filedate>.}
+%% BEGIN easybmat.sty
+%%
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{easy}
+\ProvidesPackage{easymat}[\filedate\space\fileversion]
+
+\DeclareOption{thinlines}{%
+ \@mat@size@rule=.7pt\relax
+ \@mat@size@dash=.5pt\relax
+}
+
+\DeclareOption{thiklines}{%
+ \@mat@size@rule=1.5pt\relax
+ \@mat@size@dash=1.2pt\relax
+}
+
+\newdimen\@mat@size@rule\@mat@size@rule=1pt\relax
+\newdimen\@mat@size@dash\@mat@size@dash=.7pt\relax
+
+\ProcessOptions
+
+\@easy@disable@space
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@mat@CR{\futurelet\@tempb\@mat@CR@}
+\def\@mat@CR@{%
+ \@easy@xdef(@easy@row@align\romannumeral\@easy@level)
+ {\@mat@row@align@charracter\csname @easy@row@align\romannumeral\@easy@level\endcsname}
+ \xdef\@mat@row@align@charracter{c}
+ \def\next{
+ \@easy@xdef(@easy@row@rules\romannumeral\@easy@level)
+ {@\csname @easy@row@rules\romannumeral\@easy@level\endcsname}
+ \crcr
+ }%
+ \@tfor\@tempa:=.;:-|0123456789\do{%
+ \expandafter\ifx\expandafter\@tempb\@tempa
+ \def\next##1{
+ \@easy@xdef(@easy@row@rules\romannumeral\@easy@level)
+ {\@tempa\csname @easy@row@rules\romannumeral\@easy@level\endcsname}
+ \crcr
+ }%
+ \@break@tfor%
+ \fi%
+ }
+ \next
+}
+
+\def\@mat@addcol{\g@addto@macro\@mat@preamble{$\displaystyle{##}$&}}
+\def\@mat@make@preamble{%
+ \@easy@let(@easy@align){@easy@col@align\romannumeral\@easy@level}%
+ \@easy@let(@easy@rules){@easy@col@rules\romannumeral\@easy@level}%
+ \gdef\@mat@preamble{%
+ \vbox\bgroup\lineskip\z@skip%
+ \tabskip\z@skip%
+ \baselineskip\z@skip%
+ \everycr{}\halign\bgroup}%
+ \@easy@rotate\@easy@align%
+ \loop%
+ \@easy@rotate\@easy@align%
+ \edef\@tempa{\@easy@firstchar\@easy@align}%
+ \expandafter\ifx\@tempa`\relax\else%
+ \@mat@addcol%
+ \repeat%
+ \g@addto@macro\@mat@preamble{$\displaystyle{##}$\crcr}
+}
+
+
+\def\MAT{\advance\@easy@level\@ne\@easy@ifnextchar({\@MAT}{\@MAT(@)}}
+\def\@MAT(#1){
+ \def\@mat@split##1,##2,##3,##4\end{
+ \@easy@xdef(@mat@balance\romannumeral\@easy@level){##1}%
+ \global\@nameuse{@easy@minx\romannumeral\@easy@level}=##2
+ \global\@nameuse{@easy@miny\romannumeral\@easy@level}=##3
+ }
+ \expandafter\@mat@split#1,\z@,\z@, \end
+ \@@MAT}
+
+\xdef\@mat@row@align@charracter{c}
+
+\def\@@MAT{\@easy@ifnextchar[{\@@@MAT}{\@@@MAT[2pt]}}
+
+\def\@@@MAT[#1]#2{
+ \def\@mat@split##1,##2,##3,##4\end{
+ \@easy@xdef(@mat@spread\romannumeral\@easy@level){##1}%
+ \global\@nameuse{@easy@maxx\romannumeral\@easy@level}=##2
+ \global\@nameuse{@easy@maxy\romannumeral\@easy@level}=##3
+ }
+ \expandafter\@mat@split#1,\z@,\z@, \end
+ \@easy@parse@cols{#2}%
+ \@easy@xdef(@easy@row@align\romannumeral\@easy@level){}%
+ \@easy@xdef(@easy@row@rules\romannumeral\@easy@level){@}%
+ \def\first##1{\@easy@xdef(@easy@row@rules\romannumeral\@easy@level){##1}}%
+ \def\aligntop{\xdef\@mat@row@align@charracter{t}}
+ \def\alignbottom{\xdef\@mat@row@align@charracter{b}}
+ \@mat@make@preamble%
+ \def\\{\@mat@CR}%
+ \global\let\@easy@path\@empty%
+ \setbox\@nameuse{@easy@box\romannumeral\@easy@level}\@mat@preamble%
+}
+
+\def\endMAT{%
+ \crcr\egroup\egroup%
+ %
+ \xdef\@easy@row@align{`\csname @easy@row@align\romannumeral\@easy@level\endcsname}%
+ \xdef\@easy@row@rules{`\csname @easy@row@rules\romannumeral\@easy@level\endcsname}%
+ %
+ \@easy@glet(@easy@mainbox) {@easy@box\romannumeral\@easy@level}%
+ \@easy@glet(@easy@col@align) {@easy@col@align\romannumeral\@easy@level}%
+ \@easy@glet(@easy@col@rules) {@easy@col@rules\romannumeral\@easy@level}%
+ \@easy@glet(@easy@minx) {@easy@minx\romannumeral\@easy@level}%
+ \@easy@glet(@easy@miny) {@easy@miny\romannumeral\@easy@level}%
+ \@easy@glet(@easy@maxx) {@easy@maxx\romannumeral\@easy@level}%
+ \@easy@glet(@easy@maxy) {@easy@maxy\romannumeral\@easy@level}%
+ %
+ \@easy@glet(@easy@balance) {@mat@balance\romannumeral\@easy@level}%
+ \@easy@glet(@easy@spread) {@mat@spread\romannumeral\@easy@level}%
+ %
+ \global\let\@easy@size@dash\@mat@size@dash
+ \global\let\@easy@size@rule\@mat@size@rule
+ %
+ \@easy@evaldim%
+% \typeout{Easybmat [row:\the\@easy@nrow,col:\the\@easy@ncol]}
+ \@easy@balance@row@col%
+ \@easy@buildbox%
+ \@easy@vlines%
+ \@easy@hlines%
+ \vcenter{\hbox{\rlap{\box\@ne}
+ \rlap{\box\tw@}
+ \ifx\@easy@path\@empty\else\@easy@dopath\rlap{\box\thr@@}\fi
+ \box\@easy@mainbox}}%
+ \advance\@easy@level\m@ne%
+}
+
+\@easy@enable@space
+
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex/contrib/easy/easytable.sty b/macros/latex/contrib/easy/easytable.sty
new file mode 100644
index 0000000000..8c02ebe6b7
--- /dev/null
+++ b/macros/latex/contrib/easy/easytable.sty
@@ -0,0 +1,150 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Enrico Bertolazzi",
+%%% version = "1.0",
+%%% date = "13-JUN-2001",
+%%% filename = "easytable.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 equations."
+%%% INSTALLATION:
+%%% Put this file where your TeX looks for inputs.
+%%%
+%%% DOCUMENTATION:
+%%% Compile doctable.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 1.0 13-JUN-2001 changed \@roman with \romannumeral (thanks to Claudio Beccari)
+\def\filedate{2001/06/13}
+\def\fileversion{v1.0}
+\typeout{Document Style `easytable' \fileversion\space<\filedate>.}
+%%
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{easy}
+\ProvidesPackage{easytable}[\filedate \fileversion]
+
+\DeclareOption{thinlines}{%
+ \@tab@size@rule=.7pt
+ \@tab@size@dash=.5pt
+}
+
+\DeclareOption{thicklines}{%
+ \@tab@size@rule=1.5pt
+ \@tab@size@dash=1.2pt
+}
+
+\DeclareOption{thiklines}{%
+ \@tab@size@rule=1.5pt
+ \@tab@size@dash=1.2pt
+}
+
+\newdimen\@tab@size@rule\@tab@size@rule=1pt
+\newdimen\@tab@size@dash\@tab@size@dash=.7pt
+
+\ProcessOptions
+
+\@easy@disable@space
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@tab@addcol{\g@addto@macro\@tab@preamble{\@killglue##\@killglue&}}
+\def\@tab@make@preamble{%
+ \@easy@let(@easy@align){@easy@col@align\romannumeral\@easy@level}%
+ \@easy@let(@easy@rules){@easy@col@rules\romannumeral\@easy@level}%
+ \gdef\@tab@preamble{%
+ \vbox\bgroup\lineskip\z@skip%
+ \tabskip\z@skip%
+ \baselineskip\z@skip%
+ \everycr{}\halign\bgroup}%
+ \@easy@rotate\@easy@align%
+ \loop%
+ \@easy@rotate\@easy@align%
+ \edef\@tempa{\@easy@firstchar\@easy@align}%
+ \expandafter\ifx\@tempa`\relax\else%
+ \@tab@addcol%
+ \repeat%
+ \g@addto@macro\@tab@preamble{\@killglue##\@killglue\crcr}
+}
+
+\def\TAB{\advance\@easy@level\@ne\@ifnextchar({\@TAB}{\@TAB(@)}}
+\def\@TAB(#1){
+ \def\@TAB@split##1,##2,##3,##4\end{
+ \@easy@xdef(@tab@balance\romannumeral\@easy@level){##1}%
+ \global\@nameuse{@easy@minx\romannumeral\@easy@level}=##2
+ \global\@nameuse{@easy@miny\romannumeral\@easy@level}=##3
+ }
+ \expandafter\@TAB@split#1,\z@,\z@, \end
+ \@@TAB}
+
+\def\@@TAB{\@ifnextchar[{\@@@TAB}{\@@@TAB[2pt]}}
+
+\def\@@@TAB[#1]#2#3{
+ \def\@TAB@split##1,##2,##3,##4\end{
+ \@easy@xdef(@tab@spread\romannumeral\@easy@level){##1}%
+ \global\@nameuse{@easy@maxx\romannumeral\@easy@level}=##2
+ \global\@nameuse{@easy@maxy\romannumeral\@easy@level}=##3
+ }
+ \expandafter\@TAB@split#1,\z@,\z@, \end
+ \@easy@parse@cols{#2}
+ \@easy@parse@rows{#3}%
+ \@tab@make@preamble%
+ \global\let\@easy@path\@empty%
+ \def\\{\crcr}%
+ \setbox\@nameuse{@easy@box\romannumeral\@easy@level}
+ \@tab@preamble
+}
+
+\def\endTAB{%
+ \crcr\egroup\egroup%
+ \@easy@glet(@easy@mainbox) {@easy@box\romannumeral\@easy@level}%
+ \@easy@glet(@easy@col@align) {@easy@col@align\romannumeral\@easy@level}%
+ \@easy@glet(@easy@col@rules) {@easy@col@rules\romannumeral\@easy@level}%
+ \@easy@glet(@easy@row@align) {@easy@row@align\romannumeral\@easy@level}%
+ \@easy@glet(@easy@row@rules) {@easy@row@rules\romannumeral\@easy@level}%
+ \@easy@glet(@easy@minx) {@easy@minx\romannumeral\@easy@level}%
+ \@easy@glet(@easy@miny) {@easy@miny\romannumeral\@easy@level}%
+ \@easy@glet(@easy@maxx) {@easy@maxx\romannumeral\@easy@level}%
+ \@easy@glet(@easy@maxy) {@easy@maxy\romannumeral\@easy@level}%
+ %
+ \@easy@glet(@easy@spread) {@tab@spread\romannumeral\@easy@level}%
+ \@easy@glet(@easy@balance) {@tab@balance\romannumeral\@easy@level}%
+ %
+ \global\let\@easy@size@dash\@tab@size@dash
+ \global\let\@easy@size@rule\@tab@size@rule
+ %
+ \@easy@evaldim%
+ \typeout{Easytable [row:\the\@easy@nrow,col:\the\@easy@ncol]}
+ \@easy@balance@row@col%
+ \@easy@buildbox%
+ \@easy@vlines%
+ \@easy@hlines%
+ \mbox{\rlap{\box\@ne}
+ \rlap{\box\tw@}
+ \ifx\@easy@path\@empty\else\@easy@dopath\rlap{\box\thr@@}\fi
+ \box\@easy@mainbox}%
+ \advance\@easy@level\m@ne
+}
+
+\@easy@enable@space
+
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex/contrib/easy/easyvector.sty b/macros/latex/contrib/easy/easyvector.sty
new file mode 100644
index 0000000000..39cac6029f
--- /dev/null
+++ b/macros/latex/contrib/easy/easyvector.sty
@@ -0,0 +1,236 @@
+%%% ====================================================================
+%%% @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
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex/contrib/easy/for-latex2html/easybib.perl b/macros/latex/contrib/easy/for-latex2html/easybib.perl
new file mode 100755
index 0000000000..10e3e16e87
--- /dev/null
+++ b/macros/latex/contrib/easy/for-latex2html/easybib.perl
@@ -0,0 +1,75 @@
+############################################################################
+# #
+# Extension to LaTeX2HTML to load further features from #
+# the EASYBIB package. #
+# #
+# date : 1999, Sept. 12 #
+# release : 1.0 (beta) #
+# file : easybib.perl #
+# author : Enrico Bertolazzi #
+# email : enrico.bertolazzi@ing.unitn.it, #
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2, or (at your option) #
+# any later version. #
+# #
+# This program is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program; if not, write to the Free Software #
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #
+# #
+# Copyright (C) 1999 #
+# #
+# Enrico Bertolazzi #
+# Dipartimento di Ingegneria Meccanica e Strutturale #
+# Universita` degli Studi di Trento #
+# Via Mesiano 77, I-38050 Trento, Italy #
+# #
+# ___ ____ ___ _ _ ___ ____ ___ _ _ #
+# / \ / / \ \ / / \ / / \ \ / #
+# /____/ /__ /____/ \/ /____/ /__ /____/ \/ #
+# / \ / / \ / / \ / / \ / #
+# /____/ /____ / \ / /____/ /____ / \ / #
+# #
+############################################################################
+
+package main;
+
+sub do_easybib_definethebibliography {}
+
+&ignore_commands( <<_IGNORED_CMDS_);
+bibdefinestyles # {}
+bibsetfmt # [] # {} # {} # {}
+definethebibliography
+_IGNORED_CMDS_
+
+&process_commands_in_tex (<<_RAW_ARG_CMDS_);
+thebibliography # {}
+_RAW_ARG_CMDS_
+
+&process_commands_nowrap_in_tex (<<_RAW_ARG_NOWRAP_CMDS_);
+thebibliograpgy # <<endthebibliograpgy>>
+_RAW_ARG_NOWRAP_CMDS_
+
+1; # This must be the last line
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/macros/latex/contrib/easy/for-latex2html/easybmat.perl b/macros/latex/contrib/easy/for-latex2html/easybmat.perl
new file mode 100755
index 0000000000..71780682ed
--- /dev/null
+++ b/macros/latex/contrib/easy/for-latex2html/easybmat.perl
@@ -0,0 +1,46 @@
+############################################################################
+# #
+# Extension to LaTeX2HTML to load further features from #
+# the EASYBMAT package. #
+# #
+# date : 1999, Sept. 12 #
+# release : 1.0 (beta) #
+# file : easybmat.perl #
+# author : Enrico Bertolazzi #
+# email : enrico.bertolazzi@ing.unitn.it, #
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2, or (at your option) #
+# any later version. #
+# #
+# This program is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program; if not, write to the Free Software #
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #
+# #
+# Copyright (C) 1999 #
+# #
+# Enrico Bertolazzi #
+# Dipartimento di Ingegneria Meccanica e Strutturale #
+# Universita` degli Studi di Trento #
+# Via Mesiano 77, I-38050 Trento, Italy #
+# #
+# ___ ____ ___ _ _ ___ ____ ___ _ _ #
+# / \ / / \ \ / / \ / / \ \ / #
+# /____/ /__ /____/ \/ /____/ /__ /____/ \/ #
+# / \ / / \ / / \ / / \ / #
+# /____/ /____ / \ / /____/ /____ / \ / #
+# #
+############################################################################
+
+package main;
+
+sub do_easybmat_thinlines {}
+sub do_easybmat_thicklines {}
+
+1; # This must be the last line
diff --git a/macros/latex/contrib/easy/for-latex2html/easyeqn.perl b/macros/latex/contrib/easy/for-latex2html/easyeqn.perl
new file mode 100755
index 0000000000..183ef2214d
--- /dev/null
+++ b/macros/latex/contrib/easy/for-latex2html/easyeqn.perl
@@ -0,0 +1,333 @@
+############################################################################
+# #
+# Extension to LaTeX2HTML to load further features from #
+# the EASYEQN package. #
+# #
+# date : 2002, March 18 #
+# release : 1.1 (beta) #
+# first release : 1999, Sept. 12 #
+# file : easyeqn.perl #
+# author : Enrico Bertolazzi #
+# email : enrico.bertolazzi@ing.unitn.it, #
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2, or (at your option) #
+# any later version. #
+# #
+# This program is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program; if not, write to the Free Software #
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #
+# #
+# Copyright (C) 1999 #
+# #
+# Enrico Bertolazzi #
+# Dipartimento di Ingegneria Meccanica e Strutturale #
+# Universita` degli Studi di Trento #
+# Via Mesiano 77, I-38050 Trento, Italy #
+# #
+# ___ ____ ___ _ _ ___ ____ ___ _ _ #
+# / \ / / \ \ / / \ / / \ \ / #
+# /____/ /__ /____/ \/ /____/ /__ /____/ \/ #
+# / \ / / \ / / \ / / \ / #
+# /____/ /____ / \ / /____/ /____ / \ / #
+# #
+############################################################################
+
+package main;
+
+$display_env_rx = join('|', $display_env_rx, 'EQ','EQA');
+
+%easyeqn_align = (
+ 'l' => " ALIGN=\"LEFT\" ",
+ 'c' => " ALIGN=\"CENTER\" ",
+ 'r' => " ALIGN=\"RIGHT\" "
+ ) ;
+
+%easyeqn_valign = (
+ 't' => " VALIGN=\"TOP\" ",
+ 'c' => " VALIGN=\"CENTER\" ",
+ 'b' => " VALIGN=\"BOTTOM\" "
+ ) ;
+
+$easyeqn_label_vpos = "c" ;
+$easyeqn_label_hpos = "r" ;
+$easyeqn_lc = "c" ;
+$easyeqn_allnumber = 0 ;
+
+sub do_easyeqn_leqno { $easyeqn_label_hpos = "l" ; }
+sub do_easyeqn_fleqn { $easyeqn_lc = "l" ; }
+sub do_easyeqn_math { }
+sub do_easyeqn_allnumber { $easyeqn_allnumber = 1 ; }
+sub do_easyeqn_warning { }
+
+sub do_cmd_refeq {
+ local($_) = @_;
+ join('',&process_ref($cross_ref_mark,$cross_ref_mark,'')) ;
+}
+
+sub do_cmd_eqlabeltop {
+ local($_) = @_;
+ $easyeqn_label_vpos = "t" ;
+ join('',$_);
+}
+
+sub do_cmd_eqlabelbot {
+ local($_) = @_;
+ $easyeqn_label_vpos = "b" ;
+ join('',$_);
+}
+
+sub do_cmd_eqlabelcenter {
+ local($_) = @_;
+ $easyeqn_label_vpos = "c" ;
+ join('',$_);
+}
+
+sub do_cmd_equationcenter {
+ local($_) = @_;
+ $easyeqn_lc = "c" ;
+ join('',$_);
+}
+
+sub do_cmd_equationleft {
+ local($_) = @_;
+ $easyeqn_lc = "l" ;
+ join('',$_);
+}
+
+sub do_cmd_numberleft {
+ local($_) = @_;
+ $easyeqn_label_hpos = "l" ;
+ join('',$_);
+}
+
+sub do_cmd_numberright {
+ local($_) = @_;
+ $easyeqn_label_hpos = "r" ;
+ join('',$_);
+}
+
+sub do_env_EQ {
+ local($_) = @_;
+ $_ =~ s/\\eqlabel/\\label/g ;
+ my $label = " " ;
+ my $label_name = "";
+
+ $latex_body .= join('',
+ "\n\\setcounter{equation}{",
+ $global{'eqn_number'}, "}\n");
+
+ if ( $easy_allnumber ) { $global{'eqn_number'}++ ; }
+
+ if ( /\\label\s*\[([^\]]+)\]\s*(<<\d+>>)(.+)\2/ || /\\label\s*(\([^\)]+\))\s*(<<\d+>>)(.+)\2/ ) {
+ # \label[..]{..}
+ # \label(..){...}
+ $_ = $`. $' ;
+ $label_name = $3 ;
+ my $buffer = $1 ;
+ $buffer =~ s/~/$global{'eqn_number'}/i ;
+ $label = join('', &translate_commands($buffer) ) ;
+ }
+ elsif (/\\label\s*\[([^\]]+)\]/ || /\\label\s*(\([^\)]+\))/ ) {
+ # \label[..]
+ # \label(..)
+ $_ = $`. $' ;
+ my $buffer = $1 ;
+ $buffer =~ s/~/$global{'eqn_number'}/i ;
+ $label = join('', &translate_commands($buffer) ) ;
+ }
+ elsif ( /\\label\s*(<<\d+>>)(.+)\1/ ) {
+ # \label{...}
+ $_ = $`. $' ;
+ $label_name = $2 ;
+ $global{'eqn_number'}++ unless $easy_allnumber ;
+ $label = join('',"(", &translate_commands('\theequation'), ")" ) ;
+ }
+ elsif (/\\yesnumber/ || $easyeqn_allnumber ) {
+ $_ = $`. $' ;
+ $global{'eqn_number'}++ unless $easy_allnumber ;
+ $label = join('',"(", &translate_commands('\theequation'), ")" ) ;
+ }
+
+ $_ = &process_undefined_environment($env,$id,$_),
+
+ my $label_left = " " ;
+ my $label_right = " " ;
+ if ( $easyeqn_label_hpos eq "l" ) {
+ $label_left = $label ;
+ } else {
+ $label_right = $label ;
+ }
+
+ join('',
+ "\n<A NAME=\"", $label_name,"\">",
+ "\n <table WIDTH=\"100%\">",
+ "\n <tr",$easyeqn_align{$easyeqn_label_vpos},">",
+ "\n <td WIDTH=\"10%\" ALIGN=\"LEFT\">", $label_left, "</td>",
+ "\n <td WIDTH=\"90%\"",$easyeqn_align{$easyeqn_lc},">",
+ $_,
+ "</td>",
+ "\n <td WIDTH=\"10%\" ALIGN=\"RIGHT\">", $label_right, "</td>",
+ "\n </tr>",
+ "\n </table>",
+ "\n</A>") ;
+}
+
+###############################################################################
+
+sub do_env_EQA {
+ local($_) = @_ ;
+
+ my $local_id = $id ;
+
+ s/^\s+//g ;
+ s/^\n+/\n/g ;
+
+ $latex_body .= join('',
+ "\n\\setcounter{equation}{",
+ $global{'eqn_number'}, "}\n");
+
+ # get alignment
+ s/^\s*\[([^\]]+)\]// ;
+ my $align = $1 ;
+
+ $align =~ s/(.)/\1\,/g ;
+
+ my $ncol = 0 ;
+ my @acol ;
+ foreach my $char (split(',',$align)) {
+ $acol[$ncol] = $easyeqn_align{$char} ;
+ $ncol++ ;
+ }
+
+ # delete \\ spacing
+ s/\\\\\s*\[([^\]]+)\]/\\\\/g ;
+
+ my $letter = 'a' ;
+ my $nr = 0 ;
+ my $outeqn = "<BR>\n<table WIDTH=\"100%\">" ;
+
+ # split rows
+
+ foreach $_ ( split('\\\\\\\\',$_) ) {
+ # get label
+
+ my $label = " " ;
+ my $label_name = "";
+
+ if ( $easy_allnumber ) { $global{'eqn_number'}++ ; }
+
+ if ( /\\label\s*\[([^\]]+)\]\s*(<<\d+>>)(.+)\2/ ||
+ /\\label\s*(\([^\)]+\))\s*(<<\d+>>)(.+)\2/ ) {
+ # \label[..]{..}
+ # \label(..){...}
+ $_ = $`. $' ;
+ $label_name = $3 ;
+ my $buffer = $1 ;
+ $buffer =~ s/~/$global{'eqn_number'}/i ;
+ $label = join('', &translate_commands($buffer) ) ;
+ }
+ elsif ( /\\label\s*\[([^\]]+)\]/ ||
+ /\\label\s*(\([^\)]+\))/ ) {
+ # \label[..]
+ # \label(..)
+ $_ = $`. $' ;
+ my $buffer = $1 ;
+ $buffer =~ s/~/$global{'eqn_number'}/i ;
+ $label = join('', &translate_commands($buffer) ) ;
+ }
+ elsif ( /\\label\s*(<<\d+>>)(.+)\1/ ) {
+ # \label{...}
+ $_ = $`. $' ;
+ $label_name = $2 ;
+ $global{'eqn_number'}++ unless $easy_allnumber ;
+ $label = join('',"(", &translate_commands('\theequation'), ")" ) ;
+ }
+ elsif ( /\\yesnumber/ || $easyeqn_allnumber ) {
+ $_ = $`. $' ;
+ $global{'eqn_number'}++ unless $easy_allnumber ;
+ $label = join('',"(", &translate_commands('\theequation'), ")" ) ;
+ }
+
+ my $label_left = " " ;
+ my $label_right = " " ;
+ if ( $easyeqn_label_hpos eq "l" ) {
+ $label_left = $label ;
+ } else {
+ $label_right = $label ;
+ }
+
+ my $fill_left = "\n <td WIDTH=\"1000*\"> </td>" ;
+ my $fill_right = "\n <td WIDTH=\"1000*\"> </td>" ;
+
+ $fill_left = "\n <td WIDTH=\"0*\"> </td>" if ($easyeqn_lc eq "l") ;
+
+ $outeqn = join('',
+ $outeqn,
+ "\n<tr>",
+ "\n <td WIDTH=\"10%\" VALIGN=CENTER ALIGN=\"LEFT\">",
+ $label_left,
+ "</td>",
+ $fill_left,
+ "\n <A NAME = \"", $label_name, "\"></A>") ;
+
+ my $nc = 0 ;
+ # split columns
+ foreach ( split('\;SPMamp\;',$_) ) {
+ $id = $letter . $local_id ;
+ $_ = &process_undefined_environment("displaymath", $id, $_) ;
+ $outeqn = join('',
+ $outeqn,
+ "\n <td WIDTH=\"0*\" VALIGN=CENTER ", $acol[$nc],">",
+ $_,
+ "</td>") ;
+ $nc++ ;
+ $letter++ ;
+ }
+
+ $outeqn = join('',
+ $outeqn,
+ $fill_right,
+ "\n <td WIDTH=\"10%\" VALIGN=CENTER ALIGN=\"RIGHT\">",
+ $label_right,
+ "</td>",
+ "\n</tr>") ;
+ $nr++ ;
+ }
+ join('',$outeqn, "\n</table>\n<BR CLEAR=\"ALL\">") ;
+}
+
+&ignore_commands( <<_IGNORED_CMDS_);
+_IGNORED_CMDS_
+
+&process_commands_in_tex (<<_RAW_ARG_CMDS_);
+_RAW_ARG_CMDS_
+
+&process_commands_inline_in_tex (<<_RAW_ARG_CMDS_);
+eqspacing # {}
+eqleftmargin # {}
+eqcolumnsep # {}
+eqrowsep # {}
+_RAW_ARG_CMDS_
+
+&process_commands_nowrap_in_tex (<<_RAW_ARG_NOWRAP_CMDS_);
+_RAW_ARG_NOWRAP_CMDS_
+
+&process_commands_wrap_deferred (<<_RAW_ARG_DEFERRED_CMDS_);
+eqlabeltop # &do_cmd_eqlabeltop
+eqlabelbot # &do_cmd_eqlabelbot
+eqlabelcenter # &do_cmd_eqlabelcenter
+equationcenter # &do_cmd_eqnationcenter
+equationleft # &do_cmd_eqnationleft
+numberleft # &do_cmd_numberleft
+numberright # &do_cmd_numberright
+_RAW_ARG_DEFERRED_CMDS_
+
+
+1; # This must be the last line
diff --git a/macros/latex/contrib/easy/for-latex2html/easymat.perl b/macros/latex/contrib/easy/for-latex2html/easymat.perl
new file mode 100755
index 0000000000..d5a546a5cd
--- /dev/null
+++ b/macros/latex/contrib/easy/for-latex2html/easymat.perl
@@ -0,0 +1,46 @@
+############################################################################
+# #
+# Extension to LaTeX2HTML to load further features from #
+# the EASYMAT package. #
+# #
+# date : 1999, Sept. 12 #
+# release : 1.0 (beta) #
+# file : easymat.perl #
+# author : Enrico Bertolazzi #
+# email : enrico.bertolazzi@ing.unitn.it, #
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2, or (at your option) #
+# any later version. #
+# #
+# This program is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program; if not, write to the Free Software #
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #
+# #
+# Copyright (C) 1999 #
+# #
+# Enrico Bertolazzi #
+# Dipartimento di Ingegneria Meccanica e Strutturale #
+# Universita` degli Studi di Trento #
+# Via Mesiano 77, I-38050 Trento, Italy #
+# #
+# ___ ____ ___ _ _ ___ ____ ___ _ _ #
+# / \ / / \ \ / / \ / / \ \ / #
+# /____/ /__ /____/ \/ /____/ /__ /____/ \/ #
+# / \ / / \ / / \ / / \ / #
+# /____/ /____ / \ / /____/ /____ / \ / #
+# #
+############################################################################
+
+package main;
+
+sub do_easymat_thinlines { }
+sub do_easymat_thicklines { }
+
+1; # This must be the last line
diff --git a/macros/latex/contrib/easy/for-latex2html/easytable.perl b/macros/latex/contrib/easy/for-latex2html/easytable.perl
new file mode 100755
index 0000000000..0a4df24e0f
--- /dev/null
+++ b/macros/latex/contrib/easy/for-latex2html/easytable.perl
@@ -0,0 +1,46 @@
+############################################################################
+# #
+# Extension to LaTeX2HTML to load further features from #
+# the EASYTABLE package. #
+# #
+# date : 1999, Sept. 12 #
+# release : 1.0 (beta) #
+# file : easytable.perl #
+# author : Enrico Bertolazzi #
+# email : enrico.bertolazzi@ing.unitn.it, #
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2, or (at your option) #
+# any later version. #
+# #
+# This program is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program; if not, write to the Free Software #
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #
+# #
+# Copyright (C) 1999 #
+# #
+# Enrico Bertolazzi #
+# Dipartimento di Ingegneria Meccanica e Strutturale #
+# Universita` degli Studi di Trento #
+# Via Mesiano 77, I-38050 Trento, Italy #
+# #
+# ___ ____ ___ _ _ ___ ____ ___ _ _ #
+# / \ / / \ \ / / \ / / \ \ / #
+# /____/ /__ /____/ \/ /____/ /__ /____/ \/ #
+# / \ / / \ / / \ / / \ / #
+# /____/ /____ / \ / /____/ /____ / \ / #
+# #
+############################################################################
+
+package main;
+
+sub do_easytable_thinlines {}
+sub do_easytable_thicklines {}
+
+1; # This must be the last line
diff --git a/macros/latex/contrib/easy/for-latex2html/easyvector.perl b/macros/latex/contrib/easy/for-latex2html/easyvector.perl
new file mode 100755
index 0000000000..8b7b7a9811
--- /dev/null
+++ b/macros/latex/contrib/easy/for-latex2html/easyvector.perl
@@ -0,0 +1,65 @@
+############################################################################
+# #
+# Extension to LaTeX2HTML to load further features from #
+# the EASYVECTOR package. #
+# #
+# date : 1999, Sept. 12 #
+# release : 1.0 (beta) #
+# file : easyvector.perl #
+# author : Enrico Bertolazzi #
+# email : enrico.bertolazzi@ing.unitn.it, #
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2, or (at your option) #
+# any later version. #
+# #
+# This program is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program; if not, write to the Free Software #
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #
+# #
+# Copyright (C) 1999 #
+# #
+# Enrico Bertolazzi #
+# Dipartimento di Ingegneria Meccanica e Strutturale #
+# Universita` degli Studi di Trento #
+# Via Mesiano 77, I-38050 Trento, Italy #
+# #
+# ___ ____ ___ _ _ ___ ____ ___ _ _ #
+# / \ / / \ \ / / \ / / \ \ / #
+# /____/ /__ /____/ \/ /____/ /__ /____/ \/ #
+# / \ / / \ / / \ / / \ / #
+# /____/ /____ / \ / /____/ /____ / \ / #
+# #
+############################################################################
+
+package main;
+
+sub do_easyvector_boldcm {}
+sub do_easyvector_boldcc {}
+sub do_easyvector_definevectors {}
+
+&ignore_commands( <<_IGNORED_CMDS_);
+newvector # [] # {}
+newvectora # {} # {}
+newcustomvector # [] # {} # {}
+_IGNORED_CMDS_
+
+&process_commands_in_tex (<<_RAW_ARG_CMDS_);
+_RAW_ARG_CMDS_
+
+&process_commands_inline_in_tex (<<_RAW_ARG_CMDS_);
+_RAW_ARG_CMDS_
+
+&process_commands_nowrap_in_tex (<<_RAW_ARG_NOWRAP_CMDS_);
+_RAW_ARG_NOWRAP_CMDS_
+
+&process_commands_wrap_deferred (<<_RAW_ARG_DEFERRED_CMDS_);
+_RAW_ARG_DEFERRED_CMDS_
+
+1; # This must be the last line
diff --git a/macros/latex/contrib/easy/mydoc.sty b/macros/latex/contrib/easy/mydoc.sty
new file mode 100644
index 0000000000..eca80d0c8b
--- /dev/null
+++ b/macros/latex/contrib/easy/mydoc.sty
@@ -0,0 +1,21 @@
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesClass{mydoc}
+
+%%%
+%%% CHANGE SEARCH PATH
+%%%
+\usepackage[english]{babel}
+%
+\parindent0pt\relax
+\parskip0.4\baselineskip plus 2pt\relax
+
+\newenvironment{desc}{\begin{description}}{\end{description}}
+\newenvironment{dotlist}{\begin{itemize}}{\end{itemize}}
+
+
+\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
+\renewcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
+\renewcommand*\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
+\renewcommand*\l@paragraph{\@dottedtocline{4}{10em}{5em}}
+
+\endinput