% last change   : 15.11.2007 18:13:18
% status        : 0.17 beta
% created       : 2001/06/28 17:49:53
%
% subject       : jurabase package - basic jura commands
%
% to do         : 
%
% © Axel Sodtalbers

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{jurabase}[2007/11/15 V0.17 basic jura commands (AS)]

% - some reworking of forwardandback environment code
% - patched code of \so (= \sob) command for proper function
%   when soul package is used.

%========================================
%               
% Erforderliche Pakete
%
%========================================

\RequirePackage{xspace}
\RequirePackage{calc}
\RequirePackage{ifthen}


%========================================
%               
%  Switch indent on and off
%
%========================================

\newlength{\oldparindent}
\setlength{\oldparindent}{\parindent}

\newcommand{\indentoff}{%
  \setlength{\parindent}{0pt}}
  
\newcommand{\resetindent}{%
  \setlength{\parindent}{\oldparindent}}


%========================================
%               
%  enumeration in germin law docs
%
%========================================

\iffalse

  I.
    2.
      c.
        dd.
\fi


\newcommand{\juraenum}{ 
  \renewcommand{\labelenumi}{\Roman{enumi}.}
  \renewcommand{\labelenumii}{\arabic{enumii}.}
  \renewcommand{\labelenumiii}{\alph{enumiii})}
  \renewcommand{\labelenumiv}{\alph{enumiv}\alph{enumiv})}}


