%% The LaTeX package tcolorbox - version 6.10.0 (2026/05/28)
%% tcbdocumentation.code.tex: Code for LaTeX documentations
%%
%% -------------------------------------------------------------------------------------------
%% Copyright (c) 2006-2026 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
%% -------------------------------------------------------------------------------------------
%%
%% This work 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 work has the LPPL maintenance status `author-maintained'.
%%
%% This work consists of all files listed in README
%%
\tcb@set@library@version{6.10.0}

\tcbuselibrary{listings,skins,external,raster}

\ifdefined\printindex\else%
  \RequirePackage{makeidx}[2000/03/29]%
  \AddToHook{begindocument/before}[tcolorbox]{%
    \@ifpackageloaded{imakeidx}{%
      \tcb@warning{`imakeidx' package should be loaded before `documentation' library}%
  }{}}%
\fi
\RequirePackage{refcount}[2011/10/16]
\RequirePackage{hyperref}[2012/02/06]
\ifdefined\marginnote\else\RequirePackage{marginnote}[2012/03/29]\fi
\IfFileExists{pifont.sty}{}{\tcb@warning{Library 'documentation' may need symbols from package 'pifont' (not installed)}}
\IfFileExists{marvosym.sty}{}{\tcb@warning{Library 'documentation' may need symbols from package 'marvosym' (not installed)}}

\definecolor{Option}{rgb}{0.118,0.546,0.222}
\definecolor{Definition}{rgb}{0.784,0.06,0.176}
\definecolor{ExampleFrame}{rgb}{0.628,0.705,0.942}
\definecolor{ExampleBack}{rgb}{0.963,0.971,0.994}
\definecolor{Hyperlink}{rgb}{0.281,0.275,0.485}
\definecolor{Fade}{rgb}{0.5,0.5,0.5}

\def\colDef#1{\textcolor{\kvtcb@col@command}{#1}}
\def\colOpt#1{\textcolor{\kvtcb@col@opt}{#1}}
\def\colFade#1{\textcolor{\kvtcb@col@fade}{#1}}

\newcommand{\tcb@doc@mvchr}[1]{{\fontfamily{mvs}\fontencoding{U}%
  \fontseries{m}\fontshape{n}\selectfont\char#1}}

\lstdefinestyle{tcbdocumentation}{language={[LaTeX]TeX},
    aboveskip={0\p@ \@plus 6\p@},
    belowskip={0\p@ \@plus 6\p@},
    columns=fullflexible,
    keepspaces=true,
    breaklines=true,
    prebreak={\tcb@doc@mvchr{39}},%\Righttorque,
    postbreak={\space\tcb@doc@mvchr{38}},%\Lefttorque
    breakatwhitespace=true,
    basicstyle=\ttfamily\footnotesize,
    extendedchars=true,
    moredelim={[is][\itshape\rmfamily]{^^a7}{^^a7}},
    nolol,inputencoding=\kvtcb@listingencoding}

% The following macros are taken from ltxdoc
\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
\def\meta@font@select{\rmfamily\itshape}

\AtEndPreamble[tcolorbox]{%
  \@ifpackageloaded{doc}{%
  }{% code taken from doc.sty
    \ifx\l@nohyphenation\undefined
      \newlanguage\l@nohyphenation
    \fi
    \DeclareRobustCommand\meta[1]{%
         \ensuremath\langle
         \ifmmode \expandafter \nfss@text \fi
         {%
          \meta@font@select
          \edef\meta@hyphen@restore
            {\hyphenchar\the\font\the\hyphenchar\font}%
          \hyphenchar\font\m@ne
          \language\l@nohyphenation
          #1\/%
          \meta@hyphen@restore
         }\ensuremath\rangle
    }%
  }%
}%

\def\marg#1{%
  {\ttfamily\char`\{}\meta{#1}{\ttfamily\char`\}}}
