From ac0ad2a89580ce40741f4e78215bfe606dc994b9 Mon Sep 17 00:00:00 2001 From: Arindy Date: Wed, 4 May 2022 14:27:36 +0200 Subject: [PATCH] Initial Commit --- .github/workflows/ci.yaml | 15 ++++ .gitignore | 3 + Makefile | 54 ++++++++++++ src/.formats/ebook.tex | 4 + src/.formats/oneside.tex | 4 + src/.formats/structure.tex | 171 +++++++++++++++++++++++++++++++++++++ src/.formats/twosides.tex | 4 + src/book.tex | 17 ++++ src/chapters/one.tex | 13 +++ src/graphics/cover.jpg | Bin 0 -> 17111 bytes src/graphics/cover.jpg~ | Bin 0 -> 15765 bytes 11 files changed, 285 insertions(+) create mode 100644 .github/workflows/ci.yaml create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 src/.formats/ebook.tex create mode 100644 src/.formats/oneside.tex create mode 100644 src/.formats/structure.tex create mode 100644 src/.formats/twosides.tex create mode 100755 src/book.tex create mode 100644 src/chapters/one.tex create mode 100644 src/graphics/cover.jpg create mode 100644 src/graphics/cover.jpg~ diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..6d3f023 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,15 @@ +name: CI +on: [ push, pull_request ] + +jobs: + build: + runs-on: ubuntu-latest + container: + image: git.arindy.de/arindy/latex-runner:1.0.0 + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Build + run: make build diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d80757c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +template.iml +.idea +out/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1977c10 --- /dev/null +++ b/Makefile @@ -0,0 +1,54 @@ +COMPILER := pdflatex + +TEXINPUTS := ./styles/:$(TEXINPUTS) +COMPILER := TEXINPUTS=$(TEXINPUTS) $(COMPILER) + +ifndef VERBOSE + PIPE := 1>/dev/null 2>/dev/null + INDENT := 2>&1 | sed 's/^/ /' + COMPILER := $(COMPILER) -interaction=nonstopmode +endif + +check_error = \ + if [ ! $(1) -eq 0 ]; then \ + cat '../out/$(2).log' | \ + perl -0777 -ne 'print m/\n! .*?\nl\.\d.*?\n.*?(?=\n)/gs' $(INDENT); \ + exit 1; \ + fi + +createout = mkdir -p out && mkdir -p out/chapters + +compile = cd src && ${COMPILER} -shell-escape -file-line-error -synctex=1 \ + -output-format=pdf -output-directory=../out .formats/${1}.tex ${PIPE} || \ + $(call check_error, $$?,$(1)) + +.PHONY: clean book +.PRECIOUS: %.pdf +.SECONDEXPANSION: + +%.pdf: src/.formats/%.tex + @echo "Building $*.pdf" + @$(call createout) + @echo " Compiling $*.tex" + @$(call compile,$*) + + +%.odt: src/%.tex + @echo "Building $*.odt" + @echo " Compiling $*.tex" + @cd src && pandoc -f latex -t odt -o ../out/book.odt book.tex + +%.epub: src/%.tex + @echo "Building $*.epub" + @echo " Compiling $*.tex" + @cd src && pandoc -f latex -o ../out/book.epub book.tex + +%.clean: + @echo "cleaning" + @rm -rfd out/*.4ct out/*.4tc out/*.dvi out/*.idv out/*.tex out/*.tmp out/*.xref out/*.svg out/*.lg out/*.4og out/*.aux out/*.bbl out/*.blg out/*.log out/*.out out/*.synctex.gz out/**/*.png \ +out/*.nav out/*.run.xml out/*.snm out/*.toc out/*.vrb out/*-blx.bib out/**/ + +clean: + @rm -rf out + +book: oneside.pdf twosides.pdf ebook.pdf $$@.odt $$@.epub $$@.clean diff --git a/src/.formats/ebook.tex b/src/.formats/ebook.tex new file mode 100644 index 0000000..e7e327e --- /dev/null +++ b/src/.formats/ebook.tex @@ -0,0 +1,4 @@ +\documentclass[ebook,oneside]{memoir} +\usepackage[german]{babel} +\input{.formats/structure} +\input{book} diff --git a/src/.formats/oneside.tex b/src/.formats/oneside.tex new file mode 100644 index 0000000..6d2928d --- /dev/null +++ b/src/.formats/oneside.tex @@ -0,0 +1,4 @@ +\documentclass[oneside]{memoir} +\usepackage[german]{babel} +\input{.formats/structure} +\input{book} diff --git a/src/.formats/structure.tex b/src/.formats/structure.tex new file mode 100644 index 0000000..9712836 --- /dev/null +++ b/src/.formats/structure.tex @@ -0,0 +1,171 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% eBook +% Structural Definitions File +% Version 1.0 (29/12/14) +% +% Created by: +% Vel (vel@latextemplates.com) +% +% Modified by: +% Arindy +% +% This file has been downloaded from: +% http://www.LaTeXTemplates.com +% +% License: +% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%---------------------------------------------------------------------------------------- +% REQUIRED PACKAGES +%---------------------------------------------------------------------------------------- + +\usepackage[utf8]{inputenc} % Required for inputting international characters +\usepackage[T1]{fontenc} % Output font encoding for international characters + +\usepackage[osf]{libertine} % Use the Libertine font +\usepackage{microtype} % Improves character and word spacing +\usepackage{color} +\usepackage{tikz} % Required for drawing custom shapes +\usepackage{wallpaper} % Required for setting background images (title page) + +\usepackage[unicode=true,bookmarks=true,bookmarksnumbered=false,bookmarksopen=false,breaklinks=false,pdfborder={0 0 1},backref=section,colorlinks=false]{hyperref} % PDF meta-information specification + +%---------------------------------------------------------------------------------------- +% PAPER, MARGIN AND HEADER/FOOTER SIZES +%---------------------------------------------------------------------------------------- + +\setlrmarginsandblock{50pt}{50pt}{*} % Left/right margins +\setulmarginsandblock{50pt}{50pt}{*} % Top/bottom margins +\setheadfoot{14pt}{12pt} % Header/footer height + +%---------------------------------------------------------------------------------------- +% HEADER AND FOOTER FORMATS +%---------------------------------------------------------------------------------------- +\newcommand{\currentchapter}{}\let\oldchapter\chapter\RenewDocumentCommand{\chapter}{sm}{ \IfBooleanTF{#1}{\oldchapter*{#2}}{\oldchapter{#2} }\renewcommand{\currentchapter}{#2}} +\makepagestyle{mio} % Define a new custom page style +\makeheadrule{mio}{\textwidth}{0.1mm} % Header rule height +\makeevenhead{mio}{\scriptsize{\theauthor\hskip.2cm\textemdash\hskip.2cm\itshape{\thetitle}}}{}{} % Header specification +\makeoddhead{mio}{\hfill\scriptsize{\itshape{\currentchapter}}}{}{} % Header specification +\makeoddfoot{mio}{}{\footnotesize {\thepage}}{} % Footer specification +\makeevenfoot{mio}{}{\footnotesize {\thepage}}{} % Footer specification +\makeoddfoot{plain}{}{\footnotesize {\thepage}}{} % Pages of chapters +\makeevenfoot{plain}{}{\footnotesize {\thepage}}{} % Pages of chapters +\pagestyle{mio} % Set the page style to the custom style defined above + +%---------------------------------------------------------------------------------------- +% PART FORMAT +%---------------------------------------------------------------------------------------- + +\renewcommand{\partnamefont}{\centering\sffamily\itshape\Huge} % Part name font specification +\renewcommand{\partnumfont}{\sffamily\Huge} % Part number font specification +\renewcommand{\parttitlefont}{\centering\sffamily\scshape} % Part title font specification +\renewcommand{\beforepartskip}{\null\vskip.618\textheight} % Whitespace above the part heading + +%---------------------------------------------------------------------------------------- +% CHAPTER FORMAT +%---------------------------------------------------------------------------------------- + +\makechapterstyle{Tufte}{ % Define a new chapter style + \renewcommand{\chapterheadstart}{\null \vskip3.5\onelineskip} % Whitespace before the chapter starts + \renewcommand{\printchaptername}{\large\itshape\chaptername} % "Chapter" text font specification + \renewcommand{\printchapternum}{\LARGE\thechapter \\} % Chapter number font specification + \renewcommand{\afterchapternum}{} % Space between the chapter number and text + \renewcommand{\printchaptertitle}[1]{ % Chapter title font specification + \raggedright + \itshape\Huge{##1}} + \renewcommand{\afterchaptertitle}{ + \vskip3.5\onelineskip + }} +\chapterstyle{Tufte} % Set the chapter style to the custom style defined above + +%---------------------------------------------------------------------------------------- +% SECTION FORMAT +%---------------------------------------------------------------------------------------- + +\setsecheadstyle{\sethangfrom{\noindent ##1}\raggedright\sffamily\itshape\Large} % Section title font specification +\setbeforesecskip{-.6\onelineskip} % Whitespace before the section +\setaftersecskip{.3\onelineskip} % Whitespace after the section + +%---------------------------------------------------------------------------------------- +% SUBSECTION FORMAT +%---------------------------------------------------------------------------------------- + +\setsubsecheadstyle{\sethangfrom{\noindent ##1}\raggedright\sffamily\large\itshape} % Subsection title font specification +\setbeforesubsecskip{-.5\onelineskip} % Whitespace before the subsection +\setaftersubsecskip{.2\onelineskip} % Whitespace after the subsection + +%---------------------------------------------------------------------------------------- +% SUBSUBSECTION FORMAT +%---------------------------------------------------------------------------------------- + +\setsubsubsecheadstyle{\sethangfrom{\noindent ##1}\raggedright\sffamily\itshape} % Subsubsection title font specification +\setbeforesubsubsecskip{-.5\onelineskip} % Whitespace before the subsubsection +\setaftersubsubsecskip{.1\onelineskip} % Whitespace after the subsubsection + +%---------------------------------------------------------------------------------------- +% CAPTION FORMAT +%---------------------------------------------------------------------------------------- + +\captiontitlefont{\itshape\footnotesize} % Caption font specification +\captionnamefont{\footnotesize} % "Caption" text font specification + +%---------------------------------------------------------------------------------------- +% QUOTATION ENVIRONMENT FORMAT +%---------------------------------------------------------------------------------------- + +\renewenvironment{quotation} +{\par\leftskip=1em\vskip.5\onelineskip\em} +{\par\vskip.5\onelineskip} + +%---------------------------------------------------------------------------------------- +% QUOTE ENVIRONMENT FORMAT +%---------------------------------------------------------------------------------------- + +\renewenvironment{quote} +{\list{}{\em\leftmargin=1em}\item[]}{\endlist\relax} + +%---------------------------------------------------------------------------------------- +% MISCELLANEOUS DOCUMENT SPECIFICATIONS +%---------------------------------------------------------------------------------------- + +\setlength{\parindent}{1em} % Paragraph indentation + +\midsloppy % Fewer overfull lines - used in the memoir class and allows a setting somewhere between \fussy and \sloppy + +\checkandfixthelayout % Tell memoir to implement the above + +\newcommand{\subtitle}[1]{ + \newcommand{\thesubtitle}{#1} +} + +\newcommand{\removetitlebox}{ + \newcommand{\rtb}{} +} + +\newcommand{\coverpage}[2][violet]{ + \thispagestyle{empty} + \ifthenelse{\equal{#2}{}}{}{\ThisTileWallPaper{1\paperwidth}{1\paperheight}{#2}} + + \ifthenelse{\isundefined{\rtb}}{ + \begin{tikzpicture}[remember picture,overlay] + \node [rectangle, rounded corners, fill=white, opacity=0.75, anchor=south west, minimum width=13cm, minimum height=4.2cm] (box) at (-1.5,-6) (box){}; % White rectangle - "minimum width/height" adjust the width and height of the box; "(-0.5,-10)" adjusts the position on the page + \ifthenelse{\isundefined{\thesubtitle}}{}{ + \node[anchor=west, #1, xshift=-6.2cm, yshift=-3.9cm, text width=12.9cm, font=\sffamily] at (box.north){ + \thesubtitle + }; + } + + \node[anchor=west, #1, xshift=-6.2cm, yshift=-2.2cm, text width=12.9cm, font=\sffamily\bfseries\scshape\HUGE] at (box.north){\thetitle}; % "Text width" adjusts the wrapping width, "xshift/yshift" adjust the position relative to the white rectangle + \ifthenelse{\isundefined{\theauthor}}{}{ + \node[anchor=west, #1, xshift=-6.2cm, yshift=-0.6cm, text width=12.9cm, font=\sffamily\bfseries\large] at (box.north){\theauthor}; % "Text width" adjusts the wrapping width, "xshift/yshift" adjust the position relative to the white rectangle + } + \end{tikzpicture} + }{ + \begin{tikzpicture}[remember picture,overlay] + \end{tikzpicture} + } + + \newpage % Make sure the following content is on a new page +} diff --git a/src/.formats/twosides.tex b/src/.formats/twosides.tex new file mode 100644 index 0000000..14c9b03 --- /dev/null +++ b/src/.formats/twosides.tex @@ -0,0 +1,4 @@ +\documentclass[]{memoir} +\usepackage[german]{babel} +\input{.formats/structure} +\input{book} diff --git a/src/book.tex b/src/book.tex new file mode 100755 index 0000000..bb5d544 --- /dev/null +++ b/src/book.tex @@ -0,0 +1,17 @@ +\usepackage[ left = \glqq{}, right = \grqq{}, leftsub = \glq{}, rightsub = \grq{} ]{dirtytalk} + +\author{Arindy} +\title{Template Book} +\subtitle{--- Work in Progress ---} + +%\removetitlebox + +%------------------------------------------- + +\begin{document} + + \coverpage[black]{graphics/cover.jpg} + + \include{chapters/one} + +\end{document} diff --git a/src/chapters/one.tex b/src/chapters/one.tex new file mode 100644 index 0000000..46eec5b --- /dev/null +++ b/src/chapters/one.tex @@ -0,0 +1,13 @@ +\chapter{one}\label{ch:one} +Zombie ipsum brains reversus ab cerebellum viral inferno, brein nam rick mend grimes malum cerveau cerebro. +De carne cerebro lumbering animata cervello corpora quaeritis. +Summus thalamus brains sit, morbo basal ganglia vel maleficia? +De braaaiiiins apocalypsi gorger omero prefrontal cortex undead survivor fornix dictum mauris. +Hi brains mindless mortuis limbic cortex soulless creaturas optic nerve, imo evil braaiinns stalking monstra hypothalamus adventus resi hippocampus dentevil vultus brain comedat cerebella pitiutary gland viventium. +Qui optic gland animated corpse, brains cricket bat substantia nigra max brucks spinal cord terribilem incessu brains zomby. +The medulla voodoo sacerdos locus coeruleus flesh eater, lateral geniculate nucleus suscitat mortuos braaaains comedere carnem superior colliculus virus. +Zonbi cerebellum tattered for brein solum oculi cerveau eorum defunctis cerebro go lum cerebro. +Nescio brains an Undead cervello zombies. +Sicut thalamus malus putrid brains voodoo horror. +Nigh basal ganglia tofth eliv ingdead. + diff --git a/src/graphics/cover.jpg b/src/graphics/cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ec73ab9787b8fd7a72fd84a821d225ba4a74da6 GIT binary patch literal 17111 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 literal 0 HcmV?d00001 diff --git a/src/graphics/cover.jpg~ b/src/graphics/cover.jpg~ new file mode 100644 index 0000000000000000000000000000000000000000..ce53b498a1610e96002a0fb1fd3baf25581623d5 GIT binary patch literal 15765 zcmeHNYj7J^6~3#tEGdy}IdzTOtk+KC6tA?qTI)4Yjh~4+F?DUXO@SF$?XKia^vY^& zDH#~r(h}fTOACGQgCvC(7=BPnTOL11OL&ACW?Bku5*UUQD34)=rlkeS6mjlqCA+QT z(*EiU_u4!A>E3hBJ?Fc3y;tA3d8YYW6uf#iJBui2qtqxu&GW8vGYu_|P&Rud@*srV zsGG7Q3J|{fDW`eQ0e+8#4*(vqY;1se%7y}P*WnTXhv9w`T-s5G>3bL82jCiofH-FR zz9&03PYV&Ai^Mqa90^e^d>TUw<0)*A zogMo60NbrhUGUkp4)U<8rxOPLJE| z_If>C{&2wW^Z76B?%5i?tbhCEm-P<}(8H0PG&4FhFffwXHOld#C~n`G$|Qx|k(emp zAe7hZ_51vNfk2-yI4~%@?bbYrLLSKIw4Gv*EkxNvRPz+t4tYB9N>eb@YLw0HaJt+c zZ^6tp>2x^2`eQJT93f}-AV1;ixmI#Bhr+_mcO3T&O+NH^@4{0r499Z% zE#9tem-JoQzvGIXBfG8?$Kr`(Dm^tlGrMPR_Ugr@>#o0H|BWAz6*XU2)(+H+mDPIV z@R3j4dfO+De(KYo`Rtu{eeUyj-*fMMC+`2!mmhfWD_{NEHy{4iBac4z?eBc|i65N$ z;g5d&lhZ%_`P0AnbHDrjAD;i?pZ@%p3opL(_m^M!$3Oq|Dz1xyMQyhY z>k2_#HiyIRaO1itTOBTY$l)C1UELGcx}`%sjBv9jJbB0QhaUG1#TH)Z&FN2dZ5tNP z@3??VGb{Vw3cKYURn{qNt*&#(Z>M1K>>)IcE~H0J+|)%b!U5R>?`RKE!QHFQpu?ixl)QYq-vCpa8a~-yit|pgQ`L2)Ph#dFn{~r_ZeDKGRzHQbKG2Y zN?q3W9?{jsBky05j~tX!3NwBcy}OZal&U4wkmyFKSgxfT8O98r28_F-3~ibi2Q$om zc*RXsbd?q(VuWMiRl6!M5JOk;>4oW8D*}AVFjlJddOcE)MJjqB%BNDPC?`Y(fdvb; zcDQUv4YphxYDbt>YqG9Y4Xsk9aYQLsSurvU%->3^RGpja1m2K?QVC~kTGx!3RdC*n zvD(t%sv2ETYn2sUR%ce#vN6E5IG24U@-HLxt(-ioAj+$xde&94W0-WKBt%FqPwFh2!EZA5&#kOvY3;l}d0d zFDH}noXT?omuSbymTQJomQ@@FB1bd`l2T+*7RD4dsc?B#OmI0inTyG6d`yTbVp54o z$$Z=Y8eM~JBo)`^gX1U=M@@)4FO2c5Bqvl>R8nzP;-wUuh$m9gn7~O=GRDw~oSv=d zB?;C+D@g@4dZ4Nn7#j1Ho|w;O7$L%0ALombkq6rhvrj9pG_2kwt)wm*5@wE%kMZ$% zoKHZ7kT+CmhPhtVYp`E%DD&iHCZC?tRmrI6OO;A7!*mX2c%QW>-mBGM_^`Ee7u7=+ zDr&U3Z_<*CcVUL9Nvo>DSe^2+R4%CSJi(f_%(M+CR+U&vigPlX5>pCLoXoRQOchx% z7Zc=|kP-zRC~o=JDtV(W>FPuQ)*CW~)i#fi^oYsAuC`r$S;Zy7nUdwkSWaBB&XmG? zIXGo%1YAXvMi?Lr5C#YXgaN|9{~rTuUn0~p zoOJ5&6`}c@?Hk#tsSnRDTr->9Hv`fX$V$hGa;fG3p{rCj^o2c>G^ixB`+4L9Ji}Ft*iS@dHyFd?=>BIBS^}>2{S2Xd??dQ{0>u8%Me4>nZilx` zZ7lvwDbsGV;a_MD_;q@)DCq2RyImfCm*4N}^7#T=x`Tl&p)EdNa9c3c6YlNp^>4kT zZ(F#pJKP&KrA#~cIGkRm(;E)>0^zsanood~X@AvD+bK}-+EQk(`3zwmI?V%0U>HAH zuWwCDM+@46uzA05^7W(S6JdZbKo}ql5C#YXgaN_;VSq3|7$6J~1_%R$0m1-b;9bSQ z$Fa&4e510AYYIKo}ql5C#YXgaN_;VSq3|7$6J~1_%T1UIyMmRSUkQs%BYiqM2cf Gv;PI?<0Q%e literal 0 HcmV?d00001