4 % \BeforeBegin{environment}{code-to-execute}
5 % \BeforeEnd {environment}{code-to-execute}
6 % \AfterBegin {environment}{code-to-execute}
7 % \AfterEnd {environment}{code-to-execute}
9 % Save \begin and \end to \BeginEnvironment and \EndEnvironment
10 \let\BeginEnvironment=\begin
11 \let\EndEnvironment=\end
13 \def\IfUnDef#1{\expandafter\ifx\csname#1\endcsname\relax}
15 % Null command needed to for \nothing{something}=.nothing.
20 % if defined \BeforeBeg for this environment, execute it
21 \IfUnDef{BeforeBeg#1}\else\csname BeforeBeg#1\endcsname\fi%
25 \IfUnDef{AfterBeg#1}% This is done to skip the command for environments
26 % which can take arguments, like multicols; YOU MUST NOT
27 % USE \AfterBegin{...}{...} for such environments!
28 \let\SaveBegEng=\BeginEnvironment%
30 % Start this environment
31 \BeginEnvironment{#1}%
32 % and execute code after \begin{environment}
33 \csname AfterBeg#1\endcsname%
35 \let\SaveBegEng=\NullCom%
43 % execute code before \end{environment}
44 \IfUnDef{BeforeEnd#1}\else\csname BeforeEnd#1\endcsname\fi%
46 % close this environment
49 % and execute code after \begin{environment}
50 \IfUnDef{AfterEnd#1}\else\csname AfterEnd#1\endcsname\fi%
54 %% Now, define commands
55 % \BeforeBegin{environment}{code-to-execute}
56 % \BeforeEnd {environment}{code-to-execute}
57 % \AfterBegin {environment}{code-to-execute}
58 % \AfterEnd {environment}{code-to-execute}
60 \def\BeforeBegin#1#2{\expandafter\gdef\csname BeforeBeg#1\endcsname
62 \def\BeforeEnd #1#2{\expandafter\gdef\csname BeforeEnd#1\endcsname
64 \def\AfterBegin #1#2{\expandafter\gdef\csname AfterBeg#1\endcsname {#2}}
65 \def\AfterEnd #1#2{\expandafter\gdef\csname AfterEnd#1\endcsname{#2}}