\RequirePackage{paralist}
\ifcsname stexdocpath\endcsname\else\def\stexdocpath{.}\fi
\documentclass[full]{l3doc}
%\RequirePackage{document-structure}
\usepackage[hyperref=auto,style=alphabetic]{biblatex}
%\usepackage[mathhub=\stexdocpath/mh,usedeps]{stex}
\usepackage[lang={en,de}]{stex}
\usepackage[show]{ed}
\usepackage{rustex}
\usepackage{stex-highlighting,stexthm}

\srefsetin[sTeX/Documentation]{documentation}{the \stex Documentation}

\makeatletter
\providecommand{\HTML}{\textsc{html}\xspace}%
\providecommand{\XML}{\textsc{xml}\xspace}%
\providecommand{\PDF}{\textsc{pdf}\xspace}%
\providecommand\openmath{\textsc{OpenMath}\xspace}
\providecommand\OMDoc{\textsc{OMDoc}\xspace}
\DeclareRobustCommand\LaTeXML{L\kern-.36em%
        {\sbox\z@ T%
         \vbox to\ht\z@{\hbox{\check@mathfonts
                              \fontsize\sf@size\z@
                              \math@fontsfalse\selectfont
                              A}%
                        \vss}%
        }%
        \kern-.15em%
%        T\kern-.1667em\lower.5ex\hbox{E}\kern-.125em\relax
%        {\tt XML}}
        T\kern-.1667em\lower.4ex\hbox{E}\kern-0.05em\relax
        {\scshape xml}\xspace}%
\def\mmt{\textsc{Mmt}\xspace}
\makeatother


\newif\ifhadtitle\hadtitlefalse

\def\stexversion{3.4.0}
\def\changedate{\today}
\def\stextoptitle#1#2{\title{#1\thanks{Version {\stexversion} (last revised {\changedate})} }\def\thispkg{#2}}

