% !TeX root = tcolorbox.tex
% include file of tcolorbox.tex (manual of the LaTeX package tcolorbox)
\clearpage
\section{Saving and Loading of Verbatim Texts}%
\tcbset{external/prefix=external/verbatim_}%
The following macros are slightly modified versions of the original macros
from the known packages \refPkg{moreverb} and \refPkg{verbatim}.
They are used implicitly inside of a |tcolorbox| environment,
but they can be used outside also.
\enlargethispage*{1.5cm}

\begin{docEnvironment}{tcbverbatimwrite}{\marg{file name}}
  Saves the \meta{environment content} to a file named by \meta{file name}.
  \TeX\ macros inside the environment are not expanded.
\begin{dispExample}
\begin{tcbverbatimwrite}{\jobname_verbexp.tex}
  This text is saved \textit{as is}.
\end{tcbverbatimwrite}

Now, we are using the file:\par
\input{\jobname_verbexp.tex}
\end{dispExample}

This environment may be used inside an own environment. Note, that inside
the environment definition |\tcbverbatimwrite| has to be used instead of
|\begin{tcbverbatimwrite}| and |\endtcbverbatimwrite| instead of |\end{tcbverbatimwrite}|.
\begin{dispExample}
\newenvironment{myverbatim}{%
  \begingroup\tcbverbatimwrite{\jobname_myverb.tex}}%
  {\endtcbverbatimwrite\endgroup}

\begin{myverbatim}
  This is the text which is saved by my own environment.
\end{myverbatim}

Now, we are using the file:\par
\input{\jobname_myverb.tex}
\end{dispExample}
\end{docEnvironment}

\begin{docEnvironment}{tcbwritetemp}{}
  Has the same function as \refEnv{tcbverbatimwrite}, but uses the key value
  of \refKey{/tcb/tempfile} for the file name.
\begin{dispExample}
\begin{tcbwritetemp}
  This text is saved \textit{as is}.
\end{tcbwritetemp}

Now, we are using the file:\par
\tcbusetemp
\end{dispExample}
\end{docEnvironment}


\begin{docCommand}{tcbusetemp}{}
  Loads the current temporary file which was saved by \refEnv{tcbwritetemp}.
\end{docCommand}

\clearpage

\begin{docTcbKey}[][doc new=2017-07-05]{verbatim ignore percent}{\colOpt{=true\textbar false}}{default |true|, initially |false|}
  If this option is set to be |true|, the percent sign \% is silently
  ignored for \refEnv{tcbverbatimwrite} and all macros and environments
  which are built using \refEnv{tcbverbatimwrite}, e.\,g.\ 
  \refEnv{tcbwritetemp}, \refEnv{tcblisting}, or \refEnv{dispExample}.\par
  This option may be useful for creating some special effects, but mainly
  it is intended to be applied for documentation with DocStrip.
  The creation of this option was motivated by Yudai Nakata.
  Note that this option is not getting reset by \refKey{/tcb/reset}.
\begin{dispExample*}{sidebyside}
Normal usage:
\begin{tcbwritetemp}
%\begin{center}\bfseries
This is my text.
%\end{center}
\end{tcbwritetemp}

\tcbusetemp

\tcbset{verbatim ignore percent}
\bigskip Option applied:
\begin{tcbwritetemp}
%\begin{center}\bfseries
This is my text.
%\end{center}
\end{tcbwritetemp}

\tcbusetemp
\end{dispExample*}

\begin{marker}
Note that \emph{every} percent sign is removed, also escaped ones.
\end{marker}

\begin{dispExample*}{sidebyside}
% \tcbuselibrary{listings}
\def\percent{\%}

\begin{tcblisting}{title=Normal}
%\begin{center}\bfseries
This is my 5\percent\ text
and this is my 10\% text.
%\end{center}
\end{tcblisting}

\begin{tcblisting}{
  title=Option applied,
  verbatim ignore percent}
%\begin{center}\bfseries
This is my 5\percent\ text
and this is my 10\% text.
%\end{center}
\end{tcblisting}
\end{dispExample*}

\end{docTcbKey}

\clearpage

\begin{docTcbKey}[][doc new=2023-02-10]{verbatim ignore indention at end}{\colOpt{=true\textbar false}}{default |true|, initially |true|}
  If this option is set to be |true|, spaces and tabs before |\end{tcbverbatimwrite}|
  on the same line are ignored. The same is true for all environments based
  on \refEnv{tcbverbatimwrite}. If anything else precedes |\end{tcbverbatimwrite}|
  on the same line, the complete content is written.\par
  If this option is set to be |false|, everything preceding |\end{tcbverbatimwrite}|
  is written. This was the default behavior before version 6.0.0.\par
  The idea of \refKey{/tcb/verbatim ignore indention at end} is that the
  environment can be indented. The creation of this option was inspired by Yukai Chou.

\begin{dispExample}
% \tcbuselibrary{minted}
\texttt{verbatim ignore indention at end=false}

    \begin{tcblisting}{listing engine=minted, listing only,
                       verbatim ignore indention at end=false}
      int a;
    \end{tcblisting}

    \begin{tcblisting}{listing engine=minted, listing only,
                       verbatim ignore indention at end=false}
      int a;
      int b;  \end{tcblisting}

\texttt{verbatim ignore indention at end=true}

    \begin{tcblisting}{listing engine=minted, listing only,
                       verbatim ignore indention at end}
      int a;
    \end{tcblisting}

    \begin{tcblisting}{listing engine=minted, listing only,
                       verbatim ignore indention at end}
      int a;
      int b;  \end{tcblisting}
\end{dispExample}
\end{docTcbKey}
