\documentclass[11pt]{article}
\usepackage[textwidth=6.5in,textheight=8.5in]{geometry}
\usepackage[medium,semibold]{cabin}
\listfiles
\usepackage{prerex}

\renewcommand{\textfraction}{0.0}
\renewcommand{\topfraction}{1.00}
\renewcommand{\bottomfraction}{1.00}

\usepackage[osf]{mathpazo}

\definecolor{light}{gray}{0.5}
\definecolor{bg}{rgb}{0.99,0.96,0.90}

\usepackage{graphicx}

\def\LaTeX{\mbox{LaTeX}}
\def\TeX{TeX}
\def\MikTeX{\mbox{MikTeX}}


\newcommand{\myurl}[1]{\textcolor{blue}{\underline{\textcolor{black}{\url{#1}}}}}
\newcommand{\myhref}[2]{\href{#1}{\textcolor{blue}{\underline{\textcolor{black}{#2}}}}}

\title{Prerex-Formatted Prerequisite Charts\\[1ex]\Large An Introduction}
\date{\today}
\author{Bob Tennent\\School of Computing, Queen's University\\\texttt{[email protected]}}

\begin{document}
\sloppy
\maketitle
\thispagestyle{empty}

\tableofcontents


\section{Introduction}
This document is intended to help a user who might want to create or edit prerex-formatted
prerequisite charts, but is finding the installation and usage instructions in the \textsc{readme}
and manual pages to be incomprehensible.

\section{Frequently Asked Questions}


\subsection{Prerequisite Charts}

\subsubsection*{What is a prerequisite chart?}

A prerequisite chart gives an attractive graphical presentation of courses in a
program (or set of related programs), organized by terms or years, linked
by pre- and co-requisite arrows, and, when possible, supplemented by
timetable information; Figure~\ref{chart}
on page~\pageref{chart}
is a small example.

\input{introchart1}

\subsubsection*{Who would use a prerequisite chart?}

Prerequisite charts are useful to students selecting courses and planning their
programs, and to faculty and staff advising students and managing
curriculum development.

\subsubsection*{The information is in calendars and on-line; why is a prerequisite chart needed?}

Conventional sources of course, program and timetable information are
rarely in a user-friendly format. Faculty and staff advisors, being already
fairly familiar with their courses and programs, often do not appreciate
how inconvenient it is for students to access all the information they need
to make course choices.

For example, program requirements are typically specified as lists of
course codes for required and optional courses; one must look elsewhere to
find the titles of the courses, the relations between them, their
prerequisites, and the timetabling information.

As another example, a course description in a calendar typically specifies
what the prerequisite courses are, but hardly ever specifies which course
or courses the course is prerequisite to. This information may be very
important to a student, but to discover it, he or she must search through
all the subsequent course descriptions in the calendar. With a prerequisite
chart, it is evident at a glance.

As a third example, consider a student who wants to know whether they can
defer a course till the following year without risk of timetable conflicts.
With conventional sources of information, such a question can be answered
only by doing an exhaustive search through both timetable and calendar for
a possible conflict. A prerequisite chart incorporating timetable data provides
the necessary information in a compact and usable form, and the question
can be answered immediately.


\subsubsection*{If prerequisite charts are so great, why doesn't every university department have them?}
Few academic departments have the resources to produce prerequisite charts. If
one searches on the web for "prerequisite chart" or "prerequisite diagram,"
virtually all of the matches are from departments that one would
expect to have expertise in technical drawings.
Here are some of these:
\begin{itemize}
\item Queen's University, Electrical and Computer Engineering\footnote{%
\myurl{http://www.ece.queensu.ca/Current-Students/Undergraduate/files/Queens_ECE_prerequisite_graph_2011.pdf}}
\item University of Waterloo, Computer Science\footnote{%
\myurl{http://www.cs.uwaterloo.ca/current/courses/charts/majorPrereq.shtml}}
\item Georgia Tech, Electrical Engineering\footnote{%
\myurl{http://www.ece.gatech.edu/academics/undergrad/ee_prereq.html}}
\item Georgia State University, Computer Science\footnote{%
\myurl{http://www.cs.gsu.edu/sites/default/files/prereq.pdf}}
%\item Iowa State University, Civil, Construction, \& Environmental Engineering\footnote{%
%\myurl{http://www.ccee.iastate.edu/fileadmin/www.ccee.iastate.edu/academics/mechanical-prereq-0507.pdf}}
\item Kansas State University, Mathematics\footnote{%
\myurl{http://www.math.ksu.edu/courses/catalog/prereqcht.pdf}}
%\item Carleton University, Engineering Physics\footnote{%
%\myurl{http://www1.carleton.ca/engineering-design/ccms/wp-content/ccms-files/Engineering-Physics_Aug_19_11.pdf}}
\item Penn State, Computer Science\footnote{%
\myurl{http://cs.hbg.psu.edu/cs/csprereq.html}}
\end{itemize}

\subsection{Prerex-Formatted  Prerequisite Charts}

\subsubsection*{What file formats are used for prerex-formatted charts?}

The charts themselves are best distributed in the Portable Document
Format (PDF) defined by Adobe; PDFs are readable on any platform and in
most browsers using freely-available software (such as the Adobe Reader),
printable on any high-resolution printer, relatively compact, and scalable
to accommodate paper size, display resolution, or user preference.


Prerex-formatted charts are produced by software that processes simple and convenient
text-based descriptions.  These descriptions can be edited in any
text editor or in the \texttt{prerex} interactive editor discussed in Section~\ref{editor}.
The format of chart descriptions is documented
in Section~\ref{source}.

Charts can be converted to Scalable Vector Graphic (SVG)
format for posting on the web.
SVG images can be rendered directly by all modern web browsers and
are comparable to PDF in quality.  Wnen compressed (\verb\.svgz\), the
size is also comparable to PDF.
It is fairly easy to
convert charts to SVG images.

\subsubsection*{What software is needed to produce prerex-formatted prerequisite charts?}

To process the description of a prerex-formatted chart, the following software is
essential:
\begin{itemize}
\item an up-to-date standard-conforming implementation of \LaTeX, a powerful
document processing system based on \TeX, a professional-quality typesetting
engine; see Section~\ref{installing}.
\item a few additional \LaTeX\ packages, such as \texttt{pgf}, that may not be included in a minimal \LaTeX\ installation; see Section~\ref{additional};
\item a file \texttt{prerex.sty} of specialized \LaTeX\ definitions,
which is included in the prerex package
available at any repository
of
the Comprehensive TeX Archive Network (CTAN)\footnote{%
\myurl{http://www.ctan.org/}}
and in many \TeX\ distributions.
\end{itemize}
The following additional software is optional but recommended:
\begin{itemize}
\item a PDF viewer that
\begin{itemize}
\item can be configured to ``watch'' the PDF file so that it re-loads
automatically when this is updated, and
\item shows hyperlinks
in a ``tooltip'' when the mouse hovers over it, which is a convenient way to get
the coordinates of course boxes and arrows while editing the description;
\end{itemize}
see Section~\ref{PDF}.
\item suitable fonts; see Section~\ref{fonts}.
\item the \texttt{prerex} interactive editor for prerex-formatted charts;
see Section~\ref{editor}.
\item an integrated \LaTeX\ development environment; see Section~\ref{IDE}.
\end{itemize}

\subsubsection*{Why couldn't I use a program like Visio\textsuperscript{\textregistered}\ or CorelDRAW\textsuperscript{\textregistered}\ to produce a prerequisite chart?}
You could, if you have such a program available, are very skilled in its
use, and won't be embarrassed
distributing a chart that looks amateurish. Look carefully at a prerex-formatted
chart and notice the following properties:
\begin{itemize}
\item Each course box is sized to just enclose the text within it, with
   uniform standard margins.
\item Each arrow between courses is oriented from box centre to box centre,
   rather than from/to standard "connection points" on the box edges.
\item The arrows are "clipped" by the course boxes, but the arrow heads abut
   the target box exactly.
\end{itemize}
These desirable properties are not easily achieved using conventional
``do-it-yourself'' drawing software, no matter how ``user-friendly'' it
purports to be.
The prerex system provides complete flexibility as well as professional
quality:
\begin{itemize}
\item Text within a course box may be partitioned into regions with varying
   characteristics. For example, the course code and the timetable
   information on the first line of course boxes are in a smaller font
   than the course name. The latter is centered and the former are left-
   and right-justified, respectively. Arbitrary \LaTeX\ formatting can be used
   for the text.
\item Any available Type 1 (Postscript) or TrueType format fonts may be used.
   The professional-quality
   typesetting engine takes advantage of kerns and ligatures in the fonts.
\item Line thickness for boxes may be varied; in the example diagram, heavier
   boxes (and bold-face text) are used to indicate that a course is
   "required" in the program, rather than an option.
\item Different styles of connectors can be used, for example to distinguish
   prerequisites, co-requisites, and recommended prerequisites.
\item Various sizes or shapes of course boxes may be used, for example to
   distinguish between half and full courses.
\item Graphic images such as logos can be imported.
\item Colours and hyperlinks to on-line course descriptions or calendars are
   possible.
\end{itemize}
\subsubsection*{Wouldn't a commercial drafting service be able to produce a professional-looking prerequisite chart?}

Possibly, but you will almost certainly have to do the global lay-out
yourself. A more serious long-term problem is that it is unlikely you will
be able to maintain the chart yourself using freely available software. You
will be "locked-in" to use the drafting service for every future
modification of the chart.

If you want the quality and maintainability of a prerex-formatted chart but
don't think you can produce it yourself, you can outsource the production;
check out the following:
\myurl{http://www.prerex.com}.

\subsubsection*{How can a prerex-formatted chart be edited?}
University programs and timetables
change frequently: courses are added or dropped,
pre- or co-requisites or timetabling of courses change, and so on.
Use of a separate text-based description file and intelligent processing
software make it easy to modify a prerex-formatted chart. If the text within a course
box is changed, the size of the box, the length of connectors to and from
that box, and the location of arrowheads into the box are all adjusted
automatically by the processing software. If a course box must be moved, it
is straightforward to edit the relevant instructions for arrows into or
from the box because the coordinates specified for an arrow are those of
the box centres, rather than those of the edges or corners of the boxes.
Small changes can be made with any text editor.

For creating a prerex-formatted chart or for
making substantial changes to an existing chart, the \texttt{prerex} interactive chart editor
and the graphical ``wrapper'' \texttt{vprerex} are available;
see Section~\ref{editor}.
Editing a text file in either of these ways is far easier and
faster than trying to fiddle with an image using a mouse.


\section{Viewing and Printing a Prerequisite Chart}
\label{PDF}

A prerequisite chart in Portable Document Format (PDF) can be ``opened'' for
viewing or printing in any PDF viewer.  The most
popular of these is the
Adobe Reader.\footnote{\myurl{http://www.adobe.com/prodindex/acrobat/readstep2.html}}
However, the Adobe Reader is quite slow to load and somewhat inconvenient to use
if one wants to re-load the document after changing it (normally one must first close the document and
then re-open it).

There are faster and more convenient alternatives to the Adobe Reader. One
that is
available for Windows, Macs, and Linux systems is a
ghostscript-based viewer called
GSview.\footnote{%
\myurl{http://www.cs.wisc.edu/~ghost/}}
For Windows or Linux: download and install the most recent version of
ghostscript for your platform,\footnote{%
\myurl{http://www.cs.wisc.edu/~ghost/doc/AFPL/index.htm}}
and then install the most recent version of
GSview for your platform.\footnote{%
\myurl{http://www.cs.wisc.edu/~ghost/gsview/index.htm}}
For Macs: just get
MacGSView.\footnote{%
\myurl{http://www.cs.wisc.edu/~ghost/macos/index.htm}}

For Linux systems, other ghostscript-based viewers such as
\texttt{gv}\footnote{%
\myurl{http://wino.physik.uni-mainz.de/~plass/gv/}}
are available.  Also,
\texttt{xpdf}\footnote{%
\myurl{http://www.foolabs.com/xpdf/home.html}}
is suitable for any X-window based systems, such as any version of Linux.
If Gnome or KDE libraries are installed, variants \texttt{gpdf}, \texttt{kghostview}, \texttt{evince}, and \texttt{kpdf} (now renamed \texttt{okular}) of these programs are available.
You may print a prerequisite chart from within any of these viewing applications.

If you are \emph{editing} a prerequisite chart (using either a text editor on the
chart description or
the \texttt{prerex} editor), you will want to use a PDF viewer that
not only can be configured to ``watch'' the PDF file (so that it re-loads
automatically when this is updated), but also
shows hyperlinks
in a ``tooltip'' when the mouse hovers over it; this is a convenient way to get
the coordinates of course boxes and arrows while editing the description.
Recent versions of some of these viewing programs have the latter capability.
The \texttt{vprerex} ``wrapper'' for the \texttt{prerex} editor includes
a built-in \texttt{prerex}-enabled PDF viewer that makes it extremely easy to
transfer coordinates from the chart to the editor.


\section{Installing a Basic \LaTeX\ System}
\label{installing}

To ``process''  a chart description, you will need to install an application
called \LaTeX, together with several auxiliary applications to convert the
output into PDF or other formats.


\LaTeX\ is a powerful document processor based on a professional-quality typesetting program called \TeX.  The following web sites
will point you to as much information as you might want on \LaTeX\ and \TeX:
\begin{itemize}
\item \LaTeX\ Project home page\footnote{\myurl{http://www.latex-project.org}}
\item \TeX\ Users Group home page\footnote{\myurl{http://www.tug.org/}}
\item \TeX\ FAQ\footnote{\myurl{http://www.tex.ac.uk/cgi-bin/texfaq2html}}
\end{itemize}

If you use Windows,
we suggest you install the ``basic'' version of
MiKTeX.\footnote{%
\myurl{http://www.miktex.org/setup.html}}
If you use Mac~OS~X, go to
the \emph{\TeX\ on Mac OS~X} site.\footnote{%
\myurl{http://www.rna.nl/tex.html}}
\textsc{Unix} and Linux users should install at least the ``basic'' scheme of TeXLive.\footnote{%
\myurl{http://www.tug.org/texlive/}}

The resulting installation will allow you to process simple \texttt{.tex} files.
However, you won't be able
to process the description of a prerex-formatted prerequisite chart until
some necessary additional software is installed.

\section{Additional \LaTeX\  Software}
\label{additional}

To process descriptions of prerex-formatted charts,  some additional packages
are needed.
The file \texttt{prerex.sty} from the \texttt{prerex} package is essential;
it should be stored
in the same folder as the \texttt{.tex} file to be processed
(or in
a \verb|texmf| tree so the \LaTeX\ system can find it).
Other add-ons that may be necessary are as follows:
\texttt{pgf},
\texttt{tikz},
\texttt{multido},
\texttt{hyperref},
\texttt{textcomp}, and
\texttt{xcolor}.
If you are using \MikTeX\ or TeXLive, these packages can be installed using their
package managers.
All of the packages are also available
for download from any CTAN\footnote{%
\myurl{http://www.ctan.org/}} repository.

You are now ready to process the description for a chart.
Get a command-line
prompt, move to the folder with the chart description and issue the following
instruction:
\begin{verbatim}
 pdflatex chart
\end{verbatim}
This operation will overwrite
any existing \verb|chart.pdf|, so you should first re-name
that file if you want to preserve it.

\section{Installing a \LaTeX\  Development Environment}
\label{IDE}
Most beginning
users will prefer
to use a graphical ``development environment'' which supports editing, processing and
previewing of documents, rather than the command-line interface.  There are \emph{many} such applications;
one called \TeX Works is supported in both MiK\TeX\ and \TeX Live.

\section{Fonts}
\label{fonts}

Look carefully at the samples in Figure~\ref{samples} on page~\pageref{samples}.
\begin{figure}
\Huge
\begin{list}{}{}\item
\begin{tabular}{l}
{\fontfamily{ptm}\selectfont Times}\\
{\fontfamily{pplj}\selectfont Palatino}\\
{\fontfamily{cmss}\selectfont Computer Modern Sans}\\
{\fontfamily{phv}\selectfont Helvetica} \\
{\fontfamily{fos}\selectfont Open Sans} \\
{\fontfamily{Cabin-TLF}\selectfont Cabin}\\
{\fontfamily{QuattrocentoSans-TLF}\selectfont Quattrocento Sans}\\
{\fontfamily{LinuxBiolinumT-TLF}\selectfont Linux Biolinum}\\
{\fontfamily{uop}\selectfont Optima}
\end{tabular}
\end{list}
\caption{Typeface Samples}
\label{samples}
\end{figure}
Times and Palatino are \emph{serifed} typefaces;  the serifs are the small projections
at the baselines, and sometimes at the tops, of characters.
Serifs improve the readability of \emph{long} texts.
The others
are \emph{sans serif} typefaces; this class of typefaces is more
appropriate for use in prerequisite charts where \emph{legibility} of fairly small and short textual fragments is of primary importance.

There are several \emph{sans serif} options available for \LaTeX.
Computer Modern Sans is the default \emph{sans serif} font,
and Helvetica should also be available in every \LaTeX\ installation.
To get Helvetica (scaled down 20\%), use
\begin{verbatim}
 \usepackage[scaled=0.8]{helvet}
\end{verbatim}

The Open Sans family\footnote{%
\myurl{http://www.google.com/webfonts/specimen/Open+Sans}}
of  fonts, designed by Steve Matteson of
Ascender, is supported for use in \LaTeX\ by the \texttt{opensans} package,
available from CTAN\footnote{%
\myurl{http://www.ctan.org/pkg/opensans}}
and in most distributions.
The Cabin\footnote{%
\myurl{http://www.google.com/webfonts/specimen/Cabin}}
and Quattrocento Sans\footnote{%
\myurl{http://www.google.com/webfonts/specimen/Quattrocento+Sans}
}
families of fonts, designed by Pablo Impallari, are supported for use
in \LaTeX\ by the \texttt{cabin} and \texttt{quattrocento} packages.
The chart in Figure~\ref{chart} on page~\pageref{chart} uses Cabin.
The Linux Biolinum fonts are the sans-serif
companions to the Linux Libertine family\footnote{%
\myurl{http://www.linuxlibertine.org/index.php?id=1&L=1}},
designed by Philipp H. Poll, and are supported for use in \LaTeX\ by the
\texttt{libertine} package.

Four URW-Classico fonts, a fairly good clone of Hermann Zapf's Optima,  are available in a package
of 79~fonts in Type~1 format that may be legally downloaded for non-commercial use
from
Artifex\footnote{%
\myurl{http://www.artifex.com/downloads/}}.
The four Classico font files, renamed for use in \LaTeX, with the necessary support files and installation instructions are available
from CTAN\footnote{%
\myurl{http://www.ctan.org/pkg/classico}}.
Note that the font files cannot be distributed commercially without a commercial license; please read the license in the archive
before re-distributing them. This restriction does not prevent you from distributing documents
that \emph{use} the fonts.


\section{Conversion to Scalable Vector Graphics (SVG) Format}

One approach is to use \texttt{dvisvgm}\footnote{%
\myurl{http://dvisvgm.sourceforge.net/}}
to convert the output
of \texttt{latex} processing directly into a (compressed) SVG image.
Versions
since 1.3 generate links in the image from \texttt{hyperref} links in the source file.
Use \texttt{dvisvgm} as a global class option and
\texttt{hypertex} as a package option to \texttt{hyperref}
to ensure that the appropriate drivers are used by \texttt{latex},
and invoke \texttt{dvisvgm} as follows:
\begin{list}{}{}\item
\verb\dvisvgm -n -b dvi -L none  ... \.
\end{list}
Add the \verb\ -z \ option to obtain a compressed image and use the \verb\ -Z scale-factor \
option to scale the image height and width.
If
\texttt{dvisvgm} reports that it can't find Ghostscript,
see the \texttt{dvisvgm} documentation for configuration options.

On Unix-like platforms such as Linux, a small program called \verb\pdf2svg\ is
available\footnote{%
\myurl{http://www.cityinthesky.co.uk/opensource/pdf2svg/}}; it uses standard
libraries (\verb\poppler\ and \verb\cairo\) to implement
the conversion.


The \texttt{inkview} application in the open-source \texttt{inkscape}\footnote{%
\myurl{http://www.inkscape.org/en/}}
package
is a convenient SVG image viewer.


\section{Terminology and Coordinate System}
Before we discuss the \texttt{prerex} editor and the format
of ``source files'' (i.e.,~chart descriptions), we shall summarize the necessary terminology and coordinate
conventions.

A prerequisite chart consists of a number of
\emph{course boxes},
linked by
\emph{arrows}.
Courses are either
\emph{half}
or
\emph{full},
and may be
\emph{required}.
Each course box can contain a course
\emph{code}
(upper left corner),
a course
\emph{title}
(lower half),
and
\emph{timetable}
information
(upper right corner).
An arrow can be either a \emph{prerequisite} (solid),
a \emph{co-requisite} (dotted),
or
\emph{recommended} (dashed).
When a conventional arrow would be inappropriate, it is possible to use
a
\emph{mini}
course ``box'' (consisting of just a course code) just above a target box.
A line (or paragraph) of text may be placed anywhere on the chart.

A conventional two-dimensional
Cartesian coordinate system is used to specify the locations of
diagram elements.
The
origin (where
$x = 0$
and
$y = 0$)
is at the lower-left corner of the diagram.

The diagram height is configurable; the width is determined by
the values of the \LaTeX\ length
\verb|\textwidth|
and
an adjustable
\verb|\unit|
length, which defines the absolute value of a coordinate unit.
It is possible to put a coordinate grid with labelled axes
in the background of a chart.

The coordinates of a
\emph{box,}
\emph{mini},
or
\emph{text}
are those of its centre point.
An
\emph{arrow}
is described by the
coordinates of the centre points of its source and target boxes/minis/texts.

\section{Chart Editing}
\label{editor}
The source code of \texttt{prerex}, an interactive (command-line) prerequisite-chart editor,  is available at
CTAN repositories.\footnote{\myurl{http://mirror.ctan.org/graphics/prerex/}}
It should build on any \textsc{Unix}-like system with
suitable tools and libraries installed; for example, it can be compiled
on GNU/Linux, Solaris, the Cygwin\footnote{\myurl{http://www.cygwin.com/}}
platform on Windows,
and the Fink\footnote{\myurl{http://fink.sourceforge.net/}} platform
on OS~X.

The editor supports add, remove, cut-and-paste, and edit operations
on course boxes, minis, texts, and arrows, and shifts of specified diagram elements or an entire diagram.
A summary of all
commands supported by \texttt{prerex} is given in Table~\ref{help}.
%on page~\pageref{help}.
Note that if a course box/mini/text is ``cut''
and then ``pasted'' elsewhere, the target or source coordinates of arrows into or out of the source and target are
adjusted accordingly, and similarly if nodes are shifted or raised. To allow permutations of two or more
chart elements, the
editor maintains a ``stack'' of elements that have been cut but not yet pasted.
The notation
$x_0,y_0:x_1,y_1$
denotes all the nodes (course boxes, minis, texts) in the rectangle whose northwest and southeast corners are at
coordinates
$x_0,y_0$ and $x_1,y_1$, respectively.
\begin{table}
\begin{center}\small
\begin{tabular}{|l|l|}
\hline
    \multicolumn{1}{|c|}{\textbf{Command}} &     \multicolumn{1}{|c|}{\textbf{Effect}} \\
\hline\hline

\verb\file>  box    x,y         \ & [create and] edit course box at $x,y$\\
\verb\file>  mini   x,y         \ & [create and] edit mini course at $x,y$\\
\verb\file>  text   x,y         \ & [create and] edit text centered at $x,y$\\
\verb\file>  arrow  x0,y0,x1,y1\ & [create and] edit arrow from $x0,y0$ to $x1,y1$\\
\verb\file>  cut    x,y ... \ & (temporarily) remove box, mini, or text at $x,y$\\
\verb\file>  paste  x,y         \ &  re-insert removed box, mini, or text at $x,y$\\
\verb\file>  xchange x0,y0 x1,y1  \ &       exchange elements at $x0,y0$ and $x1,y1$\\
\verb\file>  delete [x,y | x0,y0,x1,y1 | x0,y0:x1,y1] ...\ & remove specified elements/arrows\\
\verb\file>  shift [-]x x0,y0[:x1,y1] ...\ & move [specified] elements $x$ units right [left]\\
\verb\file>  raise [-]y x0,y0[:x1,y1] ...\ & move [specified] elements $y$ units up [down]\\
\verb\file>  undo                 \ & undo the effect of the previous editing command\\
\verb\file>  write | !          \ & save to \verb\file\ and process (with \verb\pdflatex)\\\
\verb\file>  quit | exit | x | ^D\& turn off grid, save to \verb\file\, process, and exit\\
\verb\file>  !cmd               \ & execute shell command \verb\cmd\, then reload\\
\verb\file>  Backup             \ & copy \verb\file\ to \verb\.file\\\
\verb\file>  Restore            \ & restore from \verb\.file\\\
\verb\file>  grid   [y/n]       \ &  turn on/off coordinate grid background\\
\verb\file>  help | ?           \ &  print this summary\\
\hline
\end{tabular}
\end{center}
\caption{\texttt{prerex} Command Summary (since version 6.4)}
\label{help}
\end{table}

The effects of
editing operations may be observed in a PDF
viewer. See the manual page \texttt{prerex(1)} for
more information.  The \texttt{prerex} package at CTAN
also has the source files for
\texttt{vprerex} (visual \texttt{prerex}), a graphical ``wrapper'' for \texttt{prerex}
which incorporates a \texttt{prerex}-enabled PDF viewer.


For initial creation of a prerex-formatted chart
or making
substantial changes to the boxes and arrows of an existing prerex-formatted chart, it is more convenient
to use one of these programs than to edit the source file directly; however,
the chart editor has no access to other elements of a source file, such as
preamble declarations, headings, notes, logos, and so on.  A conventional text editor or
\LaTeX\ development environment should be used for these.

\section{Source Files}
\label{source}

\subsection{Overall Structure}

A \texttt{.tex} file is essentially text with interspersed
\LaTeX\ commands, much as a web-page description has text with Hypertext
Mark-up Language (HTML) tags interspersed.
Commands for \LaTeX\ can be recognized by the initial backslash character~``\verb|\|''.

The first several lines make up the ``preamble''
of the source file for a chart:
\begin{verbatim}
   \documentclass{article}
   \usepackage{prerex}
      :
\end{verbatim}
This describes the kind of document to be processed (\texttt{article}, as opposed to
\texttt{book} or \texttt{report}) and
indicates a file of definitions to be used (\texttt{prerex.sty}).
The remaining lines of the preamble
specify such things as the page layout and the fonts to be used.

The structure
\begin{verbatim}
   \begin{document}
     :
   \end{document}
\end{verbatim}
contains the content of the document.
Typically, the first element of the content is a heading, contained
within a
formatting structure of the form
\begin{verbatim}
   \begin{center}
      :
   \end{center}
\end{verbatim}
which specifies that each line of the material contained should be centered on the page.
The double-backslash command \verb|\\| indicates
a line break.

After the heading comes the description of the chart itself:
\begin{verbatim}
   \begin{chart}
     :
   \end{chart}
\end{verbatim}
Finally, there
will typically be some notes to explain the abbreviations and conventions
used in the chart.

\subsection{Chart Instructions}


Table~\ref{instructions}
on page~\pageref{instructions}
summarizes the formats of
the instructions defined by \texttt{prerex.sty}.
\begin{table}
\begin{center}
\renewcommand{\arraystretch}{1.3333}
\begin{tabular}{|l|}
\hline
\multicolumn{1}{|c|}{\textbf{Course Boxes and Text-Lines}} \\
\hline
\verb|\halfcourse |$x,y$:\verb|{|\emph{course code}\verb|}{|\emph{course title}\verb|}{|\emph{timetable code}\verb|}|  \\
\verb|\fullcourse |$x,y$:\verb|{|\emph{course code}\verb|}{|\emph{course title}\verb|}{|\emph{timetable code}\verb|}|  \\
\verb|\reqhalfcourse |$x,y$:\verb|{|\emph{course code}\verb|}{|\emph{course title}\verb|}{|\emph{timetable code}\verb|}| \\
\verb|\opthalfcourse |$x,y$:\verb|{|\emph{course code}\verb|}{|\emph{course title}\verb|}{|\emph{timetable code}\verb|}| \\
\verb|\reqfullcourse |$x,y$:\verb|{|\emph{course code}\verb|}{|\emph{course title}\verb|}{|\emph{timetable code}\verb|}| \\
\verb|\optfullcourse |$x,y$:\verb|{|\emph{course code}\verb|}{|\emph{course title}\verb|}{|\emph{timetable code}\verb|}| \\
\verb|\halfcoursec | $x,y$ \verb|:{| \emph{course code} \verb|}{| \emph{course title} \verb|}{| \emph{timetable code} \verb|}| \verb|{| \emph{color} \verb|}| \\
\verb|\reqhalfcoursec | $x,y$ \verb|:{| \emph{course code} \verb|}{| \emph{course title} \verb|}{| \emph{timetable code} \verb|}| \verb|{| \emph{color} \verb|}| \\
\verb|\opthalfcoursec | $x,y$ \verb|:{| \emph{course code} \verb|}{| \emph{course title} \verb|}{| \emph{timetable code} \verb|}| \verb|{| \emph{color} \verb|}| \\
\verb|\fullcoursec | $x,y$ \verb|:{| \emph{course code} \verb|}{| \emph{course title} \verb|}{| \emph{timetable code} \verb|}| \verb|{| \emph{color} \verb|}| \\
\verb|\reqfullcoursec | $x,y$ \verb|:{| \emph{course code} \verb|}{| \emph{course title} \verb|}{| \emph{timetable code} \verb|}| \verb|{| \emph{color} \verb|}| \\
\verb|\optfullcoursec | $x,y$ \verb|:{| \emph{course code} \verb|}{| \emph{course title} \verb|}{| \emph{timetable code} \verb|}| \verb|{| \emph{color} \verb|}| \\
\verb|\mini |$x,y:$\verb|{|\emph{course code}\verb|}| \\
\verb|\text |$x,y:$\verb|{|\emph{line of text}\verb|}| \\
\hline
\multicolumn{1}{|c|}{\textbf{Arrows}} \\
\hline
\verb|\prereq |$x_0, y_0, x_1, y_1$: \hfil
\verb|\prereqc |$x_0, y_0, x_1, y_1$; \emph{c}: \\
\verb|\coreq |$x_0, y_0, x_1, y_1$: \hfil
\verb|\coreqc |$x_0, y_0, x_1, y_1$; \emph{c}: \\
\verb|\recomm |$x_0, y_0, x_1, y_1$: \hfil
\verb|\recommc |$x_0, y_0, x_1, y_1$; \emph{c}: \\
\hline
\multicolumn{1}{|c|}{\textbf{Coordinate Grid}} \\
\hline
\verb|\grid| \\
\hline
\multicolumn{1}{|c|}{\textbf{In-Line Instructions}} \\
\hline
\verb|\solidarrow| \\
\verb|\dottedarrow| \\
\verb|\dashedarrow| \\
\verb|\lightbox| \\
\verb|\boldbox| \\
\verb|\dottedbox| \\
\hline
\end{tabular}
\renewcommand{\arraystretch}{1.0}
\end{center}
\caption{Instructions for \texttt{prerex}-Formatted Prerequisite Charts}
\label{instructions}
\end{table}

The \verb\grid\ command creates
a light gray ``coordinate grid'' in the background of the chart.
Figure~\ref{grid}
on page~\pageref{grid}
shows the example chart of Figure~\ref{chart} with the coordinate
grid enabled.
\input{introchart2}
Note that the ``origin'' of the coordinate system (the point
with $x$-coordinate $0$ and $y$-coordinate $0$) is at the lower-left corner of the chart.

The arrows produced by \verb\prereq\, \verb\coreq\, and \verb\recomm\ instructions
by default are slightly curved (except very short ones).  It is possible to increase
or decrease the degree of curvature of a particular arrow by using instructions
\verb\prereqc\, \verb\coreqc\, or \verb\recommc\; the additional argument
specifies the degree of curvature: $0$ means no curvature, i.e.,~straight,
and to increase the curvature, use a larger number (up to $100$).
To change the default curvature for \emph{all} arrows,
see Section~\ref{config} on page~\pageref{config} below.


The ``in-line'' instructions create small examples of course boxes and arrows for use
in explanatory notes outside of the \verb\chart\ environment:
\begin{list}{}{}\item
\renewcommand{\arraystretch}{1.25}
\begin{tabular}{lc}
\verb|\solidarrow| & \solidarrow \\
\verb|\dottedarrow| & \dottedarrow \\
\verb|\dashedarrow| & \dashedarrow \\
\verb|\lightbox| & \sf\small\lightbox \\
\verb|\boldbox| & \sf\small\boldbox \\
\verb|\dottedbox| & \sf\small\dottedbox
\end{tabular}
\renewcommand{\arraystretch}{1.0}
\end{list}


See the manual pages
\texttt{prerex(5)} and \texttt{prerex.sty(7)} and the documentation for
\texttt{prerex.sty} for more information.

\subsection{\LaTeX\ Input Conventions}

The following are some of the input conventions for \LaTeX\ that you might want to know
about while editing
the source file for a prerex-formatted prerequisite chart.
\begin{itemize}
\item The characters \verb|# $ % &  _ { } ~ ^ \ | are interpreted in special
ways by \LaTeX; to produce any of the first seven  of these characters, you will have
to ``escape'' them with a backslash, as in, for example, \verb|\&|.
The \verb|\\| combination produces a line break; to produce a backslash, use \verb|\backslash|. The remaining two special characters, \verb|~|
and \verb|^|, may also be escaped with a backslash but produce accents;
for example, \verb|\^{u}| produces~\^{u}.

\item To produce a space where \LaTeX\ would normally not do so, use \verb|\ |.
For example, \LaTeX\ normally interprets a period immediately after a word as the end of
a sentence and leaves a larger-than-usual space; to prevent the larger-than-usual space after an abbreviation
that finishes with a period, use \verb|\ | instead of a space, as in
\verb|Diff.\ Equations|.

\item An unescaped \verb\%\ character signals the beginning of a comment; any characters following the
\verb\%\ to the end of that line are ignored by \LaTeX.

\item To prevent a line break between two words, use a \verb\~\
instead of a space between them, as in \verb\MATH~223\.

\item To leave a smaller-than-usual space between two words,
use \verb|\,| instead of a space between them, as in \verb|MATH\,223|.

\item To prevent hyphenation of some word, use the word as the argument to
an \verb|\mbox| command, as in \verb|\mbox{Robert}|.


\end{itemize}

\subsection{Configuration}
\label{config}

The following \LaTeX\ definitions are made in
\verb|prerex.sty| but may be re-defined by the
user in the chart source file:
\begin{list}{}{}
\item \verb|\newcommand{\DefaultCurvature}{20}|
\end{list}
where the argument should be in the range $0$--$100$; $0$ means no curvature.
\begin{list}{}{}
\item \verb|\newcommand{\CourseURL}[3]{#3.html}|
\end{list}
where the arguments supplied at the call are the $x$ and $y$ coordinates of
the box or mini, and the course code.
\begin{list}{}{}
\item \verb|\newcommand{\background}{yellow!15}|
\end{list}
which defines the default background color for course nodes.
\begin{list}{}{}
\item \verb|\setlength{\unit}{5.7816pt}|
\end{list}
which defines the absolute size of a coordinate unit;
this results in exactly 10 pixels per
coordinate unit if the chart is converted to an image at 125 dpi.
\begin{list}{}{}
\item \verb|\newcommand{\dpi}{125}|
\item \verb|\newcommand{\PixelsPerUnit}{10}|
\end{list}
These three commands have to re-defined together if the image-map data are to be correct.
\begin{list}{}{}
\item \verb|\setcounter{diagheight}{75}|
\end{list}
which is the
$y$-coordinate
of the top of the diagram (reduced to $65$ in landscape mode);
the nominal diagram width is
\verb|\textwidth|~$\div$~\verb|\unit|~$+ 10$.

The following define the thicknesses of the three kinds of arrows
and the thickness of bold boxes:
\begin{list}{}{}
\item
\verb|\newcommand{\solidwidth}{0.5pt}|
\item
\verb|\newcommand{\dottedwidth}{0.8pt}|
\item
\verb|\newcommand{\dashedwidth}{0.8pt}|
\item
\verb|\newcommand{\boldwidth}{1.0pt}|
\end{list}


The following command is used to change to a smaller size for course codes,
timetable information, and mini-course codes:
\begin{list}{}{}
\item
\verb|\newcommand{\smallersize}{\relsize{-3}}|
\end{list}

The following command defines the baseline adjustment for the stand-alone arrows and boxes;
this parameter is font-dependent.
\begin{list}{}{}
\item
\verb|\newcommand{\baselineAdj}{-0.5ex}|
\end{list}

\newpage



\section*{Bibliography}
\addcontentsline{toc}{section}{Bibliography}
\label{bibliography}

The following \nocite{Kopka,Lamport,Mittelbach} are three recommended books on \LaTeX\@.
Many other books and tutorial materials are available; check out the web sites referenced
in Section~\ref{installing}.
\renewcommand{\refname}{}
\vspace*{-6ex}
\bibliography{manual}
\bibliographystyle{plain}



\end{document}