% \iffalse meta-comment
%
% Copyright (C) 2018 - 2021 by ChairX
%
% This file may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3 of this license or (at your option) any later
% version.  The latest version of this license is in:
%
%    http://www.latex-project.org/lppl.txt
%
% and version 1.3 or later is part of all distributions of
% LaTeX version 2005/12/01 or later.
%
% This file contains the implementation of the environment handling.
%
% Macros have to be described by (delete the first %)
% %\begin{macro}{\macro}
% % Description of the implementation.
% %    \begin{macrocode}
%\newcommand{\macro}[]         {}
% %    \end{macrocode}
% %\end{macro}
%
% The implementation and description will appear in the implementation
% part of the documentation. Use \subsubsection{} etc. for
% structuring.
%
% The documentation of the macros defined here has to be written in
% chairxEnvDoc.dtx
% \fi
%
%
% \begin{macro}{\claimch@irxname}
% \begin{macro}{\conjecturech@irxname}
% \begin{macro}{\conventionch@irxname}
% \begin{macro}{\corollarych@irxname}
% \begin{macro}{\definitionch@irxname}
% \begin{macro}{\examplech@irxname}
% \begin{macro}{\exercisech@irxname}
% \begin{macro}{\hintch@irxname}
% \begin{macro}{\lemmach@irxname}
% \begin{macro}{\maintheoremch@irxname}
% \begin{macro}{\notationch@irxname}
% \begin{macro}{\proofch@irxname}
% \begin{macro}{\propositionch@irxname}
% \begin{macro}{\questionch@irxname}
% \begin{macro}{\remarkch@irxname}
% \begin{macro}{\subproofch@irxname}
% \begin{macro}{\theoremch@irxname}
%
%     First we define the names of the environments in English.
%     Currently we support German and English if the |babel| package
%     is loaded, insert more as you like.
%
%    \begin{macrocode}
\newcommand{\claimch@irxname}{Claim}
\newcommand{\conjecturech@irxname}{Conjecture}
\newcommand{\conventionch@irxname}{Convention}
\newcommand{\corollarych@irxname}{Corollary}
\newcommand{\definitionch@irxname}{Definition}
\newcommand{\examplech@irxname}{Example}
\newcommand{\exercisech@irxname}{Exercise}
\newcommand{\hintch@irxname}{Hint}
\newcommand{\lemmach@irxname}{Lemma}
\newcommand{\maintheoremch@irxname}{Main Theorem}
\newcommand{\notationch@irxname}{Notation}
\newcommand{\proofch@irxname}{Proof}
\newcommand{\propositionch@irxname}{Proposition}
\newcommand{\questionch@irxname}{Question}
\newcommand{\remarkch@irxname}{Remark}
\newcommand{\subproofch@irxname}{Proof}
\newcommand{\theoremch@irxname}{Theorem}
%    \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}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% If the |babel| package is loaded with the option for English we fill
% them with the correct English words. Note that we also need the
% |strings| option to make this work. Otherwise we do nothing.
% Careful: no spaces allowed in the list!
%
%    \begin{macrocode}
\@ifpackagewith{babel}{english,strings}{%
  \StartBabelCommands{english}{extras}
  \SetString{\chapterch@irxname}{Chapter}
  \SetString{\sectionch@irxname}{Section}
  \SetString{\subsectionch@irxname}{Section}
  \SetString{\subsubsectionch@irxname}{Section}
  \SetString{\lemmach@irxname}{Lemma}
  \SetString{\propositionch@irxname}{Proposition}
  \SetString{\theoremch@irxname}{Theorem}
  \SetString{\corollarych@irxname}{Corollary}
  \SetString{\definitionch@irxname}{Definition}
  \SetString{\claimch@irxname}{Claim}
  \SetString{\examplech@irxname}{Example}
  \SetString{\remarkch@irxname}{Remark}
  \SetString{\questionch@irxname}{Question}
  \SetString{\conjecturech@irxname}{Conjecture}
  \SetString{\conventionch@irxname}{Convention}
  \SetString{\exercisech@irxname}{Exercise}
  \SetString{\maintheoremch@irxname}{Main Theorem}
  \SetString{\notationch@irxname}{Notation}
  \SetString{\proofch@irxname}{Proof}
  \SetString{\subproofch@irxname}{Proof}
  \SetString{\hintch@irxname}{Hint}
  \EndBabelCommands
}{}
%    \end{macrocode}
%
%    Same thing in German.
%
%    \begin{macrocode}
\@ifpackagewith{babel}{german,strings}{%
  \StartBabelCommands{german}{extras}
  \SetString{\chapterch@irxname}{Kapitel}
  \SetString{\sectionch@irxname}{Abschnitt}
  \SetString{\subsectionch@irxname}{Abschnitt}
  \SetString{\subsubsectionch@irxname}{Abschnitt}
  \SetString{\lemmach@irxname}{Lemma}
  \SetString{\propositionch@irxname}{Proposition}
  \SetString{\theoremch@irxname}{Satz}
  \SetString{\corollarych@irxname}{Korollar}
  \SetString{\definitionch@irxname}{Definition}
  \SetString{\claimch@irxname}{Behauptung}
  \SetString{\examplech@irxname}{Beispiel}
  \SetString{\remarkch@irxname}{Bemerkung}
  \SetString{\questionch@irxname}{Frage}
  \SetString{\conjecturech@irxname}{Vermutung}
  \SetString{\conventionch@irxname}{Konvention}
  \SetString{\exercisech@irxname}{\"Ubung}
  \SetString{\maintheoremch@irxname}{Theorem}
  \SetString{\notationch@irxname}{Notation}
  \SetString{\proofch@irxname}{Beweis}
  \SetString{\subproofch@irxname}{Beweis}
  \SetString{\hintch@irxname}{Hinweis}
  \EndBabelCommands
}{}
%    \end{macrocode}
%
% Now we define the actual environments.  We start with header in bold
% and body in italic.
%
%    \begin{macrocode}
\theoremheaderfont{\normalfont\bfseries}
\theorembodyfont{\itshape}
%    \end{macrocode}
%
% \begin{environment}{claim}
% \begin{environment}{conjecture}
% \begin{environment}{corollary}
% \begin{environment}{definition}
% \begin{environment}{lemma}
% \begin{environment}{proposition}
% \begin{environment}{theorem}
%
%     Now those environments with this styling, all share the common
%     numbering scheme.  In order to make |\autoref| work properly we
%     need to define alias counter.  For each environment we also
%     define |\*autorefname|.
%
%    \begin{macrocode}
\newtheorem{claim}{\claimch@irxname}[section]
\newtheorem*{nnclaim}{\claimch@irxname}
\newaliascnt{conjecture}{claim}
\newtheorem{conjecture}[conjecture]{\conjecturech@irxname}
\newtheorem*{nnconjecture}{\conjecturech@irxname}
\aliascntresetthe{conjecture}
\newaliascnt{corollary}{claim}
\newtheorem{corollary}[corollary]{\corollarych@irxname}
\newtheorem*{nncorollary}{\corollarych@irxname}
\aliascntresetthe{corollary}
\newaliascnt{definition}{claim}
\newtheorem{definition}[definition]{\definitionch@irxname}
\newtheorem*{nndefinition}{\definitionch@irxname}
\aliascntresetthe{definition}
\newaliascnt{lemma}{claim}
\newtheorem{lemma}[lemma]{\lemmach@irxname}
\newtheorem*{nnlemma}{\lemmach@irxname}
\aliascntresetthe{lemma}
\newaliascnt{proposition}{claim}
\newtheorem{proposition}[proposition]{\propositionch@irxname}
\newtheorem*{nnproposition}{\propositionch@irxname}
\aliascntresetthe{proposition}
\newaliascnt{theorem}{claim}
\newtheorem{theorem}[theorem]{\theoremch@irxname}
\newtheorem*{nntheorem}{\theoremch@irxname}
\aliascntresetthe{theorem}
%    \end{macrocode}
%
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
%
% Next we set the body font to roman.
%
%    \begin{macrocode}
\theorembodyfont{\rmfamily}
%    \end{macrocode}
%
% \begin{environment}{example}
% \begin{environment}{convention}
% \begin{environment}{notation}
% \begin{environment}{question}
% \begin{environment}{remark}
%
%     And have some more environments, still numbered with the same
%     counter.
%
%    \begin{macrocode}
\newaliascnt{example}{claim}
\newtheorem{example}[example]{\examplech@irxname}
\newtheorem*{nnexample}{\examplech@irxname}
\aliascntresetthe{example}
\newaliascnt{convention}{claim}
\newtheorem{convention}[convention]{\conventionch@irxname}
\newtheorem*{nnconvention}{\conventionch@irxname}
\aliascntresetthe{convention}
\newaliascnt{notation}{claim}
\newtheorem{notation}[notation]{\notationch@irxname}
\newtheorem*{nnnotation}{\notationch@irxname}
\aliascntresetthe{notation}
\newaliascnt{question}{claim}
\newtheorem{question}[question]{\questionch@irxname}
\newtheorem*{nnquestion}{\questionch@irxname}
\aliascntresetthe{question}
\newaliascnt{remark}{claim}
\newtheorem{remark}[remark]{\remarkch@irxname}
\newtheorem*{nnremark}{\remarkch@irxname}
\aliascntresetthe{remark}
%    \end{macrocode}
%
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
%
% \begin{environment}{exercise}
%
%     The exercise environment has a separate counter.
%
%    \begin{macrocode}
\newtheorem{exercise}{\exercisech@irxname}[section]
\newtheorem*{nnexercise}{\exercisech@irxname}
%    \end{macrocode}
%
% \end{environment}
%
% \begin{environment}{maintheorem}
%
%     We change now for the main theorem styling
%
%    \begin{macrocode}
\theorembodyfont{\itshape}
\theoremnumbering{Roman}
\newtheorem{maintheorem}{\maintheoremch@irxname}
\newtheorem*{nnmaintheorem}{\maintheoremch@irxname}
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{proof}
% \begin{environment}{subproof}
%
%     The proof environments. We use the boxempty symbol from the AMSa
%     font.
%
%    \begin{macrocode}
\DeclareMathSymbol\ch@irxboxempty{\mathord}{AMSa}{"03}
\theoremheaderfont{\scshape}
\theorembodyfont{\normalfont}
\theoremstyle{nonumberplain}
\theoremseparator{:}
\theoremsymbol{\hbox{$\ch@irxboxempty$}}
\newtheorem{proof}{\proofch@irxname}
\theoremsymbol{\hbox{$\triangledown$}}
\newtheorem{subproof}{\proofch@irxname}
%    \end{macrocode}
% \end{environment}
% \end{environment}
%
% \begin{environment}{hint}
%
%     The hint environment, without numbers and very small.
%
%    \begin{macrocode}
\newenvironment{hint}{\par\footnotesize\medskip\noindent\hintch@irxname: }{\par\smallskip\normalsize}
%    \end{macrocode}
%
% \end{environment}
%
% In the theorem titles only the ordinary text in boldface, not the
% math formulas. Nice hack from David Carlisle via tex.stackexchange
%
%    \begin{macrocode}
\def\theorem@checkbold{}
%    \end{macrocode}
%
% To make these new environments compatible with the |\autoref|
% macro of the |hyperref|-package, we need the following
% |\*autorefname| commands.
%    \begin{macrocode}
\providecommand{\claimautorefname}{\claimch@irxname}
\providecommand{\conjectureautorefname}{\conjecturech@irxname}
\providecommand{\conventionautorefname}{\conventionch@irxname}
\providecommand{\corollaryautorefname}{\corollarych@irxname}
\providecommand{\definitionautorefname}{\definitionch@irxname}
\providecommand{\lemmaautorefname}{\lemmach@irxname}
\providecommand{\propositionautorefname}{\propositionch@irxname}
\providecommand{\exampleautorefname}{\examplech@irxname}
\providecommand{\notationautorefname}{\notationch@irxname}
\providecommand{\questionautorefname}{\questionch@irxname}
\providecommand{\remarkautorefname}{\remarkch@irxname}
\providecommand{\exerciseautorefname}{\exercisech@irxname}
\providecommand{\thmautorefname}{\theoremch@irxname}
\providecommand{\maintheoremautorefname}{\maintheoremch@irxname}
%    \end{macrocode}
%
% To redefine |\*autorefname| commands which are predefined in |hyperref|,
% we need a little hack: to allow that |hyperref| is loaded after |nchairx|
% we put these commands at the beginning of the document part.
%    \begin{macrocode}
\AtBeginDocument{
%    \end{macrocode}
% Now we fill the |\*autorefname| macros with the language specific names,
% in order to guarantee compatibility with |babel|.
% First in english
%    \begin{macrocode}
\@ifpackagewith{babel}{english,strings}{%
	\StartBabelCommands{english}{extras}
	\SetString{\chapterautorefname}{\chapterch@irxname}
	\SetString{\sectionautorefname}{\sectionch@irxname}
	\SetString{\subsectionautorefname}{\subsectionch@irxname}
	\SetString{\subsubsectionautorefname}{\subsubsectionch@irxname}
	\SetString{\theoremautorefname}{\theoremch@irxname}
	\EndBabelCommands
}{}
%    \end{macrocode}
% then in german
%    \begin{macrocode}
\@ifpackagewith{babel}{german,strings}{%
	\StartBabelCommands{german}{extras}
	\SetString{\chapterautorefname}{\chapterch@irxname}
	\SetString{\sectionautorefname}{\sectionch@irxname}
	\SetString{\subsectionautorefname}{\subsectionch@irxname}
	\SetString{\subsubsectionautorefname}{\subsubsectionch@irxname}
	\SetString{\theoremautorefname}{\theoremch@irxname}
	\EndBabelCommands
}{}
%    \end{macrocode}
% Close the |\AtBeginDocument| command.
%    \begin{macrocode}
}
%    \end{macrocode}
%
%
% \begin{environment}{claimlist}
% \begin{environment}{conjecturelist}
% \begin{environment}{conventionlist}
% \begin{environment}{corollarylist}
% \begin{environment}{definitionlist}
% \begin{environment}{lemmalist}
% \begin{environment}{propositionlist}
% \begin{environment}{theoremlist}
% \begin{environment}{prooflist}
%
%     Next, we define list environments for all the above types of
%     math environments. They are build using the |enumitem| package
%     and use a rather compact appearance. Each math environment has
%     its own list, though all of them are equal at the moment.
%
%    \begin{macrocode}
\newenvironment{claimlist}[1][]{%
  \enumerate[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      label=\textit{\roman*.)},
      #1%
      ]%
    }%
    {\endenumerate}
\newenvironment{conjecturelist}[1][]{%
  \enumerate[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      label=\textit{\roman*.)},
      #1%
      ]%
    }%
    {\endenumerate}
