% !TeX root = tcolorbox.tex
% include file of tcolorbox.tex (manual of the LaTeX package tcolorbox)
\clearpage
\section{Recording}\label{sec:recording}%
\tcbset{external/prefix=external/recording_}%
The package provides some macros and options to take \emph{records} during
compilation. This is done by \LaTeX\ file operations to save some data
to a file for later usage. The main application scenario is depicted in
\Vref{sec:recording-exercises} where
information about example solutions is recorded and read again
in \Vref{sec:recording-solutions}.

\subsection{Macros}\label{sec:recording-makros}
\begin{docCommand}[doc new=2014-11-28]{tcbstartrecording}{\oarg{file name}}
  Opens a file denoted by \meta{file name} for writing the records.
  The default file name is |\jobname.records|.
  See \Vref{sec:recording-exercises} for an example application.
  \begin{marker}
  In some situations, a not existing optional parameter may cause parsing
  problems. If this happens (or just for precaution), use
\begin{dispListing}
\tcbstartrecording\relax
\end{dispListing}
  or
\begin{dispListing}
\tcbstartrecording[\jobname.records]
\end{dispListing}
  \end{marker}
\end{docCommand}

\begin{docCommand}[doc new=2014-11-28]{tcbrecord}{\marg{content}}
  Records any \meta{content} to the record file.
  \refCom{tcbrecord} is implemented as |\immediate\write|.
  \refCom{tcbstartrecording} has to be called before; otherwise, \refCom{tcbrecord}
  is silently ignored.
\begin{dispListing}
\tcbrecord{\string\solution{\thetcbcounter}{solutions/exercise-\thetcbcounter.tex}}
\end{dispListing}
\end{docCommand}

\begin{docCommand}[doc new=2014-11-28]{tcbstoprecording}{}
  Closes the current record file which was opened by \refCom{tcbstartrecording}
  before.
\end{docCommand}

\begin{docCommand}[doc new=2014-11-28]{tcbinputrecords}{\oarg{file name}}
  Opens a file denoted by \meta{file name} for reading the records via |\input|.
  The default file name is the name of the last used record file for saving.
  \refCom{tcbstoprecording} has to be called before.
\end{docCommand}


\subsection{Options}\label{sec:recording-options}
\begin{docTcbKey}[][doc new=2014-11-28]{record}{=\meta{content}}{style, no default}
  Records any \meta{content} to the record file, see \refCom{tcbrecord}.
  This key can be used several times to write several lines.
  \begin{dispListing}
  record={\string\solution{\thetcbcounter}{solutions/exercise-\thetcbcounter.tex}}
  \end{dispListing}
\end{docTcbKey}

\begin{docTcbKey}[][doc new=2014-11-28]{no recording}{}{}
  Disables \refCom{tcbrecord} and \refKey{/tcb/record} inside the current
  group.
\end{docTcbKey}


\clearpage
\subsection{Example: Exercises}\label{sec:recording-exercises}
The following application example creates exercises and their corresponding
solutions. Each pair is generated inside a single |tcolorbox| where the
solution is given below \refCom{tcblower}. For every example, the solution part
is saved by \refKey{/tcb/savelowerto} to a file. The saving is recorded using
\refKey{/tcb/record}. To enlighten the possibilities, the second exercise
has no solution. Finally, the solutions are input in \Vref{sec:recording-solutions}.

\inputpreamblelisting{L}

\begin{dispListing*}{breakable,before upper=}
\tcbstartrecording\relax

\begin{exercise}
  Compute the derivative of the following function:
  \begin{equation*}
    f(x)=\sin((\sin x)^2)
  \end{equation*}
\tcblower
  The derivative is:
  \begin{align*}
    f'(x) &= \left( \sin((\sin x)^2) \right)'
    =\cos((\sin x)^2) 2\sin x \cos x.
  \end{align*}
\end{exercise}

\begin{exercise}[no solution]
  It holds:
  \begin{equation*}
    \frac{d}{dx}\left(\ln|x|\right) = \frac{1}{x}.
  \end{equation*}
