A simple build script for managing a thesis in markdown. You must have Pandoc installed to make use of it, as it effectively acts as a wrapper for a complex pandoc command.
- Fork the repo or clone and set your own remote
- In the repo run
pip3 install -r requirements.txtto gather the python requirements for the build script
Write in the src folder, in markdown. Name your chapters with the format chapter-X.md. You can then run build.py to build for various formats. You can build by either entire thesis + format or chapter + format. e.g. ./build.py chapter 1 html produces a HTML rendering of Chapter 1, ./build.py chapter 6 odt will give you an OpenDocument file of Chapter 6.
Since you're using pandoc under the hood it will accept all formats pandoc can convert to from markdown. PDF rendering is done via HTML5 as LaTeX doesn't like SVG files naturally; this may change with an update and custom latex templates.
The two main commands:
build.py chapter X $FORMATbuildssrc/chapter-X.mdin$FORMATbuild.py thesis $FORMATbuilds the whole thesis in$FORMAT
There are three additional commands:
build.py chapters $FORMATgenerates every chapter individually in the given format.build.py frontmatter $FORMATgenerates a frontmatter file fromsrc/frontmatter.mdin $FORMATbuild.py websitegenerates a website with coversheet. Example output at: thesis.mrshll.uk. This takes a few variables to set a few things.
Scripts will build into an out directory and then a subdirectory for their specific format e.g. out/html or out/odt. /out is ignored by git, so you need to run a build script to acquire the desired format.
Currently the script enables --toc to its default depth to generate a table of contents, and also --number-sections. For some reason the latter only works in the HTML rendering!
/templates currently contains the coversheet template used by the website command but may in future contain custom LaTeX templates for nice PDF rendering. Pandoc is run with the --self-contained flag to pull in any resources to the output file.
Use src/index.md to set the variables for your thesis and build scripts. Most of these variables come from the pandoc docs and are collected in src/index.md so that they don't need to be repeated across multiple files or embedded in build.py. When building a file, src/index.md will always be included first to pull in these variables.
titlesets the title of your thesisauthoryour author namebibliographyis the file where your bibtex file lives; it's automatically set tosrc/thesis.bibcssis a YAML List of css files. By defaultsrc/pure-min.cssandsrc/styles.cssare included. If you want to add more layers of css or change some around; here's where to do it.link-citationsis defaulted totrue. Setting tofalsewill mean that citations in generated files will not be hyperlinked to their entries in your bibliography.cslsets the style file for your bibliography. It's defaulted tosrc/harvard-newcastle-university.csl. You can find others here.
The build script uses a few more variables to support it generating the website via the website command.
thesis-sourceis a URL which can take people to the git repo where you store your thesisdownload-button-formattakes a format string (e.g. odt or docx) and set the target of the Download Button on the website homepagewebsite-build-formatsis a YAML list of formats that you want your thesis to be available in via the generated website. By defaultodtanddocxare included, but it will take any valid pandoc format.
Most styles are provided by PureCSS. This provides a minimal and responsive html page; which is really what this script is optimised for. There are additional styles for both print and web contained in styles.css which are designed to make everything look just a bit nicer. Pandoc cannot generate PureCSS classes and grids by default so these styles make text a bit more readable and make tables, quotes, and images read a bit better.
The pages are mostly responsive insofar as they're pretty brutalist and rely on HTML's natural scalability to fit onto most viewscreens. On mobile the margin is a tad wider than it needs to be, and if this bothers you adjust it in src/styles.css
- Make sure to grab a copy of BetterBibTeX for Zotero to handle generating nicer citation keys.
This thesis repository structure re-uses the scripts and structural approach of Matt Marshall and his repo at https://gitlab.com/mrshll1001/markdown-thesis - thanks Marshall!