\newenvironment{conventionlist}[1][]{%
	\enumerate[%
	topsep = 0.2em,
	partopsep = 0em,
	itemsep = 0.2em,
	parsep = 0.1em,
	label=\textit{\roman*.)},
	#1%
	]%
}%
{\endenumerate}
\newenvironment{corollarylist}[1][]{%
  \enumerate[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      label=\textit{\roman*.)},
      #1%
      ]
    }%
    {\endenumerate}
\newenvironment{definitionlist}[1][]{%
  \enumerate[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      label=\textit{\roman*.)},
      #1%
      ]
    }%
    {\endenumerate}
\newenvironment{lemmalist}[1][]{%
  \enumerate[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      label=\textit{\roman*.)},
      #1%
      ]
    }%
    {\endenumerate}
\newenvironment{propositionlist}[1][]{%
  \enumerate[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      label=\textit{\roman*.)},
      #1%
      ]
    }%
    {\endenumerate}
\newenvironment{theoremlist}[1][]{%
  \enumerate[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      label=\textit{\roman*.)},
      #1%
      ]
    }%
    {\endenumerate}
\newenvironment{prooflist}[1][]{%
	\enumerate[%
	topsep = 0.2em,
	partopsep = 0em,
	itemsep = 0.2em,
	parsep = 0.1em,
	label=\textit{\roman*.)},
	#1%
	]
}%
{\endenumerate}
%    \end{macrocode}
%
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
%
% \begin{environment}{examplelist}
% \begin{environment}{notationlist}
% \begin{environment}{questionlist}
% \begin{environment}{remarklist}
%
%     Also for the following environments we have lists:
%
%    \begin{macrocode}
\newenvironment{examplelist}[1][]{%
  \enumerate[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      label=\textit{\roman*.)},
      #1%
      ]%
    }%
    {\endenumerate}
