155 lines
6.0 KiB
Nix
155 lines
6.0 KiB
Nix
{ bibliography, chemistry, core, document, glossaries,... } @ libs:
|
|
let
|
|
inherit(core) debug indentation library list path string;
|
|
|
|
libs'
|
|
= libs
|
|
// {
|
|
formatAuthor
|
|
= author:
|
|
"${author.forename} ${author.surname}";
|
|
};
|
|
|
|
renderExtra = library.import ./extra.nix libs';
|
|
renderPrelude = library.import ./prelude.nix libs';
|
|
renderSlides = library.import ./slides.nix libs';
|
|
renderTitle = library.import ./title.nix libs';
|
|
in
|
|
{ authors, configuration, content, date, dependencies, name, place, resources, disputation, ... } @ document:
|
|
let
|
|
style = (library.import ./styles libs').${disputation.style};
|
|
document' = document // { inherit style; };
|
|
toTex = libs.document.toTex { inherit configuration resources; };
|
|
|
|
packages
|
|
= [
|
|
"logging"
|
|
"dependencies"
|
|
"chemistry/chem"
|
|
"chemistry/elements"
|
|
"bibliography/citation"
|
|
"floats/floats"
|
|
"geometry"
|
|
"glossaries/glossaries"
|
|
"links"
|
|
"text/text"
|
|
"utils"
|
|
];
|
|
|
|
acronyms = glossaries.acronyms.toLua { inherit configuration resources; };
|
|
references = bibliography.toBibTeX { inherit configuration resources; } resources.references;
|
|
substances = chemistry.substances.toLua { inherit configuration resources; } resources.substances;
|
|
|
|
prelude
|
|
= {
|
|
acronyms = acronyms.dst;
|
|
assets = "assets/";
|
|
packages = list.map (name: "\\input{\\source/source/${name}.tex}") packages;
|
|
references = references.dst;
|
|
source
|
|
= {
|
|
lua = "source/lua/";
|
|
tex = "source/";
|
|
};
|
|
substances = substances.dst;
|
|
};
|
|
|
|
content'
|
|
= indentation { initial = ""; tab = " "; }
|
|
(
|
|
[]
|
|
++ ( renderPrelude document' prelude )
|
|
++ [ "\\begin{document}" indentation.more ]
|
|
++ ( renderTitle document' )
|
|
++ ( renderSlides document' ( toTex content.slides or null ) )
|
|
++ ( renderExtra document' ( toTex content.extra or null ) )
|
|
++ [ "\\directlua{commonFinal()}" ] # ToDo: Remove!
|
|
++ [ indentation.less "\\end{document}" ]
|
|
);
|
|
|
|
optimiser
|
|
= if configuration.optimise or false
|
|
then
|
|
''
|
|
# Optimise and linearise
|
|
# This removes tooltips, sorry
|
|
mv "${name}.pdf" "${name}-raw.pdf"
|
|
gs \
|
|
-dBATCH \
|
|
-dColorImageResolution=288 \
|
|
-dCompatibilityLevel=1.7 \
|
|
-dDEBUG \
|
|
-dDetectDuplicateImages \
|
|
-dDownsampleColorImages=true \
|
|
-dDownsampleGrayImages=true \
|
|
-dDownsampleMonoImages=true \
|
|
-dFastWebView \
|
|
-dGrayImageResolution=288 \
|
|
-dMonoImageResolution=288 \
|
|
-dNOPAUSE \
|
|
-dPDFSETTINGS=/ebook \
|
|
-dPrinted=false \
|
|
-sDEVICE=pdfwrite \
|
|
-sOutputFile="${name}.pdf" \
|
|
"${name}-raw.pdf" \
|
|
> "${name}.gslog" 2>&1
|
|
''
|
|
else
|
|
"";
|
|
|
|
compile
|
|
= path.toFile "compile-${name}.sh"
|
|
''
|
|
#!/usr/bin/env bash
|
|
newHash="false"
|
|
oldHash="true"
|
|
out="$1"
|
|
|
|
counter=""
|
|
while [[ "$newHash" != "$oldHash" && "$counter" != "${configuration.foo or "+++++"}" ]]
|
|
do
|
|
if lualatex \
|
|
--interaction=nonstopmode \
|
|
--halt-on-error \
|
|
--output-format=pdf \
|
|
"\def\source{$out}\def\build{.}\input{$out/${name}.tex}" #2> /dev/null > /dev/null
|
|
then
|
|
oldHash="$newHash"
|
|
newHash="$(md5sum "${name}.pdf")"
|
|
echo "$newHash"
|
|
mv "${name}.log" "$out/${name}.log"
|
|
mv "${name}.llg" "$out/${name}.llg"
|
|
biber "${name}"
|
|
counter="+$counter"
|
|
else
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
${optimiser}
|
|
# move the generated and processed document to the final-directory
|
|
mv "${name}.pdf" "$out/${name}.pdf"
|
|
exit 0
|
|
'';
|
|
texFile = path.toFile "${name}.tex" content';
|
|
in
|
|
document'
|
|
// {
|
|
content = content';
|
|
dependencies
|
|
= dependencies
|
|
++ [
|
|
acronyms
|
|
references
|
|
substances
|
|
{
|
|
src = texFile;
|
|
dst = "${name}.tex";
|
|
}
|
|
{
|
|
src = { store = compile; executable = true; };
|
|
dst = "compile-${name}.sh";
|
|
}
|
|
];
|
|
}
|