Initial commit
This commit is contained in:
commit
f411cf6dea
15
.drone.yml
Normal file
15
.drone.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: default
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: nixos/nix
|
||||||
|
commands:
|
||||||
|
- nix-build
|
||||||
|
---
|
||||||
|
kind: signature
|
||||||
|
hmac: 830da6e38a18c0405b56b500d229248e30cbaac49df92116a077564489ecbfab
|
||||||
|
|
||||||
|
...
|
15
.gitignore
vendored
Normal file
15
.gitignore
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
_minted-paper/
|
||||||
|
*.aux
|
||||||
|
*.bbl
|
||||||
|
*.bcf
|
||||||
|
*.blg
|
||||||
|
*.fdb_latexmk
|
||||||
|
*.fls
|
||||||
|
*.log
|
||||||
|
*.out
|
||||||
|
*.pdf
|
||||||
|
*.run.xml
|
||||||
|
|
||||||
|
result
|
||||||
|
|
||||||
|
#!cv.pdf
|
32
Makefile
Normal file
32
Makefile
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# use bash so process substutution is available
|
||||||
|
SHELL = bash
|
||||||
|
SRC = main.tex
|
||||||
|
TARGET = $(SRC:%.tex=%.pdf)
|
||||||
|
|
||||||
|
.PHONY: build
|
||||||
|
build: $(TARGET)
|
||||||
|
|
||||||
|
# used for `nix-build`
|
||||||
|
.PHONY: install
|
||||||
|
install: build
|
||||||
|
mkdir -pv ${out}/
|
||||||
|
cp $(TARGET) ${out}/
|
||||||
|
|
||||||
|
%.pdf: %.tex
|
||||||
|
latexmk $<
|
||||||
|
|
||||||
|
.PHONY: watch
|
||||||
|
watch:
|
||||||
|
latexmk -pvc $(SRC)
|
||||||
|
|
||||||
|
.PHONY: lint
|
||||||
|
lint:
|
||||||
|
chktex $(SRC)
|
||||||
|
|
||||||
|
.PHONY: languagetool
|
||||||
|
languagetool:
|
||||||
|
languagetool <(cat $(SRC) | ./scripts/detex.py)
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
latexmk -C
|
4
acronyms.tex
Normal file
4
acronyms.tex
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
\DeclareAcronym{html}{
|
||||||
|
short = HTML,
|
||||||
|
long = hyper text markup language
|
||||||
|
}
|
51
default.nix
Normal file
51
default.nix
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# { pkgs ? import (import nix/fetch-nixpkgs.nix) {}
|
||||||
|
# }:
|
||||||
|
{ pkgs ? import <nixpkgs> {} }:
|
||||||
|
|
||||||
|
with pkgs;
|
||||||
|
|
||||||
|
let
|
||||||
|
latexPackage = pkgs.texlive.combine {
|
||||||
|
inherit (texlive)
|
||||||
|
|
||||||
|
# base packages
|
||||||
|
scheme-small
|
||||||
|
|
||||||
|
csquotes
|
||||||
|
latexmk
|
||||||
|
moderncv
|
||||||
|
needspace
|
||||||
|
fontawesome
|
||||||
|
silence
|
||||||
|
wrapfig
|
||||||
|
enumitem
|
||||||
|
mathpazo
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "story";
|
||||||
|
buildInputs = [
|
||||||
|
latexPackage
|
||||||
|
|
||||||
|
# language correction
|
||||||
|
pkgs.languagetool
|
||||||
|
# detex script
|
||||||
|
pkgs.python
|
||||||
|
# make
|
||||||
|
pkgs.gnumake
|
||||||
|
# PDF viewer
|
||||||
|
pkgs.zathura
|
||||||
|
];
|
||||||
|
|
||||||
|
src = ./.;
|
||||||
|
buildPhase = "make";
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Deterministic LaTeX template using Nix";
|
||||||
|
license = licenses.bsd3;
|
||||||
|
platforms = platforms.linux;
|
||||||
|
};
|
||||||
|
}
|
114
diazessay.cls
Normal file
114
diazessay.cls
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
% Diaz Essay
|
||||||
|
% LaTeX Class
|
||||||
|
% Version 1.0 (13/1/19)
|
||||||
|
%
|
||||||
|
% This class originates from:
|
||||||
|
% http://www.LaTeXTemplates.com
|
||||||
|
%
|
||||||
|
% Authors:
|
||||||
|
% Vel (vel@LaTeXTemplates.com)
|
||||||
|
% Nicolas Diaz (nsdiaz@uc.cl)
|
||||||
|
%
|
||||||
|
% License:
|
||||||
|
% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/)
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------------------
|
||||||
|
% CLASS CONFIGURATION
|
||||||
|
%----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
\NeedsTeXFormat{LaTeX2e}
|
||||||
|
\ProvidesClass{diazessay}[2019/01/13 Diaz Essay class v1.0]
|
||||||
|
|
||||||
|
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} % Pass through any options to the base class
|
||||||
|
\ProcessOptions\relax % Process given options
|
||||||
|
|
||||||
|
\LoadClass{article} % Load the base class
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------------------
|
||||||
|
% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS
|
||||||
|
%----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
\usepackage[english]{babel} % English language hyphenation
|
||||||
|
|
||||||
|
\usepackage{graphicx} % Required for including images
|
||||||
|
\graphicspath{{Figures/}{./}} % Specifies where to look for included images (trailing slash required)
|
||||||
|
|
||||||
|
\usepackage{wrapfig} % Allows in-line images
|
||||||
|
|
||||||
|
\usepackage{booktabs} % Required for better horizontal rules in tables
|
||||||
|
|
||||||
|
\usepackage{enumitem} % Required for list customisation
|
||||||
|
\setlist{noitemsep} % No spacing between list items
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\renewcommand\@biblabel[1]{\textbf{#1.}} % Remove the square brackets from each bibliography item ('[1]' to '1.')
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------------------
|
||||||
|
% DOCUMENT MARGINS
|
||||||
|
%----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
\usepackage{geometry} % Required for adjusting page dimensions and margins
|
||||||
|
|
||||||
|
\geometry{
|
||||||
|
paper=a4paper, % Paper size, change to letterpaper for US letter size
|
||||||
|
top=2.5cm, % Top margin
|
||||||
|
bottom=3cm, % Bottom margin
|
||||||
|
left=4cm, % Left margin
|
||||||
|
right=4cm, % Right margin
|
||||||
|
headheight=0.75cm, % Header height
|
||||||
|
footskip=1.5cm, % Space from the bottom margin to the baseline of the footer
|
||||||
|
headsep=0.75cm, % Space from the top margin to the baseline of the header
|
||||||
|
%showframe, % Uncomment to show how the type block is set on the page
|
||||||
|
}
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------------------
|
||||||
|
% FONTS
|
||||||
|
%----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
\usepackage[utf8]{inputenc} % Required for inputting international characters
|
||||||
|
\usepackage[T1]{fontenc} % Use 8-bit encoding
|
||||||
|
|
||||||
|
\usepackage{mathpazo} % Use the Palatino font
|
||||||
|
|
||||||
|
\usepackage[protrusion=true, expansion=true]{microtype} % Better typography
|
||||||
|
|
||||||
|
\linespread{1.05} % Increase line spacing slightly; Palatino benefits from a slight increase by default
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------------------
|
||||||
|
% TITLE
|
||||||
|
%----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\renewcommand{\maketitle}{ % Customise the title (do not edit title and author name here)
|
||||||
|
\vspace*{30pt} % Vertical whitespace before the title
|
||||||
|
\begin{flushright} % Right align
|
||||||
|
{\LARGE\@title} % Increase the font size of the title
|
||||||
|
|
||||||
|
\vspace{50pt} % Vertical whitespace between the title and author name
|
||||||
|
|
||||||
|
{\large\@author}\\ % Author name
|
||||||
|
\@date % Date
|
||||||
|
|
||||||
|
\vspace{40pt} % Vertical whitespace between the author block and abstract
|
||||||
|
\end{flushright}
|
||||||
|
}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------------------
|
||||||
|
% HEADERS AND FOOTERS
|
||||||
|
%----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
\usepackage{fancyhdr} % Required for customising headers and footers
|
||||||
|
\pagestyle{fancy} % Enable custom headers and footers
|
||||||
|
|
||||||
|
\renewcommand{\headrulewidth}{0pt} % Remove default top horizontal rule
|
||||||
|
\lhead{} % Left header
|
||||||
|
\chead{} % Centre header
|
||||||
|
\rhead{} % Right header
|
||||||
|
\lfoot{} % Left footer
|
||||||
|
\cfoot{\thepage} % Centre footer
|
||||||
|
\rfoot{} % Right footer
|
15
latexmkrc
Normal file
15
latexmkrc
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# create PDF
|
||||||
|
$pdf_mode = 1;
|
||||||
|
|
||||||
|
# clean transitive assets
|
||||||
|
$cleanup_includes_cusdep_generated = 1;
|
||||||
|
# clean files generated by LaTeX
|
||||||
|
$cleanup_includes_generated = 1;
|
||||||
|
|
||||||
|
$biber = 'biber --validate-datamodel %O %S';
|
||||||
|
|
||||||
|
# use zathura as viewer
|
||||||
|
$pdf_previewer = 'zathura';
|
||||||
|
|
||||||
|
$pdflatex = 'pdflatex --shell-escape -interaction=nonstopmode';
|
||||||
|
$latex = 'latex --shell-escape -interaction=nonstopmode';
|
58
main.tex
Normal file
58
main.tex
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
% silence external warnings
|
||||||
|
\RequirePackage{silence}
|
||||||
|
\WarningFilter{scrreprt}{Usage of package `titlesec'}
|
||||||
|
\WarningFilter{scrreprt}{Activating an ugly workaround}
|
||||||
|
\WarningFilter{titlesec}{Non standard sectioning command detected}
|
||||||
|
\WarningFilter{microtype}{protrusion codes list}
|
||||||
|
\WarningFilter{latexfont}{Font}
|
||||||
|
\WarningFilter{latexfont}{Some font shapes}
|
||||||
|
|
||||||
|
\documentclass[11pt]{diazessay}
|
||||||
|
|
||||||
|
% document language
|
||||||
|
% \usepackage[ngerman]{babel}
|
||||||
|
|
||||||
|
% UTF-8 encoding
|
||||||
|
\usepackage[utf8]{inputenc}
|
||||||
|
\usepackage[T1]{fontenc}
|
||||||
|
\usepackage{lmodern}
|
||||||
|
|
||||||
|
% language specific quotes
|
||||||
|
\usepackage{csquotes}
|
||||||
|
|
||||||
|
\usepackage{needspace}
|
||||||
|
|
||||||
|
% make overfull hbox warnings prominently visible in document
|
||||||
|
\overfullrule=2cm
|
||||||
|
|
||||||
|
% \usepackage[scale=0.75]{geometry}
|
||||||
|
|
||||||
|
|
||||||
|
\title{\textbf{Main Title} \\ {\Large\itshape Subtitle}}
|
||||||
|
|
||||||
|
\author{Valentin Brandl}
|
||||||
|
|
||||||
|
% \date{\today}
|
||||||
|
\date{}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\maketitle
|
||||||
|
|
||||||
|
\begin{abstract}
|
||||||
|
Foo Bar baz lel
|
||||||
|
\end{abstract}
|
||||||
|
|
||||||
|
\hspace*{3.6mm}\textit{Keywords:} foo, bar, baz, trololol
|
||||||
|
|
||||||
|
\vspace{30pt}
|
||||||
|
|
||||||
|
\section*{Once upon a time}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\section*{Once upon a time}
|
||||||
|
|
||||||
|
|
||||||
|
\end{document}
|
||||||
|
% vim: set filetype=tex ts=2 sw=2 tw=0 et :
|
6
nix/fetch-nixpkgs.nix
Normal file
6
nix/fetch-nixpkgs.nix
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
let
|
||||||
|
spec = builtins.fromJSON (builtins.readFile ./nixpkgs-src.json);
|
||||||
|
in builtins.fetchTarball {
|
||||||
|
url = "https://github.com/${spec.owner}/${spec.repo}/archive/${spec.rev}.tar.gz";
|
||||||
|
inherit (spec) sha256;
|
||||||
|
}
|
9
nix/nixpkgs-src.json
Normal file
9
nix/nixpkgs-src.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"url": "https://github.com/nixos/nixpkgs",
|
||||||
|
"rev": "6a3f5bcb061e1822f50e299f5616a0731636e4e7",
|
||||||
|
"date": "2018-10-05T18:33:19-04:00",
|
||||||
|
"sha256": "1ib96has10v5nr6bzf7v8kw7yzww8zanxgw2qi1ll1sbv6kj6zpd",
|
||||||
|
"fetchSubmodules": false
|
||||||
|
}
|
12
scripts/detex-languagetool.py
Executable file
12
scripts/detex-languagetool.py
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
dir_path = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
|
subprocess.call('cat ' + sys.argv[-1] + ' | '
|
||||||
|
+ os.path.join(dir_path, 'detex.py') + ' | '
|
||||||
|
+ 'languagetool ' + ' '.join(sys.argv[1:-1]),
|
||||||
|
shell=True)
|
81
scripts/detex.py
Executable file
81
scripts/detex.py
Executable file
@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def swallow(match):
|
||||||
|
return ' ' * len(match.group(0))
|
||||||
|
|
||||||
|
|
||||||
|
def swallow_command(match):
|
||||||
|
return ' ' * (len(match.group(1)) + 1) + ' ' + match.group(2) + ' '
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
|
||||||
|
text = sys.stdin.read()
|
||||||
|
text_len = len(text)
|
||||||
|
|
||||||
|
# \hyp
|
||||||
|
text = re.subn(r'(\w+)\\hyp\{\}(\w+)', r' \1-\2 ', text)[0]
|
||||||
|
text = re.subn(r'(\w+)\\fshyp\{\}(\w+)', r' \1-\2 ', text)[0]
|
||||||
|
|
||||||
|
# glossary entries
|
||||||
|
def replace_glossary(match):
|
||||||
|
text = match.group(2).replace('-', ' ')
|
||||||
|
if match.group(1).endswith('pl'):
|
||||||
|
text += 's'
|
||||||
|
if match.group(1)[0].isupper():
|
||||||
|
text = text[0].upper() + text[1:]
|
||||||
|
text = ' ' * len(match.group(1)) + ' ' + text + ' '
|
||||||
|
if match.group(1).endswith('pl'):
|
||||||
|
text = text[1:]
|
||||||
|
return text
|
||||||
|
text = re.subn(r'\\((?:newdef)?[gG]ls(?:pl)?){((?:\w+-?)+?)}',
|
||||||
|
replace_glossary, text)[0]
|
||||||
|
|
||||||
|
# acronyms
|
||||||
|
def replace_acronym(match):
|
||||||
|
return ' ' * len(match.group(1)) + ' ' + match.group(2) + ' '
|
||||||
|
text = re.subn(r'\\([aA]cr.*?){(.+?)}',
|
||||||
|
replace_acronym, text)[0]
|
||||||
|
|
||||||
|
# remove keypoints
|
||||||
|
text = re.subn(r'\\keypoint\{.*?\}', swallow, text)[0]
|
||||||
|
|
||||||
|
# remove autocites
|
||||||
|
text = re.subn(r'~?\\[aA]utocite(?:\[.+?\])?\{.*?\}', swallow, text)[0]
|
||||||
|
|
||||||
|
# Remove textcites
|
||||||
|
def replace_textcite(match):
|
||||||
|
template = 'Foo and Bar'
|
||||||
|
return template + ' ' * (len(match.group(0)) - len(template))
|
||||||
|
text = re.subn(r'\\[tT]extcite\{(.*?)\}', replace_textcite, text)[0]
|
||||||
|
|
||||||
|
# citesoftware
|
||||||
|
text = re.subn(r'\\(citesoftware)\{(.*?)\}', swallow_command, text)[0]
|
||||||
|
|
||||||
|
# Remove common surrounding markup
|
||||||
|
text = re.subn(r'\\(emph|texttt|textit|texttt|texthtt)\{(.*?)\}',
|
||||||
|
swallow_command, text)[0]
|
||||||
|
|
||||||
|
# Remove abbreviations
|
||||||
|
text = re.subn(r'\\eg\b', 'eg.', text)[0]
|
||||||
|
text = re.subn(r'\\cf\b', 'cf.', text)[0]
|
||||||
|
text = re.subn(r'\\ie\b', 'ie.', text)[0]
|
||||||
|
|
||||||
|
# references
|
||||||
|
text = re.subn(r'\\([vV]?ref)\{(.*?)\}', swallow_command, text)[0]
|
||||||
|
|
||||||
|
# remove comments at line end
|
||||||
|
text = re.subn(r'([^\\])%.*', '\\1', text)[0]
|
||||||
|
|
||||||
|
# do not move things around too much
|
||||||
|
print(text)
|
||||||
|
|
||||||
|
assert len(text) == text_len
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
39
shell.nix
Normal file
39
shell.nix
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{ pkgs ? import <nixpkgs> {} }:
|
||||||
|
|
||||||
|
with pkgs;
|
||||||
|
|
||||||
|
let
|
||||||
|
latexPackage = pkgs.texlive.combine {
|
||||||
|
inherit (texlive)
|
||||||
|
|
||||||
|
# base packages
|
||||||
|
scheme-small
|
||||||
|
|
||||||
|
csquotes
|
||||||
|
latexmk
|
||||||
|
moderncv
|
||||||
|
needspace
|
||||||
|
fontawesome
|
||||||
|
silence
|
||||||
|
wrapfig
|
||||||
|
enumitem
|
||||||
|
mathpazo
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
|
||||||
|
pkgs.mkShell {
|
||||||
|
buildInputs = [
|
||||||
|
latexPackage
|
||||||
|
|
||||||
|
# language correction
|
||||||
|
pkgs.languagetool
|
||||||
|
# detex script
|
||||||
|
pkgs.python
|
||||||
|
# make
|
||||||
|
pkgs.gnumake
|
||||||
|
# PDF viewer
|
||||||
|
pkgs.zathura
|
||||||
|
];
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user