From 68bc6f5473ed38133af72c93e1fb80f6423d7610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20Schwarz=C3=A4ugl?= Date: Tue, 31 Dec 2024 21:31:53 +0100 Subject: [PATCH] feat: add latex template --- SwarselSystems.org | 28 +- programs/emacs/init.el | 1 + templates/default.nix | 1 + templates/latex/.envrc | 1 + templates/latex/.gitignore | 292 ++++++++++++++++++ templates/latex/.latexmkrc | 3 + templates/latex/000-main.tex | 75 +++++ templates/latex/001-preamble.tex | 204 ++++++++++++ templates/latex/005-titlepage.tex | 28 ++ templates/latex/010-introduction.tex | 39 +++ templates/latex/990-appendix.tex | 8 + templates/latex/biblio.bib | 41 +++ templates/latex/build-document.nix | 87 ++++++ .../code/P15601_en_Harrichu_y_and_the_maze.cc | 51 +++ templates/latex/figures/Professortocat_v2.png | Bin 0 -> 30765 bytes templates/latex/figures/institution-logo.pdf | Bin 0 -> 23591 bytes templates/latex/flake.nix | 78 +++++ templates/tex_standard.tex | 29 -- 18 files changed, 924 insertions(+), 42 deletions(-) create mode 100644 templates/latex/.envrc create mode 100644 templates/latex/.gitignore create mode 100644 templates/latex/.latexmkrc create mode 100644 templates/latex/000-main.tex create mode 100644 templates/latex/001-preamble.tex create mode 100644 templates/latex/005-titlepage.tex create mode 100644 templates/latex/010-introduction.tex create mode 100644 templates/latex/990-appendix.tex create mode 100644 templates/latex/biblio.bib create mode 100644 templates/latex/build-document.nix create mode 100644 templates/latex/code/P15601_en_Harrichu_y_and_the_maze.cc create mode 100644 templates/latex/figures/Professortocat_v2.png create mode 100644 templates/latex/figures/institution-logo.pdf create mode 100644 templates/latex/flake.nix delete mode 100644 templates/tex_standard.tex diff --git a/SwarselSystems.org b/SwarselSystems.org index 1e663f5..9fca82d 100644 --- a/SwarselSystems.org +++ b/SwarselSystems.org @@ -488,6 +488,7 @@ This file defines the templates that are being exposed by the flake. These can b "rust" "go" "cpp" + "latex" "default" ]; in @@ -13002,20 +13003,21 @@ This provides several utilities for LaTeX in Emacs, including many completions a #+begin_src emacs-lisp - (use-package auctex) - (setq TeX-auto-save t) - (setq TeX-save-query nil) - (setq TeX-parse-self t) - (setq-default TeX-master nil) + (use-package auctex) + (setq TeX-auto-save t) + (setq TeX-save-query nil) + (setq TeX-parse-self t) + (setq-default TeX-engine 'luatex) + (setq-default TeX-master nil) - (add-hook 'LaTeX-mode-hook 'visual-line-mode) - (add-hook 'LaTeX-mode-hook 'flyspell-mode) - (add-hook 'LaTeX-mode-hook 'LaTeX-math-mode) - (add-hook 'LaTeX-mode-hook 'reftex-mode) - (setq LaTeX-electric-left-right-brace t) - (setq font-latex-fontify-script nil) - (setq TeX-electric-sub-and-superscript t) - ;; (setq reftex-plug-into-AUCTeX t) + (add-hook 'LaTeX-mode-hook 'visual-line-mode) + (add-hook 'LaTeX-mode-hook 'flyspell-mode) + (add-hook 'LaTeX-mode-hook 'LaTeX-math-mode) + (add-hook 'LaTeX-mode-hook 'reftex-mode) + (setq LaTeX-electric-left-right-brace t) + (setq font-latex-fontify-script nil) + (setq TeX-electric-sub-and-superscript t) + ;; (setq reftex-plug-into-AUCTeX t) #+end_src diff --git a/programs/emacs/init.el b/programs/emacs/init.el index cb75a91..d5cc11c 100644 --- a/programs/emacs/init.el +++ b/programs/emacs/init.el @@ -924,6 +924,7 @@ create a new one." (setq TeX-auto-save t) (setq TeX-save-query nil) (setq TeX-parse-self t) +(setq-default TeX-engine 'luatex) (setq-default TeX-master nil) (add-hook 'LaTeX-mode-hook 'visual-line-mode) diff --git a/templates/default.nix b/templates/default.nix index 1fdc932..9fbe2e6 100644 --- a/templates/default.nix +++ b/templates/default.nix @@ -5,6 +5,7 @@ let "rust" "go" "cpp" + "latex" "default" ]; in diff --git a/templates/latex/.envrc b/templates/latex/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/templates/latex/.envrc @@ -0,0 +1 @@ +use flake diff --git a/templates/latex/.gitignore b/templates/latex/.gitignore new file mode 100644 index 0000000..953a4ca --- /dev/null +++ b/templates/latex/.gitignore @@ -0,0 +1,292 @@ +# nix build output +result + +## PDF output (but not in figures/) +*.pdf +!figures/*.pdf +!figures/**/*.pdf + +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb + +## Intermediate documents: +*.dvi +*.xdv +*-converted-to.* +# these rules might exclude image files for figures etc. +# *.ps +# *.eps +# *.pdf + +## Generated if empty string is given at "Please type another file name for output:" +.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync + +## Build tool directories for auxiliary files +# latexrun +latex.out/ + +## Auxiliary and intermediate files from other packages: +# algorithms +*.alg +*.loa + +# achemso +acs-*.bib + +# amsthm +*.thm + +# beamer +*.nav +*.pre +*.snm +*.vrb + +# changes +*.soc + +# comment +*.cut + +# cprotect +*.cpt + +# elsarticle (documentclass of Elsevier journals) +*.spl + +# endnotes +*.ent + +# fixme +*.lox + +# feynmf/feynmp +*.mf +*.mp +*.t[1-9] +*.t[1-9][0-9] +*.tfm + +#(r)(e)ledmac/(r)(e)ledpar +*.end +*.?end +*.[1-9] +*.[1-9][0-9] +*.[1-9][0-9][0-9] +*.[1-9]R +*.[1-9][0-9]R +*.[1-9][0-9][0-9]R +*.eledsec[1-9] +*.eledsec[1-9]R +*.eledsec[1-9][0-9] +*.eledsec[1-9][0-9]R +*.eledsec[1-9][0-9][0-9] +*.eledsec[1-9][0-9][0-9]R + +# glossaries +*.acn +*.acr +*.glg +*.glo +*.gls +*.glsdefs +*.lzo +*.lzs + +# uncomment this for glossaries-extra (will ignore makeindex's style files!) +# *.ist + +# gnuplottex +*-gnuplottex-* + +# gregoriotex +*.gaux +*.gtex + +# htlatex +*.4ct +*.4tc +*.idv +*.lg +*.trc +*.xref + +# hyperref +*.brf + +# knitr +*-concordance.tex +# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files +# *.tikz +*-tikzDictionary + +# listings +*.lol + +# luatexja-ruby +*.ltjruby + +# makeidx +*.idx +*.ilg +*.ind + +# minitoc +*.maf +*.mlf +*.mlt +*.mtc[0-9]* +*.slf[0-9]* +*.slt[0-9]* +*.stc[0-9]* + +# minted +_minted* +*.pyg + +# morewrites +*.mw + +# nomencl +*.nlg +*.nlo +*.nls + +# pax +*.pax + +# pdfpcnotes +*.pdfpc + +# sagetex +*.sagetex.sage +*.sagetex.py +*.sagetex.scmd + +# scrwfile +*.wrt + +# sympy +*.sout +*.sympy +sympy-plots-for-*.tex/ + +# pdfcomment +*.upa +*.upb + +# pythontex +*.pytxcode +pythontex-files-*/ + +# tcolorbox +*.listing + +# thmtools +*.loe + +# TikZ & PGF +*.dpth +*.md5 +*.auxlock + +# todonotes +*.tdo + +# vhistory +*.hst +*.ver + +# easy-todo +*.lod + +# xcolor +*.xcp + +# xmpincl +*.xmpi + +# xindy +*.xdy + +# xypic precompiled matrices and outlines +*.xyc +*.xyd + +# endfloat +*.ttt +*.fff + +# Latexian +TSWLatexianTemp* + +## Editors: +# WinEdt +*.bak +*.sav + +# Texpad +.texpadtmp + +# LyX +*.lyx~ + +# Kile +*.backup + +# gummi +.*.swp + +# KBibTeX +*~[0-9]* + +# TeXnicCenter +*.tps + +# auto folder when using emacs and auctex +./auto/* +*.el + +# expex forward references with \gathertags +*-tags.tex + +# standalone packages +*.sta + +# Makeindex log files +*.lpz + +# xwatermark package +*.xwm + +# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib +# option is specified. Footnotes are the stored in a file with suffix Notes.bib. +# Uncomment the next line to have this generated file ignored. +#*Notes.bib diff --git a/templates/latex/.latexmkrc b/templates/latex/.latexmkrc new file mode 100644 index 0000000..5f227c1 --- /dev/null +++ b/templates/latex/.latexmkrc @@ -0,0 +1,3 @@ +$pdf_mode = 4; +@default_files = ('000-main.tex'); +$lualatex = "lualatex %O -shell-escape %S"; diff --git a/templates/latex/000-main.tex b/templates/latex/000-main.tex new file mode 100644 index 0000000..5f4d7f3 --- /dev/null +++ b/templates/latex/000-main.tex @@ -0,0 +1,75 @@ +%! TEX root = **/000-main.tex +% vim: spell spelllang=en: + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PREAMBLE +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\input{001-preamble} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% EXTRA PACKAGES / CONFIG +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% METADATA +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% remove when using \maketitle: +\renewcommand\and{\\[\baselineskip]} + +\title{My title \\ \Large \normalfont My Subtitle} +\author{First Author \and Second Author} +\date{\today} + +\begin{document} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% TITLE +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + % Default title or use titlepage.tex + + %\maketitle + \include{005-titlepage} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% TOC & lists +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + \pagenumbering{Roman} + + %\setcounter{tocdepth}{2} + \tableofcontents \pagebreak + + \listoffigures \pagebreak + \listoftables \clearpage + + \pagenumbering{arabic} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SECTIONS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + % Paragraph spacing (placed after ToC) + \setlength{\parskip}{1em plus 0.5em minus 0.2em} + %\setlength{\parindent}{0pt} + + \include{010-introduction} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% BIBLIO +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + \printbibliography[heading=bibintoc] + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% APPENDIX +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + % uncomment to add appendix section prefix to numbering + %\appendixpagenumbering + + \appendix + + \include{990-appendix} + +\end{document} diff --git a/templates/latex/001-preamble.tex b/templates/latex/001-preamble.tex new file mode 100644 index 0000000..4f72f3f --- /dev/null +++ b/templates/latex/001-preamble.tex @@ -0,0 +1,204 @@ +%! TEX root = **/000-main.tex +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LaTeX preamble, load in main.tex with: \input{preamble} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[12pt, oneside]{article} +\usepackage[a4paper, left=2.5cm, right=2.5cm, top=2.5cm, bottom=2.5cm]{geometry} + +% for debugging overfulls +%\documentclass[draft, 12pt, oneside]{article} +%\usepackage[showframe, a4paper, left=2.5cm, right=2.5cm, top=2.5cm, bottom=2.5cm]{geometry} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% FONTS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\usepackage[T1]{fontenc} +\usepackage{fontspec} +\usepackage{microtype} + +\setmonofont[Scale=MatchLowercase]{DejaVu Sans Mono} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LANGUAGE +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\usepackage{polyglossia} +\setdefaultlanguage{english} +\setotherlanguages{spanish,catalan} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% BIBLIOGRAPHY +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\usepackage[ + backend=biber, + style=numeric, +]{biblatex} +\DeclareNameAlias{default}{family-given} + +\addbibresource{biblio.bib} + +\usepackage{fvextra} % Req by minted (must load before csquotes) +\usepackage{csquotes} % For bibliography quotations +\DeclareQuoteAlias{spanish}{catalan} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% COMMON +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\usepackage{color, xcolor} % more colors + +\usepackage{graphicx} % graphics +\graphicspath{{./figures/}} + +\usepackage{comment} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% MATHS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\usepackage{mathtools} % amsmath + more +\usepackage{amsthm} % Theorem enviroment +\usepackage{amssymb} % More symbols +\usepackage{amstext} % Text inside mathenv + +%\usepackage{relsize} % Bigger math with mathlarger{___} +%\usepackage{nicefrac} % nice fractions in one line + +%\usepackage{IEEEtrantools} % Complex equation arrays + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% REFERENCES (load order is important) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\usepackage{varioref} % reference far away (1) +\usepackage[colorlinks = true]{hyperref} % links in references (2) +\usepackage{cleveref} % smart references (3) +%hyperref configuration so that it doesn't contrast so much colorlinks, +\hypersetup{ + linkcolor={black}, + citecolor={black}, + %linkcolor={red!50!black}, + %citecolor={blue!50!black}, + urlcolor={blue!80!black} +} + +\usepackage[bottom]{footmisc} % Footnotes at bottom of page + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% FIGURES +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%\usepackage[export]{adjustbox} % Adjust table size +\usepackage{float} % Force tables and images position (H and H!) +%\usepackage{wrapfig} % Wrap images like in HTML + +\usepackage[justification=centering]{caption} +%\usepackage{subcaption} % Subfigures +%\usepackage[framemethod=tikz]{mdframed} % Custom frames + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TABLES +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%\usepackage{colortbl, booktabs} % Better tables +%\usepackage{tabularx} +%\usepackage{longtable} % Multiple page table (does not work with tabularx) +\usepackage{xltabular, colortbl, booktabs} % longtable + tabularx (has bug with booktabs: fix below) + +% Split cell in lines and more formating options inside table +\usepackage{array, multirow, multicol, makecell} + +%%% +% bug fix for booktabs + xltabular incompatibility +\makeatletter +\def\@BTrule[#1]{% + \ifx\longtable\undefined + \let\@BTswitch\@BTnormal + \else\ifx\hline\LT@hline + \nobreak + \let\@BTswitch\@BLTrule + \else + \let\@BTswitch\@BTnormal + \fi\fi + \global\@thisrulewidth=#1\relax + \ifnum\@thisruleclass=\tw@\vskip\@aboverulesep\else + \ifnum\@lastruleclass=\z@\vskip\@aboverulesep\else + \ifnum\@lastruleclass=\@ne\vskip\doublerulesep\fi\fi\fi + \@BTswitch} +\makeatother +%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% SIUNITX +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%\usepackage[alsoload=hep]{siunitx} % SI units and uncertainties +%\sisetup{locale = FR} % Commas and so on for spanish +%\sisetup{separate-uncertainty=true} +%\sisetup{ + %per-mode=fraction, + %fraction-function=\nicefrac +%} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TIKZ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%\usepackage{tikz} +%\usetikzlibrary{arrows} +%\usetikzlibrary{scopes} +%\usetikzlibrary{babel} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% MINTED +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\usepackage{minted} +\definecolor{codeBg}{HTML}{FFFDE7} +\setminted{ + %style=pastie, + frame=lines, + framesep=3mm, + linenos, + breaklines=true, + encoding=utf8, + fontsize=\footnotesize, + bgcolor=codeBg +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% CUSTOM COMMANDS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% empty whitepage without numbering +\newcommand{\whitepage}{ + \clearpage\thispagestyle{empty}\addtocounter{page}{-1} \newpage \clearpage +} + +% Add command before appendix section for page numbering: A-1 +\newcommand{\appendixpagenumbering}{ + \break + \pagenumbering{arabic} + \renewcommand{\thepage}{\thesection-\arabic{page}} +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% CUSTOM MATH OPERATORS (functions not in italic in math mode) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%\DeclareMathOperator{\arcsec}{arcsec} +%\DeclareMathOperator{\arccot}{arccot} +%\DeclareMathOperator{\arccsc}{arccsc} +%\DeclareMathOperator{\cis}{cis} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% MISC +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%\usepackage{datetime} % Customize date +%% \monthyeardate\today gives the date without the day +%\newdateformat{monthyeardate}{% + %\monthname[\THEMONTH], \THEYEAR} diff --git a/templates/latex/005-titlepage.tex b/templates/latex/005-titlepage.tex new file mode 100644 index 0000000..f9022a7 --- /dev/null +++ b/templates/latex/005-titlepage.tex @@ -0,0 +1,28 @@ +%! TEX root = **/000-main.tex +% vim: spell spelllang=en: + +\thispagestyle{empty} +\clearpage +\setcounter{page}{-1} + +\makeatletter +\begin{titlepage} +{ + \centering + \includegraphics[width=0.9\textwidth]{institution-logo} + \null% + \vspace{3em} + {\Huge \bfseries \@title \par} + \vspace{2em} + {\large \scshape \@date \par} + \vfill +\begin{center} + % Supplementary image +\end{center} + \vspace{5em} + + \vfill + {\raggedleft \large \@author \par} +} +\end{titlepage} +\makeatother diff --git a/templates/latex/010-introduction.tex b/templates/latex/010-introduction.tex new file mode 100644 index 0000000..6e4fd4e --- /dev/null +++ b/templates/latex/010-introduction.tex @@ -0,0 +1,39 @@ +%! TEX root = **/000-main.tex +% vim: spell spelllang=en: + +\section{Introduction}% +\label{sec:introduction} + +\(E = mc^2\) \cite{einstein} + +\begin{figure}[H] + \centering + \includegraphics[width=0.3\linewidth]{Professortocat_v2} + \caption{Professor OctoCat}% + \label{fig:profocto} +\end{figure} + +As we can see in \cref{fig:profocto}, the professor is holding an apple. + +\begin{table}[H] + \begin{center} + \caption{Table captions go on top of the tables}% + \label{tab:example} + \begin{tabular}{ccc} + \toprule + a & b & c \\ + \midrule + 0 & 2 & 4 \\ + \bottomrule + \end{tabular} + \end{center} +\end{table} + +\subsection{Lorem ipsum}% +\label{sub:lorem_ipsum} + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ultricies est sit amet interdum ornare. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut nulla lectus, bibendum ultrices dui quis, sodales suscipit quam. Donec eu finibus lectus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Etiam eu metus mattis, bibendum massa quis, eleifend libero. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nunc lacinia ipsum at dolor tristique convallis. Sed dignissim malesuada nunc, nec malesuada risus sagittis eu. Nulla et erat et mi elementum scelerisque vitae at neque. Suspendisse scelerisque laoreet tellus, sit amet accumsan mauris placerat nec. Vestibulum mollis augue a odio posuere, ut gravida est lacinia. Etiam turpis ligula, molestie nec porta in, malesuada id magna. Donec elementum nulla ac tincidunt fringilla. Suspendisse porta laoreet nisl, non aliquam orci dictum egestas. + +Proin euismod consequat felis ut pharetra. Maecenas auctor, nunc ac gravida pretium, metus mi fringilla lectus, auctor scelerisque nunc velit id magna. Etiam sit amet mi sit amet nunc congue ornare non hendrerit diam. Nullam consectetur lectus quis urna vehicula, nec lacinia tortor rhoncus. Vestibulum at enim aliquam, ultricies urna sit amet, porta tellus. Curabitur posuere elit orci, et rutrum nibh cursus eget. Donec ac venenatis purus. Fusce vehicula nisi erat, at tempor turpis congue vitae. Nunc auctor pellentesque malesuada. Nunc sodales, dolor ac sagittis mollis, enim ipsum mollis sem, non porttitor arcu nulla at velit. Ut non velit nec lacus sollicitudin maximus id id tortor. Sed ac aliquam lorem. + +Nunc non ante ex. Curabitur lacinia euismod velit, non posuere leo bibendum non. Mauris ac orci non risus feugiat rutrum eu ac velit. Phasellus facilisis lacinia condimentum. Pellentesque vulputate nibh urna, vel varius mauris cursus quis. Aliquam vitae sem ac orci fermentum semper. Praesent est tellus, luctus sed venenatis at, bibendum id purus. Cras at mi sed lorem aliquet congue at sit amet turpis. Aliquam vestibulum tempor mauris, id aliquam ipsum scelerisque ut. In arcu turpis, dapibus ut nisi vel, luctus pellentesque felis. Aenean nisi erat, porttitor eu felis ut, imperdiet aliquam velit. Mauris vitae vehicula leo. Curabitur ut ante et ante pulvinar gravida. Donec tincidunt fringilla erat. Vivamus cursus augue et odio pharetra hendrerit. diff --git a/templates/latex/990-appendix.tex b/templates/latex/990-appendix.tex new file mode 100644 index 0000000..1e90572 --- /dev/null +++ b/templates/latex/990-appendix.tex @@ -0,0 +1,8 @@ +%! TEX root = **/000-main.tex +% vim: spell spelllang=en: + +\section{Appendix} + +Appendix contents + +\inputminted{cpp}{./code/P15601_en_Harrichu_y_and_the_maze.cc} diff --git a/templates/latex/biblio.bib b/templates/latex/biblio.bib new file mode 100644 index 0000000..053da58 --- /dev/null +++ b/templates/latex/biblio.bib @@ -0,0 +1,41 @@ +% vim: spell spelllang=en: + +@article{einstein, + author = "Albert Einstein", + title = "{Zur Elektrodynamik bewegter K{\"o}rper}. ({German}) + [{On} the electrodynamics of moving bodies]", + journal = "Annalen der Physik", + volume = "322", + number = "10", + pages = "891--921", + year = "1905", + DOI = "http://dx.doi.org/10.1002/andp.19053221004", + keywords = "physics" +} + +@book{dirac, + title = {The Principles of Quantum Mechanics}, + author = {Paul Adrien Maurice Dirac}, + isbn = {9780198520115}, + series = {International series of monographs on physics}, + year = {1981}, + publisher = {Clarendon Press}, + keywords = {physics} +} + +@online{knuthwebsite, + author = "Donald Knuth", + title = "Knuth: Computers and Typesetting", + url = "http://www-cs-faculty.stanford.edu/~uno/abcde.html", + addendum = "(accessed: 01.09.2016)", + keywords = "latex,knuth" +} + +@inbook{knuth-fa, + author = "Donald E. Knuth", + title = "Fundamental Algorithms", + publisher = "Addison-Wesley", + year = "1973", + chapter = "1.2", + keywords = "knuth,programming" +} diff --git a/templates/latex/build-document.nix b/templates/latex/build-document.nix new file mode 100644 index 0000000..b59432f --- /dev/null +++ b/templates/latex/build-document.nix @@ -0,0 +1,87 @@ +# Build a reproducible latex document with latexmk, based on: +# https://flyx.org/nix-flakes-latex/ + +{ pkgs + # Document source +, src ? ./. + + # Name of the final pdf file +, name ? "document.pdf" + + # Use -shell-escape +, shellEscape ? false + + # Use minted (requires shellEscape) +, minted ? false + + # Additional flags for latexmk +, extraFlags ? [ ] + + # Do not use the default latexmk flags. Usefull if you have a .latexmkrc or you + # don't want to use lualatex +, dontUseDefaultFlags ? false + + # texlive packages needed to build the document + # you can also include other packages as a list. +, texlive ? pkgs.texlive.combined.scheme-full + + # Pygments package to use (needed for minted) +, pygments ? pkgs.python39Packages.pygments + + # Add system fonts + # you can specify one font directly with: pkgs.fira-code + # of join multiple fonts using symlinJoin: + # pkgs.symlinkJoin { name = "fonts"; paths = with pkgs; [ fira-code souce-code-pro ]; } +, fonts ? null + + # Date for the document in unix time. You can change it + # to "$(date -r . +%s)" , "$(date -d "2022/02/22" +%s)", toString + # self.lastModified +, SOURCE_DATE_EPOCH ? "$(git log -1 --pretty=%ct)" +}: + +let + inherit (pkgs) lib; + defaultFlags = [ + "-interaction=nonstopmode" + "-pdf" + "-lualatex" + "-pretex='\\pdfvariable suppressoptionalinfo 512\\relax'" + "-usepretex" + ]; + flags = lib.concatLists [ + (lib.optional (!dontUseDefaultFlags) defaultFlags) + extraFlags + (lib.optional shellEscape [ "-shell-escape" ]) + ]; +in + +assert minted -> shellEscape; + +pkgs.stdenvNoCC.mkDerivation rec { + inherit src name; + + buildInputs = [ texlive pkgs.git ] ++ + lib.optional minted [ pkgs.which pygments ]; + + TEXMFHOME = "./cache"; + TEXMFVAR = "./cache/var"; + + OSFONTDIR = lib.optionalString (fonts != null) "${fonts}/share/fonts"; + + buildPhase = '' + runHook preBuild + + SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH}" latexmk ${toString flags} + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + install -m644 -D *.pdf $out/${name} + + runHook postInstall + ''; +} diff --git a/templates/latex/code/P15601_en_Harrichu_y_and_the_maze.cc b/templates/latex/code/P15601_en_Harrichu_y_and_the_maze.cc new file mode 100644 index 0000000..d1eb718 --- /dev/null +++ b/templates/latex/code/P15601_en_Harrichu_y_and_the_maze.cc @@ -0,0 +1,51 @@ +#include +#include +#include +using namespace std; + +struct coord { + int x,y; + coord (int xx=0, int yy=0) : x(xx), y(yy) {} + bool operator== (const coord& p) {return x==p.x and y==p.y;} +} beg, goal; + +int main () { + int n; + cin >> n; + while (n--) { + int r,c; + cin >> r >> c; + vector > v (r, vector (c, 0)); + for (int i = 0; i < r; ++i) + for (int j = 0; j < c; ++j) { + char cc; + cin >> cc; + if (cc=='.') v[i][j]=true; + else if (cc=='b') beg = coord(i,j); + else if (cc=='g') goal = coord(i,j); + } + + v[goal.x][goal.y] = v[beg.x][beg.y]=true; + vector > f (v.size(),vector (v[0].size(),0)); + + queue q; + q.push(beg); + + while (!q.empty()) { + coord p = q.front(); q.pop(); + if (p.x>=v.size() or p.x<0 or p.y >= v[0].size() or p.y<0) continue; + if (!v[p.x][p.y]) continue; + if (f[p.x][p.y]) continue; + + f[p.x][p.y] = true; + if (p==goal) break; + + q.push(coord(p.x+1,p.y)); + q.push(coord(p.x-1,p.y)); + q.push(coord(p.x,p.y+1)); + q.push(coord(p.x,p.y-1)); + } + + cout << (f[goal.x][goal.y]? "Good" : "Bad") << endl; + } +} diff --git a/templates/latex/figures/Professortocat_v2.png b/templates/latex/figures/Professortocat_v2.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd01c39a8c43a11276d65034a5a24ee89381bdb GIT binary patch literal 30765 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

