summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-11 23:53:40 +0000
committerKarl Berry <karl@freefriends.org>2006-01-11 23:53:40 +0000
commitbf2e6836598905624d04944d61680bf7a8e45f49 (patch)
tree65063504620fc056c92264907dba3b8e47f3c819
parent0c6943241405229bdf863374a46abaac9bfd1951 (diff)
trunk/Master/texmf-dist/source/latex/galois
git-svn-id: svn://tug.org/texlive/trunk@304 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/source/latex/galois/README6
-rw-r--r--Master/texmf-dist/source/latex/galois/galois.dtx516
-rw-r--r--Master/texmf-dist/source/latex/galois/galois.ins40
3 files changed, 562 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/galois/README b/Master/texmf-dist/source/latex/galois/README
new file mode 100644
index 00000000000..ad58f1ca701
--- /dev/null
+++ b/Master/texmf-dist/source/latex/galois/README
@@ -0,0 +1,6 @@
+galois.sty V1.04 1999/05/01
+-------------------------------------------------------------------------
+A LaTeX package for writing Galois connections (two dimensional notation).
+This file may be distributed under the terms of the LPPL.
+-------------------------------------------------------------------------
+Patrick.Cousot@ens.fr \ No newline at end of file
diff --git a/Master/texmf-dist/source/latex/galois/galois.dtx b/Master/texmf-dist/source/latex/galois/galois.dtx
new file mode 100644
index 00000000000..f80c8037acd
--- /dev/null
+++ b/Master/texmf-dist/source/latex/galois/galois.dtx
@@ -0,0 +1,516 @@
+\def\fileversion{1.04}
+\def\filedate{1999/05/01}
+% \iffalse meta-comment
+%
+% This file can be redistributed and/or modified under the terms of
+% the LaTeX Project Public License from CTAN archives, as described in
+% macros/latex/base/ lppl.txt in the base LaTeX distribution. Either
+% version 1.0 or, at your option, any later version.
+%
+% \fi
+%
+% \CheckSum{388}
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%
+% \iffalse
+%%
+%% Source File: galois.dtx
+%% Copyright 1994 1998 1999 Patrick.Cousot@ens.fr
+%%
+%
+%<*dtx>
+ \ProvidesFile{galois.dtx}
+%</dtx>
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{galois}
+% \begin{macrocode}
+%<*driver>
+\documentclass{ltxdoc}
+% \end{macrocode}
+%
+% We don't want everything to appear in the index.
+% \begin{macrocode}
+\DoNotIndex{\,,\:,\ ,\hfill,\hskip,\hspace}
+\DoNotIndex{\@ifundefined,\@tempdima,\@tempdimb,\@tempdimc}
+\DoNotIndex{\DoNotIndex,\NeedsTeXFormat,\ifx,\else,\fi,\ifdim,\fi,\endtrivlist}
+\DoNotIndex{\addtolength,\divide,\circ,\cleaders,\ensuremath}
+\DoNotIndex{\begin,\end,\bgroup,\egroup,\begingroup,\endgroup}
+\DoNotIndex{\catcode,\noexpand,\protect,\string,\space}
+\DoNotIndex{\filedate,\filename,\fileversion}
+\DoNotIndex{\hbox,\raisebox,\rlap,\llap,\rule,\smash}
+\DoNotIndex{\let,\def,\newcommand,\newenvironment}
+\DoNotIndex{\m@th,\mathchoice,\mathord,\mathrel,\max,\mkern,\newlength}
+\DoNotIndex{\setlength,\settodepth,\settoheight,\settowidth}
+\DoNotIndex{\tiny,\scriptstyle,\scriptscriptstyle}
+\DoNotIndex{\leftarrow,\rightarrow,\longleftarrow,\longrightarrow}
+\makeatother
+%
+\CodelineNumbered
+\CodelineIndex
+\EnableCrossrefs
+\RecordChanges
+%
+\usepackage{galois}
+\begin{document}
+\DocInput{galois.dtx}
+\PrintIndex
+\PrintChanges
+\end{document}
+%</driver>
+% \end{macrocode}
+% \fi
+% \ProvidesFile{galois.dtx}
+ [\filedate\space v\fileversion, Galois connections, Patrick.Cousot@ens.fr]
+%
+%
+% \changes{v0.00}{1996/11/25}
+% {Initial version for LaTeX 2.09}
+% \changes{v1.00}{1997/05/19}
+% {Adapted to LaTeX2e}
+% \changes{v1.01}{1998/10/19}
+% {Check "\textbackslash comp" is not already defined (as in "mathtime.sty")}
+% \changes{v1.02}{1998/11/13}
+% {Rewritting of extendable arrows using the TeX book left/right arrowfill
+% p. 357. Added and renamed style parameters ("\textbackslash GaloisSep" now
+% "\textbackslash GaloisArrowTagSep")}
+% \changes{v1.03}{1999/04/02}
+% {Renamed internal macros to avoid interferences with other packages
+% "\textbackslash rightarrowfill" $\rightarrow$ "\textbackslash @GALOISrightarrowfill"
+% "\textbackslash leftarrowfill" $\rightarrow$ "\textbackslash @GALOISleftarrowfill"}
+% \changes{v1.04}{1999/05/01}
+% {\LaTeX{} package file documentation}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \title{The \textsf{galois} package\thanks{This file
+% has version number \fileversion, last
+% revised \filedate.}}
+% \author{Patrick Cousot\\
+% \texttt{Patrick.Cousot@ens.fr}}
+%
+% \date{\filedate}
+%
+% \maketitle
+%
+% ^^A x
+% ^^A \mor{x} = |-------> total morphism
+% ^^A
+% \newcommand{\mor}[1]{\mathrel{\raisebox{-0.1ex}^^A fix heigt of 2nd parameter of stackrel
+% {$\stackrel{\hbox{$\scriptscriptstyle #1$}}{\raisebox{0pt}[0.5ex][0pt]^^A fix height of 1st parameter of stackrel
+% {$\longmapsto$}}$}}}
+%
+% \section{Introduction}
+%
+% This |galois| package introduces two-dimensional notations for
+% Galois connections.
+%
+% \section{Detailled explanations on Galois connections}
+%
+% If $(L$, ${\leq})$ and $(M$, ${\sqsubseteq})$ are posets, $\alpha\in
+% L\mapsto M$, $\gamma\in M\mapsto L$ and $\forall x\in L, y\in M$:
+% $\alpha(x)\sqsubseteq y$ $\iff$ $x\leq\gamma(y)$ then the pair
+% $\langle \alpha$, $\gamma\rangle$ is a {\em Galois connection},
+% written |\galois{\alpha}{\gamma}|:
+% \DescribeMacro{\galois}
+% \begin{displaymath}
+% (L,\,{\leq})\galois{\alpha}{\gamma}(M,\,{\sqsubseteq})
+% \end{displaymath}
+% In a Galois connection, $\alpha$ is onto if and only if $\gamma$ is
+% one-to-one if and only if $\alpha \comp \gamma$ = 1 (where ${\comp}$
+% is the functional composition and 1 the identity), written
+% |\galoiS{\alpha}{\gamma}|:
+% \DescribeMacro{\galoiS}
+% \begin{displaymath}
+% (L,\,{\leq})\galoiS{\alpha}{\gamma}(M,\,{\sqsubseteq})
+% \end{displaymath}
+% $\alpha$ is one-to-one if and only if $\gamma$ is onto
+% if and only if $\gamma\comp\alpha$ = 1, written
+% |\Galois{\alpha}{\gamma}|:
+% \DescribeMacro{\Galois}
+% \begin{displaymath}
+% (L,\,{\leq})\Galois{\alpha}{\gamma}(M,\,{\sqsubseteq})
+% \end{displaymath}
+% For a bijection, we write
+% |\GaloiS{\alpha}{\gamma}|:
+% \DescribeMacro{\GaloiS}
+% \begin{displaymath}
+% (L,\,{\leq})\GaloiS{\alpha}{\gamma}(M,\,{\sqsubseteq})
+% \end{displaymath}
+% The surjection on the quotient of $M$ by the equivalence relation
+% $x\equiv y$ defined by $\gamma(x)=\gamma(y)$ is denoted
+% |\galoiSr{\alpha}{\gamma}|:
+% \DescribeMacro{\galoiSr}
+% \begin{displaymath}
+% (L,\,{\leq})\galoiSr{\alpha}{\gamma}(M,\,{\sqsubseteq})
+% \end{displaymath}
+% The composition of Galois connections:
+% \begin{displaymath}
+% (L,\,{\leq})\galois{\alpha_1}{\gamma_1}(M,\,{\sqsubseteq})
+% \quad{\rm and}\quad
+% (M,\,{\sqsubseteq})\galois{\alpha_2}{\gamma_2}(N,\,{\preceq})
+% \end{displaymath}
+% is a Galois connection (the composition $\comp$ o functions is
+% |\comp|):
+% \DescribeMacro{\comp}
+% \begin{displaymath}
+% (L,\,{\leq})\galois{\alpha_2\comp\alpha_1}{\gamma_1\comp\gamma_2}(N,\,{\preceq})
+% \end{displaymath}
+% Galois connections
+% $(L,\,{\leq})\galois{\alpha}{\gamma}(M,\,\sqsubseteq)$ can be lifted
+% from sets of properties to sets of monotone functions:
+% \begin{displaymath}
+% (L\mor{m}L,\,{\leq})\galois{\lambda{\varphi}\cdot{\alpha\comp\varphi\comp\gamma}}{\lambda{\phi}\cdot{\gamma\comp\phi\comp\alpha}}(M\mor{m}M,\,{\sqsubseteq})
+% \end{displaymath}
+% where the ordering on functions is pointwise that is
+% $\varphi\preceq\phi$ if and only if $\forall
+% x:\varphi(x)\preceq\phi(x)$. Observe that the length of the arrows
+% stretches automatically to the appropriate width.
+%
+% \section{Style parameters}
+%
+% You can use Galois connections in any size (footnotes, transparencies,
+% etc.) :
+% {\tiny tiny $L\galois{\alpha}{\gamma}M$},
+% {\scriptsize scriptsize $L\galois{\alpha}{\gamma}M$},
+% {\footnotesize footnotesize $L\galois{\alpha}{\gamma}M$},
+% {\small small $L\galois{\alpha}{\gamma}M$},
+% {\normalsize normalsize $L\galois{\alpha}{\gamma}M$},
+% {\large large $L\galois{\alpha}{\gamma}M$},
+% {\Large Large $L\galois{\alpha}{\gamma}M$},
+% {\LARGE LARGE $L\galois{\alpha}{\gamma}M$},
+% {\huge huge $L\galois{\alpha}{\gamma}M$},
+% {\Huge Huge $L\galois{\alpha}{\gamma}M$}.
+% Observe that in $\GaloiS{\rule{3cm}{1cm}}{\rule{0.5cm}{1cm}}$ the
+% width of arrows and height of enclosing box are automatically adjusted
+% according to the size of $\alpha$ and $\gamma$. You can adjust the
+% following parameters:
+% \DescribeMacro{\GaloisStyle}
+% \begin{description}
+% \item[]|\GaloisStyle| : style of upper and lower tags
+% (|\scripstyle | by default);
+% \end{description}
+% \DescribeMacro{\GaloisArrowThickness}
+% \begin{description}
+% \item[]|\GaloisArrowThickness| : thickness of the arrow stems
+% \footnote{stem is ``tige'' in french.};
+% (|0.1ex| by default);
+% \end{description}
+% \DescribeMacro{\GaloisArrowsSep}
+% \begin{description}
+% \item[]|\GaloisArrowsSep| : distance between the arrows
+% (|0.2ex| by default);
+% \end{description}
+% \DescribeMacro{\GaloisArrowTagSep}
+% \begin{description}
+% \item[]|\GaloisArrowTagSep| : distance between arrows and tags
+% (|0.5ex| by default).
+% \end{description}
+% For example with:
+% \begin{quote}
+% |\renewcommand{\GaloisArrowsSep}{1cm}|\\
+% |\renewcommand{\GaloisArrowTagSep}{0pt}|
+% \end{quote}
+% we get
+% \renewcommand{\GaloisArrowsSep}{1cm}\renewcommand{\GaloisArrowTagSep}{0pt}
+% $\GaloiS{\rule{3cm}{1cm}}{\rule{0.5cm}{1cm}}$ while with:
+% \begin{quote}
+% |\renewcommand{\GaloisArrowsSep}{0pt}|\\
+% |\renewcommand{\GaloisArrowTagSep}{5mm}|
+% \end{quote}
+% we get \renewcommand{\GaloisArrowsSep}{0pt}\renewcommand{\GaloisArrowTagSep}{5mm}
+% $\GaloiS{\rule{3cm}{1cm}}{\rule{0.5cm}{1cm}}$ and with
+% \begin{quote}
+% |\renewcommand{\GaloisArrowsSep}{0pt}|\\
+% |\renewcommand{\GaloisArrowTagSep}{0pt}|
+% \end{quote}
+% we get
+% \renewcommand{\GaloisArrowsSep}{0pt}\renewcommand{\GaloisArrowTagSep}{0pt}
+% $\GaloiS{\rule{3cm}{1cm}}{\rule{0.5cm}{1cm}}$.
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% ^^A Reset style parameters to default
+% \renewcommand{\GaloisStyle}{\scriptstyle}%
+% \renewcommand{\GaloisArrowThickness}{0.1ex}%
+% \renewcommand{\GaloisArrowsSep}{0.2ex}%
+% \renewcommand{\GaloisArrowTagSep}{0.5ex}%
+% \begin{macro}{\comp}
+% Define functional composition $f\comp g(x)$ is $f(g(x))$ (if not
+% already defined e.g.\ as in |mathtime.sty|):
+% \begin{macrocode}
+\@ifundefined{comp}{%
+\newcommand{\comp}{\mathchoice{\mathrel{\raisebox{0.2ex}{$\scriptstyle\circ$}}}%
+{\mathrel{\raisebox{0.2ex}{$\scriptstyle\circ$}}}%
+{\mathrel{\raisebox{0.1ex}{$\scriptscriptstyle\circ$}}}%
+{\mathrel{\raisebox{0.1ex}{$\scriptscriptstyle\circ$}}}}%
+}{}%
+% \end{macrocode}
+% \end{macro}
+%
+% Style commands:
+% \begin{macro}{\GaloisStyle}
+% Style of $a$ and $b$ in $\galois{a}{b}$, $\Galois{a}{b}$, $\galoiS{a}{b}$ or
+% $\GaloiS{a}{b}$:
+% \begin{macrocode}
+\newcommand{\GaloisStyle}{\scriptstyle}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GaloisArrowThickness}
+% Thickness of the arrow stems (0.1ex by default):
+% \begin{macrocode}
+\newcommand{\GaloisArrowThickness}{0.1ex}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GaloisArrowsSep}
+% Distance between the lower and upper arrows (0.2ex by default):
+% \begin{macrocode}
+\newcommand{\GaloisArrowsSep}{0.2ex}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GaloisArrowTagSep}
+% Distance between the lower arrow and the top of $a$ and the
+% top-arrow and the bottom of $b$ (0.5ex by default)
+% \begin{macrocode}
+\newcommand{\GaloisArrowTagSep}{0.5ex}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@GALOISalphadepth}
+% \begin{macro}{\@GALOISalphaheight}
+% \begin{macro}{\@GALOISgammadepth}
+% \begin{macro}{\@GALOISwidth}
+% \begin{macro}{\@GALOISheight}
+% \begin{macro}{\@GALOISdepth}
+% \begin{macro}{\@GALOIStotalheight}
+% \begin{macro}{\@GALOISGap}
+% \begin{macro}{\@GALOISalphaarrowwidth}
+% \begin{macro}{\@GALOISalphaarrowhalfheight}
+% \begin{macro}{\@GALOISgammaarrowwidth}
+% \begin{macro}{\@GALOISgammaarrowhalfheight}
+% Auxiliary lengths:
+% \begin{macrocode}{}
+\newlength{\@GALOISalphadepth}%
+\newlength{\@GALOISalphaheight}%
+\newlength{\@GALOISgammadepth}%
+\newlength{\@GALOISwidth}%
+\newlength{\@GALOISheight}%
+\newlength{\@GALOISdepth}%
+\newlength{\@GALOIStotalheight}%
+\newlength{\@GALOISGap}%
+\newlength{\@GALOISalphaarrowwidth}%
+\newlength{\@GALOISalphaarrowhalfheight}%
+\newlength{\@GALOISgammaarrowwidth}%
+\newlength{\@GALOISgammaarrowhalfheight}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Galois@put}
+% |\Galois@put(x,y-d){text}| puts text at coordinates $(x,y-d)$, in
+% a box of size 0\texttt{pt} $\times$ 0\texttt{pt}:
+% \begin{macrocode}
+\def\Galois@put(#1,#2-#3)#4{\rlap{\smash{\hskip#1\setlength{\@tempdimc}{#2}%
+\addtolength{\@tempdimc}{-#3}\raisebox{\@tempdimc}{#4}}}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@GALOISrightarrowfill}
+% |\@GALOISrightarrowfill{\rightarrow}|, see \TeX book p.\ 357.
+% \begin{macrocode}
+\def\@GALOISrightarrowfill#1{$\m@th \smash- \mkern-7mu%
+ \cleaders\hbox{$\mkern-2mu \smash- \mkern-2mu$}\hfill%
+ \mkern-7mu \mathord{#1}$}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@GALOISleftarrowfill}
+% |\@GALOISleftarrowfill{\leftarrow}|, see \TeX book p.\ 357.
+% \begin{macrocode}
+\def\@GALOISleftarrowfill#1{$\m@th \mathord{#1} \mkern-7mu%
+ \cleaders\hbox{$\mkern-2mu \smash- \mkern-2mu$}\hfill%
+ \mkern-7mu \smash-$}%
+% \end{macrocode}
+% \end{macro}
+%
+% Stacking $a$, the arrows and $g$ in $\galois{a}{g}$:
+% \begin{macro}{\@GALOIS}
+% |\@GALOIS{a}{g}{-->}{<--}| constructs $\galois{a}{g}$:
+% \begin{macrocode}
+\def\@GALOIS#1#2#3#4{%
+\ensuremath{\mathrel{%
+\def\@GALOISalphatag{\ $\GaloisStyle#1$\ }%
+\def\@GALOISgammatag{\ $\GaloisStyle#2$\ }%
+% compute width of alpha/lower and gamma/upper arrows
+\settowidth{\@GALOISalphaarrowwidth}{$\mathord{#3}$}%
+\settowidth{\@GALOISgammaarrowwidth}{$\mathord{#4}$}%
+% compute width of the picture \@GALOISwidth
+\ifdim\@GALOISalphaarrowwidth>\@GALOISgammaarrowwidth%
+\settowidth{\@tempdima}{\hbox{\hspace*{\@GALOISalphaarrowwidth}\@GALOISalphatag}}%
+\settowidth{\@tempdimb}{\hbox{\hspace*{\@GALOISalphaarrowwidth}\@GALOISgammatag}}%
+\else%
+\settowidth{\@tempdima}{\hbox{\hspace*{\@GALOISgammaarrowwidth}\@GALOISalphatag}}%
+\settowidth{\@tempdimb}{\hbox{\hspace*{\@GALOISgammaarrowwidth}\@GALOISgammatag}}%
+\fi%
+\ifdim\@tempdima>\@tempdimb%
+\setlength{\@GALOISwidth}{\@tempdima}%
+\else%
+\setlength{\@GALOISwidth}{\@tempdimb}%
+\fi%
+\def\@GALOISrightarrow{\hbox to\@GALOISwidth{\@GALOISrightarrowfill{#3}}}%
+\def\@GALOISleftarrow{\hbox to\@GALOISwidth{\@GALOISleftarrowfill{#4}}}%
+% compute half height of alpha/lower arrow
+\settodepth{\@GALOISalphaarrowhalfheight}{$\mathord{#3}$}%
+\settoheight{\@tempdima}{$\mathord{#3}$}%
+\addtolength{\@GALOISalphaarrowhalfheight}{\@tempdima}%
+\divide \@GALOISalphaarrowhalfheight by 2%
+% compute half height of gamma/upper arrow
+\settodepth{\@GALOISgammaarrowhalfheight}{$\mathord{#4}$}%
+\settoheight{\@tempdima}{$\mathord{#4}$}%
+\addtolength{\@GALOISgammaarrowhalfheight}{\@tempdima}%
+\divide \@GALOISgammaarrowhalfheight by 2%
+% compute the distance between the two arrows \@GALOISGap =
+% \max(\@GALOISalphaarrowhalfheight,\@GALOISgammaarrowhalfheight)+\GaloisArrowsSep
+\ifdim\@GALOISalphaarrowhalfheight>\@GALOISgammaarrowhalfheight%
+\setlength{\@GALOISGap}{\@GALOISalphaarrowhalfheight}%
+\else%
+\addtolength{\@GALOISGap}{\@GALOISgammaarrowhalfheight}%
+\fi%
+\addtolength{\@GALOISGap}{\GaloisArrowsSep}%
+% lift from the stems thickness
+\addtolength{\@GALOISGap}{\GaloisArrowThickness }%
+\addtolength{\@GALOISGap}{\GaloisArrowThickness }%
+% compute height \@GALOISheight depth \@GALOISdepth
+% and total height \@GALOIStotalheight of the picture
+\settodepth{\@GALOISalphadepth}{\@GALOISalphatag}%
+\settoheight{\@GALOISalphaheight}{\@GALOISalphatag}%
+\settodepth{\@GALOISgammadepth}{\@GALOISgammatag}%
+% compute depth \@GALOISdepth of the picture
+% \@GALOISdepth = \@GALOISalphadepth+\@GALOISalphaheight % vertical size of alpha tag
+% + \GaloisArrowTagSep % between top of tag and arrow
+\setlength{\@GALOISdepth}{\@GALOISalphadepth}%
+\addtolength{\@GALOISdepth}{\@GALOISalphaheight}%
+\addtolength{\@GALOISdepth}{\GaloisArrowTagSep}%
+\addtolength{\@GALOISdepth}{-\GaloisArrowThickness }% lift from the stem thickness
+% compute height \@GALOISheight of the picture
+\setlength{\@GALOISheight}{\@GALOISGap}%
+\addtolength{\@GALOISheight}{\GaloisArrowTagSep}%
+\addtolength{\@GALOISheight}{\@GALOISgammadepth}%
+\settoheight{\@tempdima}{\@GALOISgammatag}%
+\addtolength{\@GALOISheight}{\@tempdima}%
+% compute total height \@GALOIStotalheight of the picture
+% \@GALOIStotalheight = \@GALOISdepth + \@GALOISheight
+\setlength{\@GALOIStotalheight}{\@GALOISdepth}%
+\addtolength{\@GALOIStotalheight}{\@GALOISheight}%
+% put alpha arrow
+\Galois@put(0pt,0pt-\@GALOISalphaarrowhalfheight){\@GALOISrightarrow}%
+% put gamma arrow
+\Galois@put(0pt,\@GALOISGap-\@GALOISalphaarrowhalfheight){\@GALOISleftarrow}%
+% put alpha
+\setlength{\@tempdima}{\@GALOISwidth}%
+\settowidth{\@tempdimb}{\@GALOISalphatag}%
+\addtolength{\@tempdima}{-\@tempdimb}%
+\divide\@tempdima by 2%
+\Galois@put(\@tempdima,\@GALOISalphadepth-\@GALOISdepth){\@GALOISalphatag}%
+% put gamma
+\setlength{\@tempdima}{\@GALOISwidth}%
+\settowidth{\@tempdimb}{\@GALOISgammatag}%
+\addtolength{\@tempdima}{-\@tempdimb}%
+\divide\@tempdima by 2%
+\setlength{\@tempdimb}{\@GALOISalphadepth}%
+\addtolength{\@tempdimb}{\@GALOISalphaheight}%
+\addtolength{\@tempdimb}{\GaloisArrowTagSep}%
+\addtolength{\@tempdimb}{\GaloisArrowTagSep}%
+\addtolength{\@tempdimb}{\@GALOISGap}%
+\addtolength{\@tempdimb}{\@GALOISgammadepth}%
+\Galois@put(\@tempdima,\@tempdimb-\@GALOISdepth){\@GALOISgammatag}%
+\rule[-\@GALOISdepth]{0pt}{\@GALOIStotalheight}% set depth and height
+\hspace*{\@GALOISwidth}% set width
+}}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\galois}
+% |\galois{a}{g}| is $\galois{a}{g}$.
+% \begin{macrocode}
+\newcommand{\galois}[2]{\@GALOIS{#1}{#2}{\rightarrow}{\leftarrow}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\galoiS}
+% |\galoiS{a}{g}| is $\galoiS{a}{g}$ ($a$ onto, $g$ one-to-one, $a
+% \comp g = 1$):
+% \begin{macrocode}
+\def\@GALOISmytwoheadrightarrow{\rlap{$\:\,{\rightarrow}$}{\longrightarrow}}%
+\def\@GALOIStwoheadrightarrow{\protect\@GALOISmytwoheadrightarrow}%
+\newcommand{\galoiS}[2]{\@GALOIS{#1}{#2}{\@GALOIStwoheadrightarrow}{\leftarrow}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\galoiSr}
+% |\galoiSr{a}{g}| is $\galoiSr{a}{g}$.
+% \begin{macrocode}
+\def\@GALOISmytwoheadrightarrowreduc{\rlap{\smash{\hskip1ex\raisebox{0.815ex}%
+{\tiny$\equiv$}}}\rlap{$\:\,{\rightarrow}$}{\longrightarrow}}%
+\def\@GALOIStwoheadrightarrowreduc{\protect\@GALOISmytwoheadrightarrowreduc}%
+\newcommand{\galoiSr}[2]{\@GALOIS{#1}{#2}{\@GALOIStwoheadrightarrowreduc}{\leftarrow}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Galois}
+% |\Galois{a}{g}| is $\Galois{a}{g}$ ($a$ one-to-one, $g$ onto, $g
+% \comp a = 1$):
+% \begin{macrocode}
+\def\@GALOISmytwoheadleftarrow{\rlap{$\:{\leftarrow}$}{\longleftarrow}}%
+\def\@GALOIStwoheadleftarrow{\protect\@GALOISmytwoheadleftarrow}%
+\newcommand{\Galois}[2]{\@GALOIS{#1}{#2}{\rightarrow}{\@GALOIStwoheadleftarrow}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GaloiS}
+% |\GaloiS{a}{g}| is $\GaloiS{a}{g}$ ($a$ bijective with inverse $g$).
+% \begin{macrocode}
+\newcommand{\GaloiS}[2]{\@GALOIS{#1}{#2}%
+{\@GALOIStwoheadrightarrow}{\@GALOISmytwoheadleftarrow}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \Finale
+%
+\endinput \ No newline at end of file
diff --git a/Master/texmf-dist/source/latex/galois/galois.ins b/Master/texmf-dist/source/latex/galois/galois.ins
new file mode 100644
index 00000000000..25b6d13d039
--- /dev/null
+++ b/Master/texmf-dist/source/latex/galois/galois.ins
@@ -0,0 +1,40 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% This file can be redistributed and/or modified under the terms of
+%% the LaTeX Project Public License from CTAN archives, as described in
+%% macros/latex/base/ lppl.txt in the base LaTeX distribution. Either
+%% version 1.0 or, at your option, any later version.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\input docstrip
+\keepsilent
+\preamble
+
+This generated file may be distributed under the terms of the LaTeX
+Project Public License, as described in lppl.txt in the base LaTeX
+distribution. Either version 1.0 or, at your option, any later
+version.
+
+\endpreamble
+
+\askforoverwritefalse
+
+\generate{\file{galois.sty}{\from{galois.dtx}{package}}}
+
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation move the following}
+\Msg{* style file into a directory searched by LaTeX:}
+\Msg{*}
+\Msg{* \space\space\space galois.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file}
+\Msg{* `galois.dtx' through LaTeX.}
+\Msg{*}
+\Msg{***********************************************************}
+
+\endbatchfile