\end{exercise}

\begin{exercise}
  Compute the derivative of the following function:
  \begin{equation*}
    f(x)=(\sin(\sin x))^2
  \end{equation*}
\tcblower
  The derivative is:
  \begin{align*}
    f'(x) &= \left( (\sin(\sin x))^2 \right)'
    =2\sin(\sin x)\cos(\sin x)\cos x.
  \end{align*}
\end{exercise}

\begin{exercise}
  Compute the derivative of the following function:
  \begin{equation*}
    f(x)=\sqrt{x^3-6x^2+2x}
  \end{equation*}
\tcblower
  The derivative is:
  \begin{align*}
    f'(x) &= \left( \sqrt{x^3-6x^2+2x} \right)'
    = \frac{3x^2-12x+2}{2\sqrt{x^3-6x^2+2x}}.
  \end{align*}
\end{exercise}

\begin{exercise}
  Compute the derivative of the following function:
  \begin{equation*}
    f(x)=\left(\frac{2+3x}{1-2x}\right)^3
  \end{equation*}
\tcblower
  The derivative is:
  \begin{align*}
    f'(x) &= \left( \left(\frac{2+3x}{1-2x}\right)^3 \right)'
    = 3 \left(\frac{2+3x}{1-2x}\right)^2 \frac{(1-2x)3-(2+3x)(-2)}{(1-2x)^2}
    = \frac{21(2+3x)^2}{(1-2x)^4}.
  \end{align*}
\end{exercise}

\begin{exercise}
  Compute the derivative of the following function:
  \begin{equation*}
    f(x)=\frac{\cos x}{(\tan 2x)^2}
  \end{equation*}
\tcblower
  The derivative is:
  \begin{align*}
    f'(x) &= \left( \frac{\cos x}{(\tan 2x)^2} \right)'
    = \left( \frac{\cos x (\cos 2x)^2}{(\sin 2x)^2} \right)'\\
    &= \frac{(\sin 2x)^2 [(-\sin x)(\cos 2x)^2+(\cos x)4\cos 2x (-\sin 2x)]
       - \cos x (\cos 2x)^2 4\sin 2x \cos 2x}{(\sin 2x)^4}\\
    &= -\frac{\cos(2x) [\sin x \sin 2x \cos 2x+ 4\cos x(\sin 2x)^2
       + 4 \cos x (\cos 2x)^2]}{(\sin 2x)^3}\\
    &= -\frac{\cos(2x) [\sin x \sin 2x \cos 2x+ 4\cos x]}{(\sin 2x)^3}.
  \end{align*}
\end{exercise}

\begin{exercise}
  Compute the derivative of the following function:
  \begin{equation*}
    f(x)=\cos((2x^2+3)^3)
  \end{equation*}
\tcblower
  The derivative is:
  \begin{align*}
    f'(x) &= \left( \cos((2x^2+3)^3) \right)'
    =-\sin((2x^2+3)^3) 3(2x^2+3)^2 2\cdot 2x\\
    &=-12x(2x^2+3)^2\sin((2x^2+3)^3).
  \end{align*}
\end{exercise}

\begin{exercise}
  Compute the derivative of the following function:
  \begin{equation*}
    f(x)=(x^2+1)\sqrt{x^4+1}
  \end{equation*}
\tcblower
  The derivative is:
  \begin{align*}
    f'(x) &= \left( (x^2+1)\sqrt{x^4+1} \right)'
    = 2x\sqrt{x^4+1} + \frac{2x^3(x^2+1)}{\sqrt{x^4+1}}.
  \end{align*}
\end{exercise}

\tcbstoprecording
\end{dispListing*}
\tcbusetemp

\subsection{Example: Solutions}\label{sec:recording-solutions}
This concludes the example given in \Vref{sec:recording-exercises}.
Now, the saved and recorded solutions are included.

\begin{dispListing*}{breakable,before upper=}
\tcbinputrecords
\end{dispListing*}
\tcbusetemp
