% \subsection{Activities}
% The core of the |xourse| system. It works by redefining the
% |document| environment, thus making the |\begin| and
% |\end{document}| of the subfile `transparent' to the
% inclusion. The redefinition of |\documentclass| is analogous, just
% having a required and an optional arguments which mean nothing to
% |\subfile|.
% \begin{macrocode}
%<*classXourse>
\newcommand{\skip@preamble}{%
\let\document\relax\let\enddocument\relax%
\newenvironment{document}{\let\input\otherinput}{}%
\renewcommand{\documentclass}[2][subfiles]{}}
% \end{macrocode}
% Note that the new command |\subfile| calls for |\skip@preamble| \emph{within a group}. The changes to |document| and |\documentclass| are undone after the inclusion of the subfile.
%
% Numbering starts a page too soon without this:
% \begin{macrocode}
\let\otherinput\input
% \end{macrocode}
% Store usual |\maketitle| as |\othermaketitle|
% \begin{macrocode}
\let\othermaketitle\maketitle
% \end{macrocode}
% \DescribeMacro{\maketitle}{In a \textsf{xourse} file, |\maketitle| is redefined to give course packet title page and toc.}
% \begin{macrocode}
\renewcommand{\maketitle}{ %
\pagestyle{empty}
\begin{center}
~\\ %puts space at top of page to move title down.
\vskip .25\textheight
\hrulefill\\
\vskip 1em
\bfseries{\Huge \@title} \\
\hrulefill\\
\vskip 3em
{\Large \@author}
\vskip 2em
{\large \@date}
\end{center}
\clearpage
% \end{macrocode}
% When |notoc| option is used, we do not include a table of contents.
% Otherwise we include a table of contents in every course packet.
% \begin{macrocode}
\ifnotoc
\else
\tableofcontents\clearpage
\clearpage
\fi
% \end{macrocode}
% Switch to main pagestyle, just like a document with documentclass \textsf{ximera}.
% \begin{macrocode}
\pagestyle{main}
% \end{macrocode}
% Renew maketitle to usual definition.
% \begin{macrocode}
\let\maketitle\othermaketitle
% \end{macrocode}
% And we finish with our redefinition of |\maketitle|.
% \begin{macrocode}
}
\relax
%
% \end{macrocode}
% \subsubsection{Regular activities}
% \DescribeMacro{\activity}{Documents included with |\activity| will
% be included in the body of the xourse document. Any |\input|
% commands within included \textsf{ximera} documents will be ignored.
% Any |\usepackage| commands within included ximera documents will
% cause an error. Overlapping |\newcommand| definitions within
% multiple ximera documents included simultaneously will cause an
% error.} The |\activity| command inputs the file name provided
% without |\documentclass|, without
% |\begin{document}|/|\end{document}| and without any inputs in the
% preamble of the included file.
% \begin{macrocode}
%<*classXourse>
\ifnonewpage
\newcommand{\activity}[2][]{%
\setkeys{activity}{#1}
\renewcommand{\input}[1]{}
\begingroup\skip@preamble\otherinput{#2}\endgroup\par\vspace{\topsep}
\let\input\otherinput}
\else
\newcommand{\activity}[2][]{%
\setkeys{activity}{#1}
\renewcommand{\input}[1]{}
\begingroup\skip@preamble\otherinput{#2}\endgroup\clearpage
\let\input\otherinput}
\fi
\relax
%
% \end{macrocode}
% \begin{macrocode}
%<*htXourse>
\renewcommand\activity[2][]{%
\ifvmode \IgnorePar\fi \EndP\HCode{#2}\IgnoreIndent%
}
%
% \end{macrocode}
% When running xake, we can just ignore activities
% \begin{macrocode}
%<*classXourse>
\ifxake
\renewcommand\activity[2][]{}
\fi
%
% \end{macrocode}
% \subsubsection{Practice activities}
% \DescribeMacro{\practice}{Like |\activity| but not expecting a title.}
% \begin{macrocode}
%<*classXourse>
\ifhandout
\newcommand{\practice}[2][]{
\setkeys{practice}{#1}%!!!!!
\renewcommand{\input}[1]{}
\begingroup\skip@preamble\otherinput{#2}\endgroup
\let\input\otherinput}
\else
\newcommand{\practice}[2][]{\texttt{\detokenize{#2}}%% gives file name for practice
\setkeys{practice}{#1}%!!!!!
\renewcommand{\input}[1]{}
\begingroup\skip@preamble\otherinput{#2}\endgroup
\let\input\otherinput}
\fi
\relax
%
% \end{macrocode}
% The practice environment does nothing, but will eventually produce
% exercises at the end of an activity
% \begin{macrocode}
%<*classXourse>
\ifxake
\renewcommand\practice[2][]{}
\fi
%
% \end{macrocode}
% I suppose it is reasonable for practice cards to NOT have an activitystyle, since the activitystyle is basically PRACTICE.
% \begin{macrocode}
%<*htXourse>
\renewcommand\practice[2][]{%
\ifvmode\IgnorePar\fi\EndP%
\HCode{#2}%
\IgnoreIndent%
}
%
% \end{macrocode}