% atbeginend.sty % % Licensed to the Apache Software Foundation (ASF) under one or more % contributor license agreements. See the NOTICE file distributed with % this work for additional information regarding copyright ownership. % The ASF licenses this file to You under the Apache License, Version 2.0 % (the "License"); you may not use this file except in compliance with % the License. You may obtain a copy of the License at % % http://www.apache.org/licenses/LICENSE-2.0 % % Unless required by applicable law or agreed to in writing, software % distributed under the License is distributed on an "AS IS" BASIS, % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % See the License for the specific language governing permissions and % limitations under the License. % defines % \BeforeBegin{environment}{code-to-execute} % \BeforeEnd {environment}{code-to-execute} % \AfterBegin {environment}{code-to-execute} % \AfterEnd {environment}{code-to-execute} % % Save \begin and \end to \BeginEnvironment and \EndEnvironment \let\BeginEnvironment=\begin \let\EndEnvironment=\end \def\IfUnDef#1{\expandafter\ifx\csname#1\endcsname\relax} % Null command needed to for \nothing{something}=.nothing. \def\NullCom#1{} \def\begin#1{% % % if defined \BeforeBeg for this environment, execute it \IfUnDef{BeforeBeg#1}\else\csname BeforeBeg#1\endcsname\fi% % % % \IfUnDef{AfterBeg#1}% This is done to skip the command for environments % which can take arguments, like multicols; YOU MUST NOT % USE \AfterBegin{...}{...} for such environments! \let\SaveBegEng=\BeginEnvironment% \else% % Start this environment \BeginEnvironment{#1}% % and execute code after \begin{environment} \csname AfterBeg#1\endcsname% % \let\SaveBegEng=\NullCom% \fi% \SaveBegEng{#1}% } \def\end#1{% % % execute code before \end{environment} \IfUnDef{BeforeEnd#1}\else\csname BeforeEnd#1\endcsname\fi% % % close this environment \EndEnvironment{#1}% % % and execute code after \begin{environment} \IfUnDef{AfterEnd#1}\else\csname AfterEnd#1\endcsname\fi% } %% Now, define commands % \BeforeBegin{environment}{code-to-execute} % \BeforeEnd {environment}{code-to-execute} % \AfterBegin {environment}{code-to-execute} % \AfterEnd {environment}{code-to-execute} \def\BeforeBegin#1#2{\expandafter\gdef\csname BeforeBeg#1\endcsname {#2}} \def\BeforeEnd #1#2{\expandafter\gdef\csname BeforeEnd#1\endcsname {#2}} \def\AfterBegin #1#2{\expandafter\gdef\csname AfterBeg#1\endcsname {#2}} \def\AfterEnd #1#2{\expandafter\gdef\csname AfterEnd#1\endcsname{#2}}