Turn .sty to .cls, use .cfg files for config, add no-answers version.
[doc/ips] / ips.cls
CommitLineData
41761fdc 1%%% -*-latex-*-
2%%%
3%%% Definitions for IPS course
4
76f457cb 5\NeedsTeXFormat{LaTeX2e}
6\ProvidesClass{ips}[2001/10/02]
7
8%%%----- Document class stuff -----------------------------------------------
9
10\newif\ifipsslides \ipsslidesfalse
11\newif\ifipsanswers \ipsanswerstrue
12\InputIfFileExists{ips.cfg}\relax\relax
13
14\ifipsslides
15 \PassOptionsToClass{a4, slidesonly}{seminar}
16\else
17 \PassOptionsToClass{a4, article, twoside}{seminar}
18\fi
19\DeclareOption*{\PassOptionsToClass{\CurrentOption}{seminar}}
20\ProcessOptions
21\LoadClass{seminar}
22
41761fdc 23%%%----- Required packages --------------------------------------------------
24
25\RequirePackage[palatino, helvetica, courier, maths=cmr]{mdwfonts}
26\RequirePackage{fancyhdr}
27\RequirePackage[T1]{fontenc}
28\RequirePackage{mdwtab, mathenv, crypto, mdwthm, mdwmath}
29\RequirePackage[within=section]{exercise}
30\RequirePackage{amssymb}
31\RequirePackage{url}
32
33\ifx\pdfoutput\@@undefined
76f457cb 34 \PassOptionsToPackage{dvips}{xy}
41761fdc 35\else
41761fdc 36 \ifarticle
37 \pdfpagewidth\paperwidth
38 \pdfpageheight\paperheight
39 \else
40 \pdfpagewidth\paperheight
41 \pdfpageheight\paperwidth
42 \fi
43\fi
76f457cb 44\RequirePackage[all]{xy}
41761fdc 45
46%%%----- Miscellaneous settings ---------------------------------------------
47
48\errorcontextlines=999
49
50%%%----- Style choices ------------------------------------------------------
51
52\renewcommand{\qedsymbol}{$\square$}
53\def\hex#1{\texttt{0x#1}}
54\let\emptystring\lambda
55\let\epsilon\varepsilon
56\let\phi\varphi
57\let\emptyset\varnothing
58\bibliographystyle{mdwalpha}
59\sloppy
60
61%%%----- Exercise typesetting -----------------------------------------------
62
63\exctrcheck{section}{\answrite{\protect\subsection*{Section \thesection}}}
64
65%%%----- Diagram typesetting ------------------------------------------------
66
67\turnradius={4pt}
68
69\def\ocat{
70 \setbox\z@\hbox{$\scriptstyle\|$}%
71 \dimen8\ht\z@\advance\dimen8\dp\z@%
72 \mathbin{\xy *=<\dimen8>[o][F]{\box\z@} \endxy}%
73}
74
75%%%------ Sectioning and headings -------------------------------------------
76
77\ifarticle
78 \fancyhf{}
79 \fancyhead[LE]{\textbf{\nouppercase{\leftmark}}}
80 \fancyhead[RO]{\textbf{\nouppercase{\rightmark}}}
81 \fancyfoot[LE, RO]{\thepage}
82 \def\headrulewidth{\z@}
83 \fancypagestyle{plain}{\fancyhead{}}
84 \def\sectionmark#1{\markboth{\thesection.\ #1}{}}
85 \def\subsectionmark#1{\markright{\thesubsection.\ #1}}
86 \let\emptyslide\relax
87 \let\topic\@gobble
88 \pagestyle{fancy}
89\else
90 \def\sectionmark#1{\markboth{#1}{}}
91 \def\subsectionmark#1{\markright{ -- #1}}
92 \newcount\@emptyslide
93 \newpagestyle{slide}%
94 {\ifnum\@emptyslide=\c@slide\else\textbf{\thetitle}\hfil\fi}%
95 {\ifnum\@emptyslide=\c@slide\else\leftmark\rightmark\hfil\theslide\fi}
96 \slidepagestyle{slide}
97 \def\emptyslide{\global\@emptyslide\c@slide}%
98 \def\@sect#1#2#3#4#5#6[#7]#8{%
99 \ifnum #2>\c@secnumdepth\else%
100 \refstepcounter{#1}%
101 \fi%
102 \csname #1mark\endcsname{#7}%
103 \csname #1summary\endcsname{#7}%
104 }
105 \def\@ssect#1#2#3#4#5{\relax}
106 \newtoks\sm@toks
107 \newcount\sm@count
108 \def\sm@auxwrite#1#2{\immediate\write\@auxout
109 {\noexpand\sm@entry{\the\sm@count}{#1}{#2}}}
110 \def\sectionsummary{%
111 \global\advance\sm@count\@ne%
112 \expandafter\let\expandafter\@next%
113 \csname sm@summary@\the\sm@count\endcsname%
114 \ifx\@next\relax\else\@next\sm@endsummary\fi%
115 \sm@auxwrite{section}%
116 }
117 \def\subsectionsummary{\sm@auxwrite{subsection}}
118 \def\sm@entry#1#2#3{%
119 \begingroup%
120 \let\protect\@unexpandable@protect%
121 \expandafter\ifx\csname sm@summary@#1\endcsname\relax%
122 \expandafter\let\csname sm@summary@#1\endcsname\@empty%
123 \fi%
124 \expandafter\xdef\csname sm@summary@#1\endcsname{%
125 \csname sm@summary@#1\endcsname%
126 \expandafter\protect\csname sm@do#2\endcsname{#3}%
127 }%
128 \endgroup%
129 }
130 \def\sm@dosection#1{%
131 \begingroup\slide%
132 \emptyslide%
133 \noindent\vadjust{}%
134 \vskip10\p@%
135 \centerline{\sffamily\bfseries\Large #1 -- overview}
136 \vskip10\p@%
137 \begingroup\itemize
138 }
139 \def\sm@endsummary{\enditemize\endgroup\endslide\endgroup}
140 \def\sm@dosubsection#1{\item\relax\@tempswatrue#1}
141 \def\sm@dotopic#1{\if@tempswa:\@tempswafalse\else;\fi\space#1}
142 \def\topic{\sm@auxwrite{topic}}
143\fi
144
145\def\head#1{{\sffamily\bfseries\large #1}\par}
146
147%%%------ Page layout for notes ---------------------------------------------
148
149\ifarticle
150 \raggedbottom
151 \def\slide@clearpage{\if@nobreak\else\par\penalty\z@\fi}
152\fi
153
154%%%----- Slide layout -------------------------------------------------------
155
156\slidewidth=260mm
157\slideheight=160mm
158
159\slideplacement{here}
160\slideframewidth=1pt
161\centerslidesfalse
162
163\def\slidefuzz{20pt}
164
165\def\slideleftmargin{15mm} \let\sliderightmargin=\slideleftmargin
166\def\slidetopmargin{15mm} \let\slidebottommargin=\slidetopmargin
167
168\def\slidearraystretch{1}
169
170%%%----- Hacking xcomment ---------------------------------------------------
171%%%
172%%% Supports \xcalways...\x which is an escape from the usual commenting.
173
174\begingroup
175\catcode`\!=12\catcode`\[=12\catcode`\]=12\catcode`\"=12
176\lccode`\!=`\\\lccode`\[=`\{\lccode`\]=`\}\lccode`\"=`\%
177\catcode`\~=\active\lccode`\~=`\^^M
178\lowercase{
179 %%
180 %% Hack the main loop code
181 %%
182 \gdef\xcomment@@@#1\@nil{%
183 \def\@tempa{#1}%
184 \ifx\@tempa\@empty
185 \let\next\xcomment@
186 \else
187 \def\next{\xcomment@@#1\@nil}%
188 \@testtrue
189 \xc@checkbegin#1\relax begin[]\relax\relax
190 \if@test
191 \xc@checkend#1\relax end[]\relax\relax
192 \if@test
193 \xc@checkinput#1\relax input[]\relax\relax
194 \if@test
195 \xc@checkinclude#1\relax include[]\relax\relax
196 \if@test
197 \xc@checkendinput#1\relax endinputss\relax\relax
198 \if@test
199 \xc@checkalways#1\relax xcalwaysfoo!x\relax\relax
200 \fi\fi\fi\fi\fi\fi
201 \next}
202 %%
203 %% New command support
204 %%
205 \gdef\xc@checkalways#1xcalways#2!x#3\relax#4\relax{%
206 \def\@tempa{#1}%
207 \ifx\@tempa\@empty%
208 \@testfalse%
209 \endgroup%
210 \toks@{#2}\rescan\toks@%
211 \def\next{\the\toks@\xc@always#3\@nil}%
212 \fi%
213 }
214}
215\endgroup
216
217\def\xc@always#1\@nil{\xc@begin#1}
218\def\xcalways#1\x{#1}
219
220%%%----- Bugfix -------------------------------------------------------------
221
222\def\@bugfix#1\let\@listi#2#3\@@%
223 {\def\normalsize{#1#3}}
224\expandafter\@bugfix\normalsize\@@
225
226\toks@\expandafter{\slidebox@restore}
227\edef\slidebox@restore{\the\toks@\advance\topsep\parskip}
228
229\ifarticle
230 \def\@bugfix#1\penalty\z@#2\@@{\def\outputloop@savedslides{#1#2}}
231 \expandafter\@bugfix\outputloop@savedslides\@@
232 \toks@\expandafter{\output@savedslide}
233 \def\@strange@hack{\begingroup\output{\unvbox\@cclv}\penalty-\@M\endgroup}
234 \edef\output@savedslide{\noexpand\@strange@hack\the\toks@}
235\fi
236
237\def\@makeslide{%
238 \setbox\@slidebox\vbox{%
239 \@begindvi % added 1997/04/15 SPQR
240 \unvbox\@cclv
241 \ifvoid\slide@footins\else
242 \vskip\skip\slide@footins
243 \vfil
244 \footnoterule
245 \unvbox\slide@footins
246 \unskip
247 \fi
248 \vskip\z@}}
249
250\def\@makecol{%
251 \setbox\@outputbox \box\@cclv
252 \xdef\@freelist{\@freelist\@midlist}%
253 \global \let \@midlist \@empty
254 \@combinefloats
255 \ifvoid\footins \else
256 \setbox\@outputbox \vbox {%
257 \boxmaxdepth \@maxdepth
258 \unvbox \@outputbox
259 \vskip \skip\footins
260 \vfil
261 \footnoterule
262 \unvbox \footins
263 \unskip
264 }%
265 \fi
266 \ifvbox\@kludgeins
267 \@makespecialcolbox
268 \else
269 \setbox\@outputbox \vbox to\@colht {%
270 \@texttop
271 \dimen@ \dp\@outputbox
272 \unvbox \@outputbox
273 \vskip -\dimen@
274 \@textbottom
275 }%
276 \fi
277 \global \maxdepth \@maxdepth
278}
279
280%%%----- That's all, folks --------------------------------------------------
281
282\endinput