BH|3hYl86V1|e#QANJn+4T?cw|b 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 z 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 literal 0 HcmV?d00001 diff --git a/templates/latex/flake.nix b/templates/latex/flake.nix new file mode 100644 index 0000000..3de5ae5 --- /dev/null +++ b/templates/latex/flake.nix @@ -0,0 +1,78 @@ +# This template is based on https://github.com/Leixb/latex-template/tree/master +{ + description = "LaTeX Flake"; + + inputs.flake-utils.url = "github:numtide/flake-utils"; + + outputs = { self, nixpkgs, flake-utils }: + { + + lib.latexmk = import ./build-document.nix; + + } // flake-utils.lib.eachDefaultSystem (system: + let + pname = "document"; + + pkgs = import nixpkgs { inherit system; }; + + latex-packages = with pkgs; [ + (texlive.combine { + inherit (texlive) + scheme-medium + framed + titlesec + cleveref + multirow + wrapfig + tabu + threeparttable + threeparttablex + makecell + environ + biblatex + biber + fvextra + upquote + catchfile + xstring + csquotes + minted + dejavu + comment + footmisc + xltabular + ltablex + ; + }) + which + python39Packages.pygments + ]; + + dev-packages = with pkgs; [ + texlab + zathura + wmctrl + ]; + in + rec { + devShell = pkgs.mkShell { + buildInputs = [ latex-packages dev-packages ]; + }; + + formatter = pkgs.nixpgks-fmt; + + packages = flake-utils.lib.flattenTree { + default = import ./build-document.nix { + inherit pkgs; + name = pname; + texlive = latex-packages; + shellEscape = true; + minted = true; + SOURCE_DATE_EPOCH = toString self.lastModified; + }; + }; + + apps.default = flake-utils.lib.mkApp { drv = "${pkgs.texlivePackages.latexmk}"; exePath = "/bin/latexmk"; }; + } + ); +} diff --git a/templates/tex_standard.tex b/templates/tex_standard.tex deleted file mode 100644 index 293e1b3..0000000 --- a/templates/tex_standard.tex +++ /dev/null @@ -1,29 +0,0 @@ -\documentclass[11pt]{article} -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} -\usepackage{graphicx} -\usepackage{longtable} -\usepackage{wrapfig} -\usepackage{rotating} -\usepackage[normalem]{ulem} -\usepackage{amsmath} -\usepackage{amssymb} -\usepackage{capt-of} -\usepackage{hyperref} -\usepackage{verbatim} -\usepackage{listings} -\author{Leon Schwarzäugl} -\date{\today} -\title{--NAME--} -\hypersetup{ - pdfauthor={Leon Schwarzäugl}, - pdftitle={--METADATA-NAME--}, - pdfkeywords={}, - pdfsubject={}, - pdfcreator={Emacs 30.0.50 (Org mode 9.6.12)}, - pdflang={English}} -\begin{document} - - - -\end{document}