summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/mitthesis/mitthesis.cls
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/mitthesis/mitthesis.cls')
-rw-r--r--macros/latex/contrib/mitthesis/mitthesis.cls631
1 files changed, 631 insertions, 0 deletions
diff --git a/macros/latex/contrib/mitthesis/mitthesis.cls b/macros/latex/contrib/mitthesis/mitthesis.cls
new file mode 100644
index 0000000000..250369020b
--- /dev/null
+++ b/macros/latex/contrib/mitthesis/mitthesis.cls
@@ -0,0 +1,631 @@
+% MIT thesis class
+
+% !TEX encoding = UTF-8 Unicode
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% This file provides the mitthesis LaTeX class for formatting theses according to
+%% MIT Libraries' requirements as of 2023.
+%%
+%% This file's version and date:
+ \def\versionno{1.00}
+ \def\versiondate{2023/06/17\space}
+%%
+%% Author: John H. Lienhard, V
+%% Department of Mechanical Engineering
+%% Massachusetts Institute of Technology
+%% Cambridge, MA 02139-4307 USA
+%%
+%% This class is compatible with either pdfLaTeX or LuaTeX.
+%%
+%% Use an up-to-date LaTeX distribution: TeX Live 2023 or later is strongly recommended!
+%% All packages required by the class are in TeX Live and available on CTAN (https://ctan.org/).
+%%
+%%
+% =========================================================
+%%
+%% LICENSE:
+%%
+%% Copyright (c) 2023 John H. Lienhard
+%%
+%% Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+%% associated documentation files (the "Software"), to deal in the Software without restriction,
+%% including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+%% and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+%% subject to the following conditions:
+%%
+%% The above copyright notice and this permission notice shall be included in all copies or
+%% substantial portions of the Software.
+%%
+%% The software is provided "as is", without warranty of any kind, express or implied, including but
+%% not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement.
+%% In no event shall the authors or copyright holders be liable for any claim, damages or other liability,
+%% whether in an action of contract, tort or otherwise, arising from, out of or in connection with the
+%% software or the use or other dealings in the software.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{mitthesis}[\versiondate MIT Thesis Template (JHL)]
+
+\LoadClass[12pt]{report}% [twoside] option can be issued in the .tex file; point size must be set here.
+
+\RequirePackage{etoolbox}% provides \ifblank, \patchcmd, \apptocmd, etc.
+\RequirePackage{ifthen} % provides \whiledo, etc.
+
+\def\ClassName{mitthesis}
+
+%%%%%%%%%%%%% Some compatibility for older latex distributions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}% compare version to date
+\providecommand\IfPackageAtLeastTF{\@ifpackagelater}% compare version to date
+
+\ifdefined\NewDocumentCommand\else
+ \RequirePackage{xparse}% enable pre-10/2020 formats to access essential macros later moved into LaTeX kernel
+\fi
+
+\IfFormatAtLeastTF{2020/02/25}{%
+ \typeout{^^JYour LaTeX format is dated \fmtversion. LaTeX distributions from 2022/11/01 or later are strongly recommended for best results^^J}
+ }{%
+ \ClassError{\ClassName}{Your LaTeX format is dated \fmtversion. Formats dated 2022/11/01 or later are recommended for this class. Older formats may generate errors}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. You can try to click past the errors for now...}%
+}
+
+\IfFileExists{iftex.sty}{%
+ \RequirePackage{iftex}% check whether pdftex or another engine is used
+ }{%
+ \ClassWarning{\ClassName}{This class requires the missing package iftex.sty---trying a work-around.}
+ % Code copied from iftex package written by the LaTeX3 Project (used under LPPL).
+ % \csname and \let construct useful for hiding \ifzzz tokens from outer level \if tests.
+ \def\IFTEX@let#1#2{%
+ \expandafter\let\csname if#1\expandafter\endcsname
+ \csname if#2\endcsname}
+ % pdftex (including in dvi mode)
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname pdftexversion\endcsname\relax
+ \IFTEX@let{pdftex}{false}
+ \else
+ \IFTEX@let{pdftex}{true}
+ \fi
+ \IFTEX@let{PDFTeX}{pdftex}
+ }
+
+% check whether pdfmanagement (\DocumentMetadata) has been loaded (to fallback on hyperxmp)
+\newif\ifmit@pdfmanagement
+% As of 2021/07/23 we could instead do:\IfPDFManagementActiveTF{\mit@pdfmanagementtrue}{\mit@pdfmanagementfalse}
+\ExplSyntaxOn
+ \IfFormatAtLeastTF{2020/02/25}{%
+ \bool_if:nTF
+ {
+ \bool_lazy_and_p:nn
+ {\cs_if_exist_p:N \pdfmanagement_if_active_p:}
+ { \pdfmanagement_if_active_p: }
+ }
+ {
+ \mit@pdfmanagementtrue
+ }
+ {
+ \mit@pdfmanagementfalse
+ }
+ }{\mit@pdfmanagementfalse}
+\ExplSyntaxOff
+
+%% Old installations may want textcomp load, but we only require this character:
+\ifdefined\textcopyright\else\def\textcopyright{©}\fi
+
+%%%%%%%%%%%%%% Options for the class %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\IfFormatAtLeastTF{2022/11/01}{%
+% \typeout{^^JUsing native keyvalue support^^J}% diagnostic info
+ \DeclareKeys{
+ fontset .store = \mit@fontset ,
+ fontset .usage = load ,
+ lineno .if = mit@lineno ,
+ lineno .usage = load ,
+ mydesign .if = mit@mydesign,
+ mydesign .usage = load ,
+ }
+ \SetKeys[\ClassName]{fontset=defaultfonts}%
+ \DeclareUnknownKeyHandler[\ClassName]{\relax}% suppress warning about unused keys
+ \ProcessKeyOptions
+}{%
+ \RequirePackage{kvoptions}
+ \SetupKeyvalOptions{
+ family=\ClassName,
+ prefix=mit@,
+ setkeys=\kvsetkeys,
+ }
+ % set key [fontset] for font selection
+ \DeclareStringOption[defaultfonts]{fontset}[]
+ %
+ \ProcessKeyvalOptions{\ClassName}
+ %
+ %% Turn off these keys now that we're done with them
+ \def\@KeyFamily{\ClassName}
+ \NewDocumentCommand\mit@DisableOption{m}{%
+ \DisableKeyvalOption[%
+ action=ignore,%
+ class=\ClassName%
+ ]{#1}{\@KeyFamily}%
+ }
+ \NewDocumentCommand\@DisableKeys{>{\SplitList{;}}m}{\ProcessList{#1}{\mit@DisableOption}}
+ %
+ \@DisableKeys{fontset;}%
+
+
+ %%%%%%%% more options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ %%% option to obtain line numbers [lineno]
+ \newif\ifmit@lineno\mit@linenofalse
+ \DeclareOption{lineno}{\mit@linenotrue}
+
+ %%% option for to load packages that customize the design [mydesign] (caption, subcaption, titlesec, itemenum)
+ \newif\ifmit@mydesign\mit@mydesignfalse
+ \DeclareOption{mydesign}{\mit@mydesigntrue}
+
+ %% Suppress warnings about unused global options
+ \DeclareOption*{}
+
+ \ProcessOptions \relax
+}
+
+%%%%%%%%%%%%% Line numbering (class option) %%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Adjustments when lineno option is used
+\ifmit@lineno
+ \RequirePackage[mathlines]{lineno}
+ \renewcommand{\linenumberfont}{\normalfont\footnotesize\color{red}}
+ \AtBeginDocument{\linenumbers}
+\fi
+
+%%% Enable dropping lineno option without trashing .aux file
+\providecommand{\@LN@col}[1]{\relax}
+\providecommand{\@LN}[2]{\relax}
+
+
+%%%%%%%%%%%%% Geometry, mathtools, design, graphics, bibliography, hyperrefs, bookmarks %%%%%%%%%%%%%%%%%%%%%%%
+
+\RequirePackage[letterpaper,top=1in,bottom=1in,left=1in,right=1in,marginparwidth=50pt,headsep=12pt,footskip=0.5in]{geometry}
+
+\RequirePackage{mathtools}% loads and extends amsmath; must load before hyperref and unicode-math
+%
+% To free \eqref from the normal font (i.e., for use section headings)
+\renewcommand{\eqref}[1]{\textup{\hbox{\m@th{(\ignorespaces\ref{#1}\unskip\@@italiccorr)}}}}
+%
+% amsmath def: \newcommand{\eqref}[1]{\textup{\tagform@{\ref{#1}}}}
+% \def\tagform@#1{\maketag@@@{(\ignorespaces#1\unskip\@@italiccorr)}}
+% \def\maketag@@@#1{\hbox{\m@th\normalfont#1}}
+
+% the packages in mydesign should come before babel (which may be loaded by fontset) and hyperref
+\ifmit@mydesign\input{mydesign.tex}\fi
+
+%% Font loading
+\typeout{^^JFontset key is \mit@fontset^^J}
+\input{fontsets/\mit@fontset.tex}
+
+\RequirePackage{graphicx}
+
+\ifmit@pdfmanagement
+ \ClassInfo{\ClassName}{pdfmanagement is defined. Will not load hyperxmp}%
+\else
+ \ClassInfo{\ClassName}{pdfmanagement is not defined. Will load hyperxmp}%
+ \RequirePackage{hyperxmp}
+\fi
+
+\RequirePackage[psdextra]{hyperref}
+% the new pdf-management scheme loads the bookmarks package internally.
+% authors should use hypersetup to set details, in root .tex file
+
+\urlstyle{same} % this changes font for \url to the current text font
+\providecommand\hrefurl[2]{\href{#1}{#2}}% in case new pdf management has not been loaded
+\RequirePackage{doi} % create macro for hyperlinking doi numbers
+
+% Directly add the xmp property that shows work is copyrighted. See l3pdfmeta.pdf.
+% This is not automatic with \DocumentMetadata. "True" must be capitalized.
+\ExplSyntaxOn
+ \cs_if_exist:NTF \pdfmeta_xmp_add:n {\pdfmeta_xmp_add:n{<xmpRights:Marked>True</xmpRights:Marked>}}{}
+\ExplSyntaxOff
+
+
+%%%%%%%%%%%%% Stuff related to PDF bookmarks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Since \bm may be useful in headings, this fix will reduce frequency with which
+%%% alternate pdfstrings must be given in revised section command as \section[pdfstring]{texstring}
+\pdfstringdefDisableCommands{%
+ \def\bm#1#{\relax}%
+}
+%
+%%% Let's disable \( and \) in pdf bookmarks
+\pdfstringdefDisableCommands{%
+ \def\({\relax}%
+ \def\){\relax}%
+}
+%
+%%% Let's also make sure \NoCaseChange in section headings won't break pdf bookmarks
+\pdfstringdefDisableCommands{%
+ \let\NoCaseChange\relax%
+}
+%
+%%% Let's just remove citations from pdf bookmarks
+\pdfstringdefDisableCommands{%
+ \def\cite{\@gobble}%
+}
+%
+%%% Let's fix \eqref in pdf bookmarks
+\pdfstringdefDisableCommands{%
+ \def\eqref#1{(\ref{#1})}%
+%
+%%% Let's make sure footnotes in section headings don't break pdf bookmarks.
+\robustify{\footnote}
+% \patchcmd{\section}{\sectionmark}{\let\footnote\@gobble\sectionmark}{}{}% <== not needed unless you implement running heads
+\pdfstringdefDisableCommands{%
+ \def\footnote#1{}%
+}
+}
+
+\let\oldfootnote\footnote
+\renewcommand\footnote[1]{%
+ \oldfootnote{#1}\futurelet\nextToken\isOtherfnote}
+
+\newcommand\isOtherfnote{%
+ \ifx\footnote\nextToken\textsuperscript{\mdseries,}%
+ \fi%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%% MACROS FOR HANDLING TITLE AND ABSTRACT PAGES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%% Dates %%%%%%%%%%%%%%%
+
+\ExplSyntaxOn
+\NewExpandableDocumentCommand\MonthCheck{mm}{%
+ \str_case_e:nnF {#1}{ {June}{} {September}{} {February}{}
+ {\space June}{} {\space September}{} {\space February}{}
+ {June\space}{} {September\space}{} { February\space}{}
+ {\space June\space}{} {\space September\space}{} {\space February\space}{}
+ }{#2}
+}
+\ExplSyntaxOff
+
+\NewDocumentCommand\DegreeDate{mm}{%
+ \def\@DegreeMonth{\ignorespaces#1}%
+ \def\@@DegreeMonth{#1}%
+ \def\@DegreeYear{\ignorespaces#2}%
+ \def\DegreeYear{\ignorespaces#2}%
+}
+
+\NewDocumentCommand\ThesisDate{m}{%
+ \def\@ThesisDate{\ignorespaces#1}%
+}
+
+%%%%%%%%%%%%%% Author, supervisor, acceptor, titles, and departments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcounter{authorcnt}
+\setcounter{authorcnt}{0}% this counter's final value is used repeatedly.
+
+\NewDocumentCommand\Author{m m oooo}{%
+ \ifblank{#1}{%
+ \ClassError{\ClassName}{Missing author name, check for blank in Author command}{%
+ You MUST provide an author name using the \Author{name}{department} command.}%
+ }{%
+ \addtocounter{authorcnt}{1}%
+ \expandafter\xdef\csname aut@\theauthorcnt\endcsname{\ignorespaces#1}%
+ \expandafter\xdef\csname autdep@\theauthorcnt\endcsname{\ignorespaces#2}%
+ \IfNoValueF{#3}{\expandafter\xdef\csname prevdegree@\theauthorcnt\endcsname{\ignorespaces#3}}%
+ \IfNoValueF{#4}{\expandafter\xdef\csname secondprevdegree@\theauthorcnt\endcsname{\ignorespaces#4}}%
+ \IfNoValueF{#5}{\expandafter\xdef\csname thirdprevdegree@\theauthorcnt\endcsname{\ignorespaces#5}}%
+ \IfNoValueF{#6}{\expandafter\xdef\csname fourthprevdegree@\theauthorcnt\endcsname{\ignorespaces#6}}%
+ }%
+ \ifblank{#2}{\ClassWarning{\ClassName}{Missing author department, check for blank in Author command}}{}%
+}% defines \aut@authorcnt as Name #1 and \autdep@authorcnt as Name #1's department
+
+\newcounter{authorno}
+\setcounter{authorno}{0}
+
+\NewDocumentCommand\@AuthorBlock{}{%
+ \setcounter{authorno}{1}%
+ \ifnum\value{authorcnt}=0
+ \ClassError{\ClassName}{Missing author! You must issue the \Author{name}{department} command}{%
+ You MUST issue the \Author{name}{department} command after \begin{document} and before \maketitle.}%
+ \fi
+ {by\par
+ \whiledo{\value{authorno}<\value{authorcnt}}{%
+ \ignorespaces\csname aut@\theauthorno\endcsname\par
+ \ifcsundef{prevdegree@\theauthorno}{\relax}{\normalsize\csname prevdegree@\theauthorno\endcsname}%
+ \ifcsundef{secondprevdegree@\theauthorno}{\relax}{\\ \normalsize\csname secondprevdegree@\theauthorno\endcsname}%
+ \ifcsundef{thirdprevdegree@\theauthorno}{\relax}{\\ \normalsize\csname thirdprevdegree@\theauthorno\endcsname}%
+ \ifcsundef{fourthprevdegree@\theauthorno}{\relax}{\\ \normalsize\csname fourthprevdegree@\theauthorno\endcsname}%
+ \par and\par
+ \addtocounter{authorno}{1}%
+ }%
+ \ignorespaces\csname aut@\theauthorno\endcsname
+ \ifcsundef{prevdegree@\theauthorno}{\relax}{\par\normalsize\csname prevdegree@\theauthorno\endcsname}%
+ \ifcsundef{secondprevdegree@\theauthorno}{\relax}{\\ \normalsize\csname secondprevdegree@\theauthorno\endcsname}%
+ \ifcsundef{thirdprevdegree@\theauthorno}{\relax}{\\ \normalsize\csname thirdprevdegree@\theauthorno\endcsname}%
+ \ifcsundef{fourthprevdegree@\theauthorno}{\relax}{\\ \normalsize\csname fourthprevdegree@\theauthorno\endcsname}%
+ \\[1em]%
+ }%
+}
+
+\newcounter{autcrcnt}
+\setcounter{autcrcnt}{1}
+
+\NewDocumentCommand\@CopyrightAuthor{}{%
+ \csname aut@\theautcrcnt\endcsname
+ \addtocounter{autcrcnt}{1}%
+ \whiledo{\value{autcrcnt}<\value{authorcnt}}{%
+ , \ignorespaces\csname aut@\theautcrcnt\endcsname
+ \addtocounter{autcrcnt}{1}%
+ }%
+ \ifnum\value{autcrcnt}=\value{authorcnt}%
+ \space and\space\csname aut@\theauthorcnt\endcsname\ignorespaces
+ \fi
+ \setcounter{autcrcnt}{1}% reset so we can use this command more than once
+}
+
+\newcounter{degcnt}
+\setcounter{degcnt}{0}
+
+\NewDocumentCommand\Degree{mm}{%
+ \ifblank{#1}{%
+ \ClassError{\ClassName}{Missing degree name, check for blank \Degree{name}{department} command}{%
+ Check for blank name \Degree{name}{department} command.}%
+ }{%
+ \addtocounter{degcnt}{1}%
+ \expandafter\xdef\csname deg@\thedegcnt\endcsname{\ignorespaces#1}%
+ \expandafter\xdef\csname degdep@\thedegcnt\endcsname{\ignorespaces#2}%
+ }%
+ \ifblank{#2}{\ClassError{\ClassName}{Missing degree department, check for blank in \Degree{name}{department} command}{%
+ Check for blank department \Degree{name}{department} command.}}{}%
+}% defines \deg@degcnt as Name #1 and \degdep@degcnt as associated dept.
+
+\newcounter{degno}
+\newcounter{depno}
+
+\NewDocumentCommand\@DegreeBlock{}{%
+ \ifnum\value{degcnt}=0
+ \ClassError{\ClassName}{Missing degree! You must issue the \Degree{name}{department} command}{%
+ You MUST issue the \Degree{name}{department} command after \begin{document} and before \maketitle. You do want the degree, don't you?}%
+ \fi
+ \setcounter{degno}{1}
+ \setcounter{depno}{1}
+ Submitted to the%
+ \whiledo{\value{depno}<\value{degcnt}}{%
+ \space\csname degdep@\thedegno\endcsname{} and the%
+ \addtocounter{depno}{1}%
+ }%
+ \space\csname degdep@\thedepno\endcsname\space
+ in partial fulfillment of the requirements for the\space
+ \ifnum\value{degcnt}>1 degrees\else degree\fi\space of%
+ \par
+ \whiledo{\value{degno}<\value{degcnt}}{%
+ \MakeUppercase{\ignorespaces\csname deg@\thedegno\endcsname}\par and\par
+ \addtocounter{degno}{1}%
+ }%
+ \MakeUppercase{\ignorespaces\csname deg@\thedegno\endcsname}\par
+}
+
+\newcounter{supcnt}
+\setcounter{supcnt}{0}
+\newcounter{supno}
+\setcounter{supno}{0}
+
+\NewDocumentCommand\Supervisor{mm}{%
+ \ifblank{#1}{%
+ \ClassError{\ClassName}{Missing supervisor name, check for blank in \Supervisor{name}{department} command}{
+ Check for blank in \Supervisor{name}{department} command.}%
+ }{%
+ \addtocounter{supcnt}{1}%
+ \expandafter\xdef\csname sup@\thesupcnt\endcsname{#1}%
+ \expandafter\xdef\csname supdep@\thesupcnt\endcsname{#2}%
+ }%
+ \ifblank{#2}{\ClassError{\ClassName}{Missing supervisor department, check for blank in \Supervisor{name}{department} command}{%
+ check for blank in \Supervisor{name}{department} command.}}{}%
+}% defines \sup@supcnt as Name #1 and \supdep@supcnt as associated dept.
+
+\newcounter{acccnt}
+\setcounter{acccnt}{0}
+\newcounter{accno}
+\setcounter{accno}{0}
+\NewDocumentCommand\Acceptor{mmm}{%
+ \ifblank{#1}{%
+ \ClassWarning{\ClassName}{Missing acceptor name, check for blank \Acceptor{name}{department} command}%
+ }{%
+ \addtocounter{acccnt}{1}%
+ \expandafter\xdef\csname acc@\theacccnt\endcsname{#1}%
+ \expandafter\xdef\csname accdep@\theacccnt\endcsname{#2}%
+ \expandafter\xdef\csname acctitle@\theacccnt\endcsname{#3}%
+ }%
+ \ifblank{#2}{\ClassWarning{\ClassName}{Missing acceptor department, check for blank in \Acceptor{name}{department}{title} command.}}{}%
+ \ifblank{#3}{\ClassWarning{\ClassName}{Missing acceptor title, check for blank in \Acceptor{name}{department}{title} command.}}{}%
+}% defines \acc@acccnt as Name #1, \accdep@accccnt as associated dept, and \acctitle@acccnt as title of acceptor
+
+\def\@SigSize{\relax}
+\NewDocumentCommand\SignatureBlockSize{m}{\let\@SigSize\ignorespaces#1}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\NewDocumentCommand\@SetSignatureBlock{}{%
+ \ifnum\value{supcnt}=0
+ \ClassError{\ClassName}{Missing supervisor! You must issue the \Supervisor{name}{department} command}{%
+ You MUST issue the \Supervisor{name}{department} command after \begin{document} and before \maketitle.}%
+ \fi
+ \ifnum\value{acccnt}=0
+ \ClassError{\ClassName}{Missing acceptor! You must issue the \Acceptor{name}{department} command}{%
+ You MUST issue the \Acceptor{name}{department} command after \begin{document} and before \maketitle.}%
+ \fi
+ \ifdefined\@ThesisDate\else\ClassError{\ClassName}{Missing thesis date!}{%
+ You must issue the \ThesisDate{Date thesis is submitted} command between \begin{document} and \maketitle.}%
+ \fi
+ \setcounter{authorno}{0}%
+ \setcounter{supno}{0}%
+ \setcounter{accno}{0}%
+ \@SigSize
+ \begin{tabbing}
+ \hspace{1.35in}\=\hspace{1in}\kill
+ \whiledo{\value{authorno}<\value{authorcnt}}{% starting with authorno = 0 ensures we reach authorcnt with +1
+ \addtocounter{authorno}{1}%
+ Authored by: \> \csname aut@\theauthorno\endcsname\ignorespaces \\
+ \> \csname autdep@\theauthorno\endcsname\ignorespaces \\
+ \> \@ThesisDate \\[1em]
+ }% end whiledo
+ \whiledo{\value{supno}<\value{supcnt}}{%
+ \addtocounter{supno}{1}%
+ Certified by: \> \csname sup@\thesupno\endcsname\ignorespaces \\
+ \> \csname supdep@\thesupno\endcsname\ignorespaces, Thesis Supervisor\\[1em]
+ }% end whiledo
+ \whiledo{\value{accno}<\value{acccnt}}{%
+ \addtocounter{accno}{1}%
+ Accepted by: \> \csname acc@\theaccno\endcsname\ignorespaces \\
+ \> \csname accdep@\theaccno\endcsname\ignorespaces \\
+ \> \csname acctitle@\theaccno\endcsname\ignorespaces \\[1em]
+ }% end whiledo
+ \end{tabbing}
+}
+\NewDocumentCommand\@SetAbstractSupervisorBlock{}{%
+ \setcounter{supno}{1}
+% \\[1em]% dislikes a trailing blank line in abstract
+ \par\bigskip\noindent
+ \whiledo{\value{supno}<\value{supcnt}}{%
+ Thesis supervisor: \csname sup@\thesupno\endcsname\ignorespaces\\
+ Title: \csname supdep@\thesupno\endcsname\ignorespaces\\[1em]
+ \addtocounter{supno}{1}%
+ }% end whiledo
+ Thesis supervisor: \csname sup@\thesupno\endcsname\ignorespaces\\
+ Title: \csname supdep@\thesupno\endcsname\ignorespaces
+}
+
+%%%%%%%%%%%%%%%%%%% Copyright related %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\CCurl{}% empty by default
+\newif\ifmit@cclicense\mit@cclicensefalse
+\NewDocumentCommand\CClicense{m m}{%
+ \def\CClicensetext{\hrefurl{#2}{\ignorespaces#1}}% #1 - text, #2 - url
+ \def\CCname{#1}
+ \def\CCurl{#2}% for use in metadata
+ \mit@cclicensetrue
+}
+
+
+%%%%%%%%%%%%%%%%%%% Create titlepage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\MIT{MASSACHUSETTS INSTITUTE OF TECHNOLOGY}
+
+\RenewDocumentCommand\maketitle{}{%
+%
+ \ifdefined\@DegreeMonth\else\ClassError{\ClassName}{Missing degree date!}{%
+ You must issue the \DegreeDate{month}{year} command between \begin{document} and \maketitle}%
+ \fi
+%
+ \ifmit@cclicense
+ \def\CopyrightLicense{This work is licensed under a \CClicensetext\ license.\par\MITpermission}
+ \typeout{^^JUsing Creative Commons License \CCname^^J}
+ \def\PDFRightsText{This work is licensed under a \CCname\ license. \MITpermission}% for use in metadata
+ \else
+ \def\CopyrightLicense{All rights reserved.\par\MITpermission}
+ \def\PDFRightsText{All rights reserved. \MITpermission}% for use in metadata
+ \fi
+ \ifnum\value{authorcnt}>1
+ \def\CRWords{The authors hereby grant}\else\def\CRWords{The author hereby grants}
+ \fi
+ \def\MITpermissionLast{to MIT a nonexclusive, worldwide, irrevocable, royalty-free license to exercise any and all rights under copyright, including to reproduce, preserve, distribute and publicly display copies of the thesis, or release the thesis under an open-access license.}%
+ \def\MITpermission{\CRWords\space\MITpermissionLast}%
+%
+ \clearpage
+ \thispagestyle{empty}%
+ \phantomsection\addcontentsline{toc}{chapter}{\protect\textbf{Title page}}%
+ {\centering\vbox to \vsize{% vbox to prevent signature block from breaking across page. Remove if necessary.
+ %\ifmit@lineno\internallinenumbers\fi % lineno does not work in tabbing environment, as in signature block
+ \setlength{\parskip}{0.5\baselineskip plus 2pt minus 2pt}\setlength{\parindent}{0pt}%
+ {\Large\textbf{\@title}\par}%
+ \@AuthorBlock
+ \par
+ \@DegreeBlock
+ at the\par
+ \MIT\par
+ \@DegreeMonth\space\@DegreeYear
+ \MonthCheck{\@@DegreeMonth}{%
+ \ClassError{\ClassName}{Acceptable months for the degree date are February, June, and September}{Change %
+ the month of your degree date to one of February, June, or September.}%
+ }%
+ \par
+ \copyright\space\@DegreeYear\space\@CopyrightAuthor. \CopyrightLicense
+ \par
+ \vskip 1.5\baselineskip
+ %
+ \@SetSignatureBlock
+ \vfill
+ }}%
+ \newpage
+}
+
+%%%%%%%%%%%%%%%%%%% Create abstract page %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\RenewDocumentEnvironment{abstract}{+b}{%
+ \newpage
+ \phantomsection\addcontentsline{toc}{chapter}{\protect\textbf{Abstract}}%
+ \begin{center}
+ {\large{\textbf{\@title}}\par}
+ \setlength{\parskip}{0.5\baselineskip plus 2pt minus 2pt}
+ \@AuthorBlock
+ \par
+ \@DegreeBlock
+ \end{center}
+ \vskip\baselineskip
+ \textbf{ABSTRACT}\par\vskip0.5em
+ \ignorespaces#1\ignorespaces
+ \ifblank{#1}{\typeout{Missing abstract!} MISSING ABSTRACT!}{\relax}
+}{%
+ \@SetAbstractSupervisorBlock
+ \newpage
+ \ignorespacesafterend
+}
+
+%%%%%%% A nomenclature environment, if needed %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\providecommand{\nomname}{Nomenclature}
+\newlength\nomenwidth
+\newlength\savitemsep
+
+\makeatletter
+\NewDocumentCommand\entry{m m}{%
+ \ifblank{#2}{%
+ \ClassWarning{\ClassName}{The command \protect\entry requires two arguments. To obtain a subheading, use \protect\EntryHeading}
+ \itemsep3\p@ plus 1\p@ minus 1\p@%
+ \goodbreak\item[\itshape#1\hfill]\setlength\itemsep\savitemsep\@itempenalty=1000%
+ }{%
+ \item[#1\hfill]#2%
+ \@itempenalty=-\@lowpenalty%
+ }%
+}
+% A separate command command for nomenclature subheadings
+\NewDocumentCommand\EntryHeading{m}{%
+ \itemsep3\p@ plus 1\p@ minus 1\p@%
+ \goodbreak\item[\itshape#1\hfill]\setlength\itemsep\savitemsep\@itempenalty=1000%
+}
+\makeatother
+%
+% Increase first optional argument to a dimension > 2em if wide entries cause undesired misalignment of columns.
+% Second optional argument can be used to rename the environment, e.g., to List of Symbols.
+\NewDocumentEnvironment{nomenclature}{O{2em} O{\nomname} O{section}}{%
+ \setlength\columnsep{2em}
+ \setlength{\nomenwidth}{#1}
+ \csname #3\endcsname *{#2}% this level will vary amongst users!
+ \phantomsection\addcontentsline{toc}{#3}{#2}%
+ \raggedright
+ \begin{list}{}{%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\parsep}{\itemsep}%
+ \setlength{\labelsep}{1em}%
+ \setlength{\labelwidth}{\nomenwidth}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \setlength\savitemsep\itemsep%
+ }%
+}{\end{list}\ignorespacesafterend}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\endinput
+%%
+%% End of file `mitthesis.cls'.