\author{Michael Kohlhase, Dennis Müller\\
 	FAU Erlangen-Nürnberg\\
 	\url{http://kwarc.info/}
}

\def\stexmaketitle{\ifhadtitle\else\hadtitletrue\maketitle\fi}

\ExplSyntaxOn

  \def\docmodule{
    \begin{document}
      \EnableManual
      \EnableDocumentation
      \EnableImplementation
      \stexmaketitle
      \tableofcontents
      \int_gincr:N \l_stex_docheader_sect
      \exp_args:Ne \__stex_mathhub_find_manifest:n {\stex_file_use:N \c_stex_mathhub_file / sTeX / Documentation}
      \str_if_empty:NF \l__stex_mathhub_manifest_str {
        \usemodule[sTeX/Documentation]{macros?AllMacros}
      }
      \DocInput{\jobname.dtx}
      \clearpage
      \PrintIndex
      \printbibliography
    \end{document}
  }

  \bool_new:N \g_stexdoc_typeset_manual_bool
  \NewDocumentCommand \EnableManual {}{
    \bool_gset_true:N \g_stexdoc_typeset_manual_bool
  }
  \NewDocumentCommand \DisableManual {}{
    \bool_gset_false:N \g_stexdoc_typeset_manual_bool
  }
  \NewDocumentEnvironment {stexmanual} {} {
    \bool_if:NTF \g_stexdoc_typeset_manual_bool
      {\bool_set_false:N \l__codedoc_in_implementation_bool}
      {\comment}
  }{
    \bool_if:NF \g_stexdoc_typeset_manual_bool {\endcomment}
  }
\ExplSyntaxOff

%\usepackage{makeidx}
%\makeindex

%\usepackage{document-structure}


\usepackage{lststex,mdframed}
\usepackage[most]{tcolorbox}

\lstset{literate=%
    {Ö}{{\"O}}1
    {Ä}{{\"A}}1
    {Ü}{{\"U}}1
    {ß}{{\ss}}1
    {ü}{{\"u}}1
    {ä}{{\"a}}1
    {ö}{{\"o}}1
    {~}{{\textasciitilde}}1
}

\newenvironment{framed}[1][]{
  \ifstexhtml\par\vbox\bgroup
    \csname exp_args:Nne\endcsname\begin{stex_annotate_env}{%
      style:border=solid 1px black,%
      style:width=var(--this-width),%
      style:min-width=var(--this-width),%
      style:--this-width=calc(var(--current-width) - 6px),%
      style:padding=3px,%
      style:margin-top=5px,%
      style:margin-bottom=5px%
    }
    \csname stex_annotate_invisible:n\endcsname{ }%
    \begin{stex_annotate_env}{%
      style:--current-width=var(--this-width);%
    }\csname stex_annotate_invisible:n\endcsname{ }
  \else\begin{mdframed}[#1]\fi
  %\begin{center}%
}{%
  %\end{center}%
  \ifstexhtml
    \end{stex_annotate_env}\end{stex_annotate_env}\egroup\par
  \else\end{mdframed}\fi
}
\newcommand{\scaled}[2][0.9\hsize]{\begin{center}\resizebox{#1}{!}{\begin{minipage}{\textwidth} #2 \end{minipage}}\end{center}}

\makeatletter
\ExplSyntaxOn

\def\doc_exbox:nnn#1#2#3{
  \begin{sexample}[#3]
    Input:
    \begin{framed}[linewidth=1pt,backgroundcolor=white]\small
      #1
    \end{framed}
    Output:
    \begin{framed}[linewidth=1pt,backgroundcolor=white]\small
      #2
    \end{framed}
  \end{sexample}
}


\NewDocumentCommand\stexexamplefile{O{} m O{} O{}}{
  \stex_resolve_path_pair:Nxx \l_@@_filepath_str {\tl_to_str:n{#1}} {\tl_to_str:n{#2}}
  \doc_exbox:nnn{
    \hfill File~\str_if_empty:nTF{#1}{
      \prop_if_exist:NT \l_stex_current_archive_prop {
        [\texttt{\prop_item:Nn \l_stex_current_archive_prop {id}}]
      }
    }{[#1]}\texttt{\tl_to_str:n{#2}}
    \_lststex_parse_args:n{#3}
    \exp_args:Nno \use:nn{\lstinputlisting[} \l_lststex_return_tl ]{\l_@@_filepath_str}
  }{
    \inputref[#1]{#2}
  }{#4}
}

\newwrite\testoutfile
\NewDocumentCommand\stexexample{O{} O{}}{
  \begingroup 
  \catcode`\\=12\relax
  \catcode`\#=12\relax
  \catcode`\&=12\relax
  \catcode`\$=12\relax
  \catcode`\^=12\relax
  \catcode`\_=12\relax
  \catcode`\ =12\relax
  \catcode`^^J=12\relax
  \endlinechar=`^^J
  \newlinechar=-1
%^^A    \everyeof{\noexpand}
  \example_a:nnn{#1}{#2}
}
\long\def\example_a:nnn #1 #2 #3 {
  \endgroup
  \immediate\openout\testoutfile=\jobname.exmpl
  \immediate\write\testoutfile{
    \c_backslash_str begin{stexcode}[#1]
    \detokenize{^^J}#3
    \c_backslash_str end{stexcode}
  }
  \immediate\closeout\testoutfile
  \doc_exbox:nnn{
    \catcode`\#=12\relax
    \csname @ @ input\endcsname{\jobname.exmpl}
  }{
    \immediate\openout\testoutfile=\jobname.exmpl
    \immediate\write\testoutfile{#3}
    \immediate\closeout\testoutfile
    \csname @ @ input\endcsname \jobname.exmpl\relax
  }{#2}
  \peek_charcode_remove:NT ^^J
}

\ExplSyntaxOff
\makeatother

\makeatletter
\newcount\example@counter\example@counter=0
\newtcolorbox{exampleborderbox}[1][]{
  empty,
  title={Example \the\example@counter #1},
  attach boxed title to top left,
     minipage boxed title,
  boxed title style={empty,size=minimal,toprule=0pt,top=1pt,left=3mm,overlay={}},
  coltitle=blue,fonttitle=\bfseries,
  parbox=false,boxsep=0pt,left=3mm,right=0mm,top=2pt,breakable,pad at break=0mm,
     before upper=\csname @totalleftmargin\endcsname0pt, 
  overlay unbroken={\draw[blue,line width=2pt] ([xshift=-0pt]title.north west) -- ([xshift=-0pt]frame.south west); },
  overlay first={\draw[blue,line width=2pt] ([xshift=-0pt]title.north west) -- ([xshift=-0pt]frame.south west); },
  overlay middle={\draw[blue,line width=2pt] ([xshift=-0pt]frame.north west) -- ([xshift=-0pt]frame.south west); },
  overlay last={\draw[blue,line width=2pt] ([xshift=-0pt]frame.north west) -- ([xshift=-0pt]frame.south west); },
  outer arc=4pt%
}

\ExplSyntaxOn
\stexstyleexample{
  \global\advance\example@counter by 1
  \tl_if_empty:NTF\thistitle{
    \begin{exampleborderbox}
  }{
    \begin{exampleborderbox}[ (\thistitle)]
  }
}{
    \end{exampleborderbox}
}

\ExplSyntaxOff\makeatother

\usetikzlibrary{calc}

\def\textwarning{\includegraphics[width=1.2em]{stex-dangerous-bend}\xspace}
\newtcolorbox{dangerbox}{
  breakable,
  enhanced,
  left=0pt,
  right=0pt,
  top=8pt,
  bottom=8pt,
  colback=white,
  colframe=red,
  width=\textwidth,
  enlarge left by=0mm,
  boxsep=5pt,
  fontupper=\small,
  arc=4pt,
  outer arc=4pt,
  leftupper=1.5cm,
  overlay={
    \node[anchor=west] at ([xshift=10pt]$(frame.north west)!0.5!(frame.south west)$)
       {\includegraphics[width=1cm,height=1cm]{stex-dangerous-bend}};}
}

\protected\def\TODO#1{\textcolor{red}{TODO}\footnote{\textcolor{red}{TODO: #1}}}

\definecolor{darkgreen}{rgb}{0.0, 0.5, 0.0}

\usepackage[solutions]{problem}
\usepackage{hwexam}
\newtcolorbox{problemborderbox}[1][]{
  empty,
  title={Exercise #1},
  attach boxed title to top left,
     minipage boxed title,
  boxed title style={empty,size=minimal,toprule=0pt,top=1pt,left=3mm,overlay={}},
  coltitle=darkgreen,fonttitle=\bfseries,
  parbox=false,boxsep=0pt,left=3mm,right=0mm,top=2pt,breakable,pad at break=0mm,
     before upper=\csname @totalleftmargin\endcsname0pt, 
  overlay unbroken={\draw[darkgreen,line width=2pt] ([xshift=-0pt]title.north west) -- ([xshift=-0pt]frame.south west); },
  overlay first={\draw[darkgreen,line width=2pt] ([xshift=-0pt]title.north west) -- ([xshift=-0pt]frame.south west); },
  overlay middle={\draw[darkgreen,line width=2pt] ([xshift=-0pt]frame.north west) -- ([xshift=-0pt]frame.south west); },
  overlay last={\draw[darkgreen,line width=2pt] ([xshift=-0pt]frame.north west) -- ([xshift=-0pt]frame.south west); },
  outer arc=4pt%
}

\ExplSyntaxOn
\stexstyleproblem{
  \tl_if_empty:NTF\thistitle{
    \begin{problemborderbox}
  }{
    \begin{problemborderbox}[ (\thistitle)]
  }
}{
    \end{problemborderbox}
}
\ExplSyntaxOff

\newtcolorbox{experimental}{
  breakable,
  enhanced,
  left=0pt,
  right=0pt,
  top=8pt,
  bottom=8pt,
  colback=white,
  colframe=gray,
  width=\textwidth,
  enlarge left by=0mm,
  boxsep=5pt,
  fontupper=\small,
  arc=4pt,
  outer arc=4pt,
  leftupper=1.5cm,
  overlay={
    \node[anchor=west] at ([xshift=10pt]$(frame.north west)!0.5!(frame.south west)$)
       {\includegraphics[height=1cm]{stex-experimental}};}
}


\usetikzlibrary{decorations.pathmorphing,shapes,arrows,calc}
% Taken from pgflibrarytikzmmt.code.tex
\newcommand{\mmtarrowtip}{angle 45}
\newcommand{\mmtarrowtipmonoright}{right hook}

\tikzstyle{include}=[\mmtarrowtipmonoright-\mmtarrowtip,thick]
\tikzstyle{morph}=[-\mmtarrowtip,thick]
\tikzstyle{preview}=[decorate, decoration={coil,aspect=0,amplitude=1pt,
                                                  segment length=6pt,
                                                  pre=lineto,pre length=3pt,
                                                  post=lineto,post length=5pt}, thick]
\tikzstyle{view}=[preview,-\mmtarrowtip]


% TIKZ RULES
\def\mmtlogo{
\begin{tikzpicture}

  % White Background (Margins are eyeballed)
  % This is necessary because we paste white over arrows later.
  % If somebody want's to do the full song and dance with
  % interrupted arrows to get transparent background, be my guest.

  \fill[white!] (-0.01,0.15) rectangle (1.11,-0.95);

  % Arrows
  \draw [blue, include] (0,0)     -- (1.1,0);
  \draw [green, morph] (0,-0.4)  -- (1.1,-0.4);
  \draw [red, view]   (-0,-0.8) -- (1.1,-0.8);

  % Cutout for letters
  \fill[white] (0.33,0.1) rectangle (0.66,-0.9);

  % Letters
  \node at (0.18,0)    (nodeM1) {\large M};
  \node at (0.18,-0.4) (nodeM2) {\large M};
  \node at (0.21,-0.8) (nodeT)  {\large T};

\end{tikzpicture}
}

\newtcolorbox{mmtbox}{
  breakable,
  enhanced,
  left=0pt,
  right=0pt,
  top=8pt,
  bottom=8pt,
  colback=white,
  colframe=green,
  width=\textwidth,
  enlarge left by=0mm,
  boxsep=5pt,
  fontupper=\small,
  arc=4pt,
  outer arc=4pt,
  leftupper=1.5cm,
  overlay={
    \node[anchor=west] at ([xshift=10pt]$(frame.north west)!0.5!(frame.south west)$)
       {\mmtlogo};}
}

\newtcolorbox{defibox}{
  breakable,
  enhanced,
  left=0pt,
  right=0pt,
  top=8pt,
  bottom=8pt,
  colback=white,
  colframe=orange,
  width=\textwidth,
  enlarge left by=0mm,
  boxsep=5pt,
  fontupper=\small,
  leftupper=1.5cm,
  arc=4pt,
  outer arc=4pt,
  overlay={\node[anchor=west] at ([xshift=10pt]$(frame.north west)!0.5!(frame.south west)$)
       {\textcolor{orange}{\Large\sTeX}};}
}

\stexstyleparagraph[defibox]{
  \begin{defibox}
}{
  \end{defibox}
}


\AtBeginDocument{\catcode`_=8}