\newenvironment{notationlist}[1][]{%
  \enumerate[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      label=\textit{\roman*.)},
      #1%
      ]%
    }%
    {\enumerate}
\newenvironment{questionlist}[1][]{%
  \enumerate[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      label=\textit{\roman*.)},
      #1%
      ]%
    }%
    {\endenumerate}
\newenvironment{remarklist}[1][]{%
  \enumerate[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      label=\textit{\roman*.)},
      #1%
      ]%
    }%
    {\endenumerate}
%    \end{macrocode}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
%
% \begin{environment}{exerciselist}
%
%     For the exercises we also need a separate list.
%
%    \begin{macrocode}
\newenvironment{exerciselist}[1][]{%
  \enumerate[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      label=\textit{\roman*.)},
      #1%
    ]%
  }%
  {\endenumerate}
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{maintheoremlist}
%
%     And the main theorem might also consist of several parts which
%     we want to number.
%
%    \begin{macrocode}
\newenvironment{maintheoremlist}[1][]{%
  \enumerate[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      label=\textit{\roman*.)},
      #1%
      ]%
    }%
    {\endenumerate}
%    \end{macrocode}
% \end{environment}
%
% We also provide compact versions of the lists in general (similar to
% the |paralist| package)
%
% \begin{environment}{cptenum}
%    \begin{macrocode}
\newenvironment{cptenum}[1][]{%
  \enumerate[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      label=\textit{\roman*.)},
      #1%
      ]
    }%
    {\endenumerate}
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{cptitem}
%    \begin{macrocode}
\newenvironment{cptitem}[1][]{%
  \begin{itemize}[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      #1%
      ]
    }%
    {\end{itemize}}
%    \end{macrocode}
% \end{environment}
%
% \begin{environment}{cptdesc}
%    \begin{macrocode}
\newenvironment{cptdesc}[1][]{%
  \begin{description}[%
      topsep = 0.2em,
      partopsep = 0em,
      itemsep = 0.2em,
      parsep = 0.1em,
      #1%
      ]
    }%
    {\end{description}}
%    \end{macrocode}
% \end{environment}
%
