summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/flashcards/flashcards.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/flashcards/flashcards.dtx')
-rw-r--r--Master/texmf-dist/source/latex/flashcards/flashcards.dtx776
1 files changed, 776 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/flashcards/flashcards.dtx b/Master/texmf-dist/source/latex/flashcards/flashcards.dtx
new file mode 100644
index 00000000000..9acda8bc5e9
--- /dev/null
+++ b/Master/texmf-dist/source/latex/flashcards/flashcards.dtx
@@ -0,0 +1,776 @@
+% \iffalse
+%
+%FlashCards LaTeX2e Class for Typesetting Double Sided Cards
+%Copyright (C) 2000 Alexander M. Budge <ambudge@mit.edu>
+%
+%This program is free software; you can redistribute it and/or modify
+%it under the terms of the GNU General Public License as published by
+%the Free Software Foundation; either version 2 of the License, or
+%(at your option) any later version.
+%
+%This program is distributed in the hope that it will be useful,
+%but WITHOUT ANY WARRANTY; without even the implied warranty of
+%MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%GNU General Public License for more details.
+%
+%You should have received a copy of the GNU General Public License
+%along with this program (the file COPYING); if not, write to the
+%Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+%
+%<*driver>
+\def\filename{flashcards.dtx}
+\def\fileversion{1.0.0}
+\def\filedate{16 March 2000}
+\def\docdate{16 March 2000}
+%</driver>
+%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%
+%<flashcards|sample|avery5371|avery5388>\NeedsTeXFormat{LaTeX2e}[1996/12/01]
+%<flashcards>\ProvidesClass{flashcards}[2000/03/14 0.1.1 (ambudge@mit.edu)]
+%<sample>\ProvidesFile{samplecards.tex}
+%<avery5371>\ProvidesFile{avery5371.cfg}
+%<avery5388>\ProvidesFile{avery5388.cfg}
+%<flashcards>\RequirePackage{ifthen}
+%<flashcards>\RequirePackage{geometry}
+%<flashcards>\LoadClass{article}
+%
+%<*driver>
+\documentclass{ltxdoc}
+\newcommand{\flashcards}{\textsc{FlashCards}}
+\begin{document}
+\title{\flashcards
+ \thanks{Contains version \fileversion\ last revised \filedate}}
+\author{Alexander M. Budge \\ \texttt{<ambudge@mit.edu>}}
+\date{\docdate}
+\maketitle
+\DocInput{\filename}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \MakeShortVerb{\|}
+%
+% \changes{v1.0.0}{16 March 2000}{Full Release.}
+% \changes{v0.1.1}{14 March 2000}{Second Pre-release.}
+% \changes{v0.1.0}{12 March 2000}{First Pre-release.}
+%
+% \tableofcontents
+%
+% \section{Introduction}
+% The \flashcards\ class provides for the typesetting of flash
+% cards in \LaTeXe. By flash card, I mean a two sided card which
+% has a prompt or a question on one side and the response or the
+% answer on the flip (back) side. Flash cards come in many sizes
+% depending on the nature of the information they contain. In
+% particular, I like using both $3 \times 5''$ (index cards) and
+% $2 \times 3\frac{1}{2}''$ (business cards) which are available
+% in perforated sheets suitable for printing or copying onto.
+%
+% In order to use this package effectively, you will need to
+% accurately configure |dvips| (or similar) for your printer.
+% \LaTeX\ provides a helpful |testpage.tex| for this purpose.
+%
+%
+% \section{Using FlashCards}
+% \flashcards\ utilizes the standard \LaTeXe\ class interface. Your
+% document should be begin with:
+% \begin{center}
+% |\documentclass[|\textit{options}|]{flashcards}|
+% \end{center}
+%
+% \subsection{Options}
+% \DescribeMacro{avery5371}
+% All documents should specify the paper type. I have provided
+% the two that I use, business cards (Avery 5371 as well as Avery
+% 5376, 5377, 5911, 8371, 8376, 8377, 8471 and 8373) and
+% \DescribeMacro{avery5388}
+% index cards (Avery 5388), but variants are easy to generate. Please
+% refer to Section \ref{sec:paperconfig} for the details of creating
+% your own configuration file for a particular type of paper.
+%
+% \DescribeMacro{fronts}
+% If desired, you can typeset just the |fronts| of the cards or just
+% the |backs| of the cards. Useful if your printer does not print
+% \DescribeMacro{backs}
+% two sides without your help, although |dvips| offers the same
+% functionality with odd/even switches (|-A| or |-B|, respectively).
+%
+% \DescribeMacro{grid}
+% Useful for getting everything lined up as well as for examining
+% the cards as you create them, the |grid| option will draw lines
+% where the perforation will be.
+%
+% \DescribeMacro{frame}
+% The |frame| option will frame the contents of the card with a thin
+% line. There will be a uniform margin (see below for how to set it)
+% between the edge of the card and the frame.
+%
+% \DescribeMacro{dvips}
+% If you are using landscape oriented paper, you may want to use the
+% |dvips| option to send the right specials to |dvips| so that it
+% knows about the orientation without have to tell it from the
+% command line. Warning: this option displaces my margins, if the
+% same happens to you, then you will want to avoid it or create a
+% special configuration for this case. There must be some
+% alternative configuration file somewhere that gets used when this
+% option is specified for the |geometry| package.
+%
+% \subsection{Environment}
+% \DescribeEnv{flashcard}
+% The \flashcards\ class provideds the environment |flashcard|
+% for specifying the contents of each flash card. The |flashcard|
+% environment has one required argument, which becomes the
+% contents of the front side of the card (the question or prompt).
+% The body of the environment then becomes the contents of the
+% back side of the card. For example,
+% \begin{verbatim}
+% \begin{flashcard}{Dense Subset}
+% A subset $S$ of a normed space $B$ is called \emph{dense}
+% in $B$ if {\rm cl} $S$ = $B$.
+% \end{flashcard}
+% \end{verbatim}
+% will produce the front-back pair:
+% \begin{center}
+% \fbox{\parbox[t][1in][c]{2in}{%
+% \footnotesize\vspace*{\fill}\par
+% \centerline{\textbf{Dense Subset}}\par\vspace*{\fill}}}
+% \fbox{\parbox[t][1in][c]{2in}{%
+% \footnotesize\vspace*{\fill}\par\begin{center}%
+% A subset $S$ of a normed space $B$ is called \emph{dense}
+% in $B$ if {\rm cl} $S$ = $B$.\end{center}\par\vspace*{\fill}}}
+% \end{center}
+% This is not the end of the story, however, there are several
+% styles to choose from and an optional argument to the |flashcard|
+% environment. These will be descibed next.
+%
+% \subsection{Styles}
+% By default, \flashcards\ uses the |plain| style for both the front
+% and back of the flash card. The |plain| style centers the contents
+% horizontally and vertically. The front contents are also set in
+% in large bold face, but this can be changed while setting the
+% style as described below.
+%
+% \DescribeMacro{\cardfrontstyle}
+% The style of the front of the card can be conveniently selected
+% with the |\cardfrontstyle{|\textit{style}|}| command, where
+% \textit{style} can be one of |empty|, |plain|, or |headings|.
+% The |plain| style has already been described. The |empty|
+% style does not center the contents horizontally nor vertically,
+% allowing for more generic usage. The |headings| style allows you to
+% set a running footer with
+% \DescribeMacro{\cardfrontfoot}
+% the |\cardfrontfoot{|\textit{text}|}| command, as well
+% as set a header for each card with an optional argument to
+% the |flashcard| environment. For example,
+% \begin{verbatim}
+% \cardfrontstyle{headings}
+% \cardfrontfoot{Functional Analysis}
+% \begin{flashcard}[Definition]{Dense Subset}
+% A subset $S$ of a normed space $B$ is called \emph{dense}
+% in $B$ if {\rm cl} $S$ = $B$.
+% \end{flashcard}
+% \end{verbatim}
+% will produce the front-back pair:
+% \begin{center}
+% \fbox{\parbox[t][1in][c]{2in}{%
+% \footnotesize\textsc{Definition}\par\vspace*{\fill}\par
+% \centerline{\textbf{Dense Subset}}\par\vspace*{\fill}\par
+% \hspace*{\fill}\textsc{Functional Analysis}}}
+% \fbox{\parbox[t][1in][c]{2in}{%
+% \footnotesize\vspace*{\fill}\par\begin{center}%
+% A subset $S$ of a normed space $B$ is called \emph{dense}
+% in $B$ if {\rm cl} $S$ = $B$.\end{center}\par\vspace*{\fill}}}
+% \end{center}
+%
+% You can also change the default formatting of the contents of the
+% front of the card by including the new formatting commands as an
+% optional argument to |\cardfrontstyle|. For example, to set the
+% overall style to be |plain| (thus centering the contents of the
+% front of the card), as well as set the contents in a large
+% slanted face, you could issue the command:
+% \begin{center}
+% |\cardfrontstyle[\LARGE\slshape]{plain}|
+% \end{center}
+%
+% \DescribeMacro{\cardbackstyle}
+% The style of the back of the card can be conveniently selected
+% with the |\cardbackstyle{|\textit{style}|}| command, where
+% \textit{style} can either be |empty| or |plain|. The |plain| style
+% has already been described. The |empty| style does not center the
+% contents horizontally nor vertically, allowing for more generic
+% usage.
+%
+% The default formatting can also be changed through an optional
+% argument in the same manner as for the front of the card.
+%
+% \subsubsection{Headings Styles}
+% \DescribeMacro{\cardfrontheadstyle}
+% The header and footer provided for the front of the card by the
+% |headings| style can be customized through two style commands.
+% \DescribeMacro{\cardfrontfootstyle}
+% The available styles for the header and footer are |left|,
+% |center| and |right|, which will place the contents of the
+% header or footer as advertized. By default the header will be
+% |left| justified and the footer will be |right| justified.
+%
+% Here as well, you can provide an optional argument to specify
+% the formatting of the header and footer, for example to have
+% the footer centered and set in a small italic face:
+% \begin{center}
+% |\cardfrontfootstyle[\small\itshape]{center}|
+% \end{center}
+%
+% \subsection{Lengths}
+% \flashcards\ has one length (in addition to the those discussed in
+% paper configuration below) which allows you to set the size of the
+% uniform margin around the contents of both the front and back of
+% the card. For example, to set that uniform margin at $1/4''$, you
+% can do the following:
+% \begin{center}
+% |\setlength{\cardmargin}{0.25in}|
+% \end{center}
+%
+%
+% \section{Sample Document}
+%
+% \begin{macrocode}
+%<*sample>
+\documentclass[avery5388,grid,frame]{flashcards}
+
+\cardfrontstyle[\large\slshape]{headings}
+\cardbackstyle{empty}
+
+\begin{document}
+
+\cardfrontfoot{Functional Analysis}
+
+
+\begin{flashcard}[Definition]{Norm on a Linear Space \\ Normed Space}
+
+ A real-valued function $||x||$ defined on a linear space $X$, where
+ $x \in X$, is said to be a \emph{norm on} $X$ if
+
+ \smallskip
+
+ \begin{description}
+ \item [Positivity] $||x|| \geq 0$,
+ \item [Triangle Inequality] $||x+y|| \leq ||x|| + ||y||$,
+ \item [Homogeneity] $||\alpha x|| = |\alpha| \: ||x||$,
+ $\alpha$ an arbitrary scalar,
+ \item [Positive Definiteness] $||x|| = 0$ if and only if $x=0$,
+ \end{description}
+
+ \smallskip
+
+ where $x$ and $y$ are arbitrary points in $X$.
+
+ \medskip
+
+ A linear/vector space with a norm is called a \emph{normed space}.
+\end{flashcard}
+
+
+\begin{flashcard}[Definition]{Inner Product}
+
+ Let $X$ be a complex linear space. An \emph{inner product} on $X$ is
+ a mapping that associates to each pair of vectors $x$, $y$ a scalar,
+ denoted $(x,y)$, that satisfies the following properties:
+
+ \medskip
+
+ \begin{description}
+ \item [Additivity] $(x+y,z) = (x,z) + (y,z)$,
+ \item [Homogeneity] $(\alpha \: x, y) = \alpha (x,y)$,
+ \item [Symmetry] $(x,y) = \overline{(y,x)}$,
+ \item [Positive Definiteness] $(x,x) > 0$, when $x\neq0$.
+ \end{description}
+\end{flashcard}
+
+
+\begin{flashcard}[Definition]{Linear Transformation/Operator}
+
+ A transformation $L$ of (operator on) a linear space $X$ into a linear
+ space $Y$, where $X$ and $Y$ have the same scalar field, is said to be
+ a \emph{linear transformation (operator)} if
+
+ \medskip
+
+ \begin{enumerate}
+ \item $L(\alpha x) = \alpha L(x), \forall x\in X$ and $\forall$
+ scalars $\alpha$, and
+ \item $L(x_1 + x_2) = L(x_1) + L(x_2)$ for all $x_1,x_2 \in X$.
+ \end{enumerate}
+
+\end{flashcard}
+
+
+\end{document}
+%</sample>
+% \end{macrocode}
+%
+% \section{Paper Configuration}
+% \label{sec:paperconfig}
+%
+% A separate configuration file specifies the details of each
+% paper type. You should be able to create a new configuration
+% file from the information the paper manufacturer provides
+% with the product. Again, in order for this to work properly,
+% you must accurately configure your printer. I recommend
+% using |testpage.tex| and reading the |dvips| (or similar)
+% documentation (|info dvips| on a typical \textsc{Linux}
+% installation). Also, on my setup I have experienced variation
+% between portrait and landscape oriented papers.
+%
+% There are seven parameters which must be set. The names should be
+% somewhat self explanatory. I recommend making a copy of one of the
+% existing configuration files and modifying the copy as
+% necessary.
+%
+% For example, a $5 \times 2$ business card stock that I have been
+% using has a $0.75''$ left and right margins and a $0.50''$ top margin
+% which offset an array of $2''$ high and $3.5''$ wide business cards
+% arranged in $5$ vertical rows and $2$ horizontal columns. I use
+% the following configuration file:
+% \begin{verbatim}
+% \newcommand{\cardpaper}{letterpaper}
+% \newcommand{\cardpapermode}{portrait}
+% \newcommand{\cardrows}{5}
+% \newcommand{\cardcolumns}{2}
+% \setlength{\cardheight}{2.0in}
+% \setlength{\cardwidth}{3.5in}
+% \setlength{\topoffset}{0.50in}
+% \setlength{\oddoffset}{0.75in}
+% \setlength{\evenoffset}{0.75in}
+% \end{verbatim}
+% All four commands must be defined and all five lengths must be
+% specified. If the array of cards is not centered left-to-right
+% on the paper, you should set |\oddoffset| to the left margin of
+% the front and |\evenoffset| to the right margin of the front.
+%
+%
+% \StopEventually{}
+%
+% \section{Class Source}
+% The \LaTeXe\ source code follows. The flash cards are built up
+% in an array of save boxes which are flushed at the end of each
+% page and at the end of the document.
+%
+% \subsection*{Declare Booleans and Set Defaults}
+%
+% \begin{macrocode}
+%<*flashcards>
+\newboolean{flashcards@dvips}\setboolean{flashcards@dvips}{false}
+\newboolean{flashcards@grid}\setboolean{flashcards@grid}{false}
+\newboolean{flashcards@frame}\setboolean{flashcards@frame}{false}
+\newboolean{flashcards@fronts}\setboolean{flashcards@fronts}{true}
+\newboolean{flashcards@backs}\setboolean{flashcards@backs}{true}
+% \end{macrocode}
+%
+% \subsection*{Declare Lengths}
+%
+% \begin{macrocode}
+\newlength{\cardheight}
+\newlength{\cardwidth}
+\newlength{\topoffset}
+\newlength{\oddoffset}
+\newlength{\evenoffset}
+\newlength{\oddevenshift}
+%
+\newlength{\cardmargin}
+\newlength{\cardinnerheight}
+\newlength{\cardinnerwidth}
+% \end{macrocode}
+%
+% \subsection*{Declare and Process Options}
+%
+% \begin{macrocode}
+\DeclareOption{dvips}{
+ \setboolean{flashcards@dvips}{true}}
+\DeclareOption{grid}{
+ \setboolean{flashcards@grid}{true}}
+\DeclareOption{frame}{
+ \setboolean{flashcards@frame}{true}}
+\DeclareOption{fronts}{
+ \setboolean{flashcards@backs}{false}}
+\DeclareOption{backs}{
+ \setboolean{flashcards@fronts}{false}}
+\DeclareOption*{
+ \InputIfFileExists{\CurrentOption.cfg}{}{
+ \typeout{Coudln't find \CurrentOption.cfg, using defualt.}
+ \OptionNotUsed}}
+\ProcessOptions
+\pagestyle{empty}
+% \end{macrocode}
+%
+% \subsection*{Setup Paper}
+%
+% \begin{macrocode}
+\setlength{\oddevenshift}{\oddoffset}
+\addtolength{\oddevenshift}{-\evenoffset}
+\addtolength{\oddoffset}{-\oddevenshift}
+\addtolength{\evenoffset}{\oddevenshift}
+\geometry{\cardpapermode,
+ \cardpaper,
+ top=\topoffset,
+ left=\oddoffset,
+ right=\evenoffset,
+ twosideshift=\oddevenshift,
+ bottom=0.0in,
+ noheadfoot}
+\ifthenelse{\boolean{flashcards@dvips}}{\geometry{dvips}}{}
+% \end{macrocode}
+%
+% \subsection*{Create Row/Column Counters}
+%
+% \begin{macrocode}
+\newcounter{flashcards@row}
+\newcounter{flashcards@col}[flashcards@row]
+% \end{macrocode}
+%
+% \subsection*{Create Frame and Grid Commands}
+%
+% \begin{macrocode}
+\ifthenelse{\boolean{flashcards@grid}}
+ {\newcommand{\flashcards@gridbox}[1]{%
+ \setlength{\fboxsep}{0in}\fbox{#1}}
+ \addtolength{\cardwidth}{-2\fboxrule}
+ \addtolength{\cardheight}{-2\fboxrule}}
+ {\newcommand{\flashcards@gridbox}[1]{#1}}
+%
+\ifthenelse{\boolean{flashcards@frame}}
+ {\newcommand{\flashcards@beginframebox}{%
+ \begin{tabular}{|@{\hspace*{\fboxsep}}c@{\hspace*{\fboxsep}}|}%
+ \hline}%
+ \newcommand{\flashcards@endframebox}{\\ \hline
+ \end{tabular}}}
+ {\newcommand{\flashcards@beginframebox}{}%
+ \newcommand{\flashcards@endframebox}{}}
+% \end{macrocode}
+%
+% \subsection*{Create Save Boxes}
+%
+% \begin{macrocode}
+\whiledo{\value{flashcards@row} < \cardrows}{%
+ \stepcounter{flashcards@row}%
+ \whiledo{\value{flashcards@col} < \cardcolumns}{%
+ \stepcounter{flashcards@col}%
+ \expandafter\newsavebox
+ \csname flashcardFrontR\roman{flashcards@row}%
+ C\roman{flashcards@col}\endcsname%
+ \global\expandafter\setbox%
+ \csname flashcardFrontR\roman{flashcards@row}%
+ C\roman{flashcards@col}\endcsname%
+ \hbox{\flashcards@gridbox{%
+ \parbox[t][\cardheight]
+ [c]{\cardwidth}%
+ {\rule{\cardwidth}{0pt}%
+ \rule{0pt}{\cardheight}}}}%
+ \expandafter\newsavebox
+ \csname flashcardBackR\roman{flashcards@row}%
+ C\roman{flashcards@col}\endcsname%
+ \global\expandafter\setbox%
+ \csname flashcardBackR\roman{flashcards@row}%
+ C\roman{flashcards@col}\endcsname%
+ \hbox{\flashcards@gridbox{%
+ \parbox[t][\cardheight]
+ [c]{\cardwidth}%
+ {\rule{\cardwidth}{0pt}%
+ \rule{0pt}{\cardheight}}}}%
+ }
+}
+% \end{macrocode}
+%
+% \subsection*{Initialize Row/Column Counters}
+%
+% \begin{macrocode}
+\setcounter{flashcards@row}{1}
+\setcounter{flashcards@col}{1}
+% \end{macrocode}
+%
+% \subsection*{Internal Formatting Commands}
+%
+% \begin{macrocode}
+\newcommand{\flashcards@frontfoot}{}
+%
+\newcommand{\flashcards@ps@front@empty}[3]{\@gobble{#1}\@gobble{#2}%
+ \flashcards@format@front#3}
+\newcommand{\flashcards@ps@front@plain}[3]{\@gobble{#1}\@gobble{#2}%
+ \vspace*{\fill}\par%
+ \begin{center}\flashcards@format@front#3\end{center}%
+ \par\vspace*{\fill}}
+\newcommand{\flashcards@ps@front@headings}[3]{%
+ {\flashcards@ps@front@head{\flashcards@format@front@head#2}}\par%
+ \vspace*{\fill}\begin{center}\flashcards@format@front#3\end{center}%
+ \vspace*{\fill}%
+ {\flashcards@ps@front@foot{\flashcards@format@front@foot#1}\par%
+ \vspace*{\fboxsep}}%
+}
+%
+\newcommand{\flashcards@ps@back@begin@empty}{\flashcards@format@back}
+\newcommand{\flashcards@ps@back@end@emtpy}{}
+\newcommand{\flashcards@ps@back@begin@plain}
+ {\vspace*{\fill}\center\flashcards@format@back}
+\newcommand{\flashcards@ps@back@end@plain}{\vspace*{\fill}}
+%
+\newcommand{\flashcards@ps@front@head@left}[1]{#1}
+\newcommand{\flashcards@ps@front@head@right}[1]{\hspace*{\fill}#1}
+\newcommand{\flashcards@ps@front@head@center}[1]{\centerline{#1}}
+%
+\newcommand{\flashcards@ps@front@foot@left}[1]{#1}
+\newcommand{\flashcards@ps@front@foot@right}[1]{\hspace*{\fill}#1}
+\newcommand{\flashcards@ps@front@foot@center}[1]{\centerline{#1}}
+%
+\newcommand{\flashcards@ps@front}
+ {\flashcards@ps@front@plain}
+\newcommand{\flashcards@ps@front@head}
+ {\flashcards@ps@front@head@left}
+\newcommand{\flashcards@ps@front@foot}
+ {\flashcards@ps@front@foot@right}
+\newcommand{\flashcards@ps@back@begin}
+ {\flashcards@ps@back@begin@plain}
+\newcommand{\flashcards@ps@back@end}
+ {\flashcards@ps@back@end@plain}
+%
+\newlength{\flashcards@savelineskip}
+\newcommand{\flashcards@lineskip@zero}
+ {\setlength{\flashcards@savelineskip}{\lineskip}%
+ \setlength{\lineskip}{0pt}}
+\newcommand{\flashcards@lineskip@restore}
+ {\setlength{\lineskip}{\flashcards@savelineskip}}
+%
+\newcommand{\flashcards@format@front}
+ {\large\bfseries}
+\newcommand{\flashcards@format@front@head}
+ {\normalsize\scshape}
+\newcommand{\flashcards@format@front@foot}
+ {\normalsize\scshape}
+\newcommand{\flashcards@format@back}{}
+%
+\setlength{\cardmargin}{0.035\cardwidth}
+% \end{macrocode}
+%
+% \subsection*{Internal Flushing Commands}
+%
+% \begin{macrocode}
+\newcommand{\flashcards@flush}
+ {\flashcards@flushfronts\flashcards@flushbacks}
+%
+\ifthenelse{\boolean{flashcards@fronts}}{%
+ \newcommand{\flashcards@flushfronts}{%
+ \flashcards@lineskip@zero%
+ \noindent\raggedright\par%
+ \setcounter{flashcards@row}{0}
+ \whiledo{\value{flashcards@row} < \cardrows}{%
+ \stepcounter{flashcards@row}%
+ \whiledo{\value{flashcards@col} < \cardcolumns}{%
+ \stepcounter{flashcards@col}%
+ \flashcards@gridbox{\usebox{%
+ \csname flashcardFrontR\roman{flashcards@row}%
+ C\roman{flashcards@col}\endcsname}}%
+ \global\expandafter\setbox%
+ \csname flashcardFrontR\roman{flashcards@row}%
+ C\roman{flashcards@col}\endcsname%
+ \hbox{\flashcards@gridbox{%
+ \parbox[t][\cardheight]
+ [c]{\cardwidth}%
+ {\rule{\cardwidth}{0pt}%
+ \rule{0pt}{\cardheight}}}}%
+ }
+ \noindent\raggedright\par%
+ }
+ \clearpage%
+ \flashcards@lineskip@restore%
+ \setcounter{flashcards@row}{1}%
+ \setcounter{flashcards@col}{1}%
+ }
+}{%
+ \newcommand{\flashcards@flushfronts}{}%
+}
+%
+\ifthenelse{\boolean{flashcards@backs}}{%
+ \newcommand{\flashcards@flushbacks}{%
+ \flashcards@lineskip@zero%
+ \noindent\raggedright\par%
+ \setcounter{flashcards@row}{0}
+ \whiledo{\value{flashcards@row} < \cardrows}{%
+ \stepcounter{flashcards@row}%
+ \setcounter{flashcards@col}{\cardcolumns}
+ \whiledo{\value{flashcards@col} > 0}{%
+ \flashcards@gridbox{\usebox{%
+ \csname flashcardBackR\roman{flashcards@row}%
+ C\roman{flashcards@col}\endcsname}}%
+ \global\expandafter\setbox
+ \csname flashcardBackR\roman{flashcards@row}%
+ C\roman{flashcards@col}\endcsname%
+ \hbox{\flashcards@gridbox{%
+ \parbox[t][\cardheight]
+ [c]{\cardwidth}%
+ {\rule{\cardwidth}{0pt}%
+ \rule{0pt}{\cardheight}}}}%
+ \addtocounter{flashcards@col}{-1}%
+ }
+ \noindent\raggedright\par%
+ }
+ \clearpage%
+ \flashcards@lineskip@restore%
+ \setcounter{flashcards@row}{1}%
+ \setcounter{flashcards@col}{1}%
+ }
+}{%
+ \newcommand{\flashcards@flushbacks}{}%
+}
+%
+\AtEndDocument{%
+ \ifthenelse{\value{flashcards@row} = 1}{%
+ \ifthenelse{\value{flashcards@col} = 1}{}{%
+ \flashcards@flush}}{\flashcards@flush}%
+}
+% \end{macrocode}
+%
+% \subsection*{User Commands and Environments}
+%
+% \begin{macrocode}
+%
+\newcommand{\cardfrontstyle}[2][]
+ {\renewcommand{\flashcards@ps@front}
+ {\csname flashcards@ps@front@#2\endcsname}
+ \ifthenelse{\equal{#1}{}}{}{%
+ \renewcommand{\flashcards@format@front}{#1}}}
+%
+\newcommand{\cardbackstyle}[2][]
+ {\renewcommand{\flashcards@ps@back@begin}
+ {\csname flashcards@ps@back@begin@#2\endcsname}
+ \renewcommand{\flashcards@ps@back@end}
+ {\csname flashcards@ps@back@end@#2\endcsname}
+ \ifthenelse{\equal{#1}{}}{}{%
+ \renewcommand{\flashcards@format@back}{#1}}}
+%
+\newcommand{\cardfrontheadstyle}[2][]
+ {\renewcommand{\flashcards@ps@front@head}
+ {\csname flashcards@ps@front@head@#2\endcsname}
+ \ifthenelse{\equal{#1}{}}{}{%
+ \renewcommand{\flashcards@format@front@head}{#1}}}
+%
+\newcommand{\cardfrontfootstyle}[2][]
+ {\renewcommand{\flashcards@ps@front@foot}
+ {\csname flashcards@ps@front@foot@#2\endcsname}
+ \ifthenelse{\equal{#1}{}}{}{%
+ \renewcommand{\flashcards@format@front@foot}{#1}}}
+%
+\newcommand{\cardfrontfoot}[1]
+ {\renewcommand{\flashcards@frontfoot}{#1}}
+%
+\newenvironment{flashcard}[2][]{%
+ \setlength{\cardinnerwidth}{\cardwidth}%
+ \addtolength{\cardinnerwidth}{-2\cardmargin}%
+ \setlength{\cardinnerheight}{\cardheight}%
+ \addtolength{\cardinnerheight}{-2\cardmargin}%
+ \ifthenelse{\boolean{flashcards@fronts}}{%
+ \global\expandafter\setbox%
+ \csname flashcardFrontR\roman{flashcards@row}%
+ C\roman{flashcards@col}\endcsname%
+ \hbox{\begingroup\aftergroup}%
+ \begin{minipage}[t][\cardheight]
+ [c]{\cardwidth}%
+ \begin{center}%
+ \flashcards@beginframebox%
+ \begin{minipage}[t][\cardinnerheight]
+ [t]{\cardinnerwidth}%
+ \flashcards@ps@front{\flashcards@frontfoot}{#1}{#2}%
+ \end{minipage}%
+ \flashcards@endframebox%
+ \end{center}%
+ \end{minipage}%
+ \endgroup%
+ }{\@gobble{#1}}%
+ \global\expandafter\setbox%
+ \csname flashcardBackR\roman{flashcards@row}%
+ C\roman{flashcards@col}\endcsname%
+ \hbox{\begingroup\aftergroup}%
+ \begin{minipage}[t][\cardheight]
+ [c]{\cardwidth}%
+ \begin{center}%
+ \flashcards@beginframebox%
+ \begin{minipage}[t][\cardinnerheight]
+ [t]{\cardinnerwidth}%
+ \flashcards@ps@back@begin%
+}{%
+ \flashcards@ps@back@end%
+ \end{minipage}%
+ \flashcards@endframebox%
+ \end{center}%
+ \end{minipage}%
+ \endgroup%
+ \stepcounter{flashcards@col}%
+ \ifthenelse{\value{flashcards@col} > \cardcolumns}{%
+ \stepcounter{flashcards@row}%
+ \ifthenelse{\value{flashcards@row} > \cardrows}{%
+ \flashcards@flush%
+ }{%
+ \setcounter{flashcards@col}{1}%
+ }%
+ }{}%
+}
+%</flashcards>
+% \end{macrocode}
+%
+% \section*{Paper Types}
+% A separate configuration file specifies the details of each
+% paper type.
+%
+% \subsection*{Avery5371 Business Cards}
+% The $5 \times 2$ business card stock I have been using. It goes
+% by many other names as well, depending on color and quantity.
+%
+% \begin{macrocode}
+%<*avery5371>
+\newcommand{\cardpapermode}{portrait}
+\newcommand{\cardpaper}{letterpaper}
+\newcommand{\cardrows}{5}
+\newcommand{\cardcolumns}{2}
+\setlength{\cardheight}{2.0in}
+\setlength{\cardwidth}{3.5in}
+\setlength{\topoffset}{0.50in}
+\setlength{\oddoffset}{0.75in}
+\setlength{\evenoffset}{0.75in}
+%</avery5371>
+% \end{macrocode}
+%
+% \subsection*{Avery5388 Index Cards}
+% Perforated index card stock.
+%
+% \begin{macrocode}
+%<*avery5388>
+\newcommand{\cardpapermode}{portrait}
+\newcommand{\cardpaper}{letterpaper}
+\newcommand{\cardrows}{3}
+\newcommand{\cardcolumns}{1}
+\setlength{\cardheight}{3.0in}
+\setlength{\cardwidth}{5.0in}
+\setlength{\topoffset}{1.0in}
+\setlength{\oddoffset}{1.75in}
+\setlength{\evenoffset}{1.75in}
+%</avery5388>
+% \end{macrocode}
+%
+
+\endinput
+
+% \Finale