Merge branch '24-migrate-docs-to-wiki' into 'master'
Resolve "Migrate docs to wiki" Closes #24 See merge request fastexitlane/latex-boilerplate!10
This commit is contained in:
commit
45047353a0
245
README.md
245
README.md
|
@ -1,37 +1,12 @@
|
||||||
# LaTex Boilerplate
|
# LaTex Boilerplate
|
||||||
|
|
||||||
This is a simple preconfigured boilerplate for medium-sized LaTex projects including continuous integration for GitLab CI.
|
This is a simple preconfigured boilerplate for medium-sized LaTex projects including continuous integration for GitLab CI.
|
||||||
It's based on the `scrbook` document class and currently layed out for german scientiefic documents.
|
It's based on the `scrbook` document class and currently layed out for german scientiefic documents.
|
||||||
|
|
||||||
<!-- TOC -->
|
|
||||||
|
|
||||||
* [Getting Started](#getting-started)
|
|
||||||
* [Basic Structure](#basic-structure)
|
|
||||||
* [Inserting basic content](#inserting-basic-content)
|
|
||||||
* [Bibliography](#bibliography)
|
|
||||||
* [Layout and further configuration](#layout-and-further-configuration)
|
|
||||||
* [Document Outline](#document-outline)
|
|
||||||
* [Continuous Integration using GitLab CI](#continuous-integration-using-gitlab-ci)
|
|
||||||
* [Basic Requirements](#basic-requirements)
|
|
||||||
* [Spellchecking](#spellchecking)
|
|
||||||
* [Building the PDF](#building-the-pdf)
|
|
||||||
* [Some special effects...](#some-special-effects)
|
|
||||||
* [Lists](#lists)
|
|
||||||
* [Images](#images)
|
|
||||||
* [Acronyms](#acronyms)
|
|
||||||
* [Code Listings](#code-listings)
|
|
||||||
* [Paragraph Distances and Onehalf Spacing](#paragraph-distances-and-onehalf-spacing)
|
|
||||||
* [Snippets for working in VS Code](#snippets-for-working-in-vs-code)
|
|
||||||
|
|
||||||
<!-- /TOC -->
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
To use this template in a new project, either download the [ZIP](https://github.com/fastexitlane/latex-boilerplate/archive/master.zip) directly from GitHub or clone it using Git:
|
To use this template in a new project, either download the [ZIP](https://gitlab.com/fastexitlane/latex-boilerplate/-/archive/master/latex-boilerplate-master.zip) directly from GitLab or clone it using Git:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone git@github.com:fastexitlane/latex-boilerplate.git
|
git@gitlab.com:fastexitlane/latex-boilerplate.git
|
||||||
# now set up your own Git workspace:
|
# now set up your own Git workspace:
|
||||||
git remote remove origin
|
git remote remove origin
|
||||||
git remote add origin git@your-own-gitlab.host:path/to/repo.git
|
git remote add origin git@your-own-gitlab.host:path/to/repo.git
|
||||||
|
@ -41,220 +16,14 @@ git push origin master
|
||||||
If you already have set up an empty Git workspace for your project, add it as additional remote and then fetch and pull:
|
If you already have set up an empty Git workspace for your project, add it as additional remote and then fetch and pull:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git remote add boilerplate git@github.com:fastexitlane/latex-boilerplate.git
|
git remote add boilerplate git@gitlab.com:fastexitlane/latex-boilerplate.git
|
||||||
git fetch boilerplate
|
git fetch boilerplate
|
||||||
git pull boilerplate master
|
git pull boilerplate master
|
||||||
# if you don't want to keep the remote, remove it:
|
# if you don't want to keep the remote for pulling future updates, remove it:
|
||||||
git remote remove boilerplate
|
git remote remove boilerplate
|
||||||
```
|
```
|
||||||
|
|
||||||
In order to use the preconfigured continuous integration, make sure your GitLab CI meets the [Basic Requirements](#basic-requirements).
|
In order to use the preconfigured continuous integration, make sure your GitLab CI meets the [Basic Requirements](https://gitlab.com/fastexitlane/latex-boilerplate/wikis/GitLab-CI#basic-requirements).
|
||||||
|
|
||||||
If you know what you're doing, simply start adding your content files in `chapter/` and `\input` them in `main.tex`.
|
If you know what you're doing, simply start adding your content files in `chapter/` as LaTex `\chapter`s and `\input` them into `main.tex`.
|
||||||
If you do not know what you're doing or get into trouble, you may want to read on. ;-)
|
If you do not know what you're doing or get into trouble, you may want to consider the [wiki](https://gitlab.com/fastexitlane/latex-boilerplate/wikis/home) ;-)
|
||||||
|
|
||||||
|
|
||||||
## Basic Structure
|
|
||||||
The main entry point for the document compilation is the file `main.tex` in the repo root.
|
|
||||||
Besides setting some common parameters for the document (like author name, title, date etc.), the basic document structure is created here (mostly by including seperate files) in the following order:
|
|
||||||
|
|
||||||
* configuration (`config.tex`)
|
|
||||||
* title page (`additionals/title.tex`)
|
|
||||||
* disclosure notice (`additionals/disclosure.tex`, decomment in `main.tex` if neccessary)
|
|
||||||
* table of contents
|
|
||||||
* list of acronyms (`additionals/acronyms.tex`)
|
|
||||||
* list of figures
|
|
||||||
* list of tables
|
|
||||||
* list of code listings
|
|
||||||
* chapter files (`chapter/*`, needs to be filled up manually)
|
|
||||||
* bibliography (`additionals/references.tex`, using the entries defined in `library/library.bib`)
|
|
||||||
* declaration of authorship (`additionals/affirmation.tex`)
|
|
||||||
|
|
||||||
If you don't need one of the predefined document parts or want to omit it, simply remove or comment out the corresponding statements in `main.tex`.
|
|
||||||
|
|
||||||
**(i)** Please note: Before starting with content, you should change the common variables in `main.tex`.
|
|
||||||
|
|
||||||
|
|
||||||
## Inserting basic content
|
|
||||||
For each chapter create a single chapter file in the `chapter/` directory.
|
|
||||||
Chapter files need to reference the main file using
|
|
||||||
|
|
||||||
```latex
|
|
||||||
%!TEX root = ../main.tex
|
|
||||||
```
|
|
||||||
|
|
||||||
Next, include it in `main.tex` using
|
|
||||||
|
|
||||||
```latex
|
|
||||||
\input{chapter/myfile}
|
|
||||||
\newpage
|
|
||||||
```
|
|
||||||
|
|
||||||
Numbering the files with prefixes (like `01_introduction`) is recommended.
|
|
||||||
|
|
||||||
|
|
||||||
## Bibliography
|
|
||||||
The bibliography index uses `biblatex`.
|
|
||||||
Entries are taken from `library/library.bib`, you may add your PDF files here too and link them to the bibliography entries (e.g. using biblatex frontend/gui tools like *JabRef*).
|
|
||||||
|
|
||||||
To be included in the document, every bibliography entry needs to be keyword-classified manually.
|
|
||||||
For each keyword there will be a seperate subsection in the bibliography section in the document.
|
|
||||||
If there's no bibliography entry for a keyword, the bibliography type will be ommitted and no subsection will be created in the bibliography section in the document.
|
|
||||||
|
|
||||||
Here's an overview of the supported document types and their keywords:
|
|
||||||
|
|
||||||
| type | biblatex document type | keyword |
|
|
||||||
|----------------------------------|-------------------------------|----------------|
|
|
||||||
| monographs | `@Book` | - |
|
|
||||||
| essays and articles in magazines | `@Article` | - |
|
|
||||||
| articles in collections | `@InCollection` | - |
|
|
||||||
| other papers | `@InProceedings` or `@Thesis` | - |
|
|
||||||
| web pages | `@Online` | - |
|
|
||||||
| legislative documents | `@Misc` | `jurisdiction` |
|
|
||||||
| company internal docs | `@Misc` | `company` |
|
|
||||||
|
|
||||||
|
|
||||||
References within the document are usually done using the `\autocite[prefix][postfix]{bibkey}` statement.
|
|
||||||
The default citation format is footnote.
|
|
||||||
When referencing within a footnote, please create a manual reference using `\cite`.
|
|
||||||
|
|
||||||
**(!)** For the references to be syntactically complete and correct, pleae consider the correct document types shown in the table above.
|
|
||||||
|
|
||||||
|
|
||||||
## Layout and further configuration
|
|
||||||
The predefined document layout is the following:
|
|
||||||
|
|
||||||
* page size: A4
|
|
||||||
* borders: left=40mm, right=20mm, top=25mm, bottom=25mm (using `geometry`)
|
|
||||||
* Roman page numbering is used for introductory pages; arabic page numbering starts with first content chapter (see `main.tex` for that)
|
|
||||||
|
|
||||||
Further configuration can be done in `config/config.tex`.
|
|
||||||
|
|
||||||
|
|
||||||
## Document Outline
|
|
||||||
The `scrbook` document class provides the following elements (in said order) to outlining a document:
|
|
||||||
|
|
||||||
* `\part{}`: roman numbering, e.g. *I*
|
|
||||||
* `\chapter{}`: arabic 1st level numbering, e.g. *1*
|
|
||||||
* `\section{}`: arabic 2nd level numbering, e.g. *1.1*
|
|
||||||
* `\subsection{}`: arabic 3rd level numbering, e.g. *1.1.1*
|
|
||||||
* `\subsubsection{}`: arabic 3rd level numbering, e.g. *1.1.1.1*
|
|
||||||
* `\paragraph{}`: no numbering and independent from preceding hierarchy elements
|
|
||||||
|
|
||||||
|
|
||||||
## Continuous Integration using GitLab CI
|
|
||||||
The `.gitlab-ci.yml` file comes preconfigured to spellcheck and compile the LaTex document.
|
|
||||||
You can use it directly on gitlab.com without a private GitLab instance or runner, because the CI jobs rely on corresponding Docker images ([tmaier/hunspell](https://hub.docker.com/r/tmaier/hunspell/) for spellchecking and [bnord01/docker-latex-pygments](https://hub.docker.com/r/bnord01/docker-latex-pygments/) for the actual latex build).
|
|
||||||
|
|
||||||
If you plan to use this boilerplate on your private GitLab instance or to customize it, please keep the following aspects in mind.
|
|
||||||
|
|
||||||
### Basic Requirements
|
|
||||||
If you want to use the preconfigured CI scripts, you need to register a shell runner which basically has the following tools installed:
|
|
||||||
|
|
||||||
* `latexmk` as LaTex build system
|
|
||||||
* `xelatex` as LaTex PDF environment
|
|
||||||
* Python and the Pygments library (for source code listings using the `minted` environment)
|
|
||||||
* `hunspell` for spellchecks
|
|
||||||
|
|
||||||
The provided configuration `gitlab-ci.yml` assumes that you have rununers with the tags `hunspell` and `latex` assigned.
|
|
||||||
It's recommended to register at least two runners (they may reside on the same box) in order to parallelize pipelines and speed up builds.
|
|
||||||
|
|
||||||
**(!)** Please adapt the configuration to your own runner setup if neccessary.
|
|
||||||
|
|
||||||
### Spellchecking
|
|
||||||
Spellchecking is done using `hunspell`.
|
|
||||||
As LaTex `\input` directives are not recognized, all TeX files containing content need to be spellchecked seperately.
|
|
||||||
Therefore, only the `chapter` files are included in the spellcheck.
|
|
||||||
|
|
||||||
If you need certain words to be ignored during spellcheck (e.g. if they're not in the standard dictionaries), please insert them into the file `.hunspellignore`.
|
|
||||||
This is a simple word list structured by one word per line.
|
|
||||||
|
|
||||||
By default, the spellcheck job is allowed to fail.
|
|
||||||
|
|
||||||
### Building the PDF
|
|
||||||
The CI pipeline will build `main.tex` (and everything included here) to PDF using `xelatex`.
|
|
||||||
It provides better handling of unicode characters and typesets special characters (like german umlauts) more precise.
|
|
||||||
|
|
||||||
The build output is generated to `main.pdf`, which can be downloaded from GitLab coordinator for two days (each pipeline run).
|
|
||||||
|
|
||||||
|
|
||||||
## Some special effects...
|
|
||||||
### Lists
|
|
||||||
Please use `\compactitem` environment for unordered lists and `\compactenum` environment for ordered lists.
|
|
||||||
Unlike the usual itemization environments they do not break lines with the usual paragraph spacing (which would be way too much due to the `\onehalfspacing`).
|
|
||||||
|
|
||||||
### Images
|
|
||||||
Resource files for images may be stored in `resources/`.
|
|
||||||
To reference an image from within the document, use the `figure` environment:
|
|
||||||
|
|
||||||
```latex
|
|
||||||
\begin{figure}[H]
|
|
||||||
\centering
|
|
||||||
\fbox{\includegraphics[width=0.75\textwidth]{resources/myimage.png}}
|
|
||||||
\caption{Caption for my image goes here...}
|
|
||||||
\label{fig:myimage}
|
|
||||||
\source{source of the image}
|
|
||||||
\end{figure}
|
|
||||||
```
|
|
||||||
|
|
||||||
The `\label` is used to cross-reference the image using `\ref`.
|
|
||||||
|
|
||||||
The `\caption` may contain a usual `\cite` directive (see below).
|
|
||||||
|
|
||||||
### Acronyms
|
|
||||||
If you introduce acronyms, add them to `additionals/acronyms.tex` in the following way:
|
|
||||||
|
|
||||||
```latex
|
|
||||||
\acro{VMCS}{Virtual Machine Control Structure}
|
|
||||||
```
|
|
||||||
|
|
||||||
**(i)** Please note: If you have acronyms that are longer than four characters, you may extend the parameter in brackets behind the `\begin{acronym}` statement.
|
|
||||||
|
|
||||||
### Code Listings
|
|
||||||
Listings (code snippets) are done using the `minted` environment.
|
|
||||||
It provides syntax highlighting for several languages via an external Python library (*Pygments*) and has comprehensive layout capabilities.
|
|
||||||
Though, handling of captions is a bit complicated, which is why it's wrapped into a custom `code` environment:
|
|
||||||
|
|
||||||
```latex
|
|
||||||
\begin{code}
|
|
||||||
\inputminted{bash}{resources/yoursource.sh}
|
|
||||||
\label{yourlabel}
|
|
||||||
\captionof{listing}{Some Caption goes here...}
|
|
||||||
\source{and you can tell people where you got the code from...}
|
|
||||||
\end{code}
|
|
||||||
```
|
|
||||||
|
|
||||||
If you want to provide your source code directly in the LaTex document, replace the `\inputminted` directive by a whole `minted environment`:
|
|
||||||
|
|
||||||
```latex
|
|
||||||
\begin{code}
|
|
||||||
\begin{minted}{bash}
|
|
||||||
# your code goes here...
|
|
||||||
\end{minted}
|
|
||||||
\label{yourlabel}
|
|
||||||
\captionof{listing}{Some Caption goes here...}
|
|
||||||
\source{and you can tell people where you got the code from...}
|
|
||||||
\end{code}
|
|
||||||
```
|
|
||||||
|
|
||||||
Inline code is done using `\mintinline{bash}{# your inline snippet}`.
|
|
||||||
|
|
||||||
The config for syntax highlighting etc. is centrally provided in `config/config.tex` using the `\setminted` directive.
|
|
||||||
For changes, see the official docs.
|
|
||||||
|
|
||||||
### Paragraph Distances and Onehalf Spacing
|
|
||||||
There are certain LaTex environments that cause huge paragraph distances in combination with the `onehalfspacing` option (1.5 line height).
|
|
||||||
For that reason you may wrap such environments (e.g. lists, images, tables, paragraphs etc.) with a `vspace`:
|
|
||||||
|
|
||||||
```latex
|
|
||||||
\vspace{-\topsep}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Snippets for working in VS Code
|
|
||||||
I compiled the abovementioned "conventions" from this boilerplate to a set of snippets for Visual Studio Code to faciliate the use of this boilerplate within that editor.
|
|
||||||
There are snippets available for both LaTex documents and BibTex library files.
|
|
||||||
As they're bundled in this repo (`.vscode/*.code-snippets`), you should be able to use them right away.
|
|
||||||
|
|
||||||
**(!)** Please note:
|
|
||||||
* Repo-level snippets are [only supported starting with VS Code 1.28 (September 2018)](https://code.visualstudio.com/updates/v1_28#_project-level-snippets).
|
|
||||||
* Editing LaTex projects in VS Code requires the [LaTex Workshop Extension](https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop).
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user