summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/calendar/timetabl.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/calendar/timetabl.dtx')
-rw-r--r--macros/latex/contrib/calendar/timetabl.dtx772
1 files changed, 772 insertions, 0 deletions
diff --git a/macros/latex/contrib/calendar/timetabl.dtx b/macros/latex/contrib/calendar/timetabl.dtx
new file mode 100644
index 0000000000..3d20d67f87
--- /dev/null
+++ b/macros/latex/contrib/calendar/timetabl.dtx
@@ -0,0 +1,772 @@
+%\iffalse
+%
+% file: timetabl.dtx
+% Copyright (C) 1996-1997 by Frank Bennett. All rights reserved.
+%
+% IMPORTANT NOTICE:
+%
+% You are not allowed to change this file. You may however copy
+% this file to a file with a different name and then change the
+% copy if (a) you do not charge for the modified code, (b) you
+% acknowledge the author of this file in the new file, if it
+% is distributed to others, and (c) you attach these same
+% conditions to the new file.
+%
+% You are not allowed to distribute this file alone. You are not
+% allowed to take money for the distribution or use of this file
+% (or a changed version) except for a nominal charge for copying
+% etc.
+%
+% You are allowed to distribute this file under the condition that
+% it is distributed with all of its contents, intact.
+%
+% For error reports, or offers to help make this a more powerful,
+% friendlier, and altogether more thrilling package, please contact me on
+% fb@soas.ac.uk. Better yet, make a contribution to
+% my pension. Account details available on request.
+%
+%\fi
+%
+% \def\fileversion{3.1.1.1}
+% \def\filedate{1998/01/17 18:15:28}
+%
+% \iffalse
+%
+%<*driver>
+\documentclass{ltxdoc}
+%\CodelineIndex
+%\EnableCrossrefs
+\begin{document}
+\OnlyDescription % Comment out for implementation details
+\DocInput{timetabl.dtx}
+\end{document}
+%</driver>
+%\fi
+%
+% \changes{v1.0}{1997/02/26}{First release version, implementing
+% a suggestion from Miroslav Novak.}
+% \changes{v1.1}{1997/03/08}{Added \cs{protected@edef} to labels
+% definition, so my wife's birthday can be indicated in color
+% in our travel itinerary\ldots but it didn't work. Colors
+% in labels come up with an empty color. Problem occurs only if the
+% \cs{textcolor} command is at the start of the label, so
+% this is probably do to an unnecessary \cs{expandafter}.}
+% \changes{v1.1}{1997/03/08}{Added time type declaration to
+% pinpoint times for consistency.}
+% \changes{v1.2}{1997/05/15}{Merged improved preliminary matter from
+% the revised monthly.dtx package.}
+% \changes{v1.3}{1997/09/24}{Oops. Seem to have released without
+% completing the changes. File now works again. Converted to
+% package (from class) in the process.}
+% \changes{v1.4}{1997/10/18}{New public release of all styles
+% and modules incorporating global bug-fixes.}
+%
+%\iffalse
+% Source tree moved under RCS
+% ---------------------------
+% timetabl.dtx,v
+% Revision 3.1.1.1 1998/01/17 18:15:28 root
+% Release code, checksum verified
+%
+% Revision 3.1 1998/01/17 17:15:17 root
+% Release code
+%
+% Revision 2.5 1998/01/16 17:41:30 root
+% *** empty log message ***
+%
+% Revision 2.4 1998/01/15 10:20:31 root
+% Two typos: vline changed to vrule, and labelstrutbuf now
+% set using W, not the actual text.
+%
+% Revision 2.3 1997/11/26 07:49:48 bennett
+% Fixed typeface options, added footer, provided new option
+% to stretch label height, added color support.
+%
+% Revision 2.2 1997/11/07 10:44:05 root
+% Release code.
+%
+% Revision 2.1.1.4 1997/11/07 08:45:09 root
+% Added documentation for the new "notimes" option. Wrote
+% documentation notes for existing options that were unexplained.
+%
+% Revision 2.1.1.3 1997/11/07 08:11:13 root
+% Further changes to implement selective inclusion of times.
+% Fixed error in option definitions controlling typeface
+% selection.
+%
+% Revision 2.1.1.2 1997/11/07 03:23:22 root
+% Added code to suppress times in entries if desired.
+%
+% Revision 2.1.1.1 1997/11/04 05:06:07 root
+% Development branch
+%
+% Revision 2.1 1997/11/01 14:51:25 bennett
+% Release code.
+%
+% Revision 1.2 1997/10/29 19:54:57 bennett
+% Fixed error in RCS variable 1998/01/17 18:15:28 in the ProvidesPackage
+% declaration.
+%
+% Revision 1.1 1997/10/29 08:17:52 root
+% Initial revision
+%
+%\fi
+%
+% \title{User's Guide to the Timetable
+% package\thanks{This file is version number
+% \fileversion{}. It was last revised on
+% \filedate{}.}}
+%
+% \author{Frank G. Bennett, Jr.}
+%
+% \maketitle
+%
+% \setcounter{StandardModuleDepth}{1}
+% \DeleteShortVerb{\|}
+% \MakeShortVerb{\"}
+%
+% \CheckSum{641}
+%
+% Please see the file \texttt{calguide.tex} for details on
+% the use of this package.
+%
+%\StopEventually{\PrintIndex}
+%
+% \subsection{The Package File}
+%
+% Load a bunch of useful code.
+%
+% \begin{macrocode}
+%<*package>
+\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+\ProvidesPackage{timetabl}
+ [1998/01/17 18:15:28 3.1.1.1 Timetable (Frank Bennett)]
+% \end{macrocode}
+% Define a few boolean switches, which are needed to process
+% the style options.
+% \begin{macrocode}
+\newif\ifttbl@usecolor
+\newif\ifttbl@verbose
+% \end{macrocode}
+% Define some more variables and switches for use in the body
+% of the style.
+% \begin{macrocode}
+\newlength\ttbl@tablewidth
+\newlength{\ttbl@hw}
+\newlength{\ttbl@templen}
+\newlength{\ttbl@widthlessboxes}
+\newlength{\ttbl@timetextlen}
+\newtoks\ttbl@tempreg@a
+\newtoks\ttbl@tempreg@b
+\newcount\ttbl@tempcount
+\newcount\ttbl@start
+\newcount\ttbl@end
+\newcount\ttbl@minuteblocks
+\newcount\ttbl@boxes
+\newcount\ttbl@days
+\newcount\ttbl@blocks
+\newcount\ttbl@time@start
+\newcount\ttbl@time@end
+\newcount\ttbl@hours@start
+\newcount\ttbl@minutes@start
+\newcount\ttbl@hours@end
+\newcount\ttbl@minutes@end
+\newcount\ttbl@minute@base
+% \end{macrocode}
+%
+% \subsection{Options}
+%
+% We include the language support offered to all styles in the bundle.
+% \begin{macrocode}
+\input calopts.cfg
+\InputIfFileExists{dates.cfg}{}{}
+\ProcessOptions
+% \end{macrocode}
+%
+% \subsection{Option Postprocessing}
+%
+% Now that the options lists are available to us,
+% we can start loading packages. The following packages
+% are always loaded, and always with the same options.
+% \begin{macrocode}
+\RequirePackage{array}[1996/06/14]
+\RequirePackage{calendar}
+\RequirePackage{longtable}
+\RequirePackage{rotating}
+% \end{macrocode}
+% We get ready to set the dimensions
+% of the table that will contain the calendar??
+% \begin{macrocode}
+ \def\ttbl@settablewidth{%
+ \setlength{\ttbl@tablewidth}{\hsize}}%
+% \end{macrocode}
+% Turn off the listing of days in the Calendar style.
+% It only works well for monthly calendars.
+% \begin{macrocode}
+\tracingdates=0%
+% \end{macrocode}
+% Set up a list of options for the Calendar style engine
+% to use with the "keyval" parser.
+% \begin{macrocode}
+\define@key{opt}{leftspace}{\setlength{\LTleft}{#1}}
+\define@key{opt}{rightspace}{\setlength{\LTright}{#1}}
+\define@key{opt}{width}{\setlength{\ttbl@tablewidth}{#1}}
+\define@key{opt}{title}{\def\ttbl@title{#1}}
+\define@key{opt}{start}{\@settime\ttbl@start#1{}}
+\define@key{opt}{end}{\@settime\ttbl@end#1{}}
+\define@key{opt}{blockminutes}{\ttbl@minuteblocks=#1}
+\define@key{opt}{blocks}{\@setblocks#1,,{}}
+\define@key{opt}{labels}{\@extractlabels#1,,{}}
+\define@key{opt}{timeitemface}{\def\ttbl@timeitemface##1{{#1{##1}}}}
+\define@key{opt}{timelabelface}{\def\ttbl@timelabelface##1{{#1{##1}}}}
+\define@key{opt}{itemface}{\def\ttbl@itemface##1{{#1{##1}}}}
+\define@key{opt}{titleface}{\def\ttbl@titleface##1{{#1{##1}}}}
+\define@key{opt}{labelface}{\def\ttbl@labelface##1{{#1{##1}}}}
+\define@key{opt}{notimes}[f]{\@ttbl@usetimesfalse}
+\define@key{opt}{footer}{\def\ttbl@foot{#1}}
+\define@key{opt}{extralabelheight}{\ttbl@extralabelheight=#1}
+\newlength\ttbl@extralabelheight
+\newlength\ttbl@labelstrut%
+\newlength\ttbl@labelstrutbuf%
+% \end{macrocode}
+%
+% Before setting default values,
+% provide a set of parsing macros for use in scanning
+% some of the options fed to the "keyval" parser.
+% Doing this here allows us to specify the defaults in a
+% human readable syntax.
+%
+% \begin{macrocode}
+\def\@settime#1#2:#3#{%
+ \ttbl@tempcount=#2%
+ \multiply\ttbl@tempcount by60%
+ \advance\ttbl@tempcount by#3%
+ \global#1\ttbl@tempcount}
+\def\@splitblocks#1-#2#{%
+ \def\@blockstarttext{#1}%
+ \def\@blockendtext{#2}}
+\def\@setblocks#1,#2#{%
+ \ifcat$#1$%
+ \let\next\@gobble%
+ \else%
+ \let\next\@setblocks%
+ \global\advance\ttbl@blocks by 1%
+ \@splitblocks#1{}%
+ \expandafter\@settime%
+ \expandafter\ttbl@time@start\@blockstarttext{}%
+ \expandafter\@settime%
+ \expandafter\ttbl@time@end\@blockendtext{}%
+ \let\ttbl@tempmac\ttbl@blocklist%
+ \edef\ttbl@blocklist{%
+ \ttbl@tempmac\the\ttbl@time@start-\the\ttbl@time@end,}%
+ \fi%
+ \next#2{}}
+\def\ttbl@chopblock#1-#2,#3#{%
+ \global\ttbl@time@start=#1%
+ \global\ttbl@time@end=#2%
+ \gdef\ttbl@blocklist{#3}}%
+\def\ttbl@labellist{}%
+\def\@extractlabels#1,#2#{%
+ \ifcat$#1$%
+ \ttbl@tempreg@a=\expandafter{\ttbl@labellist}%
+ \edef\ttbl@label##1{%
+ \noexpand\ifcase##1\the\ttbl@tempreg@a\noexpand\fi}%
+ \let\next\@gobble%
+ \else%
+ \let\next\@extractlabels%
+ \let\ttbl@tempmac\ttbl@labellist%
+ \expandafter\def%
+ \expandafter\ttbl@labellist%
+ \expandafter{%
+ \ttbl@tempmac\or #1}%
+ \fi%
+ \next#2{}}
+% \end{macrocode}
+%
+% Set up default values for the "keyval" options.
+%
+% \begin{macrocode}
+\def\ttbl@title{Conference Schedule}
+\@settime\ttbl@start8:00{}
+\@settime\ttbl@end17:00{}
+\ttbl@minuteblocks=60%
+\def\ttbl@blocklist{}%
+\def\ttbl@label#1{\themonth\space\theday}%
+\def\ttbl@timeitemface#1{{\small{#1}}}%
+\def\ttbl@timelabelface#1{{\small\textbf{#1}}}%
+\def\ttbl@itemface#1{{\small\textit{#1}}}%
+\def\ttbl@titleface#1{{\large\textbf{#1}}}%
+\def\ttbl@labelface#1{{\textbf{#1}}}%
+\newif\if@ttbl@usetimes%
+\@ttbl@usetimestrue%
+\def\ttbl@foot{}%
+% \end{macrocode}
+%
+%
+% Define the calendar. As for all Calendar styles,
+% this is done using "\newcalendar" with 17 arguments.
+%
+% \begin{macrocode}
+\newcalendar%
+% \end{macrocode}
+%
+% Name the new calendar environment.
+%
+% \begin{macrocode}
+{timetable}
+% \end{macrocode}
+%
+% Select an off-the-shelf macro for printing
+% that will dump printable
+% items on DVI.
+%
+% \begin{macrocode}
+{\cal@insert}
+% \end{macrocode}
+%
+% Be indifferent to the starting day of the week.
+% ("0" through "6" specify Sunday through Saturday).
+%
+% \begin{macrocode}
+{7}
+% \end{macrocode}
+%
+% Set the number of items in a group (the whole timetable, in this case).
+%
+% \begin{macrocode}
+{\ttbl@boxes}
+% \end{macrocode}
+%
+% Set the number of items in a subgroup (a line, in this case).
+%
+% \begin{macrocode}
+{\ttbl@days}
+% \end{macrocode}
+%
+% Use the ampersand table separator before all items
+% but the first in a subgroup.
+%
+% \begin{macrocode}
+{&}
+% \end{macrocode}
+%
+% Select a zigzig algorithm that increments the
+% day at each item, and jumps back to the start
+% day at the end of each subgroup. The use of
+% "\ttbl@gettimes" here is unsightly, but for the time
+% being this gives us a way to sneak in a non-printing
+% calculation in advance of the first item in a new
+% subgroup.
+%
+% \begin{macrocode}
+{z\ttbl@gettimes}
+% \end{macrocode}
+%
+% Specify the header. This has to be built on the fly
+% in the Timetable style, since all of the sizes
+% are determined from user options. So just give the
+% name of the macro here.
+% \begin{macrocode}
+{\extrarowheight=3pt\ttbl@header}
+% \end{macrocode}
+%
+% Specify the tail of the table. Remember to terminate
+% landscape if it was requested.
+%
+% \begin{macrocode}
+{\\\hline\end{longtable}}%
+% \end{macrocode}
+%
+% This will never be used in this style, because our
+% text consists of a single group.
+%
+% \begin{macrocode}
+{\cal@footer\newpage\cal@header}
+% \end{macrocode}
+%
+% Specify how to break the end of a subgroup.
+% In this case, we end the table line and add
+% a time block that must be generated on the fly.
+%
+% \begin{macrocode}
+{\\\hline\ttbl@timecoltext}
+% \end{macrocode}
+%
+% Set a couple of Calendar toggles before
+% scanning the date contained in the "timetable"
+% environment.
+%
+% \begin{macrocode}
+{\dates@requiremonthtrue\dates@requiredaytrue}
+% \end{macrocode}
+%
+% "\cal@range@start", "\cal@range@end" and "\dates@date"
+% are all set internally, so we just provide information
+% here. Remember to adjust human-readable dates with
+% "\caldate" when changing "\dates@date", and
+% long dates with "\dates@fix" when adjusting
+% the human readable stuff.
+%
+% \begin{macrocode}
+{\message{^^JStart: \theshortweekday\space%
+ \theday\space\theshortmonth\space\theyear}%
+ \dates@date\cal@range@end%
+ \caldate%
+ \message{^^JEnd: \theshortweekday\space%
+ \theday\space\theshortmonth\space\theyear}%
+ \dates@date\cal@range@start%
+ \caldate%
+% \end{macrocode}
+%
+% \textit{Set the length of the conference in \texttt{ttbl@days}.}
+%
+% \begin{macrocode}
+ \ttbl@days\cal@range@end%
+ \advance\ttbl@days by-\cal@range@start%
+ \advance\ttbl@days by1%
+% \end{macrocode}
+%
+% \textit{Set the number of boxes in a group. The number of
+% vertical blocks will already have been set if
+% the \texttt{blocks} option was used, so bypass that if
+% appropriate.}
+%
+% \begin{macrocode}
+\ifcat$\ttbl@blocklist$%
+ \ttbl@blocks\ttbl@end%
+ \advance\ttbl@blocks by-\ttbl@start%
+ \divide\ttbl@blocks by\ttbl@minuteblocks%
+\fi%
+\ttbl@boxes\ttbl@blocks%
+\multiply\ttbl@boxes by\ttbl@days%
+% \end{macrocode}
+%
+% \textit{Prepare an algorithm to derive the start and
+% end time of a block from the value of the
+% counter \texttt{cal@group@count} and set values in
+% \texttt{ttbl@time@start}, \texttt{ttbl@time@end}
+% and \texttt{ttbl@timecoltext}.}
+%
+% \begin{macrocode}
+ \def\ttbl@gettimes{%
+ \ifcat$\ttbl@blocklist$%
+ \ttbl@time@start\cal@group@count%
+ \divide\ttbl@time@start by\ttbl@days%
+ \multiply\ttbl@time@start by\ttbl@minuteblocks%
+ \global\advance\ttbl@time@start by\ttbl@start%
+ \ttbl@time@end\ttbl@time@start%
+ \global\advance\ttbl@time@end by\ttbl@minuteblocks%
+ \else%
+ \expandafter\ttbl@chopblock\ttbl@blocklist-,{}%
+ \fi%
+ \mod{60}\ttbl@time@start\ttbl@minutes@start%
+ \ttbl@hours@start\dates@three%
+ \divide\ttbl@hours@start by60%
+ \mod{60}\ttbl@time@end\ttbl@minutes@end%
+ \ttbl@hours@end\dates@three%
+ \divide\ttbl@hours@end by60%
+ \ifnum\ttbl@minutes@start<10%
+ \edef\ttbl@minutes@start@mac{0\the\ttbl@minutes@start}%
+ \else%
+ \edef\ttbl@minutes@start@mac{\the\ttbl@minutes@start}%
+ \fi%
+ \ifnum\ttbl@minutes@end<10%
+ \edef\ttbl@minutes@end@mac{0\the\ttbl@minutes@end}%
+ \else%
+ \edef\ttbl@minutes@end@mac{\the\ttbl@minutes@end}%
+ \fi%
+ \xdef\ttbl@timecoltext{%
+ \noexpand\vbox{\vfil\vskip4pt%
+ \noexpand\begin{sideways}%
+ \noexpand\ttbl@timelabelface{%
+ \the\ttbl@hours@end:\ttbl@minutes@end@mac%
+ $\noexpand\leftarrow$%
+ \the\ttbl@hours@start:\ttbl@minutes@start@mac}%
+ \noexpand\end{sideways}%
+ \vfil}
+ &}}%
+% \end{macrocode}
+%
+% \textit{Set the dimensions of the table. We don't have
+% to worry about the vertical dimensions; we leave that
+% to longtable.}
+%
+% \textit{First let the user know what we're planning to do.}
+%
+% \begin{macrocode}
+\ttbl@tablewidth\textwidth%
+\message{Package Timetable: %
+ setting table \the\ttbl@tablewidth\space in width.^^J}%
+% \end{macrocode}
+%
+% \textit{The rules surrounding the first (time) column.}
+%
+% \begin{macrocode}
+ \setlength{\ttbl@widthlessboxes}{2\arrayrulewidth}%
+% \end{macrocode}
+%
+% \textit{The rules at the end of the text columns.}
+%
+% \begin{macrocode}
+ \addtolength{\ttbl@widthlessboxes}{\ttbl@days\arrayrulewidth}%
+% \end{macrocode}
+%
+% \textit{The space between the rules and the neighbouring text.}
+%
+% \begin{macrocode}
+ \addtolength{\ttbl@widthlessboxes}{2\tabcolsep}%
+ \setlength{\ttbl@templen}{2\tabcolsep}%
+ \addtolength{\ttbl@widthlessboxes}{\ttbl@days\ttbl@templen}%
+% \end{macrocode}
+%
+% \textit{The width of the time text.}
+%
+% \begin{macrocode}
+ \settoheight{\ttbl@timetextlen}{\ttbl@timelabelface{99:99--99:99}}%
+ \settodepth{\ttbl@templen}{\ttbl@timelabelface{99:99--99:99}}%
+ \addtolength{\ttbl@timetextlen}{\ttbl@templen}%
+ \addtolength{\ttbl@widthlessboxes}{\ttbl@timetextlen}%
+% \end{macrocode}
+%
+% \textit{Everything else is for the text columns.}
+%
+% \begin{macrocode}
+ \setlength{\ttbl@hw}{\ttbl@tablewidth}%
+ \addtolength{\ttbl@hw}{-\ttbl@widthlessboxes}%
+ \divide\ttbl@hw by\ttbl@days%
+% \end{macrocode}
+%
+% \textit{Prepare the macro that will generate a table
+% header with an appropriate number of columns
+% in appropriate sizes.}
+%
+% \textit{First we make up a unit in the width of the
+% time text, as determined above. We make that
+% the first chunk of the format.}
+%
+% \begin{macrocode}
+\edef\ttbl@firstunit{%
+ m{\the\ttbl@timetextlen}%
+ \noexpand|}%
+\ttbl@tempreg@a=\expandafter{\expandafter|\ttbl@firstunit}%
+% \end{macrocode}
+%
+% \textit{Then we make up a similar chunk, but with the
+% length of the day columns, and store it in a register.}
+%
+% \begin{macrocode}
+\edef\ttbl@dayunit{%
+ m{\the\ttbl@hw}%
+ \noexpand|}%
+\ttbl@tempreg@b=\expandafter{\ttbl@dayunit}%
+% \end{macrocode}
+%
+% \textit{Within a loop, we add the day unit format chunk
+% to the format string until we have a chunk for
+% each day in the conference.}
+%
+% \begin{macrocode}
+\ttbl@tempcount=1%
+\loop%
+ \edef\ttbl@tempmac{\the\ttbl@tempreg@a\the\ttbl@tempreg@b}%
+ \ttbl@tempreg@a=\expandafter{\ttbl@tempmac}%
+\ifnum\ttbl@tempcount<\ttbl@days%
+ \advance\ttbl@tempcount by1%
+\repeat%
+% \end{macrocode}
+%
+% \textit{Within another loop, we build the labels.
+% This is inelegant, but it works. We maintain
+% two counters in the loop, since the macro "ttbl@label"
+% might be looking for a date or the column number.}
+% \begin{macrocode}
+ \global\settoheight\ttbl@labelstrutbuf{\ttbl@labelface{W}}%
+ \global\advance\ttbl@labelstrutbuf by\ttbl@extralabelheight\relax%
+ \ifnum\ttbl@labelstrutbuf>\ttbl@labelstrut%
+ \global\ttbl@labelstrut\ttbl@labelstrutbuf%
+ \fi%
+ \def\ttbl@labeltext{}%
+ \dates@date=\cal@range@start%
+ \caldate%
+ \ttbl@tempcount=1%
+ \ttbl@tempreg@b={}%
+ \loop%
+ \protected@edef\ttbl@labeltext{\the\ttbl@tempreg@b&%
+ \noexpand\multicolumn{1}{c|}{%
+ \noexpand\ttbl@labelface{%
+ \ttbl@label{\ttbl@tempcount}}}}%
+ \ttbl@tempreg@b=\expandafter{\ttbl@labeltext}%
+ \ifnum\dates@date<\cal@range@end%
+ \advance\dates@date by1%
+ \caldate%
+ \advance\ttbl@tempcount by1%
+ \repeat%
+% \end{macrocode}
+%
+% \textit{Reset the starting date.}
+%
+% \begin{macrocode}
+ \dates@date\cal@range@start%
+ \caldate%
+% \end{macrocode}
+%
+% \textit{Then we put the rest of the basic header
+% stuff around the string. We use \texttt{protected@edef}
+% so that robust commands can be used in the title and
+% the labels. Note the conditional use of "landscape".}
+%
+% \begin{macrocode}
+ \ttbl@tempcount\ttbl@days%
+ \advance\ttbl@tempcount by1%
+ \protected@edef\ttbl@header{%
+ \noexpand\begin{longtable}{\the\ttbl@tempreg@a}%
+ \noexpand\multicolumn{\ttbl@tempcount}{c}%
+ {\noexpand\ttbl@titleface{\ttbl@title}}%
+ \noexpand\\\noexpand\hline%
+ \noexpand\vrule width0pt depth 0pt height\ttbl@labelstrut\relax%
+ \the\ttbl@tempreg@b\noexpand\\%
+ \noexpand\hline\noexpand\hline\noexpand\endhead%
+ \ifcat$\ttbl@foot$\else%
+ \noexpand\multicolumn{\ttbl@tempcount}{l}%
+ {\noexpand\ttbl@foot}\noexpand\\%
+ \noexpand\endfoot%
+ \fi%
+ \noexpand\ttbl@timecoltext}}%
+% \end{macrocode}
+%
+% Specify the divider to be placed between entries
+% within a time\-table box.
+%
+% \begin{macrocode}
+{\par\medskip}%
+% \end{macrocode}
+%
+% Use the standard Calendar item-fetching macros to
+% grab classes of items. We only need appointments
+% (things with a time associated with them) in this case,
+% and we specify the range of the current box to
+% limit the entries that are grabbed for current use.
+%
+% \begin{macrocode}
+{\cal@get@appointments[\ttbl@time@start/\ttbl@time@end]}%
+% \end{macrocode}
+%
+% Prepare macro text that will set the text to
+% "\longtext" on the first entry, and "\shorttext"
+% with braces thereafter. If no "\longtext"
+% exists, use the "\shorttext" for everything.
+%
+% \begin{macrocode}
+{\relax%
+ \ifnum\dates@time@start>0\relax%
+% \end{macrocode}
+%
+% \textit{We print a short entry for anything that starts
+% outside the slot we are dealing with.}
+%
+% \begin{macrocode}
+ \ifnum\dates@time@start<\ttbl@time@start%
+ \protected@edef\cal@entry@text{%
+ \noexpand\cal@textcolor{\calcolor}{%
+ \noexpand\ttbl@itemface{%
+ \noexpand$\noexpand<\noexpand$%
+ \theshorttext\if@ttbl@usetimes, to \cal@appt@end@text\fi%
+ \noexpand$\noexpand>\noexpand$}}}%
+% \end{macrocode}
+%
+% \textit{All other conforming entries get the long text.}
+%
+% \begin{macrocode}
+ \else%
+ \ifnum\dates@time@start<\dates@time@end%
+ \protected@edef\cal@entry@text{%
+ \if@ttbl@usetimes%
+ \noexpand\ttbl@timeitemface{%
+ \cal@appt@start@text%
+ --%
+ \cal@appt@end@text}%
+ \space%
+ \fi%
+ \noexpand\cal@textcolor{\calcolor}{%
+ \noexpand\ttbl@itemface{%
+ \thelongtext}}}%
+ \else%
+ \protected@edef\cal@entry@text{%
+ \if@ttbl@usetimes%
+ \noexpand\ttbl@timeitemface{%
+ \cal@appt@start@text}%
+ \space%
+ \fi%
+ \noexpand\cal@textcolor{\calcolor}{%
+ \noexpand\ttbl@itemface{%
+ \thelongtext}}}%
+ \fi%
+ \fi%
+ \fi}%
+% \end{macrocode}
+%
+% Chuck the assembled stack of appointments into
+% the box.
+%
+% \begin{macrocode}
+{\theappointments}
+% \end{macrocode}
+%</package>
+%
+%\iffalse
+%
+% \section{The Installation File}
+%
+% \begin{macrocode}
+%<*installer>
+\def\batchfile{timetabl.ins}
+\input docstrip.tex
+\keepsilent
+\preamble
+This file is part of the Calendar package,
+Copyright (C) 1996-1997 by Frank Bennett, Jr.
+All rights reserved.
+------------------------------------------
+% IMPORTANT NOTICE:
+%
+% You are not allowed to change this file. You may however copy
+% this file to a file with a different name and then change the
+% copy if (a) you do not charge for the modified code, (b) you
+% acknowledge the author of this file in the new file, if it
+% is distributed to others, and (c) you attach these same
+% conditions to the new file.
+%
+% You are not allowed to distribute this file alone. You are not
+% allowed to take money for the distribution or use of this file
+% (or a changed version) except for a nominal charge for copying
+% etc.
+%
+% You are allowed to distribute this file under the condition that
+% it is distributed with all of its contents, intact.
+%
+% For error reports, or offers to help make this a more powerful,
+% friendlier, and altogether more thrilling package, please contact me on
+% fb@soas.ac.uk. Better yet, make a contribution to
+% my pension. Account details available on request.
+%
+\endpreamble
+
+\generate{\file{timetabl.sty}{\from{timetabl.dtx}{package}}
+ }
+
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation, you have to move the following}
+\Msg{* file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space timetabl.sty}
+\Msg{*}
+\Msg{***********************************************************}
+
+%</installer>
+% \end{macrocode}
+%\fi
+% \Finale \PrintChanges
+
+
+