%========================================
%               
%  forwardandback environment
%  (maybe needs heavy reworking
%
%========================================

\newcounter{fabdepth}
\setcounter{fabdepth}{-1}

\newif\if@infablist
\@infablistfalse

\newif\if@boldfablabel
\@boldfablabelfalse

\newcommand{\@jfablabel}{}

\newenvironment{@fablist}%
  {\begin{list}%
   {}%
   {\setlength{\leftmargin}{\z@}%
    \setlength{\rightmargin}{\z@}%
    \setlength{\itemindent}{\z@}%
    \setlength{\topsep}{\z@}%
    \setlength{\partopsep}{\z@}%
    \setlength{\parsep}{\z@}%
    \setlength{\itemsep}{\z@}%
   }%
  }
  {\end{list}}
  
\newlength{\fablabelwidth}
\newlength{\fablabelsep}
\setlength{\fablabelsep}{\labelsep/2}
  
\newenvironment{forwardandback}[1][III.\ ]% Begl. 464
  {\setcounter{fabdepth}{\@ne}%
   \settowidth{\fablabelwidth}{#1}%
   \@boldfablabelfalse%
   \@infablisttrue%
   \begin{@fablist}%
   \item %
  }
  {\end{@fablist}%
   \@infablistfalse}

\newenvironment{forwardandback*}[1][III.\ ]
  {\setcounter{fabdepth}{\@ne}%
   \settowidth{\fablabelwidth}{#1}%
   \@boldfablabeltrue%
   \@infablisttrue%
   \begin{@fablist}%
   \item %
  }
  {\end{@fablist}%
  \@infablistfalse}

\iffalse

 je groesser der Wert, durch den \labelsep geteilt wird,
 desto enger rueckt der Text an die Marke heran:
    \setlength{\fablabelsep}{\labelsep/16} 
 ist also 'dichter dran'.
\fi

\newcommand{\@startforwardandbacklist}[1]{%
  \begin{list}%
    {}%
    {\setlength{\labelwidth}{\fablabelwidth}%
     \setlength{\labelsep}{\fablabelsep}%
     \setlength{\leftmargin}{(\labelwidth+\labelsep)*\value{fabdepth}}%
     \setlength{\itemindent}{\z@}%
     \setlength{\rightmargin}{\z@}%
     \setlength{\topsep}{\z@}%
     \setlength{\parsep}{\z@}%
     \if@boldfablabel%
       \renewcommand{\@jfablabel}{{\bfseries #1}}%
     \else%
       \renewcommand{\@jfablabel}{#1}%
     \fi%
     \let\makelabel\@jfablabel%
    }%
    \item %
  }

\newcommand{\jfrw}[1]{%
  \if@infablist
    \end{list}%
    \addtocounter{fabdepth}{\@ne}%
    \@startforwardandbacklist{#1}%
  \else%
    \PackageError{jurabase}%
      {\protect\jfrw\space used outside forwardandback environment}%
      {Use the forwardandback environment!}%
  \fi%
}

\newcommand{\jsme}[1]{%
  \if@infablist
    \end{list}%
    \@startforwardandbacklist{#1}%
  \else%
    \PackageError{jurabase}%
      {\protect\jsme\space used outside forwardandback environment}%
      {Use the forwardandback environment!}%
  \fi%
}
  
\newcommand{\jbck}[2][1]{%
  \if@infablist
    \end{list}%
    \addtocounter{fabdepth}{-#1}%
    \ifthenelse{\value{fabdepth}>0}%
      {\@startforwardandbacklist{#2}}%
      {\PackageError{jurabase}%
         {You are on the lowest level, \MessageBreak
          you cannot go back with \protect\jbck\space here.}%
         {Use \protect\jsme\space or rearrange your forwardandback environment!}%
      }
  \else%
    \PackageError{jurabase}%
      {\protect\jbck\space used outside forwardandback environment}%
      {Use the forwardandback environment!}%
  \fi%
}

\newcommand{\fabreset}{%
  \if@infablist
    \setcounter{fabdepth}{\@ne}
  \else%
    \PackageError{jurabase}%
      {\protect\jreset\space used outside forwardandback environment}%
      {Use the forwardandback environment!}%
  \fi%
}    


%========================================
%               
% Verschiedenes 
%
%========================================

\newcommand{\antrag}[2]{
  #1%
  \begin{list}%
    {}% Standardmarke, Kopka 77
    {\setlength{\topsep}{0pt}}% Listenerklaerung
    \item #2%
  \end{list}} 
  
  
%========================================
% bestimmte Auszeichnungen
%========================================

\newcommand*{\qll}[1]{\emph{#1}}%           fuer Quellen

\newcommand{\code}[1]{\texttt{#1}}%         fuer Computeranweisungen, tags o.ae.

\newcommand*{\marke}[1]{{\scshape #1}}%     Markennamen
% \texttrademark (TM) oder \textregistered (R) ?

\newcommand*{\firma}[1]{{\scshape #1}}%     Unternehmensbezeichnung

\newcommand*{\prdbez}[1]{%                  Produktbezeichnung
  {\scshape #1}%
  \index{#1}%
}

%========================================
% Abkuerzungen
%========================================

\iffalse
 Merke: Am Anfang eines Satzes in der Regel keine Abkuerzung
        'Zum Beispiel hat Goethe gesagt ...'  statt: 'Z.B. hat Goethe'
 (Siehe Duden S. 65; Standop 173) 
 
 Merke: *nachgestelltes* zB wird nicht abgekuerzt! (Standop 173)
\fi

\newcommand*{\abkwarning}%
  {\PackageWarning{jurabase}{Keine Abkuerzungen am Satzanfang! (obsoletes Kommando)}}

\newcommand*{\hM}{% Abkuerzung fuer herrschende Ansicht
h.\,M.\xspace}

\newcommand*{\aF}{% Abkuerzung fuer alte Fassung
a.\,F.\xspace}

\newcommand*{\aA}{% Abkuerzung fuer andere Ansicht
a.\,A.\xspace}

\newcommand*{\AnA}{% Abkuerzung fuer andere Ansicht - die wird zugelassen, weil ueblich!
A.\,A.\xspace}

\newcommand*{\aM}{% Abkuerzung fuer andere(r) Meinung 
a.\,M.\xspace}

\newcommand*{\aaO}{% Abkuerzung fuer am angegebenen Ort
a.\,a.\,O.\xspace}

\newcommand*{\aE}{% Abkuerzung fuer am Ende
a.\,E.\xspace}

\newcommand*{\iVm}{% Abkuerzung fuer in Verbindung mit
i.\,V.\,m.\xspace}

\newcommand*{\iHv}{% Abkuerzung fuer in Hoehe von
i.\,H.\,v.\xspace}

\newcommand*{\zB}{% Abkuerzung fuer z.B.
z.\,B.\xspace}

\newcommand*{\ZB}{%
\abkwarning% 
Zum Beispiel\xspace}

\newcommand*{\iS}{% Abkuerzung fuer i.S.
i.\,S.\xspace}

\newcommand*{\iue}{% Abkuerzung fuer im uebrigen (alte Rechtschreibung)
  \iflanguage{ngerman}%
    {\PackageWarning{jurabase}{I am using 'i."U' instead of 'i."u' (language=ngerman!)}%
     i.\,\"U.\xspace}%
    {i.\,\"u.\xspace}%
}

\newcommand*{\iUe}{% Abkuerzung fuer im Uebrigen (neue Rechtschreibung)
  \iflanguage{german}%
    {\PackageWarning{jurabase}{I am using 'i."u' instead of 'i."U' (language=german!)}%
     i.\,\"u.\xspace}%
    {i.\,\"U.\xspace}%
}

\newcommand*{\ia}{% Abkuerzung fuer im allgemeinen (alte Rechtschreibung)
  \iflanguage{ngerman}%
    {\PackageWarning{jurabase}{I am using 'i.A' instead of 'i.a' (language=ngerman!)}%
     i.\,A.\xspace}%
    {i.\,a.\xspace}%
}

\newcommand*{\iA}{% Abkuerzung fuer im Allgemeinen (neue Rechtschreibung)
  \iflanguage{german}%
    {\PackageWarning{jurabase}{I am using 'i.a' instead of 'i.A' (language=german!)}%
     i.\,a.\xspace}%
    {i.\,A.\xspace}%
}

\newcommand*{\iE}{% Abkuerzung fuer im Ergebnis
i.\,Erg.\xspace}

\newcommand*{\IE}{% Abkuerzung fuer Im Ergebnis
\abkwarning%
Im Ergebnis\xspace}

\newcommand*{\iR}{% Abkuerzung fuer i.R.
i.\,R.\xspace}

\newcommand*{\sa}{% Abkuerzung fuer siehe auch
s.\,a.\xspace}

\newcommand*{\Sa}{% Abkuerzung fuer Siehe auch
\abkwarning%
Siehe auch\xspace}

\AtBeginDocument{
  \@ifundefined{so}% Abkuerzung fuer siehe oben
    {\newcommand*{\so}{s.\,o.\xspace}%
     \let\sob\so%  
    }%   
    {\PackageWarning{jurabase}%
       {Command \protect\so\space is already defined (maybe because you\MessageBreak
        are using the 'soul' package).\MessageBreak
        Please use the command \protect\sob\space  to typeset\MessageBreak
        the abbreviation 'siehe oben'!}%
     \newcommand*{\sob}{s.\,o.\xspace}%
    }
}

\newcommand*{\So}{% Abkuerzung fuer Siehe oben
\abkwarning%
Siehe oben\xspace}

\newcommand*{\su}{% Abkuerzung fuer siehe unten
s.\,u.\xspace}

\newcommand*{\Su}{% Abkuerzung fuer Siehe unten
\abkwarning%
Siehe unten\xspace}

\newcommand*{\oae}{% Abkuerzung fuer o.ae.
o.\,\"a.\xspace} %???

\newcommand*{\oa}{% Abkuerzung fuer oben angegeben
o.\,a.\xspace}

\newcommand*{\og}{% Abkuerzung fuer oben genannten
o.\,g.\xspace}

\newcommand*{\mE}{% Abkuerzung fuer meines Erachtens
m.\,E.\xspace}

\newcommand*{\maW}{% Abkuerzung fuer mit anderen Worten
m.\,a.\,W.\xspace}

\newcommand*{\MaW}{% Abkuerzung fuer Mit anderen Worten
\abkwarning%
Mit anderen Worten\xspace}

\newcommand*{\mwN}{% Abkuerzung fuer m.w.N.
m.\,w.\,N.\xspace}

\newcommand*{\nF}{% Abkuerzung fuer neue Fassung
n.\,F.\xspace}

\newcommand*{\usw}{% Abkuerzung fuer u.s.w.
u.\,s.\,w.\xspace}

\newcommand*{\idR}{% Abkuerzung fuer in der Regel
i.\,d.\,R.\xspace}

\newcommand*{\ua}{% Abkuerzung fuer unter anderem
u.\,a.\xspace}

\newcommand*{\uae}{% Abkuerzung fuer u.ae.
u.\,\"a.\xspace} %???

\newcommand*{\uU}{% Abkuerzung fuer unter Umstaenden
u.\,U.\xspace}

\newcommand*{\vAw}{% Abkuerzung fuer von Amts wegen
v.\,A.\,w.\xspace}

\newcommand*{\va}{% Abkuerzung fuer vor allem
v.\,a.\xspace}

\newcommand*{\zT}{% Abkuerzung fuer zum Teil
z.\,T.\xspace}


%========================================
% Pfeile
%========================================

\newcommand*{\arr}{\(\rightarrow\)\space}
\newcommand*{\arrr}{\(\longrightarrow\)\space}
\newcommand*{\Arr}{\(\Rightarrow\)\space}
\newcommand*{\Arrr}{\(\Longrightarrow\)\space}
\newcommand*{\lrarr}{\(\leftrightarrow\)\space}

\newcommand*{\larr}{\(\leftarrow\)}
\newcommand*{\Larr}{\(\Leftarrow\)}

\newcommand*{\darr}{\(\downarrow\)}
\newcommand*{\Darr}{\(\Downarrow\)}

\endinput
% end of jurabase.sty