Skip to content

Instantly share code, notes, and snippets.

@rpavlik
Created July 11, 2014 18:03
Show Gist options
  • Save rpavlik/ad3f19bcd1aa150c7d6d to your computer and use it in GitHub Desktop.
Save rpavlik/ad3f19bcd1aa150c7d6d to your computer and use it in GitHub Desktop.
Test Case for errors
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{rpisudiss}[2014/07/06 Ryan Pavlik's ISU Thesis]
\newcommand{\@isu@classname}{rpisudiss}
\RequirePackage{setspace}
% option doublespacing: Double-space where we would have 1.5 spaced.
\newcommand\isu@spacing{\onehalfspacing}
\newcommand\isu@space{onehalfspace}
\DeclareOption{doublespacing}{%
\renewcommand\isu@spacing{\doublespacing}
\renewcommand\isu@space{doublespace}
}
% option capstoc: Capitalize chapters in the table of contents
% Technically required if you go by the text of the grad college site,
% but rule inconsistently applied and results painful to read.
\newif\if@isu@capstoc \@isu@capstocfalse
\DeclareOption{capstoc}{\@isu@capstoctrue}
% option capschap: Capitalize chapters everywhere else
% Technically required if you go by the text of the grad college site,
% but rule inconsistently applied and results painful to read.
\newif\if@isu@capschap \@isu@capschapfalse
\DeclareOption{capschap}{\@isu@capschaptrue}
% option print: Optimize for print rather than on-screen (hide links, etc.)
% Apparently doesn't work right now. Sad.
\newif\if@isu@print \@isu@printfalse
\DeclareOption{print}{\@isu@printtrue}
% option tocnumbersections: Number sections in the ToC.
\newif\if@isu@tocnumbersections@ \@isu@tocnumbersections@false
\DeclareOption{tocnumbersections}{\@isu@tocnumbersections@true}
% option tocnumbersubsections: Number subsections in the ToC. Implies tocnumbersections.
\newif\if@isu@tocnumbersubsections@ \@isu@tocnumbersubsections@false
\DeclareOption{tocnumbersubsections}{ \@isu@tocnumbersubsections@true\@isu@tocnumbersections@true}
% option ignoremissingmainmatter: Don't error if we've seen a titlepage but no \mainmatter by the end of the document.
\newif\if@isu@errormissingmainmatter@ \@isu@errormissingmainmatter@true
\DeclareOption{ignoremissingmainmatter}{\@isu@errormissingmainmatter@false}
% option draftcls: adds "DRAFT" and a date/time stamp on the footer.
\newif\if@isu@draftcls@ \@isu@draftcls@false
\DeclareOption{draftcls}{\@isu@draftcls@true}
% option draft: draftcls plus whatever anyone else thinks about draft.
\DeclareOption{draft}{
\@isu@draftcls@true
\PassOptionsToClass{draft}{report}
}
% Forward everything not recognized
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{report}}
% Process options
\ProcessOptions\relax
% Based on report
\LoadClass[12pt]{report}
% had to choose to put this here for tocloft
\RequirePackage{subfig}
% Put lot, lof, and bibliography (but not the contents itself) in the ToC
\RequirePackage[nottoc]{tocbibind}
% Basic hyperref - note that backreferences are incompatible with bibtopic (for per-chapter bibliographies)
\RequirePackage[pdftex,pdfusetitle,hypertexnames=false,linktocpage=true]{hyperref}
\hypersetup{bookmarksnumbered=true,bookmarksopen=true,pdfpagemode=UseOutlines,pdfview=FitB}
\if@isu@print
% Hide links for print
% Apparently doesn't work right now. Sad.
\hypersetup{hidelinks}
\else
% Nice blue links.
\hypersetup{colorlinks=true,linkcolor=blue,anchorcolor=blue,citecolor=blue,filecolor=blue,urlcolor=blue}
\fi
% Indent first paragraph after sectioning things.
\RequirePackage{indentfirst}
% Setup page layout
\RequirePackage{geometry}
\geometry{left=1in, top=1in, headheight=0.25in, headsep=0.5in, right=1in, bottom=1in, includehead=false}
% Handle draftcls option placing timestamp in footer and watermarking first page.
\if@isu@draftcls@
\RequirePackage[firstpage]{draftwatermark}
\RequirePackage{datetime}
\newcommand{\isu@draftfooter}{DRAFT --- rendered \today\ at \currenttime}
\else
\newcommand{\isu@draftfooter}{}
\fi
% Setup headers/footers - override the plain page style.
\RequirePackage{fancyhdr}
\fancypagestyle{plain}{%
\fancyhf{} % clear all header and footer fields
\fancyhead[C]{\thepage} % Always put the page in the center header
\fancyfoot[C]{\isu@draftfooter} % In draft mode, put stuff in the center footer.
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}}
\AtBeginDocument{\pagestyle{plain}}
% Set up a bool for mainmatter or not.
\newif\if@mainmatter \@mainmatterfalse
% Title page:
% - empty style (no numbering shown)
% - starts the preface/roman numerals
% - gets a PDF bookmark, just because we can.
\renewcommand{\titlepage}{
\thispagestyle{empty}
\pagenumbering{roman}
\pdfbookmark[0]{\@title}{toc}
% backup and set secnumdepth
\newcounter{isu@secnumdepth}
\setcounter{isu@secnumdepth}{\value{secnumdepth}}
\setcounter{secnumdepth}{-1}
\@mainmatterfalse
}
\renewcommand{\endtitlepage}{\newpage\pagestyle{plain}}
%%%
% Set up sectioning
\RequirePackage{titlesec}
% \titleformat{command}[shape]{format}{label}{sep}{before}[after]
% Chapter titles:
% - Caps (optional)
% - large
% - bold
% - center
\titleformat{\chapter}[block]
{\normalfont\large\bfseries\centering}
{\if@mainmatter%
\if@isu@capschap\MakeUppercase{\chaptertitlename}%
\else\chaptertitlename\fi
\thechapter.\quad\fi}
{0pt}
{\if@isu@capschap\MakeUppercase\fi}{}
% Section:
% - bold
% - center
\titleformat{\section}[block]
{\normalfont\normalsize\bfseries\centering}
{\thesection.}{1em}{}{}
% Subsection:
% - bold
% - left-justified
\titleformat{\subsection}[block]
{\normalfont\normalsize\bfseries}
{\thesubsection.}{1em}{}{}
% Subsubsection:
% - bold
% - left-justified with indent
\titleformat{\subsubsection}[block]
{\normalfont\normalsize\bfseries}
{\quad\thesubsubsection.}{1em}{}{}
% Apply default spacing
\isu@spacing
% Needed for toc/lof/lot spacing and headfoot tweaking
\RequirePackage{xpatch}
%%%
% ToC:
% Rename the ToC
\RequirePackage[subfigure,titles]{tocloft}
\renewcommand{\contentsname}{Table of Contents}
% - Remove parskips from toc (and lof/lot)
\setlength{\cftparskip}{0pt}
% - Single space
% - Page break after
% - TODO: couldn't get pdfbookmark to point to this page instead of the
% first page so it was removed.
\xpretocmd{\tableofcontents}{%
\begin{singlespace}}{}{}
\xapptocmd{\tableofcontents}{%
\end{singlespace}%
\pagestyle{plain}%
\clearpage}{}{}
% - Add dot leader for chapter levels
\renewcommand\cftchapdotsep{\cftdotsep}
% - Prefix "Chapter " to chapter number
% - Adjust indentation of levels
% - Capitalize title entries, if requested
\if@isu@capstoc
\renewcommand\cftchappresnum{\MakeUppercase{\chaptertitlename} }
\cftsetindents{chapter}{0em}{8em}
\cftsetindents{section}{2em}{0em}
\cftsetindents{subsection}{3em}{0em}
\renewcommand{\cftchapfont}{\MakeUppercase}
\else
\renewcommand\cftchappresnum{\chaptertitlename\ }
\cftsetindents{chapter}{0em}{6em}
\cftsetindents{section}{1em}{0em}
\cftsetindents{subsection}{2em}{0em}
\fi
% - Remove section/subsection numbers from ToC by capturing
% see idea at http://tex.stackexchange.com/questions/71123/remove-section-number-toc-entries-with-tocloft
\if@isu@tocnumbersections@\else
\renewcommand{\cftsecpresnum}{\begin{lrbox}{\@tempboxa}}
\renewcommand{\cftsecaftersnum}{\end{lrbox}}
\fi
\if@isu@tocnumbersubsections@\else
\renewcommand{\cftsubsecpresnum}{\begin{lrbox}{\@tempboxa}}
\renewcommand{\cftsubsecaftersnum}{\end{lrbox}}
\fi
%%%
% List of Figures:
% - Single space
% - Page break after
\xpretocmd{\listoffigures}{%
\begin{singlespace}}{}{}
\xapptocmd{\listoffigures}{%
\end{singlespace}\clearpage}{}{}
% - Prepend the word "Figure" to the number
\renewcommand\cftfigpresnum{Figure }
\cftsetindents{figure}{0em}{6em}
%%%
% List of Tables:
% - Single space
% - Page break after
\xpretocmd{\listoftables}{%
\begin{singlespace}}{}{}
\xapptocmd{\listoftables}{%
\end{singlespace}\clearpage}{}{}
% - Prepend the word "Table" to the number
\renewcommand\cfttabpresnum{Table }
\cftsetindents{table}{0em}{6em}
%%%
% Document division commands
% Command to indicate when we're done
% with preface content - must be called!
% (If we're actually typesetting a full thesis...)
\newcommand{\mainmatter}{%
\clearpage
\pagenumbering{arabic}
\pagestyle{plain}
\@mainmattertrue
\newcommand{\@isu@gotmainmatter@}{}
\setcounter{chapter}{0}
% restore secnumdepth
\setcounter{secnumdepth}{\value{isu@secnumdepth}}
}
% Command to indicate we're done with main content
\newcommand{\backmatter}{
\setcounter{isu@secnumdepth}{\value{secnumdepth}}
\setcounter{secnumdepth}{-1}
\@mainmatterfalse
}
\RequirePackage{etoolbox}
% Verify that we actually got some main matter
\AfterEndDocument{
\if@isu@errormissingmainmatter@
\ifdefined\@isu@gottitle
\ClassInfo{\@isu@classname}{Full dissertation mode}
\unless\ifdefined\@isu@gotmainmatter@
\ClassError{\@isu@classname}{Missing \protect\mainmatter\space before your first real chapter!}{Missing mainmatter}
% \ClassError{\@isu@classname}{%
% \protect\mainmatter\space not called in your document expected before your first real chapter}{%
% You need to put \protect\mainmatter\space before your first real numbered chapter, typically your introduction.}
\fi
\fi
\fi
}
%%%
% Title Page
% Temporary: hardcode these values in.
\newcommand\isu@degree{Doctor of Philosophy}
\newcommand\isu@gradyear{2014}
\newcommand\isu@submissiontype{dissertation}
\newcommand\isu@majorline{Co-majors: Human-Computer Interaction; Computer Science}
\newcommand\isu@committee{%
Judy M. Vance, Co-major Professor\\%
Leslie Miller, Co-major Professor\\%
Debra Satterfield \\ Jonathan Kelly \\ David Weiss \\ Horea Ilies}
\newcommand\isu@copyrightnotice{\\ % Unclear what the spacing between notice and the text above should be.
Copyright \copyright\ \@author, \isu@gradyear.
All rights reserved.}
% Spacing tools
% - used for what the thesis office calls "two blank lines"
\newcommand{\@isu@twoblanklines}{20pt}
\newcommand{\@isu@maketwoblanklines}{\vspace{\@isu@twoblanklines}}
% The actual title page layout.
% Note that portions that appear double-spaced in the sample/annotated PDF
% are given the same spacing as the body of the document (1.5 or 2)
\renewcommand{\maketitle}{
\newcommand{\@isu@gottitle}{} % Assume that \maketitle implies typesetting a full thesis, not just a chapter.
\ClassInfo{\@isu@classname}{Generating title page -- assuming we are typesetting a full dissertation.}
\begin{titlepage}
\setlength{\parindent}{0pt} % Don't you dare try to indent!
\vbox to \textheight{ % Full-page box to contain everything and stretch everything.
\begin{center} % Center this whole page
\vspace*{12pt} % Designated blank line at the top of the page.
\begin{singlespace} % Single-space this section, we manually add spacing.
\textbf{\@title}\\ % Title in bold
\@isu@maketwoblanklines % "two blank lines"
by\\ % the word 'by', not in bold
\@isu@maketwoblanklines % "two blank lines"
\textbf{\@author} % Author in bold
\end{singlespace}
\vfill{} % let LaTeX decide what "4-6 blank lines" should be.
\begin{\isu@space} % Normal document spacing here.
A \isu@submissiontype\ submitted to the graduate faculty\\
in partial fulfillment of the requirements of the degree of\\
\MakeUppercase{\isu@degree} % Doctor of Philosophy, etc. We enforce caps so they don't have to.
\end{\isu@space}
\@isu@maketwoblanklines % "two blank lines"
\begin{singlespace} % Committee is single-spaced, looks like really long majors would be too.
\isu@majorline\\ % "Major: MAJ (CONC)" or "Co-majors: MAJ; MAJ;
\medskip % Unspecified space here, looks like just "one blank line" on sample
Program of Study Committee:\\
\isu@committee % Committee, user-delimited with \\ and user-annoted with ", Major Professor" or "Co-major Professor"
\end{singlespace}
\vfill{} % let LaTeX decide what "7-8 blank lines" should be.
\@isu@maketwoblanklines % Suggest it's a little longer than the other vfill.
\begin{\isu@space} % Normal document spacing here
Iowa State University\\
Ames, Iowa\\
\isu@gradyear % Newline after here, if needed, is in the copyright notice macro.
\isu@copyrightnotice % Copyright line optional if copyright not formally filed.
\end{\isu@space}
\end{center}
}
\end{titlepage}
}
\endinput
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment