-
Notifications
You must be signed in to change notification settings - Fork 2
/
mitthesis.cls
516 lines (460 loc) · 18.6 KB
/
mitthesis.cls
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
% $Log: mitthesis.cls,v $
% Revision 1.6 2005/05/13 19:57:40 boojum
% added leftblank option
%
% Revision 1.5 2002/04/18 14:10:08 boojum
% changed doublespace into setspace for 2e compliance
%
% Revision 1.4 2001/02/08 18:57:13 boojum
% turned two newpages into cleardoublepages
%
% Revision 1.3 2000/08/14 14:53:29 boojum
% commented out footheight, which is relevant for drafthead
%
% Revision 1.2 1999/10/21 14:51:33 boojum
% changed references to documentstyle to documentclass in comments
%
% Revision 1.1 1999/10/21 14:39:31 boojum
% Initial revision
%
%Revision 1.7 1998/04/01 20:45:34 othomas
%removed offending phrase ", and to grant others the right to do so" from copyright notice.
%
%Revision 1.6 96/06/26 15:07:29 othomas
%safety checkin.
%
%Revision 1.5 93/06/07 15:38:50 starflt
%Altered 'vi' option copyright wording to comply with new Institute
%Archives requirements and MIT lawyers.
%
%Revision 1.4 92/08/19 16:51:06 lwvanels
%Updated Course 6 title page for new permissions.
%
%Revision 1.3 92/04/23 10:16:15 epeisach
%Fixed comment character in rcs file
%
%Revision 1.2 92/04/22 13:12:02 epeisach
%Fixes for 1991 course 6 requirements
%Phrase "and to grant others the right to do so" has been added to
%permission clause
%Second copy of abstract is not counted as separate pages so numbering works
%out
%
%Revision 1.1 90/05/04 11:45:53 lwvanels
%Initial revision
%
% LaTeX format for theses at MIT
% Based on "Specifications for Thesis Preparation"
% `vi' and `upcase' options by Krishna Sethuraman - [email protected]
% Margins and heading types by Peter Nuth - [email protected]
% Title and abstract page by Stephen Gildea - [email protected]
% Look in this directory for example file mitthesis.doc
% Also for propcover.tex - Boilerplate for PHD proposal.
% To use this style - say something like:
% for dull, boring thesis format:
% \documentclass[12pt]{mitthesis}
% \pagestyle{plain}
% OR for fast drafts:
% \documentclass[11pt,singlespace,draft]{mitthesis}
% \pagestyle{drafthead}
% OR for Tech Reports:
% \documentclass[12pt,twoside]{mitthesis}
% \pagestyle{headings}
% OR
% some other combination...
%
%%%% New options:
%
% Option `twoside':
% Good for producing Tech Reports.
% The default is single-sided printing, which is what M.I.T. wants on the
% thesis document itself.
%
% Option `singlespace':
% Good for drafts.
% Double-spaced theses are the default.
% That is what M.I.T. asks for in the formal specifications.
%
% Note that MIT does not REQUIRE all theses to be double-spaced anymore.
% Someone in the library system said that it's OK to be single-spaced.
% (Regardless of what the specs. say...)
% To get singlespacing in an area - Use the 'singlespace' environment.
%
% Option `draft':
% Puts `overfull' boxes at the end of lines that are too long.
%
% Pagestyle `drafthead':
% Puts the date and the label ``*DRAFT*'' in the footer.
%
%%%%%%%%%%
%
%%%% Parameters to initialize for boilerplate page:
%
% \title{Mixed Circular Cylindrical Shells}
% \author{J. Casey Salas}
% \prevdegrees{B.S., University of California (1978) \\
% S.M., Massachusetts Institute of Technology (1981)}
% \department{Department of Electrical Engineering and Computer Science}
% \degree{Doctor of Philosophy}
%% If the thesis is for two degrees simultaneously, list them both
%% separated by \and like this:
% \degree{Doctor of Philosophy \and Master of Science}
% \degreemonth{February}
% \degreeyear{1987}
% \thesisdate{December 10, 1986}
%% If the thesis is copyright by the Institute, leave this line out and
%% the standard copyright line will be used instead.
% \copyrightnotice{J. Casey Salas, 1986}
%% If there is more than one supervisor, use the \supervisor command
%% once for each.
% \supervisor{John D. Galli}{Director, Sound Instrument Laboratory}
%% This is the department committee chairman, not the thesis committee chairman
% \chairman{Arthur C. Smith}
% {Chairman, Departmental Committee on Graduate Students}
%% Make the titlepage based on the above information. If you need
%% something special and can't use the standard form, you can specify
%% the exact text of the titlepage yourself. Put it in a titlepage
%% environment and leave blank lines where you want vertical space.
%% The spaces will be adjusted to fill the entire page. The dotted
%% lines for the signatures are made with the \signature command.
%
%% The abstractpage environment sets up everything on the page except
%% the text itself. The title and other header material are put at the
%% top of the page, and the supervisors are listed at the bottom. A
%% new page is begun both before and after. Of course, an abstract may
%% be more than one page itself. If you need more control over the
%% format of the page, you can use the abstract environment, which puts
%% the word "Abstract" at the beginning and single spaces its text.
%
% \begin{abstractpage}
% Abstract goes here.
% \end{abstractpage}
%
%%%%%%%% Newer additions
%
% documentclass options -
% vi For MIT course VI or VIII thesis - will copyright the thesis to
% you while giving MIT permission to copy and distribute it.
% upcase Will put much of the cover page in uppercase, as per the
% example on page 17 of the *Specifications for Thesis
% Preparation*, (revised 1989)
% Also added ``All Rights Reserved'' to default copyright notice.
%
%%%%%%%%%%%
%
% Documentclass options (vi and upcase) and changes to copyright notice
% Copyright (c) 1990, by Krishna Sethuraman.
%
% Pagestyle and header generation
% Copyright (c) 1987, 1988 by Peter Nuth
%
% Original version
% Copyright (c) 1987 by Stephen Gildea
% Permission to copy all or part of this work is granted, provided
% that the copies are not made or distributed for resale, and that
% the copyright notice and this notice are retained.
%
% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
% FOR ANY PARTICULAR PURPOSE.
%%%%%%%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mitthesis}[1999/10/20]
\def\mystretch{1.5} % Double spacing hack
\DeclareOption{doublespace}{} % This is default
% So we do not read this style twice
\DeclareOption{singlespace}{ % If he explicitly wants single spacing
\typeout{Single spaced}
\def\mystretch{1}}
%% `vi' and `upcase' document style options. Krishna Sethuraman (1990)
\newcount\vithesis
\DeclareOption{vi}{\typeout{Course VI/VIII thesis style.}\advance\vithesis by1}
\vithesis=0
\DeclareOption{upcase}{\typeout{Uppercase cover page.}
\gdef\choosecase#1{\uppercase\expandafter{#1}}}
\def\choosecase#1{#1}
%% leftblank option by Kevin Fu
\newif\if@leftblank \@leftblankfalse
\DeclareOption{leftblank}{\typeout{Intentionally Leaving Pages Blank}
\@leftblanktrue}
% Thesis looks much like report
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{report}}
\ProcessOptions
\LoadClass{report}
% If the user wants single spacing, set baselinestretch=1.
\usepackage{setspace}
% Note - doublespace.sty has some float-related troubles in
% combination with graphics or color, and is not officially compliant
% with 2e. setspace is a replacement which is 2e-compliant.
% Read the doublespace style that we got from Rochester:
%\input setdoublespace.sty
\def\baselinestretch{\mystretch} % Double spacing hack
%%%%%%% Set up margins and formatting params %%%
% Margins.
% Note we want 1in top margin assuming no header line, so push header
% into 1in margin.
% Draft mode brings the header back down.
\setlength{\oddsidemargin}{0.25in} % 1.25in left margin
\setlength{\evensidemargin}{0.25in} % 1.25in left margin (even pages)
\setlength{\topmargin}{0.0in} % 1in top margin
\setlength{\textwidth}{6.0in} % 6.0in text - 1.25in rt margin
\setlength{\textheight}{9in} % Body ht for 1in margins
\addtolength{\topmargin}{-\headheight} % No header, so compensate
\addtolength{\topmargin}{-\headsep} % for header height and separation
% The next two macros compensate page style for headers and footers
% We only need them in page styles that USE headers and footers.
% If we have a header, it must be 1in from top of page.
\def\pulldownheader{ % Shift header down 1in from top
\addtolength{\topmargin}{\headheight}
\addtolength{\topmargin}{\headsep}
\addtolength{\textheight}{-\headheight}
\addtolength{\textheight}{-\headsep}
}
% If we have a footer, put it 1in up from bottom
\def\pullupfooter{ % Shift footer up
\addtolength{\textheight}{-\footskip}
% \addtolength{\textheight}{-\footheight} %footheight doesn't
% exist in 2e
}
%%%%%%% End of margins and formatting params %%%
%%%%%%% Fix various header and footer problems %%%
% Format for draft of thesis. Define our own PageStyle -
% Just like headings, but has foot lines with the date and warning
\if@twoside % If two-sided printing.
\def\ps@drafthead{
\let\@mkboth\markboth
\def\@oddfoot{\rm \today \hfil \sc **DRAFT**}
\def\@evenfoot{\sc **DRAFT** \hfil \rm \today }
\def\@evenhead{\rm \thepage\hfil \sl \leftmark}
\def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage}
\def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\m@ne
\@chapapp\ \thechapter. \ \fi ##1}}{}}
\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
\thesection. \ \fi ##1}}}
\pulldownheader % Bring header down from edge
\pullupfooter % Bring footer up
}
\else % If one-sided printing.
\def\ps@drafthead{
\let\@mkboth\markboth
\def\@oddfoot{\rm \today \hfil \sc **DRAFT**}
\def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage}
\def\chaptermark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\m@ne
\@chapapp\ \thechapter. \ \fi ##1}}}
\pulldownheader % Bring header down from edge
\pullupfooter % Bring footer up
}
\fi
% I redefine these formats that were defined in report.sty
% Definition of 'headings' page style
% Note the use of ##1 for parameter of \def\chaptermark inside the
% \def\ps@headings.
%
\if@twoside % If two-sided printing.
\def\ps@headings{\let\@mkboth\markboth
\def\@oddfoot{}
\def\@evenfoot{} % No feet.
\def\@evenhead{\rm \thepage\hfil \sl \leftmark} % Left heading.
\def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage} % Right heading.
\def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\m@ne
\@chapapp\ \thechapter. \ \fi ##1}}{}}
\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
\thesection. \ \fi ##1}}}
\pulldownheader % Bring header down from edge
}
\else % If one-sided printing.
\def\ps@headings{\let\@mkboth\markboth
\def\@oddfoot{}
\def\@evenfoot{} % No feet.
\def\@oddhead{\hbox {}\sl \rightmark \hfil \rm\thepage} % Heading.
\def\chaptermark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\m@ne
\@chapapp\ \thechapter. \ \fi ##1}}}
\pulldownheader % Bring header down from edge
}
\fi
% Redefinition of 'myheadings' page style.
%
\def\ps@myheadings{\let\@mkboth\@gobbletwo
\def\@oddfoot{}
\def\@evenfoot{}
\def\sectionmark##1{}
\def\subsectionmark##1{}
\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox {}} %
\def\@oddhead{\hbox{}\sl\rightmark \hfil \rm\thepage} %
\pulldownheader % Bring header down from edge
}
% Redefine '/chapter' to always start on an odd page.
% Should make no difference in singleside mode.
%
\if@leftblank
% Prints "THIS PAGE INTENTIONALLY LEFT BLANK" on blank pages.
\def\chapter{\clearpage\ifodd\c@page\else
\hbox{}\par\vfill\centerline%
{THIS PAGE INTENTIONALLY LEFT BLANK}%
\vfill\newpage\fi
\thispagestyle{plain} % Page style of chapter page is 'plain'
\global\@topnum\z@ % Prevents figures from going at top of page.
\@afterindentfalse % Suppresses indent in first paragraph. Change
\secdef\@chapter\@schapter} % to \@afterindenttrue to have indent.
\else
\def\chapter{\cleardoublepage % Starts new page.
\thispagestyle{plain} % Page style of chapter page is 'plain'
\global\@topnum\z@ % Prevents figures from going at top of page.
\@afterindentfalse % Suppresses indent in first paragraph. Change
\secdef\@chapter\@schapter} % to \@afterindenttrue to have indent.
\fi
% If using the report style, use - instead of . in the figure number.
\@ifundefined{thechapter}{}{\def\thefigure{\thechapter-\arabic{figure}}}
%%%%%%%%% End of Style parameters %%%%
% Here's Gildea's Boilerplate Stuff.
% Copyright (c) 1987 by Stephen Gildea
% Permission to copy all or part of this work is granted, provided
% that the copies are not made or distributed for resale, and that
% the copyright notice and this notice are retained.
%% Define all the pieces that go on the title page and the abstract.
% \title and \author already exist
\def\prevdegrees#1{\gdef\@prevdegrees{#1}}
\def\@prevdegrees{}
\def\department#1{\gdef\@department{#1}}
% If you are getting two degrees, use \and between the names.
\def\degree#1{\setbox0\hbox{#1} %for side effect of setting \@degreeword
\gdef\@degree{#1}}
% \and is used inside the \degree argument to separate two degrees
\def\and{\gdef\@degreeword{degrees} \par and \par}
\def\@degreeword{degree}
% The copyright notice stuff is a tremendous mess.
%
% \@copyrightnotice is used by \maketitle to actually put text on the
% page; it defaults to ``Copyright MIT 19xx. All rights reserved.''
% \copyrightnoticetext takes an argument and defined \@copyrightnotice
% to that argument. \copyrightnotice takes an argument, and calls
% \copyrightnoticetext with that argument, preceeded by a copyright
% symbol and followed by ``All rights reserved.'' and the standard
% permission notice.
%
% If you use the 'vi' option, \copyrightnoticetext is used to set the
% copyright to ``(C) Your Name, Current Year in Roman Numerals.''
% followed by the permission notice.
% If there is no \copyrightnotice command, it is asssumed that MIT
% holds the copyright. This commands adds the copyright symbol to the
% beginning, and puts the standard permission notice below.
%% ``All rights reserved'' added. Krishna Sethuraman (1990)
\def\copyrightnotice#1{\copyrightnoticetext{\copyright\ #1. All rights
reserved.\par\permission}}
% Occacionally you will need to exactly specify the text of the
% copyright notice. The \copyrightnoticetext command is then useful.
\long\def\copyrightnoticetext#1{\gdef\@copyrightnotice{#1}}
\def\@copyrightnotice{\copyright\ \Mit\ \@degreeyear. All rights reserved.}
%% `vi' documentclass option: Specifying this option automatically
%% copyrights the thesis to the author and gives MIT permission to copy and
%% distribute the document. If you want, you can still specify
%% \copyrightnotice{stuff} to copyright to someone else, or
%% \copyrightnoticetext{stuff} to specify the exact text of the copyright
%% notice.
\ifodd\vithesis \copyrightnoticetext{\copyright\ \@author,
\uppercase\expandafter{\romannumeral\@degreeyear}. All rights reserved.\par\permission}
%% or just
%%\@degreeyear}}
\typeout{Copyright given to author,
permission to copy/distribute given to MIT.}
\else \typeout{Thesis document copyright MIT unless otherwise (manually) specified}
\fi
\def\thesisdate#1{\gdef\@thesisdate{#1}}
% typically just a month and year
\def\degreemonth#1{\gdef\@degreemonth{#1}}
\def\degreeyear#1{\gdef\@degreeyear{#1}}
% Usage: \supervisor{name}{title}
% \chairman{name}{title}
% since there can be more than one supervisor,
% we build the appropriate boxes for the titlepage and
% the abstractpage as the user makes multiple calls
% to \supervisor
\newbox\@titlesupervisor \newbox\@abstractsupervisor
\def\supervisor#1#2{\setbox\@titlesupervisor\vbox
{\unvbox\@titlesupervisor \vskip 10pt% plus 1fil minus 1fil
\def\baselinestretch{1}\large
\signature{Certified by}{#1 \\ #2 \\ Thesis Supervisor}}
\setbox\@abstractsupervisor\vbox{\unvbox\@abstractsupervisor
\vskip\baselineskip \def\baselinestretch{1}\@normalsize
\par\noindent Thesis Supervisor: #1 \\ Title: #2}}
% department chairman, not thesis committee chairman
\def\chairman#1#2{\gdef\@chairmanname{#1}\gdef\@chairmantitle{#2}}
%% `upcase' documentclass option: \choosecase is defined either as a dummy or
%% a macro to change the (expanded) argument to uppercase.
\def\maketitle{\begin{titlepage}
\large
{\def\baselinestretch{1.2}\Large\bf \choosecase{\@title} \par}
by\par
{\Large \choosecase{\@author}}
\par
\@prevdegrees
\par
\choosecase{Submitted to the} \choosecase{\@department} \\
\choosecase{in partial fulfillment of the requirements for the}
\choosecase{\@degreeword}
\choosecase{of}
\par
\choosecase{\@degree}
\par
at the
\par\MIT\par
\@degreemonth\ \@degreeyear
\par
\@copyrightnotice
\par
\vskip 3\baselineskip
\signature{Author}{\@department \\ \@thesisdate}
\par
\vfill
\unvbox\@titlesupervisor
\par
\vfill
\signature{Accepted by}{\@chairmanname \\ \@chairmantitle}
\vfill
\end{titlepage}}
% this environment should probably be called abstract,
% but we want people to also be able to get at the more
% basic abstract environment
\def\abstractpage{\cleardoublepage
\begin{center}{\large{\bf \@title} \\
by \\
\@author \\[\baselineskip]}
\par
\def\baselinestretch{1}\@normalsize
Submitted to the \@department \\
on \@thesisdate, in partial fulfillment of the \\
requirements for the \@degreeword\ of \\
\@degree
\end{center}
\par
\begin{abstract}}
%% Changed from \unvbox to \unvcopy for use with multiple copies of abstract
%% page.
%% Krishna Sethuraman (1990)
\def\endabstractpage{\end{abstract}\noindent
\unvcopy\@abstractsupervisor \newpage}
%% This counter is used to save the page number for the second copy of
%% the abstract.
\newcounter{savepage}
% You can use the titlepage environment to do it all yourself if you
% don't want to use \maketitle. If the titlepage environment, the
% paragraph skip is infinitely stretchable, so if you leave a blank line
% between lines that you want space between, the space will stretch so
% that the title page fills up the entire page.
\def\titlepage{\cleardoublepage\centering
\thispagestyle{empty}
\parindent 0pt \parskip 10pt plus 1fil minus 1fil
\def\baselinestretch{1}\@normalsize\vbox to \vsize\bgroup\vbox to 9in\bgroup}
% The \kern0pt pushes any depth into the height. Thanks to Richard Stone.
\def\endtitlepage{\par\kern 0pt\egroup\vss\egroup\newpage}
\def\MIT{MASSACHUSETTS INSTITUTE OF TECHNOLOGY}
\def\Mit{Massachusetts Institute of Technology}
\def\permission{\par\noindent{\centering
The author hereby grants to MIT permission to reproduce and
distribute publicly paper and electronic copies of this thesis
document in whole or in part.}\par}
\def\signature#1#2{\par\noindent#1\dotfill\null\\*
{\raggedleft #2\par}}
\def\abstract{\subsection*{Abstract}\small\def\baselinestretch{1}\@normalsize}
\def\endabstract{\par}