summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/hepthesis/example
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/hepthesis/example
Initial commit
Diffstat (limited to 'macros/latex/contrib/hepthesis/example')
-rw-r--r--macros/latex/contrib/hepthesis/example/Makefile17
-rw-r--r--macros/latex/contrib/hepthesis/example/appendices.tex28
-rw-r--r--macros/latex/contrib/hepthesis/example/backmatter.tex19
-rw-r--r--macros/latex/contrib/hepthesis/example/chap1.tex48
-rw-r--r--macros/latex/contrib/hepthesis/example/chap2.tex92
-rw-r--r--macros/latex/contrib/hepthesis/example/chap3.tex38
-rw-r--r--macros/latex/contrib/hepthesis/example/ckmfitter-alpha-combined.pdfbin0 -> 17855 bytes
-rw-r--r--macros/latex/contrib/hepthesis/example/example.pdfbin0 -> 380172 bytes
-rw-r--r--macros/latex/contrib/hepthesis/example/example.tex73
-rw-r--r--macros/latex/contrib/hepthesis/example/frontmatter.tex55
-rwxr-xr-xmacros/latex/contrib/hepthesis/example/getNewBibtex16
-rw-r--r--macros/latex/contrib/hepthesis/example/h-physrev.bst949
-rw-r--r--macros/latex/contrib/hepthesis/example/lhcb-detector-cross-section.pdfbin0 -> 191957 bytes
-rw-r--r--macros/latex/contrib/hepthesis/example/mwe.tex13
-rw-r--r--macros/latex/contrib/hepthesis/example/mythesis.bib51
-rw-r--r--macros/latex/contrib/hepthesis/example/mythesismath.sty69
-rw-r--r--macros/latex/contrib/hepthesis/example/preamble.tex70
17 files changed, 1538 insertions, 0 deletions
diff --git a/macros/latex/contrib/hepthesis/example/Makefile b/macros/latex/contrib/hepthesis/example/Makefile
new file mode 100644
index 0000000000..6fd9df294f
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/Makefile
@@ -0,0 +1,17 @@
+.PHONY: clean
+
+EXTRASTYS = abhepexpt.sty abhep.sty abmath.sty lineno.sty siunitx.sty SIunits.sty varwidth.sty
+
+example.pdf: example.tex preamble.tex chap1.tex chap2.tex chap3.tex frontmatter.tex appendices.tex
+ @rm -f $(EXTRASTYS)
+ unzip extrastyles.zip
+ @rm -f example.{aux,toc,lof,lot}
+ (pdflatex example && bibtex example && pdflatex example && pdflatex example) || rm -f $(EXTRASTYS) example.pdf
+ @rm -f example.{aux,toc,lof,lot}
+ @rm -f $(EXTRASTYS)
+
+clean:
+ @rm -f $(EXTRASTYS)
+ @rm -f example.pdf example.log example.aux
+ @rm -f *.bbl *.blg *.lof *.cut
+ @rm -f *.lot *.out *.toc
diff --git a/macros/latex/contrib/hepthesis/example/appendices.tex b/macros/latex/contrib/hepthesis/example/appendices.tex
new file mode 100644
index 0000000000..7eb5a08b93
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/appendices.tex
@@ -0,0 +1,28 @@
+%% The "\appendix" call has already been made in the declaration
+%% of the "appendices" environment (see thesis.tex).
+\chapter{Pointless extras}
+\label{app:Pointless}
+
+\chapterquote{%
+Le savant n'\'etudie pas la nature parce que cela est utile; \\
+\indent il l'\'etudie parce qu'il y prend plaisir, \\
+\indent et il y prend plaisir parce qu'elle est belle.}%
+{Henri Poincar\'e, 1854--1912}
+
+Appendixes (or should that be ``appendices''?) make you look really clever, 'cos
+it's like you had more clever stuff to say than could be fitted into the main
+bit of your thesis. Yeah. So everyone should have at least three of them\dots
+
+\section{Like, duh}
+\label{sec:Duh}
+Padding? What do you mean?
+
+\section{$y = \alpha x^2$}
+\label{sec:EqnTitle}
+See, maths in titles automatically goes bold where it should (and check the
+table of contents: it \emph{isn't} bold there!) Check the source: nothing
+needs to be specified to make this work. Thanks to Donald Arsenau for the
+teeny hack that makes this work.
+
+%% Big appendixes should be split off into separate files, just like chapters
+%\input{app-myreallybigappendix}
diff --git a/macros/latex/contrib/hepthesis/example/backmatter.tex b/macros/latex/contrib/hepthesis/example/backmatter.tex
new file mode 100644
index 0000000000..a695bf3a08
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/backmatter.tex
@@ -0,0 +1,19 @@
+\begin{colophon}
+ This thesis was made in \LaTeXe{} using the ``hepthesis'' class~\cite{hepthesis}.
+\end{colophon}
+
+%% You're recommended to use the eprint-aware biblio styles which
+%% can be obtained from e.g. www.arxiv.org. The file mythesis.bib
+%% is derived from the source using the SPIRES Bibtex service.
+\bibliographystyle{h-physrev}
+\bibliography{mythesis}
+
+%% I prefer to put these tables here rather than making the
+%% front matter seemingly interminable. No-one cares, anyway!
+\listoffigures
+\listoftables
+
+%% If you have time and interest to generate a (decent) index,
+%% then you've clearly spent more time on the write-up than the
+%% research ;-)
+%\printindex
diff --git a/macros/latex/contrib/hepthesis/example/chap1.tex b/macros/latex/contrib/hepthesis/example/chap1.tex
new file mode 100644
index 0000000000..a2b6b2d208
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/chap1.tex
@@ -0,0 +1,48 @@
+\chapter{\CP violation in the \Bmeson system}
+\label{chap:SomeStuff}
+
+%% Restart the numbering to make sure that this is definitely page #1!
+\pagenumbering{arabic}
+
+%% Note that the citations in this chapter use the journal and
+%% arXiv keys: I used the SLAC-SPIRES online BibTeX retriever
+%% to build my bibliography. There are also quite a few non-standard
+%% macros, which come from my personal collection. You can have them
+%% if you want, or I might get round to properly releasing them at
+%% some point myself.
+
+\chapterquote{Laws were made to be broken.}%
+{Christopher North, 1785--1854}%: Blackwood's Magazine May 1830
+
+Symmetries, either intact or broken, have proved to be at the heart
+of how matter interacts. The Standard Model of fundamental interactions
+(SM) is composed of three independent continuous symmetry groups denoted
+$\SUgroup{3} \times \SUgroup{2} \times \Ugroup{1}$, representing the
+strong force, weak isospin and hypercharge
+respectively~\cite{Phys.Rev.Lett.19.1264, Phys.Rev.D2.1285,hep-ph/0410370}.
+
+\section{Neutral meson mixing}
+\label{sec:neutralmixing}
+We can go a long way with an effective Hamiltonian approach in
+canonical single-particle quantum mechanics. To do this we construct
+a wavefunction from a combination of a generic neutral meson state
+$\ket{\Xzero}$ and its anti-state $\ket{\Xzerobar}$:
+%
+\begin{equation}
+ \ket{\psi(t)} = a(t)\ket{\Xzero} + b(t)\ket{\Xzerobar}
+\end{equation}
+%
+which is governed by a time-dependent matrix differential equation,
+%
+\begin{equation}
+ \I \pdByd{}{t} \colvector{a \\ b}
+ =
+ \underbrace{%
+ \twomatrix{ M_{11}-\frac{\I}{2}\Gamma_{11}
+ & M_{12}-\frac{\I}{2}\Gamma_{12} }
+ { M_{12}^\ast-\frac{\I}{2}\Gamma_{12}^\ast
+ & M_{22}-\frac{\I}{2}\Gamma_{22} }
+ }_{\boldmatrix{H}}
+ \colvector{a \\ b}
+ .
+\end{equation}
diff --git a/macros/latex/contrib/hepthesis/example/chap2.tex b/macros/latex/contrib/hepthesis/example/chap2.tex
new file mode 100644
index 0000000000..c365719223
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/chap2.tex
@@ -0,0 +1,92 @@
+\chapter{The \LHCb experiment}
+\label{chap:MoreStuff}
+
+\chapterquote{There, sir! that is the perfection of vessels!}
+{Jules Verne, 1828--1905}
+
+\section{The \LHC}
+The Large Hadron Collider (\LHC) at \CERN is a new hadron collider,
+located in the same tunnel as the Large Electron-Positron collider
+(\LEP)~\cite{Brianti:2004qq}. Where \LEP's chief task was the use
+of \unit{90--207}{\GeV} \epluseminus collisions to establish the
+precision physics of electroweak unification\dots
+
+% \begin{figure}
+% \includegraphics[width=\largefigwidth]{ckmfitter-alpha-combined}
+% \caption[CKM Fitter constraints on \alphaCKM.]%
+% {CKM Fitter constraints on \alphaCKM from combined \BToPiPi,
+% \BToRhoPi and \BToRhoRho decay analyses.}
+% \label{fig:CKMFitter}
+% \end{figure}
+
+\section{The \LHCb experiment}
+\label{sec:LHCbInDetail}
+
+Since both \bhadron{s} are preferentially produced in the same direction
+and are forward-boosted along the beam-pipe, the detector is not required
+to have full $4\pi$ solid-angle coverage. \LHCb takes advantage of this
+by using a wedge-shaped single-arm detector with angular acceptance
+\unit{10-300}{\mrad} in the horizontal (bending) plane~\cite{Amato:1998xt}.
+
+\vspace{1cm}
+
+\begin{center}
+{\hspace{1mm}\Large\vdots\hspace{1cm}}
+\end{center}
+
+\vspace{1cm}
+
+The detector is illustrated in \FigureRef{fig:LHCbCrossSection}, showing
+the overall scale of the experiment and the surrounding cavern structure.
+
+\begin{sidewaysfigure}
+ \begin{center}
+ \includegraphics[width=0.8\textheight]{lhcb-detector-cross-section}
+ \caption[Cross-section view of \LHCb, cut in the non-bending $y$--$z$ plane]%
+ {Cross-section view of \LHCb, cut in the non-bending $y$--$z$ plane.}
+ \label{fig:LHCbCrossSection}
+ \end{center}
+\end{sidewaysfigure}
+
+The single-sided detector design was chosen in preference to a two-armed
+design since the detector dimensions are restricted by the layout of the
+IP8 (ex-Delphi) cavern in which \LHCb is located. Using all the available
+space for a single-arm spectrometer more than compensates in performance
+for the \about{50\percent} drop in luminosity.
+
+\section{The \Cerenkov mechanism}
+A Huygens construction in terms of spherical shells of probability for photon
+emission as the particle progresses along its track shows an effective
+``shock-front'' of \Cerenkov emission. This corresponds to an emission cone of
+opening angle \thetaCerenkov around the momentum vector for each point on the
+track,
+%
+\begin{subequations}
+ \label{eq:cosThetaCk}
+ \begin{equation}
+ \cos\,\thetaCerenkov &= \frac{1}{n \beta} +
+ \frac{\hbar k}{2p}%
+ \parenths{ 1 - \frac{1}{n^2} } \\
+ &\,\sim \frac{1}{n \beta}%
+ \label{eq:cosThetaCkApprox}
+ \end{equation}
+\end{subequations}
+%
+where $\beta \equiv v/c$, the relativistic velocity fraction.
+
+\section{Trigger system}
+\label{sec:triggers}
+An overview of the \LHCb trigger characteristics broken down by level
+is shown in \Table~\ref{tab:TriggerDetails}.
+
+\begin{table}[bp]
+ \begin{tabular}{lllll}
+ & L0 & L1 & HLT \\
+ \midrule\\
+ Input rate & \unit{40}{\MHz} & \unit{1}{\MHz} & \unit{40}{\kHz} \\
+ Output rate & \unit{1}{\MHz} & \unit{40}{\kHz} & \unit{2}{\kHz} \\
+ Location & On detector & Counting room & Counting room \\
+ \end{tabular}
+ \caption{Characteristics of the trigger levels and offline analysis.}
+ \label{tab:TriggerDetails}
+\end{table}
diff --git a/macros/latex/contrib/hepthesis/example/chap3.tex b/macros/latex/contrib/hepthesis/example/chap3.tex
new file mode 100644
index 0000000000..85b5a18a8b
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/chap3.tex
@@ -0,0 +1,38 @@
+\chapter{Continued captions}
+\label{chap:ContCaptions}
+
+Here are some funky floats using ``continued captions'', i.e. for a semantically
+collected group of float contents which are too numerous to fit into a single
+float, such as the pretty circles in the following figure:
+
+\newcommand{\circleimg}[1]{%
+\begin{tikzpicture}
+ \draw[color=black,fill=#1,thick] (1,0) circle (1.5cm);
+\end{tikzpicture}%
+}
+
+\begin{figure}[hb]
+ \subfloat[][Example 1a]{\label{fig:cc1a}\circleimg{red!80}}\quad
+ \subfloat[][Example 1b]{\label{fig:cc1b}\circleimg{green!70!yellow}}\quad
+ \subfloat[][Example 1c]{\label{fig:cc1c}\circleimg{blue!80}}\quad
+ \subfloat[][Example 1d]{\label{fig:cc1d}\circleimg{orange!80!yellow}}
+ \caption{Demonstration of \texttt{subfig} continued captions.}
+ \label{fig:cc1}
+\end{figure}
+
+\begin{figure}[p]
+ \ContinuedFloat
+ \subfloat[][Example 1e]{\label{fig:cc1e}\circleimg{violet}}\quad
+ \subfloat[][Example 1f]{\label{fig:cc1f}\circleimg{cyan}}\quad
+ \subfloat[][Example 1g]{\label{fig:cc1g}\circleimg{magenta}}\quad
+ \subfloat[][Example 1h]{\label{fig:cc1h}\circleimg{yellow}}
+ \caption[]{Demonstration of \texttt{subfig} continued captions (continued).}
+\end{figure}
+
+\noindent
+This mechanism means that the same float label is used for both pages of
+floats. Note that we can refer to \FigureRef{fig:cc1} in general, or to
+\FigureRef{fig:cc1g} on \PageRef{fig:cc1g} in particular!
+
+\noindent
+Just for the hell of it, let's also refer to \SectionRef{sec:neutralmixing}.
diff --git a/macros/latex/contrib/hepthesis/example/ckmfitter-alpha-combined.pdf b/macros/latex/contrib/hepthesis/example/ckmfitter-alpha-combined.pdf
new file mode 100644
index 0000000000..9bc7f7c994
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/ckmfitter-alpha-combined.pdf
Binary files differ
diff --git a/macros/latex/contrib/hepthesis/example/example.pdf b/macros/latex/contrib/hepthesis/example/example.pdf
new file mode 100644
index 0000000000..f097575d28
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/example.pdf
Binary files differ
diff --git a/macros/latex/contrib/hepthesis/example/example.tex b/macros/latex/contrib/hepthesis/example/example.tex
new file mode 100644
index 0000000000..9f9c432ed2
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/example.tex
@@ -0,0 +1,73 @@
+%% For normal draft builds (figs undisplayed hence fast compile)
+%\documentclass[hyperpdf,nobind,draft,oneside]{hepthesis}
+%\documentclass[hyperpdf,nobind,draft,twoside]{hepthesis}
+
+%% For short draft builds (breaks citations by necessity)
+%\documentclass[hyperpdf,nobind,draft,hidefrontback]{hepthesis}
+
+%% For Cambridge soft-bound version
+\documentclass[hyperpdf,bindnopdf]{hepthesis}
+%% For Cambridge hard-bound version (must be one-sided)
+%\documentclass[hyperpdf,oneside]{hepthesis}
+
+%% Load special font packages here if you wish
+%\usepackage{lmodern}
+\usepackage{mathpazo}
+%\usepackage{euler}
+
+%% Put package includes etc. into preamble.tex for convenience
+\input{preamble}
+
+%% You can set the line spacing this way
+%\setallspacing{double}
+%% or a section at a time like this
+%\setfrontmatterspacing{double}
+
+
+%% Define the thesis title and author
+\title{A study of \BToKPi decays with\\ the \LHCb experiment}
+\author{Andrew Gordon Buckley}
+
+%% Doc-specific PDF metadata
+\makeatletter
+\@ifpackageloaded{hyperref}{%
+\hypersetup{%
+ pdftitle = {Studying B to K pi decays with LHCb},
+ pdfsubject = {Andy Buckley's PhD thesis},
+ pdfkeywords = {LHCb, B, physics, LHC, heavy flavour},
+ pdfauthor = {\textcopyright\ Andy Buckley}
+}}{}
+\makeatother
+
+
+%% Start the document
+\begin{document}
+
+%% Define the un-numbered front matter (cover pages, rubrik and table of contents)
+\begin{frontmatter}
+ \input{frontmatter}
+\end{frontmatter}
+
+%% Start the content body of the thesis
+\begin{mainmatter}
+ %% Actually, more semantic chapter filenames are better, like "chap-bgtheory.tex"
+ \input{chap1}
+ \input{chap2}
+ \input{chap3}
+ %% To ignore a specific chapter while working on another, making the build faster, comment it out:
+ %\input{chap4}
+\end{mainmatter}
+
+%% Produce the appendices
+\begin{appendices}
+ \input{appendices}
+\end{appendices}
+
+%% Produce the un-numbered back matter (e.g. colophon,
+%% bibliography, tables of figures etc., index...)
+\begin{backmatter}
+ \input{backmatter}
+\end{backmatter}
+
+%% Close
+\end{document}
diff --git a/macros/latex/contrib/hepthesis/example/frontmatter.tex b/macros/latex/contrib/hepthesis/example/frontmatter.tex
new file mode 100644
index 0000000000..30adb15bf9
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/frontmatter.tex
@@ -0,0 +1,55 @@
+%% Title
+\titlepage[of Churchill College]{%
+ A dissertation submitted to the University of Cambridge\\ for the degree of Doctor of Philosophy}
+
+%% Abstract
+\begin{abstract}%[\smaller \thetitle\\ \vspace*{1cm} \smaller {\theauthor}]
+ %\thispagestyle{empty}
+ \LHCb is a \bphysics detector experiment which will take data at
+ the \unit{14}{\TeV} \LHC accelerator at \CERN from 2007 onward\dots
+\end{abstract}
+
+
+%% Declaration
+\begin{declaration}
+ This dissertation is the result of my own work, except where explicit
+ reference is made to the work of others, and has not been submitted
+ for another qualification to this or any other university. This
+ dissertation does not exceed the word limit for the respective Degree
+ Committee.
+ \vspace*{1cm}
+ \begin{flushright}
+ Andy Buckley
+ \end{flushright}
+\end{declaration}
+
+
+%% Acknowledgements
+\begin{acknowledgements}
+ Of the many people who deserve thanks, some are particularly prominent,
+ such as my supervisor\dots
+\end{acknowledgements}
+
+
+%% Preface
+\begin{preface}
+ This thesis describes my research on various aspects of the \LHCb
+ particle physics program, centred around the \LHCb detector and \LHC
+ accelerator at \CERN in Geneva.
+
+ \noindent
+ For this example, I'll just mention \ChapterRef{chap:SomeStuff}
+ and \ChapterRef{chap:MoreStuff}.
+\end{preface}
+
+%% ToC
+\tableofcontents
+
+
+%% Strictly optional!
+\frontquote{%
+ Writing in English is the most ingenious torture\\
+ ever devised for sins committed in previous lives.}%
+ {James Joyce}
+%% I don't want a page number on the following blank page either.
+\thispagestyle{empty}
diff --git a/macros/latex/contrib/hepthesis/example/getNewBibtex b/macros/latex/contrib/hepthesis/example/getNewBibtex
new file mode 100755
index 0000000000..ae2863bb14
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/getNewBibtex
@@ -0,0 +1,16 @@
+#! /usr/bin/env bash
+
+if [[ -n $( echo $* | egrep -- "-h\>|--help\>" ) ]]; then
+ echo -e "Usage: $0 <myfile.tex>"
+ echo "NB. \\input and \\include operations will only work in"
+ echo "the current directory, rather than via the full TeX path."
+ exit 0
+fi
+
+maintexfile=$1
+tempfile=texmerge.$$
+
+cat $maintexfile | sed -e s/'\\input{\([^}]*\)}'/'#include "\1\.tex"'/g > $tempfile
+#cat $tempfile
+cpp $tempfile 2> /dev/null | mail -s "generate bibtex" slaclib2@slac.stanford.edu
+rm -f $tempfile
diff --git a/macros/latex/contrib/hepthesis/example/h-physrev.bst b/macros/latex/contrib/hepthesis/example/h-physrev.bst
new file mode 100644
index 0000000000..7c3c09f9bd
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/h-physrev.bst
@@ -0,0 +1,949 @@
+ENTRY
+{ address
+eprint
+author
+booktitle
+chapter
+collaboration
+edition
+editor
+howpublished
+institution
+journal
+key
+month
+note
+number
+organization
+pages
+publisher
+school
+series
+title
+type
+volume
+year
+}
+{}
+{ label }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+#1 'mid.sentence :=
+#2 'after.sentence :=
+#3 'after.block :=
+}
+STRINGS { s t }
+FUNCTION {output.nonnull}
+{ 's :=
+output.state mid.sentence =
+{ ", " * write$ }
+{ output.state after.block =
+{ "," * write$
+newline$
+"\newblock " write$
+}
+{ output.state before.all =
+'write$
+{ add.period$ " " * write$ }
+if$
+}
+if$
+mid.sentence 'output.state :=
+}
+if$
+s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+'pop$
+'output.nonnull
+if$
+}
+FUNCTION {output.check}
+{ 't :=
+duplicate$ empty$
+{ pop$ "empty " t * " in " * cite$ * warning$ }
+'output.nonnull
+if$
+}
+FUNCTION {output.bibitem}
+{ newline$
+"\bibitem{" write$
+cite$ write$
+"}" write$
+newline$
+""
+before.all 'output.state :=
+}
+FUNCTION {fin.entry}
+{ add.period$
+write$
+newline$
+}
+FUNCTION {new.block}
+{ output.state before.all =
+'skip$
+{ after.block 'output.state := }
+if$
+}
+FUNCTION {new.sentence}
+{ skip$
+}
+FUNCTION {not}
+{ { #0 }
+{ #1 }
+if$
+}
+FUNCTION {and}
+{ 'skip$
+{ pop$ #0 }
+if$
+}
+FUNCTION {or}
+{ { pop$ #1 }
+'skip$
+if$
+}
+FUNCTION {new.block.checka}
+{ empty$
+'skip$
+'new.block
+if$
+}
+FUNCTION {new.block.checkb}
+{ empty$
+swap$ empty$
+and
+'skip$
+'new.block
+if$
+}
+FUNCTION {new.sentence.checka}
+{ empty$
+'skip$
+'new.sentence
+if$
+}
+FUNCTION {new.sentence.checkb}
+{ empty$
+swap$ empty$
+and
+'skip$
+'new.sentence
+if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+{ pop$ "" }
+'skip$
+if$
+}
+FUNCTION {emphasize}
+{ duplicate$ empty$
+{ pop$ "" }
+{ "{\itshape " swap$ * "}" * }
+if$
+}
+FUNCTION {embolden}
+{ duplicate$ empty$
+{ pop$ "" }
+{ "{\bfseries " swap$ * "}" * }
+if$
+}
+FUNCTION {paren}
+{ duplicate$ empty$
+{ pop$ "" }
+{ "(" swap$ * ")" * }
+if$
+}
+INTEGERS { nameptr namesleft numnames }
+INTEGERS { etal }
+FUNCTION {format.names}
+{ 's :=
+#1 'nameptr :=
+s num.names$ 'numnames :=
+numnames #5 >
+s numnames "{ll}" format.name$ "others" = numnames #1 > and
+or 'etal :=
+etal
+{ #1 #1 + 'namesleft := }
+{ numnames 'namesleft := }
+if$
+{ namesleft #0 > }
+{ s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
+nameptr #1 >
+{ namesleft #1 >
+{ ", " * t * }
+{ nameptr #2 >
+{ "," * }
+'skip$
+if$
+t "others" =
+etal or
+{ " {\em et~al.}" * }
+{ " and " * t * }
+if$
+}
+if$
+}
+'t
+if$
+nameptr #1 + 'nameptr :=
+namesleft #1 - 'namesleft :=
+}
+while$
+}
+FUNCTION {format.authors}
+{ author empty$
+{ "" }
+{ author format.names }
+if$
+}
+FUNCTION {format.editors}
+{ editor empty$
+{ "" }
+{ editor format.names
+editor num.names$ #1 >
+{ ", editors" * }
+{ ", editor" * }
+if$
+}
+if$
+}
+FUNCTION {format.edited}
+{ editor empty$
+{ "" }
+{ "edited by " editor format.names * }
+if$
+}
+FUNCTION {format.title}
+{ title empty$
+{ "" }
+{ title "t" change.case$ }
+if$
+}
+FUNCTION {n.dashify}
+{ 't :=
+""
+{ t empty$ not }
+{ t #1 #1 substring$ "-" =
+{ t #1 #2 substring$ "--" = not
+{ "--" *
+t #2 global.max$ substring$ 't :=
+}
+{ { t #1 #1 substring$ "-" = }
+{ "-" *
+t #2 global.max$ substring$ 't :=
+}
+while$
+}
+if$
+}
+{ t #1 #1 substring$ *
+t #2 global.max$ substring$ 't :=
+}
+if$
+}
+while$
+}
+FUNCTION {first.page}
+{ 't :=
+""
+{ t empty$ not t #1 #1 substring$ "-" = not and }
+{ t #1 #1 substring$ *
+t #2 global.max$ substring$ 't :=
+}
+while$
+}
+FUNCTION {format.date}
+{ year empty$
+{ "" }
+'year
+if$
+}
+FUNCTION {format.btitle}
+{ title emphasize
+}
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+{ "~" }
+{ " " }
+if$
+swap$ * *
+}
+FUNCTION {either.or.check}
+{ empty$
+'pop$
+{ "can't use both " swap$ * " fields in " * cite$ * warning$ }
+if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+{ "" }
+{ series empty$
+'skip$
+{ ", " series * }
+if$
+" Vol." volume tie.or.space.connect *
+"volume and number" number either.or.check
+}
+if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+{ number empty$
+{ series field.or.null }
+{ series empty$
+{ "there's a number but no series in " cite$ * warning$ }
+{ ", " series * }
+if$
+" No. " number tie.or.space.connect *
+}
+if$
+}
+{ "" }
+if$
+}
+FUNCTION {format.edition}
+{ edition empty$
+{ "" }
+{ output.state mid.sentence =
+{ ", " edition "l" change.case$ * }
+{ ", " edition "t" change.case$ * }
+if$
+" ed." *
+}
+if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+#0 'multiresult :=
+{ multiresult not
+t empty$ not
+and
+}
+{ t #1 #1 substring$
+duplicate$ "-" =
+swap$ duplicate$ "," =
+swap$ "+" =
+or or
+{ #1 'multiresult := }
+{ t #2 global.max$ substring$ 't := }
+if$
+}
+while$
+multiresult
+}
+FUNCTION {format.pages}
+{ pages empty$
+{ "" }
+{ pages multi.page.check
+{ "pp." pages n.dashify tie.or.space.connect }
+{ "p." pages tie.or.space.connect }
+if$
+}
+if$
+}
+FUNCTION {format.pages.a}
+{ pages empty$
+{ "" }
+{ "p." pages first.page tie.or.space.connect }
+if$
+}
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null embolden
+" " swap$ * *
+pages empty$
+'skip$
+{ duplicate$ empty$
+{ pop$ format.pages.a }
+{ ", " * pages first.page * }
+if$
+}
+if$
+}
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+'format.pages
+{ type empty$
+{ "chap." }
+{ type "l" change.case$ }
+if$
+chapter tie.or.space.connect
+pages empty$
+'skip$
+{ ", " * format.pages * }
+if$
+}
+if$
+}
+FUNCTION {format.pub.addr.date}
+{ publisher empty$
+{ "" "empty publisher in " cite$ * warning$ }
+{ publisher
+address empty$
+'skip$
+{ ", " * address * }
+if$
+}
+if$
+year empty$
+{ "empty year in " cite$ * warning$ }
+{ ", " * year * }
+if$
+paren " " swap$ *
+}
+FUNCTION {format.book.entry}
+{ format.btitle
+format.bvolume *
+format.number.series *
+format.edition *
+format.pub.addr.date *
+}
+FUNCTION {format.inbook.entry}
+{ format.book.entry
+", " *
+format.chapter.pages *
+}
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+{ "" }
+{ editor empty$
+{ "in " booktitle emphasize * }
+{ "in " booktitle emphasize * ", " * format.edited * }
+if$
+}
+if$
+}
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+month empty$ year empty$ note empty$
+and and and and and
+{ "all relevant fields are empty in " cite$ * warning$ }
+'skip$
+if$
+}
+FUNCTION {format.thesis.type}
+{ type empty$
+'skip$
+{ pop$
+type "t" change.case$
+}
+if$
+}
+FUNCTION {format.inst.tr.num.date}
+{ institution empty$
+{ "" "empty institution in " cite$ * warning$ }
+{ institution }
+if$
+" Report No." *
+number empty$
+{ "" }
+{ number tie.or.space.connect }
+if$
+year empty$
+{ "empty year in " cite$ * warning$ }
+{ ", " * year * " (unpublished)" * }
+if$
+}
+FUNCTION {format.article.crossref}
+{ key empty$
+{ journal empty$
+{ "need key or journal for " cite$ * " to crossref " * crossref *
+warning$
+""
+}
+{ "In " journal * }
+if$
+}
+{ "In " key * }
+if$
+" \cite{" * crossref * "}" *
+}
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+editor num.names$ duplicate$
+#2 >
+{ pop$ " {\em et~al.}" * }
+{ #2 <
+'skip$
+{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+{ " {\em et~al.}" * }
+{ " and " * editor #2 "{vv~}{ll}" format.name$ * }
+if$
+}
+if$
+}
+if$
+}
+FUNCTION {format.book.crossref}
+{ volume empty$
+{ "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+"In "
+}
+{ "Volume" volume tie.or.space.connect
+" of " *
+}
+if$
+editor empty$
+editor field.or.null author field.or.null =
+or
+{ key empty$
+{ series empty$
+{ "need editor, key, or series for " cite$ * " to crossref " *
+crossref * warning$
+"" *
+}
+{ "{\em " * series * "\/}" * }
+if$
+}
+{ key * }
+if$
+}
+{ format.crossref.editor * }
+if$
+" \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+editor field.or.null author field.or.null =
+or
+{ key empty$
+{ booktitle empty$
+{ "need editor, key, or booktitle for " cite$ * " to crossref " *
+crossref * warning$
+""
+}
+{ "In {\em " booktitle * "\/}" * }
+if$
+}
+{ "In " key * }
+if$
+}
+{ "In " format.crossref.editor * }
+if$
+" \cite{" * crossref * "}" *
+}
+FUNCTION {article}
+{ output.bibitem
+collaboration output
+format.authors "author" output.check
+new.block
+crossref missing$
+{ journal field.or.null
+format.vol.num.pages
+format.date empty$
+'skip$
+{ duplicate$ empty$
+{ pop$ format.date paren }
+{ " " * format.date paren * }
+if$
+}
+if$
+output
+}
+{ format.article.crossref output.nonnull
+format.pages output
+}
+if$
+eprint output
+new.block
+note output
+fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+collaboration output
+author empty$
+{ format.editors "author and editor" output.check }
+{ format.authors output.nonnull
+crossref missing$
+{ "author and editor" editor either.or.check }
+'skip$
+if$
+}
+if$
+new.block
+crossref missing$
+{ format.book.entry output }
+{ new.block
+format.book.crossref output.nonnull
+}
+if$
+eprint output
+new.block
+note output
+fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+collaboration output
+format.authors output
+new.block
+format.title "title" output.check
+howpublished address new.block.checkb
+howpublished output
+address output
+format.date output
+eprint output
+new.block
+note output
+fin.entry
+}
+FUNCTION {inbook}
+{ output.bibitem
+collaboration output
+author empty$
+{ format.editors "author and editor" output.check }
+{ format.authors output.nonnull
+crossref missing$
+{ "author and editor" editor either.or.check }
+'skip$
+if$
+}
+if$
+new.block
+crossref missing$
+{ format.inbook.entry output }
+{ format.chapter.pages "chapter and pages" output.check
+new.block
+format.book.crossref output.nonnull
+}
+if$
+eprint output
+new.block
+note output
+fin.entry
+}
+FUNCTION {incollection}
+{ output.bibitem
+collaboration output
+format.authors "author" output.check
+new.block
+format.title "title" output.check
+new.block
+crossref missing$
+{ format.in.ed.booktitle "booktitle" output.check
+format.bvolume output
+format.number.series output
+format.chapter.pages output
+new.sentence
+publisher "publisher" output.check
+address output
+format.edition output
+format.date "year" output.check
+}
+{ format.incoll.inproc.crossref output.nonnull
+format.chapter.pages output
+}
+if$
+eprint output
+new.block
+note output
+fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+collaboration output
+format.authors "author" output.check
+new.block
+format.title "title" output.check
+new.block
+crossref missing$
+{ format.in.ed.booktitle "booktitle" output.check
+format.bvolume output
+format.number.series output
+format.pages output
+address empty$
+{ organization publisher new.sentence.checkb
+organization output
+publisher output
+format.date "year" output.check
+}
+{ address output.nonnull
+format.date "year" output.check
+new.sentence
+organization output
+publisher output
+}
+if$
+}
+{ format.incoll.inproc.crossref output.nonnull
+format.pages output
+}
+if$
+eprint output
+new.block
+note output
+fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+collaboration output
+author empty$
+{ organization empty$
+'skip$
+{ organization output.nonnull
+address output
+}
+if$
+}
+{ format.authors output.nonnull }
+if$
+new.block
+format.btitle "title" output.check
+author empty$
+{ organization empty$
+{ address new.block.checka
+address output
+}
+'skip$
+if$
+}
+{ organization address new.block.checkb
+organization output
+address output
+}
+if$
+format.edition output
+format.date output
+eprint output
+new.block
+note output
+fin.entry
+}
+FUNCTION {mastersthesis}
+{ output.bibitem
+format.authors "author" output.check
+new.block
+format.title "title" output.check
+new.block
+"Master's thesis" format.thesis.type output.nonnull
+school "school" output.check
+address output
+format.date "year" output.check
+eprint output
+new.block
+note output
+fin.entry
+}
+FUNCTION {misc}
+{ output.bibitem
+collaboration output
+format.authors output
+title howpublished new.block.checkb
+format.title output
+howpublished new.block.checka
+howpublished output
+format.date output
+eprint output
+new.block
+note output
+fin.entry
+empty.misc.check
+}
+FUNCTION {phdthesis}
+{ output.bibitem
+format.authors "author" output.check
+new.block
+format.btitle "title" output.check
+new.block
+"PhD thesis" format.thesis.type output.nonnull
+school "school" output.check
+address output
+format.date "year" output.check
+eprint output
+new.block
+note output
+fin.entry
+}
+FUNCTION {proceedings}
+{ output.bibitem
+collaboration output
+editor empty$
+{ organization output }
+{ format.editors output.nonnull }
+if$
+new.block
+format.btitle "title" output.check
+format.bvolume output
+format.number.series output
+address empty$
+{ editor empty$
+{ publisher new.sentence.checka }
+{ organization publisher new.sentence.checkb
+organization output
+}
+if$
+publisher output
+format.date "year" output.check
+}
+{ address output.nonnull
+format.date "year" output.check
+new.sentence
+editor empty$
+'skip$
+{ organization output }
+if$
+publisher output
+}
+if$
+eprint output
+new.block
+note output
+fin.entry
+}
+FUNCTION {techreport}
+{ output.bibitem
+collaboration output
+format.authors "author" output.check
+new.block
+format.inst.tr.num.date output.nonnull
+eprint output
+new.block
+note output
+fin.entry
+}
+FUNCTION {unpublished}
+{ output.bibitem
+collaboration output
+format.authors "author" output.check
+new.block
+format.title "title" output.check
+new.block
+note "note" output.check
+format.date output
+fin.entry
+}
+FUNCTION {default.type} { misc }
+MACRO {jan} {"Jan."}
+MACRO {feb} {"Feb."}
+MACRO {mar} {"Mar."}
+MACRO {apr} {"Apr."}
+MACRO {may} {"May"}
+MACRO {jun} {"June"}
+MACRO {jul} {"July"}
+MACRO {aug} {"Aug."}
+MACRO {sep} {"Sept."}
+MACRO {oct} {"Oct."}
+MACRO {nov} {"Nov."}
+MACRO {dec} {"Dec."}
+MACRO {acmcs} {"ACM Comput. Surv."}
+MACRO {acta} {"Acta Inf."}
+MACRO {cacm} {"Commun. ACM"}
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+MACRO {ibmsj} {"IBM Syst.~J."}
+MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+MACRO {ieeetcad}
+{"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
+MACRO {ipl} {"Inf. Process. Lett."}
+MACRO {jacm} {"J.~ACM"}
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+MACRO {scp} {"Sci. Comput. Programming"}
+MACRO {sicomp} {"SIAM J. Comput."}
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+MACRO {tods} {"ACM Trans. Database Syst."}
+MACRO {tog} {"ACM Trans. Gr."}
+MACRO {toms} {"ACM Trans. Math. Softw."}
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."}
+MACRO {tcs} {"Theoretical Comput. Sci."}
+MACRO {advp} {"Adv. Phys."}
+MACRO {ajp} {"Am. J. Phys."}
+MACRO {ao} {"Appl. Opt."}
+MACRO {apj} {"Astrophys. J."}
+MACRO {apl} {"Appl. Phys. Lett."}
+MACRO {arnps} {"Ann. Rev. Nucl. Sci."}
+MACRO {arns} {"Ann. Rev. Nucl. Part. Sci."}
+MACRO {baps} {"Bull. Am. Phys. Soc."}
+MACRO {cpc} {"Computer Phys. Comm."}
+MACRO {cppcf} {"Comments Plasma Phys. Controlled Fusion"}
+MACRO {fed} {"Fusion Eng. Design"}
+MACRO {ft} {"Fusion Tech."}
+MACRO {ieeens} {"IEEE Trans. Nucl. Sci."}
+MACRO {ieeeps} {"IEEE Trans. Plasma Sci."}
+MACRO {ijimw} {"Int. J. Infrared Millimeter Waves"}
+MACRO {ip} {"Infrared Phys."}
+MACRO {jap} {"J. Appl. Phys."}
+MACRO {jcp} {"J. Comput. Phys."}
+MACRO {jetp} {"Sov. Phys.-JETP"}
+MACRO {jfe} {"J. Fusion Energy"}
+MACRO {jfm} {"J. Fluid Mech."}
+MACRO {jgr} {"J. Geophys. Res."}
+MACRO {jmp} {"J. Math. Phys."}
+MACRO {jne} {"J. Nucl. Energy"}
+MACRO {jnm} {"J. Nucl. Mater."}
+MACRO {josa} {"J. Opt. Soc. Am."}
+MACRO {jpg} {"J. Phys.~G: Nucl. and Part. Phys."}
+MACRO {jphys} {"J. Phys"}
+MACRO {jpp} {"J. Plasma Phys."}
+MACRO {jpsj} {"J. Phys. Soc. Jpn"}
+MACRO {jvst} {"J. Vac. Sci. Technol."}
+MACRO {modphyslettA} {"Mod. Phys. Lett. A"}
+MACRO {nedf} {"Nucl. Eng. Design/Fusion"}
+MACRO {nf} {"Nucl. Fusion"}
+MACRO {nim} {"Nucl. Instrum. Methods"}
+MACRO {np} {"Nucl. Phys."}
+MACRO {npb} {"Nucl. Phys.~B"}
+MACRO {npbps} {"Nucl. Phys. B (Proc. Suppl.)"}
+MACRO {nt/f} {"Nucl. Tech./Fusion"}
+MACRO {pf} {"Phys. Fluids"}
+MACRO {pl} {"Phys. Lett."}
+MACRO {plb} {"Phys. Lett.~B"}
+MACRO {pnas} {"Proc. Nat. Acad. Sci. USA"}
+MACRO {pp} {"Plasma Phys."}
+MACRO {physrep} {"Phys. Rep."}
+MACRO {physrev} {"Phys. Rev."}
+MACRO {pr} {"Phys. Rev."}
+MACRO {prd} {"Phys. Rev.~D"}
+MACRO {prl} {"Phys. Rev. Lett."}
+MACRO {procroysoc} {"Proc. Roy. Soc"}
+MACRO {ps} {"Physica Scripta"}
+MACRO {rmp} {"Rev. Mod. Phys."}
+MACRO {rsi} {"Rev. Sci. Instrum."}
+MACRO {sjnp} {"Sov. J. Nucl. Phys."}
+MACRO {sjpp} {"Sov. J. Plasma Phys."}
+MACRO {spd} {"Sov. Phys.-Dokl."}
+MACRO {sptp} {"Sov. Phys.-Tech. Phys."}
+MACRO {spu} {"Sov. Phys.-Usp."}
+MACRO {zp} {"Z. Phys."}
+MACRO {zpc} {"Z. Phys.~C"}
+READ
+STRINGS { longest.label }
+INTEGERS { number.label longest.label.width }
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+#1 'number.label :=
+#0 'longest.label.width :=
+}
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+number.label #1 + 'number.label :=
+label width$ longest.label.width >
+{ label 'longest.label :=
+label width$ 'longest.label.width :=
+}
+'skip$
+if$
+}
+EXECUTE {initialize.longest.label}
+ITERATE {longest.label.pass}
+FUNCTION {begin.bib}
+{ preamble$ empty$
+'skip$
+{ preamble$ write$ newline$ }
+if$
+"\begin{thebibliography}{" longest.label * "}" * write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+"\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
diff --git a/macros/latex/contrib/hepthesis/example/lhcb-detector-cross-section.pdf b/macros/latex/contrib/hepthesis/example/lhcb-detector-cross-section.pdf
new file mode 100644
index 0000000000..79d7f3ef39
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/lhcb-detector-cross-section.pdf
Binary files differ
diff --git a/macros/latex/contrib/hepthesis/example/mwe.tex b/macros/latex/contrib/hepthesis/example/mwe.tex
new file mode 100644
index 0000000000..253311e998
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/mwe.tex
@@ -0,0 +1,13 @@
+\documentclass[oneside]{hepthesis}
+
+\begin{document}
+ \begin{frontmatter}
+ \tableofcontents
+ \end{frontmatter}
+
+ \begin{mainmatter}
+ \chapter{Introduction}
+ lalala
+ \end{mainmatter}
+
+\end{document}
diff --git a/macros/latex/contrib/hepthesis/example/mythesis.bib b/macros/latex/contrib/hepthesis/example/mythesis.bib
new file mode 100644
index 0000000000..f8dc85a0e3
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/mythesis.bib
@@ -0,0 +1,51 @@
+%% Obtained via the getNewBibTeX script and the SPIRES biblio service
+
+@Article{Phys.Rev.Lett.19.1264,
+ author = "Weinberg, Steven",
+ title = "A MODEL OF LEPTONS",
+ journal = "Phys. Rev. Lett.",
+ volume = "19",
+ year = "1967",
+ pages = "1264-1266",
+ SLACcitation = "%%CITATION = PRLTA,19,1264;%%"
+}
+
+@Article{Phys.Rev.D2.1285,
+ author = "Glashow, S. L. and Iliopoulos, J. and Maiani, L.",
+ title = "WEAK INTERACTIONS WITH LEPTON - HADRON SYMMETRY",
+ journal = "Phys. Rev.",
+ volume = "D2",
+ year = "1970",
+ pages = "1285-1292",
+ SLACcitation = "%%CITATION = PHRVA,D2,1285;%%"
+}
+
+@Article{hep-ph/0410370,
+ author = "Willenbrock, Scott",
+ title = "Symmetries of the standard model",
+ year = "2004",
+ eprint = "hep-ph/0410370",
+ SLACcitation = "%%CITATION = HEP-PH 0410370;%%"
+}
+
+@Article{Brianti:2004qq,
+ author = "Brianti, G.",
+ title = "The Large Hadron Collider project: Historical account",
+ journal = "Phys. Rept.",
+ volume = "403-404",
+ year = "2004",
+ pages = "349-364",
+ SLACcitation = "%%CITATION = PRPLC,403-404,349;%%"
+}
+
+@Article{Amato:1998xt,
+ author = "Amato, S. and others",
+ collaboration = "LHCb",
+ title = "LHCb technical proposal",
+ note = "CERN-LHCC-98-4"
+}
+
+@Misc{hepthesis,
+ author = "Buckley, Andy",
+ title = "The hepthesis {\LaTeX} class"
+}
diff --git a/macros/latex/contrib/hepthesis/example/mythesismath.sty b/macros/latex/contrib/hepthesis/example/mythesismath.sty
new file mode 100644
index 0000000000..95ac64fade
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/mythesismath.sty
@@ -0,0 +1,69 @@
+\ProvidesPackage{thesismath}[2005/11/01]
+
+\DeclareRobustCommand{\thesismath}[1]{\ensuremath{\maybebmsf{#1}}}
+\DeclareRobustCommand{\parenths}[1]{\thesismath{\left({#1}\right)}}
+\DeclareRobustCommand{\braces}[1]{\thesismath{\left\{{#1}\right\}}}
+\DeclareRobustCommand{\angles}[1]{\thesismath{\left\langle{#1}\right\rangle}}
+\DeclareRobustCommand{\sqbracs}[1]{\thesismath{\left[{#1}\right]}}
+\DeclareRobustCommand{\mods}[1]{\thesismath{\left\lvert{#1}\right\rvert}}
+\DeclareRobustCommand{\modsq}[1]{\thesismath{\mods{#1}^2}}
+\DeclareRobustCommand{\dblmods}[1]{\thesismath{\left\lVert{#1}\right\rVert}}
+\DeclareRobustCommand{\expOf}[1]{\thesismath{\exp{\!\parenths{#1}}}}
+\DeclareRobustCommand{\eexp}[1]{\thesismath{e^{#1}}}
+\DeclareRobustCommand{\plusquad}{\thesismath{\oplus}}
+\DeclareRobustCommand{\logOf}[1]{\log\!\parenths{#1}}
+\DeclareRobustCommand{\lnOf}[1]{\ln\!\parenths{#1}}
+\DeclareRobustCommand{\ofOrder}[1]{\thesismath{ \mathcal{O}\parenths{#1} }}
+\DeclareRobustCommand{\about}{\thesismath{\sim\!\,}}
+
+%% Vectors, tuples and sets
+\DeclareRobustCommand{\cross}{\thesismath{\times}\xspace}
+\DeclareRobustCommand{\bvec}[1]{\thesismath{\bm{#1}}\xspace}
+\DeclareRobustCommand{\colset}[1]{\thesismath{\begin{Bmatrix}#1\end{Bmatrix}}\xspace}
+\DeclareRobustCommand{\coltuple}[1]{\thesismath{\begin{pmatrix}#1\end{pmatrix}}\xspace}
+\DeclareRobustCommand{\colvector}[1]{\thesismath{\begin{pmatrix}#1\end{pmatrix}}\xspace}
+\DeclareRobustCommand{\colthreevec}[3]{\thesismath{\begin{pmatrix}#1\\ #2\\ #3\end{pmatrix}}\xspace}
+\DeclareRobustCommand{\rowset}[1]{\braces{#1}\xspace}
+\DeclareRobustCommand{\rowtuple}[1]{\parenths{#1}\xspace}
+\DeclareRobustCommand{\rowvector}[1]{\parenths{#1}\xspace}
+\DeclareRobustCommand{\rowthreevec}[3]{\parenths{{#1}, {#2}, {#3}}\xspace}
+
+%% Ranges
+\DeclareRobustCommand{\rangeSS}[1]{\parenths{#1}\xspace}
+\DeclareRobustCommand{\rangeSH}[1]{\left({#1}\right]\xspace}
+\DeclareRobustCommand{\rangeHS}[1]{\left[{#1}\right)\xspace}
+\DeclareRobustCommand{\rangeHH}[1]{\sqbracs{#1}\xspace}
+\DeclareRobustCommand{\softrange}[1]{\rangeSS{#1}}
+\DeclareRobustCommand{\hardrange}[1]{\rangeHH{#1}}
+
+%% Matrix
+\DeclareRobustCommand{\boldmatrix}[1]{\thesismath{\bm{\mathrm{#1}}}\xspace}
+\DeclareRobustCommand{\transposeT}{\MathUpright{T}\,}
+\DeclareRobustCommand{\hermitianT}{\dagger}
+\DeclareRobustCommand{\twomatrix}[2]{\thesismath{\begin{pmatrix}#1\\ #2\end{pmatrix}}\xspace}
+\DeclareRobustCommand{\threematrix}[3]{\thesismath{\begin{pmatrix}#1\\ #2\\ #3\end{pmatrix}}\xspace}
+
+%% Differentials
+\DeclareRobustCommand{\diff}[1]{\thesismath{\mathrm{d} #1}}
+\DeclareRobustCommand{\pdiff}[1]{\thesismath{\partial #1}}
+\DeclareRobustCommand{\dByd}[2]{\thesismath{ \frac{\diff{#1}}{\diff{#2}} }}
+\DeclareRobustCommand{\pdByd}[2]{\thesismath{ \frac{\pdiff{#1}}{\pdiff{#2}} }}
+\DeclareRobustCommand{\DeltaVec}[1]{\thesismath{\boldsymbol{\Delta}\mathbf{#1}}}
+\DeclareRobustCommand{\DeltaN}[1]{\thesismath{\Delta #1}}
+\DeclareRobustCommand{\deltaVec}[1]{\thesismath{\boldsymbol{\delta}\mathbf{#1}}}
+\DeclareRobustCommand{\deltaN}[1]{\thesismath{\delta #1}}
+\DeclareRobustCommand{\d}[1]{\thesismath{\mathrm{d}#1}}
+
+%% Complex numbers
+\DeclareRobustCommand{\I}{\thesismath{\imath}}
+\let\@oldRe\Re
+\let\@oldIm\Im
+\DeclareRobustCommand{\Im}{\thesismath{ \@oldIm{}\mathfrak{m} }\xspace}
+\DeclareRobustCommand{\Re}{\thesismath{ \@oldRe{}\mathfrak{e}\mspace{3mu} }\xspace}
+\DeclareRobustCommand{\ImaginaryPart}[1]{\thesismath{ \,\Im\!\,\braces{#1} }\xspace}
+\DeclareRobustCommand{\RealPart}[1]{\thesismath{ \,\Re\!\braces{#1} }\xspace}
+
+%% Groups
+\DeclareRobustCommand{\group}[1]{\thesismath{\mayberm{#1}}}
+\DeclareRobustCommand{\Ugroup}[1]{\group{U}\parenths{#1}}
+\DeclareRobustCommand{\SUgroup}[1]{\group{S}\Ugroup{#1}}
diff --git a/macros/latex/contrib/hepthesis/example/preamble.tex b/macros/latex/contrib/hepthesis/example/preamble.tex
new file mode 100644
index 0000000000..6c73e5f5d4
--- /dev/null
+++ b/macros/latex/contrib/hepthesis/example/preamble.tex
@@ -0,0 +1,70 @@
+\usepackage{xspace}
+\usepackage{tikz}
+\usepackage{morefloats,subfig,afterpage}
+\usepackage{mathrsfs} % script font
+\usepackage{verbatim}
+
+%% Using Babel allows other languages to be used and mixed-in easily
+%\usepackage[ngerman,english]{babel}
+\usepackage[english]{babel}
+\selectlanguage{english}
+
+%% Citation system tweaks
+\usepackage{cite}
+% \let\@OldCite\cite
+% \renewcommand{\cite}[1]{\mbox{\!\!\!\@OldCite{#1}}}
+
+%% Maths
+% TODO: rework or eliminate maybemath
+\usepackage{abmath}
+\DeclareRobustCommand{\mymath}[1]{\ensuremath{\maybebmsf{#1}}}
+% \DeclareRobustCommand{\parenths}[1]{\mymath{\left({#1}\right)}\xspace}
+% \DeclareRobustCommand{\braces}[1]{\mymath{\left\{{#1}\right\}}\xspace}
+% \DeclareRobustCommand{\angles}[1]{\mymath{\left\langle{#1}\right\rangle}\xspace}
+% \DeclareRobustCommand{\sqbracs}[1]{\mymath{\left[{#1}\right]}\xspace}
+% \DeclareRobustCommand{\mods}[1]{\mymath{\left\lvert{#1}\right\rvert}\xspace}
+% \DeclareRobustCommand{\modsq}[1]{\mymath{\mods{#1}^2}\xspace}
+% \DeclareRobustCommand{\dblmods}[1]{\mymath{\left\lVert{#1}\right\rVert}\xspace}
+% \DeclareRobustCommand{\expOf}[1]{\mymath{\exp{\!\parenths{#1}}}\xspace}
+% \DeclareRobustCommand{\eexp}[1]{\mymath{e^{#1}}\xspace}
+% \DeclareRobustCommand{\plusquad}{\mymath{\oplus}\xspace}
+% \DeclareRobustCommand{\logOf}[1]{\mymath{\log\!\parenths{#1}}\xspace}
+% \DeclareRobustCommand{\lnOf}[1]{\mymath{\ln\!\parenths{#1}}\xspace}
+% \DeclareRobustCommand{\ofOrder}[1]{\mymath{\mathcal{O}\parenths{#1}}\xspace}
+% \DeclareRobustCommand{\SOgroup}[1]{\mymath{\mathup{SO}\parenths{#1}}\xspace}
+% \DeclareRobustCommand{\SUgroup}[1]{\mymath{\mathup{SU}\parenths{#1}}\xspace}
+% \DeclareRobustCommand{\Ugroup}[1]{\mymath{\mathup{U}\parenths{#1}}\xspace}
+% \DeclareRobustCommand{\I}[1]{\mymath{\mathrm{i}}\xspace}
+% \DeclareRobustCommand{\colvector}[1]{\mymath{\begin{pmatrix}#1\end{pmatrix}}\xspace}
+\DeclareRobustCommand{\Rate}{\mymath{\Gamma}\xspace}
+\DeclareRobustCommand{\RateOf}[1]{\mymath{\Gamma}\parenths{#1}\xspace}
+
+%% High-energy physics stuff
+\usepackage{abhep}
+\usepackage{hepnames}
+\usepackage{hepunits}
+\DeclareRobustCommand{\arXivCode}[1]{arXiv:#1}
+\DeclareRobustCommand{\CP}{\ensuremath{\mathcal{CP}}\xspace}
+\DeclareRobustCommand{\CPviolation}{\CP-violation\xspace}
+\DeclareRobustCommand{\CPv}{\CPviolation}
+\DeclareRobustCommand{\LHCb}{LHCb\xspace}
+\DeclareRobustCommand{\LHC}{LHC\xspace}
+\DeclareRobustCommand{\LEP}{LEP\xspace}
+\DeclareRobustCommand{\CERN}{CERN\xspace}
+\DeclareRobustCommand{\bphysics}{\Pbottom-physics\xspace}
+\DeclareRobustCommand{\bhadron}{\Pbottom-hadron\xspace}
+\DeclareRobustCommand{\Bmeson}{\PB-meson\xspace}
+\DeclareRobustCommand{\bbaryon}{\Pbottom-baryon\xspace}
+\DeclareRobustCommand{\Bdecay}{\PB-decay\xspace}
+\DeclareRobustCommand{\bdecay}{\Pbottom-decay\xspace}
+\DeclareRobustCommand{\BToKPi}{\HepProcess{ \PB \to \PK \Ppi }\xspace}
+\DeclareRobustCommand{\BToPiPi}{\HepProcess{ \PB \to \Ppi \Ppi }\xspace}
+\DeclareRobustCommand{\BToKK}{\HepProcess{ \PB \to \PK \PK }\xspace}
+\DeclareRobustCommand{\BToRhoPi}{\HepProcess{ \PB \to \Prho \Ppi }\xspace}
+\DeclareRobustCommand{\BToRhoRho}{\HepProcess{ \PB \to \Prho \Prho }\xspace}
+\DeclareRobustCommand{\X}{\thesismath{X}\xspace}
+\DeclareRobustCommand{\Xbar}{\thesismath{\overline{X}}\xspace}
+\DeclareRobustCommand{\Xzero}{\HepGenParticle{X}{}{0}\xspace}
+\DeclareRobustCommand{\Xzerobar}{\HepGenAntiParticle{X}{}{0}\xspace}
+\DeclareRobustCommand{\epluseminus}{\Ppositron\!\Pelectron\xspace}
+\DeclareRobustCommand{\protonproton}{\Pproton\APantiproton\xspace}