\def\oarg#1{%
  \colOpt{{\ttfamily[}\meta{#1}{\ttfamily]}}}
\def\pbarg#1{{\ttfamily\char`\<}\meta{#1}{\ttfamily\char`\>}}% copied from beamer user guide
\def\sarg{\colOpt{\ttfamily*}}
\def\brackets#1{{\ttfamily\char`\{}#1{\ttfamily\char`\}}}

\newif\iftcb@doc@colorize
\newif\iftcb@doc@annotate

% language specific texts
\tcbset{
  doclang/.cd,
  color/.store in=\kvtcb@text@color,
  colors/.store in=\kvtcb@text@colors,
  counter/.store in=\kvtcb@text@counter,
  counters/.store in=\kvtcb@text@counters,
  environment content/.store in=\kvtcb@text@envcontent,
  environment/.store in=\kvtcb@text@env,
  environments/.store in=\kvtcb@text@envs,
  commands/.store in=\kvtcb@text@coms,
  default/.store in=\kvtcb@text@default,
  index/.store in=\kvtcb@text@index,
  initially/.store in=\kvtcb@text@initially,
  initiallyempty/.store in=\kvtcb@text@initiallyempty,
  key/.store in=\kvtcb@text@key,
  keys/.store in=\kvtcb@text@keys,
  length/.store in=\kvtcb@text@length,
  lengths/.store in=\kvtcb@text@lengths,
  new/.store in=\kvtcb@text@new,
  nodefault/.store in=\kvtcb@text@nodefault,
  noinitially/.store in=\kvtcb@text@noinitially,
  path/.store in=\kvtcb@text@path,
  paths/.store in=\kvtcb@text@paths,
  pageshort/.store in=\kvtcb@text@pageshort,
  updated/.store in=\kvtcb@text@updated,
  value/.store in=\kvtcb@text@value,
  values/.store in=\kvtcb@text@values,
}

% documentation options
\tcbset{
  documentation listing options/.store in=\kvtcb@doclistingoptions,%
  documentation listing style/.style={documentation listing options={style=#1}},%
  documentation minted language/.store in=\kvtcb@docminted@language,
  documentation minted style/.store in=\kvtcb@docmintstyle,
  documentation minted options/.store in=\kvtcb@docmintoptions,
  color command/.store in=\kvtcb@col@command,
  color environment/.store in=\kvtcb@col@environment,
  color key/.store in=\kvtcb@col@key,
  color value/.store in=\kvtcb@col@value,
  color counter/.store in=\kvtcb@col@counter,
  color length/.store in=\kvtcb@col@length,
  color color/.store in=\kvtcb@col@color,
  color fade/.store in=\kvtcb@col@fade,
  color path/.store in=\kvtcb@col@path,
  color definition/.style={color command={#1},color environment={#1},color key={#1},
    color value={#1},color color={#1},color counter={#1},color length={#1}, color path={#1}},
  color option/.store in=\kvtcb@col@opt,
  color hyperlink/.store in=\kvtcb@colhyper,
  index actual/.store in=\idx@actual,
  index quote/.store in=\idx@quote,
  index level/.store in=\idx@level,
  index format/.store in=\idx@format,
  index colorize/.is if=tcb@doc@colorize,%
  index annotate/.is if=tcb@doc@annotate,%
  index command/.code={\def\kvtcb@index@command##1{#1{##1}}},%
  index command name/.code={\def\kvtcb@index@command##1{\index[{#1}]{##1}}},%
  doc left/.dimstore in=\kvtcb@doc@left,
  doc right/.dimstore in=\kvtcb@doc@right,
  doc left indent/.dimstore in=\kvtcb@doc@indentleft,
  doc right indent/.dimstore in=\kvtcb@doc@indentright,
  doc head command/.style={doc@head@command/.style={#1}},
  doc head environment/.style={doc@head@environment/.style={#1}},
  doc head key/.style={doc@head@key/.style={#1}},
  doc head path/.style={doc@head@path/.style={#1}},
  doc head/.style={doc head command={#1},doc head environment={#1},doc head key={#1},
    doc head path={#1}},
  doc raster command/.style={doc@raster@command/.style={#1}},
  doc raster environment/.style={doc@raster@environment/.style={#1}},
  doc raster key/.style={doc@raster@key/.style={#1}},
  doc raster path/.style={doc@raster@path/.style={#1}},
  doc raster/.style={doc raster command={#1},doc raster environment={#1},doc raster key={#1},
    doc raster path={#1}},
  doc label/.store in=\kvtcb@doc@label,
  doc index/.store in=\kvtcb@doc@index,
  doc sort index/.store in=\kvtcb@doc@sortindex,
  doc@name/.store in=\kvtcb@doc@name,
  doc parameter/.store in=\kvtcb@doc@parameter,
  doc parameter eq/.style={doc parameter={=#1}},
  doc parameter eq meta/.style={doc parameter={=\meta{#1}}},
  doc parameter eq marg/.style={doc parameter={=\marg{#1}}},
  doc parameter eq meta*/.style={doc parameter={\colOpt{=\meta{#1}}}},
  doc parameter eq marg*/.style={doc parameter={\colOpt{=\marg{#1}}}},
  doc parameter marg/.style={doc parameter={\marg{#1}}},
  doc parameter oarg/.style={doc parameter={\oarg{#1}}},
  doc parameter marg marg/.style n args={2}{doc parameter={\marg{#1}\marg{#2}}},
  doc parameter oarg marg/.style n args={2}{doc parameter={\oarg{#1}\marg{#2}}},
  doc parameter marg oarg/.style n args={2}{doc parameter={\marg{#1}\oarg{#2}}},
  doc name/.style={doc@name={#1},doc label={#1},doc index={#1},doc sort index={#1}},
  doc keypath/.store in=\kvtcb@doc@keypath,
  doc@sub@keypath/.style={doc keypath/.code={
    \ifblank{##1}{\def\kvtcb@doc@keypath{#1}}{\def\kvtcb@doc@keypath{#1/##1}}}},
  before doc body command/.store in=\kvtcb@doc@body@command@before,
  after doc body command/.store in=\kvtcb@doc@body@command@after,
  before doc body environment/.store in=\kvtcb@doc@body@environment@before,
  after doc body environment/.store in=\kvtcb@doc@body@environment@after,
  before doc body key/.store in=\kvtcb@doc@body@key@before,
  after doc body key/.store in=\kvtcb@doc@body@key@after,
  before doc body path/.store in=\kvtcb@doc@body@path@before,
  after doc body path/.store in=\kvtcb@doc@body@path@after,
  before doc body/.style={before doc body command={#1},before doc body environment={#1},
    before doc body key={#1},before doc body path={#1}},
  after doc body/.style={after doc body command={#1},after doc body environment={#1}
    ,after doc body key={#1},after doc body path={#1}},
  doc description/.store in=\kvtcb@doc@description,
  doc description no default init/.style={doc description={\tcbdocdescNoDefaultInit}},
  doc description init empty/.style={doc description={\tcbdocdescInitEmpty}},
  doc description init/.style={doc description={\tcbdocdescInit{#1}}},
  doc description default/.style={doc description={\tcbdocdescDefault{#1}}},
  doc description default init empty/.style={doc description={\tcbdocdescDefaultInitEmpty{#1}}},
  doc description default init/.style n args={2}{doc description={\tcbdocdescDefaultInit{#1}{#2}}},
  doc no index/.style={doc into index=false},
  doc updated/.style={before upper={\tcbdocmarginnote{\tcbdocupdated{#1}}}},
  doc new/.style={before upper={\tcbdocmarginnote{\tcbdocnew{#1}}}},
  doc new and updated/.style 2 args={before upper={\tcbdocmarginnote{\tcbdocnew{#1}\\\tcbdocupdated{#2}}}},
  doc marginnote/.style={doc@marginnote/.style={#1}},
  keywords bold/.is choice,%
  keywords bold/.default=true,%
  keywords bold/true/.code={\let\tcb@doc@bfseries\bfseries},
  keywords bold/false/.code={\let\tcb@doc@bfseries\mdseries},
  doc key prefix/.store in=\kvtcb@doc@keyprefix,
  doc head left width/.store in=\kvtcb@doc@headleftwidth,
  doc head left ratio/.style={doc head left width=#1\columnwidth},
  doc key choices separator/.store in=\kvtcb@doc@key@choices@separator,
  doc key choices/.style={doc parameter={\docKeyChoices{#1}}},
  doc key choices*/.style={doc parameter={\docKeyChoices*{#1}}},
}


% styles
\tcbset{
  docexample/.style={colframe=ExampleFrame,colback=ExampleBack,
    before skip=\medskipamount,after skip=\medskipamount,
    fontlower=\footnotesize},
  documentation minted language=latex,
  documentation minted style=,
  documentation minted options={tabsize=2,fontsize=\small},
  index default settings/.style={index actual={@},index quote={"},index level={!}},
  index german settings/.style={index actual={=},index quote={!},index level={>}},
  english language/.code={\tcbset{doclang/.cd,
    color=color,colors=Colors,
    counter=counter,counters=Counters,
    environment content=environment content,
    environment=environment,environments=Environments,
    commands=Commands,
    default=default,
    index=Index,
    initially=initially,initiallyempty=initially empty,
    key=key,keys=Keys,
    length=length,lengths=Lengths,
    new=New,
    nodefault=no default,
    noinitially=initially unset,
    pageshort={P.},
    path=path operation,paths=Path operations,
    updated=Updated,
    value=value,values=Values}},
}

\AtBeginDocument[tcolorbox]{%
  \csname tcb@doc@index@\idx@format\endcsname%
  \hypersetup{
  citecolor=\kvtcb@colhyper,
  linkcolor=\kvtcb@colhyper,
  urlcolor=\kvtcb@colhyper,
  filecolor=\kvtcb@colhyper,
  menucolor=\kvtcb@colhyper
}}

\def\dispExample{\tcb@layer@pushup\tcbset{docexample}\begingroup\tcbwritetemp}

\def\enddispExample{%
  \endtcbwritetemp\endgroup%
  \begin{tcolorbox}%
  \tcb@doc@usetemplisting%
  \tcblower%
  \tcbusetemp%
  \end{tcolorbox}%
}

\newenvironment{dispExample*}[1]{%
  \tcb@layer@pushup\tcbset{docexample,#1}\begingroup\tcbwritetemp%
  }{\enddispExample}

\def\dispListing{\tcb@layer@pushup\tcbset{docexample}\begingroup\tcbwritetemp}

\def\enddispListing{%
  \endtcbwritetemp\endgroup%
  \begin{tcolorbox}%
  \tcb@doc@usetemplisting%
  \end{tcolorbox}%
}

\newenvironment{dispListing*}[1]{%
  \tcb@layer@pushup\tcbset{docexample,#1}\begingroup\tcbwritetemp%
  }{\enddispListing}

% index auxiliary macros
\def\tcb@Index@Print@CA#1#2#3{%
  \iftcb@doc@colorize\textcolor{#2}{\tcb@scantokens{#1}}\else\tcb@scantokens{#1}\fi%
  \iftcb@doc@annotate\ #3\fi%
}

\def\tcb@Index@Print@C#1#2{%
  \iftcb@doc@colorize\textcolor{#2}{\tcb@scantokens{#1}}\else\tcb@scantokens{#1}\fi%
}

\def\tcb@Index@Print@ComCA#1#2#3{%
  \iftcb@doc@colorize\textcolor{#2}{\tcb@cs{#1}}\else\tcb@cs{#1}\fi%
  \iftcb@doc@annotate\ #3\fi%
}

\def\tcb@Index@Print@ComC#1#2{%
  \iftcb@doc@colorize\textcolor{#2}{\tcb@cs{#1}}\else\tcb@cs{#1}\fi%
}

\NewDocumentCommand \tcbIndexPrintComC {m}{\tcb@Index@Print@ComC{#1}{\kvtcb@col@command}}

\NewDocumentCommand{\tcbIndexPrintEnvCA}{m}{\tcb@Index@Print@CA{#1}{\kvtcb@col@environment}{\kvtcb@text@env}}
\NewDocumentCommand{\tcbIndexPrintEnvC}{m}{\tcb@Index@Print@C{#1}{\kvtcb@col@environment}}

\NewDocumentCommand{\tcbIndexPrintKeyCA}{m}{\tcb@Index@Print@CA{#1}{\kvtcb@col@key}}
\NewDocumentCommand{\tcbIndexPrintKeyC}{m}{\tcb@Index@Print@C{#1}{\kvtcb@col@key}}

\NewDocumentCommand{\tcbIndexPrintPathCA}{m}{\tcb@Index@Print@CA{#1}{\kvtcb@col@path}{\kvtcb@text@path}}
\NewDocumentCommand{\tcbIndexPrintPathC}{m}{\tcb@Index@Print@C{#1}{\kvtcb@col@path}}

\NewDocumentCommand{\tcbIndexPrintValCA}{m}{\tcb@Index@Print@CA{#1}{\kvtcb@col@value}{\kvtcb@text@value}}
\NewDocumentCommand{\tcbIndexPrintValC}{m}{\tcb@Index@Print@C{#1}{\kvtcb@col@value}}

\NewDocumentCommand{\tcbIndexPrintColCA}{m}{\tcb@Index@Print@CA{#1}{\kvtcb@col@color}{\kvtcb@text@color}}
\NewDocumentCommand{\tcbIndexPrintColC}{m}{\tcb@Index@Print@C{#1}{\kvtcb@col@color}}

\NewDocumentCommand{\tcbIndexPrintCountCA}{m}{\tcb@Index@Print@CA{#1}{\kvtcb@col@counter}{\kvtcb@text@counter}}
\NewDocumentCommand{\tcbIndexPrintCountC}{m}{\tcb@Index@Print@C{#1}{\kvtcb@col@counter}}

\NewDocumentCommand{\tcbIndexPrintLenCA}{m}{\tcb@Index@Print@ComCA{#1}{\kvtcb@col@length}{\kvtcb@text@length}}
\NewDocumentCommand{\tcbIndexPrintLenC}{m}{\tcb@Index@Print@ComC{#1}{\kvtcb@col@length}}


\newenvironment{tcb@manual@entry}{\begin{list}{}{%
  \setlength{\leftmargin}{\kvtcb@doc@left}%
  \setlength{\itemindent}{0pt}%
  \setlength{\itemsep}{0pt}%
  \setlength{\parsep}{0pt}%
  \setlength{\rightmargin}{\kvtcb@doc@right}%
  }\item}{\end{list}}

\def\tcb@doc@do@description{%
  \ifx\kvtcb@doc@description\@empty\else\tcblower\raggedleft\strut(\kvtcb@doc@description)\strut\fi%
}

\newtcolorbox{tcb@doc@head}[1]{blank,colback=white,colframe=white,
  code={\tcbdimto\tcb@temp@grow@left{-\kvtcb@doc@indentleft}%
        \tcbdimto\tcb@temp@grow@right{-\kvtcb@doc@indentright}},
  grow to left by=\tcb@temp@grow@left,
  grow to right by=\tcb@temp@grow@right,
  sidebyside,sidebyside align=top,
  sidebyside gap=-\tcb@w@upper@real,
  phantom=\phantomsection,#1}


\ExplSyntaxOn

\tcbset{
  index~key~formatter / .code =
    {
      \__tcobox_store_formatter_in:nN {#1} \kvtcb@doc@format@key
    },
  index~key~formatter / .default = \use:n,
  index~keys~formatter / .code =
    {
      \__tcobox_store_formatter_in:nN {#1} \kvtcb@doc@format@keys
    },
  index~keys~formatter / .default = \use:n,
  page~ref~formatter / .code =
    {
      \__tcobox_store_formatter_in:nN {#1} \kvtcb@doc@format@page
    },
  page~ref~formatter / .default = \textsuperscript,
  ctan~formatter / .code =
    {
      \__tcobox_store_formatter_in:nN {#1} \kvtcb@doc@format@ctan
    },
  ctan~formatter / .default = \use:n,
}


\cs_if_exist:NF \__tcobox_store_formatter_in:nN
  {
    \cs_new_protected:Npn \__tcobox_store_formatter_in:nN #1#2
      {
        \__tcobox_if_single_cs:nTF {#1}
          { \cs_set_eq:NN #2 #1 }
          {
            \tcb@error
              {
                Invalid~formatter~ " \tl_to_str:n {#1} " ~passed~to \MessageBreak
                " \pgfkeyscurrentkey ". \MessageBreak
                A~formatter~should~be~a~single~command~taking~one \MessageBreak
                mandatory~argument
              }
          }
      }
  }


\cs_new_protected_nopar:Npn  \__tcobox_new_bool_key:Nn #1 #2
  {
    \bool_new:N #1
    \tcbset
      {
        #2/.is~choice,
        #2/true/.code  = { \bool_set_true:N  #1 },
        #2/false/.code = { \bool_set_false:N #1 },
        #2/.default = true,
      }
  }

\__tcobox_new_bool_key:Nn \l__tcobox_doc_toindex_bool { doc~into~index }
\__tcobox_new_bool_key:Nn \l__tcobox_doc_gather_colors_bool       { index~gather~colors }
\__tcobox_new_bool_key:Nn \l__tcobox_doc_gather_commands_bool     { index~gather~commands }
\__tcobox_new_bool_key:Nn \l__tcobox_doc_gather_counters_bool     { index~gather~counters }
\__tcobox_new_bool_key:Nn \l__tcobox_doc_gather_environments_bool { index~gather~environments }
\__tcobox_new_bool_key:Nn \l__tcobox_doc_gather_keys_bool         { index~gather~keys }
\__tcobox_new_bool_key:Nn \l__tcobox_doc_gather_lengths_bool      { index~gather~lengths }
\__tcobox_new_bool_key:Nn \l__tcobox_doc_gather_paths_bool        { index~gather~paths }
\__tcobox_new_bool_key:Nn \l__tcobox_doc_gather_values_bool       { index~gather~values }


\cs_new_protected_nopar:Npn  \__tcobox_sanitize_tl:n #1
  {
    \group_begin:
    \tl_rescan:nn
      {
        \char_set_catcode_letter:N \_
        \char_set_catcode_letter:N \@
      }
      {
        #1
      }
    \group_end:
  }
\cs_generate_variant:Nn \__tcobox_sanitize_tl:n { V }


\cs_new_protected_nopar:Npn \__tcobox_print_docname:
  {
    \texttt{\tcb@doc@bfseries \__tcobox_sanitize_tl:V \kvtcb@doc@name}
  }

\cs_new_protected_nopar:Npn \__tcobox_print_cs_docname:
  {
    \texttt{\tcb@doc@bfseries \c_backslash_str \__tcobox_sanitize_tl:V \kvtcb@doc@name}
  }


\NewDocumentCommand \tcb@scantokens { m }
  {
    \texttt{ \__tcobox_sanitize_tl:n {#1} }
  }

\NewDocumentCommand \tcb@cs { m }
  {
    \texttt{ \c_backslash_str \__tcobox_sanitize_tl:n {#1} }
  }


% main documentation environments

\seq_new:N \g__tcobox_label_seq
\seq_new:N \l__tcobox_tmpa_seq

\cs_new_protected:Npn \__tcobox_doc_entry_begin:nnn #1#2#3
  {
    \tcbset{ doc~name=, doc~parameter=, doc~description=, #1 }
    \begin{ tcb@manual@entry }
    \seq_gclear:N \g__tcobox_label_seq
    \begin{ tcbraster }
      [
        raster~columns    = 1,
        raster~row~skip   = 0pt,
        raster~after~skip = 4.1pt,
        raster~force~size = false,
        doc@raster@#3
      ]
    \seq_set_from_clist:Nn \l__tcobox_tmpa_seq {#2}
    \seq_if_empty:NT \l__tcobox_tmpa_seq
    {
      \seq_put_left:Nn \l__tcobox_tmpa_seq {}
    }
    \seq_map_inline:Nn \l__tcobox_tmpa_seq
      {
        \group_begin:
        \tcbset{##1}
        \begin{ tcb@doc@head } { doc@head@#3 }
        \strut
        \use:c { __tcobox_doc_head_#3: }
        \strut
        \end{ tcb@doc@head }
        \group_end:
      }
    \end{ tcbraster }
    \seq_gclear:N \g__tcobox_label_seq
    \nobreak
    \tcbset{ before~upper= }
    \use:c { kvtcb@doc@body@#3@before }
    \ignorespaces
  }


\cs_new_nopar:Npn \__tcobox_doc_entry_end:n #1
  {
    \ifvmode\else\unskip\fi
    \use:c { kvtcb@doc@body@#1@after }
    \end{ tcb@manual@entry }
  }


\cs_new_protected_nopar:Npn \__tcobox_print_command:
  {
    \textcolor{\kvtcb@col@command} { \__tcobox_print_cs_docname: }
  }

\cs_new_protected_nopar:Npn \__tcobox_index_command:
  {
    \bool_if:NT \l__tcobox_doc_toindex_bool
      {
        \kvtcb@index@command{\kvtcb@doc@sortindex\idx@actual\tcbIndexPrintComC{\kvtcb@doc@index}}
        \bool_if:NT \l__tcobox_doc_gather_commands_bool
          {
            \kvtcb@index@command
              {
                \kvtcb@text@coms\idx@level\kvtcb@doc@sortindex\idx@actual
                \tcbIndexPrintComC{\kvtcb@doc@index}
              }
          }
      }
  }

\cs_new_protected_nopar:Npn \__tcobox_doc_head_command:
  {
    \__tcobox_print_command:
    \__tcobox_index_command:
    \seq_if_in:NoF \g__tcobox_label_seq { \kvtcb@doc@label }
      {
        \protected@edef\@currentlabel{\noexpand\tcb@cs{\kvtcb@doc@name}}
        \label{ com:\kvtcb@doc@label }
        \seq_gput_right:No \g__tcobox_label_seq { \kvtcb@doc@label }
      }
    {\ttfamily\kvtcb@doc@parameter}
    \tcb@doc@do@description
  }


\NewDocumentEnvironment{ docCommands } { +O {} +m }
  {
    \__tcobox_doc_entry_begin:nnn {#1} {#2} { command }
  }
  {
    \__tcobox_doc_entry_end:n { command }
  }


\NewDocumentEnvironment{ docCommand } { +O {} m +m }
  {
    \__tcobox_doc_entry_begin:nnn { doc~name = {#2}, doc~parameter = {#3}, #1} {} { command }
  }
  {
    \__tcobox_doc_entry_end:n { command }
  }


\NewDocumentEnvironment{ docCommand* } {}
  {
    \group_begin:
    \bool_set_false:N \l__tcobox_doc_toindex_bool
    \begin{ docCommand }
  }
  {
    \end{ docCommand }
    \group_end:
  }


\cs_new_protected_nopar:Npn \__tcobox_print_environment:
  {
    \textcolor{ \kvtcb@col@environment } { \__tcobox_print_docname: }
  }

\cs_new_nopar:Npn \__tcobox_index_environment:
  {
    \bool_if:NT \l__tcobox_doc_toindex_bool
      {
        \kvtcb@index@command{\kvtcb@doc@sortindex\idx@actual\tcbIndexPrintEnvCA{\kvtcb@doc@index}}
        \bool_if:NT \l__tcobox_doc_gather_environments_bool
          {
            \kvtcb@index@command
              {
                \kvtcb@text@envs\idx@level\kvtcb@doc@sortindex\idx@actual
                \tcbIndexPrintEnvC{\kvtcb@doc@index}
              }
          }
      }
  }

\cs_new_protected_nopar:Npn \__tcobox_doc_head_environment:
  {
    \strut
    \cs{ begin }
    \brackets{ \__tcobox_print_environment: }
    \__tcobox_index_environment:
    \seq_if_in:NoF \g__tcobox_label_seq { \kvtcb@doc@label }
      {
        \protected@edef\@currentlabel{\kvtcb@doc@name}
        \label{ env:\kvtcb@doc@label }
        \seq_gput_right:No \g__tcobox_label_seq { \kvtcb@doc@label }
      }
    {\ttfamily\kvtcb@doc@parameter}\par
    \strut{\ttfamily\nobreakspace\nobreakspace}
    \meta{\kvtcb@text@envcontent}
    \par
    \strut
    \cs{ end }
    \brackets{ \__tcobox_print_environment: }
    \tcb@doc@do@description
  }


\NewDocumentEnvironment{ docEnvironments } { +O {} +m }
  {
    \__tcobox_doc_entry_begin:nnn {#1} {#2} { environment }
  }
  {
    \__tcobox_doc_entry_end:n { environment }
  }


\NewDocumentEnvironment{ docEnvironment } { +O {} m +m }
  {
    \__tcobox_doc_entry_begin:nnn { doc~name = {#2}, doc~parameter = {#3},#1 } {} { environment }
  }
  {
    \__tcobox_doc_entry_end:n { environment }
  }


\NewDocumentEnvironment{ docEnvironment* } {}
  {
    \group_begin:
    \bool_set_false:N \l__tcobox_doc_toindex_bool
    \begin{ docEnvironment }
  }
  {
    \end{ docEnvironment }
    \group_end:
  }


\cs_new_protected_nopar:Npn \__tcobox_print_key:
  {
    \textcolor{\kvtcb@col@key}
      {
        \tcb@doc@bfseries\ttfamily
        \tl_if_empty:NF \kvtcb@doc@keypath
          {
            \kvtcb@doc@keyprefix \__tcobox_sanitize_tl:V \kvtcb@doc@keypath/
          }
        \__tcobox_sanitize_tl:V \kvtcb@doc@name
      }
  }

\cs_new_nopar:Npn \__tcobox_index_key:
  {
    \bool_if:NT \l__tcobox_doc_toindex_bool
      {
        \kvtcb@index@command
          {
            \kvtcb@doc@sortindex\idx@actual
            \tcbIndexPrintKeyCA{ \kvtcb@doc@index } { \kvtcb@doc@format@key\kvtcb@text@key }
          }
        \bool_if:NT \l__tcobox_doc_gather_keys_bool
          {
            \tl_if_empty:NTF \kvtcb@doc@keypath
              {
                \kvtcb@index@command
                  {
                    \kvtcb@doc@format@keys\kvtcb@text@keys\idx@level\kvtcb@doc@sortindex\idx@actual
                    \tcbIndexPrintKeyC{\kvtcb@doc@index}
                  }
              }
              {
                \kvtcb@index@command
                  {
                    \kvtcb@doc@format@keys\kvtcb@text@keys\idx@level\kvtcb@doc@keypath\idx@actual
                    \tcbIndexPrintKeyC{ \kvtcb@doc@keyprefix\kvtcb@doc@keypath/ }
                    \idx@level\kvtcb@doc@sortindex\idx@actual
                    \tcbIndexPrintKeyC{\kvtcb@doc@index}
                  }
              }
          }
      }
  }

\dim_new:N \l__tcobox_doc_key_wd_dim

\tl_new:N \g__tcobox_doc_key_default_value_tl
\tl_new:N \g__tcobox_doc_key_initial_value_tl

\tcbset
  {
    docKeyChoices/.cd,
    default/.code =
      {
        #1
        \tl_gset:Nn \g__tcobox_doc_key_default_value_tl {#1}
      },
    init/.code =
      {
        #1
        \tl_gset:Nn \g__tcobox_doc_key_initial_value_tl {#1}
      },
    defaultinit/.code=
      {
        #1
        \tl_gset:Nn \g__tcobox_doc_key_default_value_tl {#1}
        \tl_gset:Nn \g__tcobox_doc_key_initial_value_tl {#1}
      },
  }


\NewDocumentCommand \docKeyChoices { s m }
  {
    \dim_compare:nNnF { \l__tcobox_doc_key_wd_dim } > { 0pt }
      {
        \tcb@warning{ Non-positive~width~for~'docKeyChoices'.~Enlarge~'doc~head~left~ratio'~or~'doc~head~left~width'! }
      }
    \tl_gclear:N \g__tcobox_doc_key_default_value_tl
    \tl_gclear:N \g__tcobox_doc_key_initial_value_tl
    \IfBooleanTF{ #1 } { \colOpt } { \use:n }
      {
        =
        \parbox[t] { \l__tcobox_doc_key_wd_dim }
          {
            \raggedright
            \tl_set:Nn \l__tcobox_tmpa_tl
              {
                \tl_set:Nn \l__tcobox_tmpa_tl { \kvtcb@doc@key@choices@separator\nolinebreak[2] }
              }
            \clist_map_inline:nn { #2 }
              {
                \tl_use:N \l__tcobox_tmpa_tl
                \tl_if_in:nnTF { ##1 } { = }
                  { \tcbset{ docKeyChoices/.cd, ##1 } }
                  { ##1 }
              }
            \strut
          }
      }
    \tl_if_empty:NTF \g__tcobox_doc_key_default_value_tl
      {
        \tl_if_empty:NF \g__tcobox_doc_key_initial_value_tl
          {
            \tl_gset:Ne \g__tcobox_doc_description_tl
              { \exp_not:N \tcbdocdescInit { \g__tcobox_doc_key_initial_value_tl } }
          }
      }
      {
        \tl_if_empty:NTF \g__tcobox_doc_key_initial_value_tl
          {
            \tl_gset:Ne \g__tcobox_doc_description_tl
              { \exp_not:N \tcbdocdescDefault { \g__tcobox_doc_key_default_value_tl } }
          }
          {
            \tl_gset:Ne \g__tcobox_doc_description_tl
              {
                \exp_not:N \tcbdocdescDefaultInit
                  { \g__tcobox_doc_key_default_value_tl }
                  { \g__tcobox_doc_key_initial_value_tl }
              }
          }
      }
  }

\NewDocumentCommand \tcbdocdescNoDefaultInit { }
  {
    \kvtcb@text@nodefault,
    \c_space_tl\kvtcb@text@noinitially
  }

\NewDocumentCommand \tcbdocdescInitEmpty { }
  {
    \kvtcb@text@nodefault,
    \c_space_tl\kvtcb@text@initiallyempty
  }

\NewDocumentCommand \tcbdocdescInit { m }
  {
    \kvtcb@text@nodefault,
    \c_space_tl \kvtcb@text@initially \c_space_tl \texttt{#1}
  }

\NewDocumentCommand \tcbdocdescDefault { m }
  {
    \kvtcb@text@default \c_space_tl \texttt{#1},
    \c_space_tl \kvtcb@text@noinitially
  }

\NewDocumentCommand \tcbdocdescDefaultInitEmpty { m }
  {
    \kvtcb@text@default \c_space_tl \texttt{#1},
    \c_space_tl \kvtcb@text@initiallyempty
  }

\NewDocumentCommand \tcbdocdescDefaultInit { m m }
  {
    \kvtcb@text@default \c_space_tl \texttt{#1},
    \c_space_tl \kvtcb@text@initially \c_space_tl \texttt{#2}
  }

\tl_new:N \g__tcobox_doc_description_tl

\cs_new_protected_nopar:Npn \__tcobox_doc_head_key:
  {
    \hbox_set:Nn \l__tcobox_tmpa_box { \__tcobox_print_key: }
    \dim_set:Nn \l__tcobox_doc_key_wd_dim
      { \kvtcb@doc@headleftwidth - \box_wd:N \l__tcobox_tmpa_box }
    \hbox_unpack_drop:N \l__tcobox_tmpa_box
    \__tcobox_index_key:
    \tl_if_empty:NTF \kvtcb@doc@keypath
      {
        \seq_if_in:NoF \g__tcobox_label_seq { \kvtcb@doc@label }
          {
            \protected@edef\@currentlabel{\kvtcb@doc@name}
            \label{ key:\kvtcb@doc@label }
            \seq_gput_right:No \g__tcobox_label_seq { \kvtcb@doc@label }
          }
      }
      {
        \tl_set:Ne \l__tcobox_tmpa_tl {\kvtcb@doc@keyprefix\kvtcb@doc@keypath/\kvtcb@doc@label}
        \seq_if_in:NoF \g__tcobox_label_seq { \l__tcobox_tmpa_tl }
          {
            \protected@edef\@currentlabel{\kvtcb@doc@keyprefix\kvtcb@doc@keypath/\kvtcb@doc@name}
            \label{ key:\kvtcb@doc@keyprefix\kvtcb@doc@keypath/\kvtcb@doc@label }
            \seq_gput_right:No \g__tcobox_label_seq { \l__tcobox_tmpa_tl }
          }
      }
    \tl_gset_eq:NN \g__tcobox_doc_description_tl \kvtcb@doc@description
    {\ttfamily\kvtcb@doc@parameter}
    %Special case of \tcb@doc@do@description
    \tl_if_empty:NF \g__tcobox_doc_description_tl
      {
        \tcblower
        \raggedleft
        \strut
        ( \tl_use:N \g__tcobox_doc_description_tl )
        \strut
      }
  }


\NewDocumentEnvironment{ docKeys } { +O {} +m }
  {
    \__tcobox_doc_entry_begin:nnn { doc~keypath=, #1 } {#2} { key }
  }
  {
    \__tcobox_doc_entry_end:n { key }
  }


\NewDocumentEnvironment{ docKey } { O {} +O {} m m +m }
  {
    \__tcobox_doc_entry_begin:nnn
      {
        doc~keypath     = #1,
        doc~name        = {#3},
        doc~parameter   = {#4},
        doc~description = {#5},
        #2
      }
      {} { key }
  }
  {
    \__tcobox_doc_entry_end:n { key }
  }


\NewDocumentEnvironment{ docKey* } {}
  {
    \group_begin:
    \bool_set_false:N \l__tcobox_doc_toindex_bool
    \begin{ docKey }
  }
  {
    \end{ docKey }
    \group_end:
  }


\NewDocumentCommand \tcbmakedocSubKey { +O {} m m }
  {
    \NewDocumentEnvironment{#2} { O {} +O {} m m +m }
      {
        \__tcobox_doc_entry_begin:nnn
          {
            doc@sub@keypath = #3,
            doc~keypath     = ##1,
            doc~name        = {##3},
            doc~parameter   = {##4},
            doc~description = {##5},
            #1,
            ##2
          }
          {} { key }
      }
      {
        \__tcobox_doc_entry_end:n { key }
      }
    \NewDocumentEnvironment{ #2* } {}
      {
        \group_begin:
        \bool_set_false:N \l__tcobox_doc_toindex_bool
        \begin{#2}
      }
      {
        \end{#2}
        \group_end:
      }
  }


\NewDocumentCommand \tcbmakedocSubKeys { +O {} m m }
  {
    \NewDocumentEnvironment{#2} { +O {} +m }
      {
        \__tcobox_doc_entry_begin:nnn
          {
            doc@sub@keypath = #3,
            doc~keypath =,
            #1,
            ##1
          }
          {##2} { key }
      }
      {
        \__tcobox_doc_entry_end:n { key }
      }
  }


\cs_new_protected_nopar:Npn \__tcobox_print_path:
  {
    \textcolor{ \kvtcb@col@path } { \__tcobox_print_docname: }
  }

\cs_new_nopar:Npn \__tcobox_index_path:
  {
    \bool_if:NT \l__tcobox_doc_toindex_bool
      {
        \kvtcb@index@command{\kvtcb@doc@sortindex\idx@actual\tcbIndexPrintPathCA{\kvtcb@doc@index}}
        \bool_if:NT \l__tcobox_doc_gather_paths_bool
          {
            \kvtcb@index@command
              {
                \kvtcb@text@paths\idx@level\kvtcb@doc@sortindex\idx@actual
                \tcbIndexPrintPathC{\kvtcb@doc@index}
              }
          }
      }
  }

\cs_new_protected_nopar:Npn \__tcobox_doc_head_path:
  {
    \colFade{\tcb@cs{ path~... }}~\__tcobox_print_path:
    \__tcobox_index_path:
    \seq_if_in:NoF \g__tcobox_label_seq { \kvtcb@doc@label }
      {
        \protected@edef\@currentlabel{\kvtcb@doc@name}
        \label{ path:\kvtcb@doc@label }
        \seq_gput_right:No \g__tcobox_label_seq { \kvtcb@doc@label }
      }
    {\ttfamily\kvtcb@doc@parameter{}~\colFade{ ...; }}
    \tcb@doc@do@description
  }


\NewDocumentEnvironment{ docPathOperations } { +O {} +m }
  {
    \__tcobox_doc_entry_begin:nnn {#1} {#2} { path }
  }
  {
    \__tcobox_doc_entry_end:n { path }
  }


\NewDocumentEnvironment{ docPathOperation } { +O {} m +m }
  {
    \__tcobox_doc_entry_begin:nnn { doc~name = {#2}, doc~parameter = {#3}, #1 } {} { path }
  }
  {
    \__tcobox_doc_entry_end:n { path }
  }


\NewDocumentEnvironment{ docPathOperation* } {}
  {
    \group_begin:
    \bool_set_false:N \l__tcobox_doc_toindex_bool
    \begin{ docPathOperation }
  }
  {
    \end{ docPathOperation }
    \group_end:
  }


\NewDocumentCommand \docAuxCommand { s +O {} m }
  {
    \group_begin:
    \tcbset{ doc~name = {#3}, #2 }
    \__tcobox_print_command:
    \IfBooleanF{#1} { \__tcobox_index_command: }
    \group_end:
  }

\NewDocumentCommand \docAuxEnvironment { s +O {} m }
  {
    \group_begin:
    \tcbset{ doc~name = {#3}, #2 }
    \__tcobox_print_environment:
    \IfBooleanF{#1} { \__tcobox_index_environment: }
    \group_end:
  }


\NewDocumentCommand \docAuxKey { s O {} +O {} m }
  {
    \group_begin:
    \tcbset{ doc~keypath = {#2}, doc~name = {#4}, #3 }
    \__tcobox_print_key:
    \IfBooleanF{#1} { \__tcobox_index_key: }
    \group_end:
  }


\NewDocumentCommand \docValue { s +O {} m }
  {
    \group_begin:
    \tcbset{ doc~name = {#3}, #2 }
    \textcolor{\kvtcb@col@value} { \__tcobox_print_docname: }
    \IfBooleanF{#1}
      {
        \kvtcb@index@command{\kvtcb@doc@sortindex\idx@actual\tcbIndexPrintValCA{\kvtcb@doc@index}}
        \bool_if:NT \l__tcobox_doc_gather_values_bool
          {
            \kvtcb@index@command
              {
                \kvtcb@text@values\idx@level\kvtcb@doc@sortindex\idx@actual
                \tcbIndexPrintValC{\kvtcb@doc@index}
              }
          }
      }
    \group_end:
  }


\NewDocumentCommand \docColor { s +O {} m }
  {
    \group_begin:
    \tcbset{ doc~name = {#3}, #2 }
    \textcolor{\kvtcb@col@color} { \__tcobox_print_docname: }
    \IfBooleanF{#1}
      {
        \kvtcb@index@command{\kvtcb@doc@sortindex\idx@actual\tcbIndexPrintColCA{\kvtcb@doc@index}}
        \bool_if:NT \l__tcobox_doc_gather_colors_bool
          {
            \kvtcb@index@command
              {
                \kvtcb@text@colors\idx@level\kvtcb@doc@sortindex\idx@actual
                \tcbIndexPrintColC{\kvtcb@doc@index}
              }
          }
      }
    \group_end:
  }


\NewDocumentCommand \docCounter { s +O {} m }
  {
    \group_begin:
    \tcbset{ doc~name = {#3}, #2 }
    \textcolor{\kvtcb@col@counter} { \__tcobox_print_docname: }
    \IfBooleanF{#1}
      {
        \kvtcb@index@command{\kvtcb@doc@sortindex\idx@actual\tcbIndexPrintCountCA{\kvtcb@doc@index}}
        \bool_if:NT \l__tcobox_doc_gather_counters_bool
          {
            \kvtcb@index@command
              {
                \kvtcb@text@counters\idx@level\kvtcb@doc@sortindex\idx@actual
                \tcbIndexPrintCountC{\kvtcb@doc@index}
              }
          }
      }
    \group_end:
  }


\NewDocumentCommand \docLength { s +O {} m }
  {
    \group_begin:
    \tcbset{ doc~name = {#3}, #2 }
    \textcolor{\kvtcb@col@length} { \__tcobox_print_cs_docname: }
    \IfBooleanF{#1}
      {
        \kvtcb@index@command{\kvtcb@doc@sortindex\idx@actual\tcbIndexPrintLenCA{\kvtcb@doc@index}}
        \bool_if:NT \l__tcobox_doc_gather_lengths_bool
          {
            \kvtcb@index@command
              {
                \kvtcb@text@lengths\idx@level\kvtcb@doc@sortindex\idx@actual
                \tcbIndexPrintLenC{\kvtcb@doc@index}
              }
          }
      }
    \group_end:
  }

\setrefcountdefault{ -1 }

\NewDocumentCommand \tcb@ref@doc { msm }
  {
    \hyperref[ {#1:#3} ]
      {
        \texttt{\ref* {#1:#3}}
        \IfBooleanF{#2}
          {
            \int_compare:nNnF { \getpagerefnumber{#1:#3} } = { \thepage }
              {
                \kvtcb@doc@format@page
                  {
                    { \fontfamily{ pzd }\fontencoding{ U }\fontseries{ m }\fontshape{ n }\selectfont\char213 }
                    \,\kvtcb@text@pageshort\,
                    \pageref* {#1:#3}
                  }
              }
          }
      }
  }

\NewDocumentCommand \refCom {} {\tcb@ref@doc{ com }}
\NewDocumentCommand \refEnv {} {\tcb@ref@doc{ env }}
\NewDocumentCommand \refKey {} {\tcb@ref@doc{ key }}
\NewDocumentCommand \refPathOperation {} {\tcb@ref@doc{ path }}

\NewDocumentCommand \refPkg { O {#2} m }
  {
    \href{ https://ctan.org/pkg/#1 }
    {
      \refAux{#2}
      \kvtcb@doc@format@page
        {
          { \fontfamily{ pzd }\fontencoding{ U }\fontseries{ m }\fontshape{ n }\selectfont\char213 }
          \,\kvtcb@doc@format@ctan{ CTAN }
        }
    }
  }

\AddToHook{ begindocument } [tcolorbox]
  {
    \ifHy@colorlinks
      \NewDocumentCommand \refAux { m } { \textcolor{\kvtcb@colhyper} {\tcb@scantokens{#1}} }
      \NewDocumentCommand \refAuxcs { m } { \textcolor{\kvtcb@colhyper} {\tcb@cs{#1}} }
    \else
      \NewDocumentCommand \refAux { m } { \tcb@scantokens{#1} }
      \NewDocumentCommand \refAuxcs { m } { \tcb@cs{#1} }
    \fi
  }

\NewDocumentEnvironment { absquote } {}
  {
    \list{} { \leftmargin2cm\rightmargin\leftmargin }
    \item\relax\footnotesize
  }
  { \endlist }

\NewDocumentCommand \tcbdocmarginnote { O {} m }
  {
  \marginnote
    {
      \begin{ tcolorbox }
        [ {
          enhanced~jigsaw,
          nobeforeafter,
          size      = fbox,
          boxrule   = 1pt,
          leftrule  = 0pt,
          rightrule = 0pt,
          arc       = 0pt,
          outer~arc = 1pt,
          boxsep    = 1pt,
          top       = 1pt,
          bottom    = 1pt,
          width     = \marginparwidth,
          colframe  = red!50!white,
          colback   = red!25!yellow!5!white,
          fontupper = \scriptsize,
          if~odd~page~or~oneside = { flushright~upper } { flushleft~upper },
          doc@marginnote,
          #1
        } ]
        #2
      \end{ tcolorbox }
    }
  }

\NewDocumentCommand \tcbdocnew { m } { \kvtcb@text@new :~#1 }
\NewDocumentCommand \tcbdocupdated { m } { \kvtcb@text@updated :~#1 }

\ExplSyntaxOff

%--- index macros taken from pgfmanual-en-macros
\def\tcb@doc@index@pgf@{%
  \ifdefined\c@IndexColumns%
    \c@IndexColumns=2%
  \fi%
  \def\theindex{\@restonecoltrue
    \columnseprule \z@  \columnsep 29\p@
    \twocolumn[\index@prologue]%
    \parindent -30pt%
    \columnsep 15pt%
    \parskip 0pt plus 1pt%
    \leftskip 30pt%
    \rightskip 0pt plus 2cm%
    \small%
    \def\@idxitem{\par}%
    \let\item\@idxitem\ignorespaces}
  \def\endtheindex{\onecolumn}%
  \def\noindexing{\let\index=\@gobble}%
}

\def\tcb@doc@index@pgfsection{%
  \def\index@prologue{\section*{\kvtcb@text@index}\addcontentsline{toc}{section}{\kvtcb@text@index}%
    \par\noindent%
  }%
  \tcb@doc@index@pgf@%
}

\def\tcb@doc@index@pgfchapter{%
  \def\index@prologue{\ifdefined\phantomsection\phantomsection\fi\@makeschapterhead{\kvtcb@text@index}\addcontentsline{toc}{chapter}{\kvtcb@text@index}}%
  \tcb@doc@index@pgf@%
}

\let\tcb@doc@index@pgf=\tcb@doc@index@pgfsection


\ExplSyntaxOn
\cs_new_protected_nopar:Npn \tcb@doc@index@doc
  {
    \cs_set_nopar:Npn \__tcobox_index_command:
    {
      \bool_if:NT \l__tcobox_doc_toindex_bool
        {
          \SpecialMainIndex{\kvtcb@doc@sortindex\idx@actual\tcbIndexPrintComC{\kvtcb@doc@index}}
        }
    }
    \cs_set_nopar:Npn \__tcobox_index_environment:
    {
      \bool_if:NT \l__tcobox_doc_toindex_bool
        {
          \SpecialMainEnvIndex{\kvtcb@doc@sortindex\idx@actual\tcbIndexPrintEnvC{\kvtcb@doc@index}}
        }
    }
    \tcbset{ index~german~settings }
    \EnableCrossrefs
    \PageIndex
  }
\ExplSyntaxOff

\def\tcb@doc@index@off{}

\tcbset{%
  index gather all/.style={%
    index gather colors=true,
    index gather commands=true,
    index gather counters=true,
    index gather environments=true,
    index gather keys=true,
    index gather lengths=true,
    index gather paths=true,
    index gather values=true},
  index gather none/.style={%
    index gather colors=false,
    index gather commands=false,
    index gather counters=false,
    index gather environments=false,
    index gather keys=false,
    index gather lengths=false,
    index gather paths=false,
    index gather values=false},
}


\tcbset{%
  reset@documentation/.style={%
  },
  initialize@reset=reset@documentation,
  doc left=2em,
  doc right=0pt,
  doc left indent=-2em,
  doc right indent=0pt,
  doc head=,
  doc raster=,
  before doc body=,
  after doc body=,
  documentation listing style=tcbdocumentation,
  doc into index=true,
  index gather all,
  doc marginnote=,
  color option=Option,
  color definition=Definition,
  color hyperlink=Hyperlink,
  color fade=Fade,
  index command=\index,%
  index format=pgf,
  index default settings,
  index colorize=false,
  index annotate=true,
  english language,
  keywords bold,
  doc key prefix={/},
  doc head left ratio=0.7,
  doc key choices separator=\textbar,
  index key formatter,
  index keys formatter,
  ctan formatter,
  page ref formatter,
}

% deprecated
\tcbset{
  before example/.code = {\tcb@warning@deprecatedkey{v3.50 (2015/03/16)}},
  after example/.code  = {\tcb@warning@deprecatedkey{v3.50 (2015/03/16)}},
}
