Sebastian Walz 9f7b02e1cd
Tohu vaBohu
2023-04-03 14:38:02 +02:00

104 lines
3.8 KiB
Nix

{ bibliography, chemistry, context, core, glossaries,... } @ libs:
let
inherit(core) indentation string list set;
libs'
= libs
// {
context = context ++ [ "tex" ];
journal
= {
formatAuthor
= author:
let
author' = "${author.forename} ${author.surname}";
matched = string.match "[BM][.]?[A-Za-z.]+" author.title;
in
if author.title or null != null
then
if matched != null
then
"${author'} (${author.title})"
else
"${author.title} ${author'}"
else
author';
};
};
appendix = import ./appendix.nix libs';
beginDocument = import ./beginDocument.nix libs';
frontMatter = import ./frontMatter.nix libs';
mainMatter = import ./mainMatter.nix libs';
prelude = import ./prelude.nix libs';
titleMatter = import ./titleMatter.nix libs';
in
{ configuration, content, dependencies, resources, style, ... } @ document:
let
document'
= document
// {
style = (import ./styles libs').${style};
};
toTex = libs.document.toTex { inherit configuration resources; };
#list.map (name: "\\input{${../tex/${name}.tex}}")
packages
= [
"logging"
"dependencies"
"chemistry/chem"
"chemistry/elements"
"bibliography/citation"
"floats/floats"
"fonts"
"geometry"
"glossaries/glossaries"
"links"
"numbers"
"text/text"
"utils"
];
acronyms = glossaries.acronyms.loadAcronyms { inherit configuration resources; };
references = bibliography.loadReferences { inherit configuration resources; };
substances = chemistry.substances.loadSubstances { inherit configuration resources; };
preludeArguments
= {
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;
};
in
document'
// {
content
= indentation { initial = ""; tab = " "; }
(
[]
++ ( prelude document' preludeArguments)
++ [ "\\begin{document}" indentation.more ]
++ ( beginDocument document' [])
++ ( titleMatter document' null)
++ ( frontMatter document' null)
++ ( mainMatter document' (toTex ( content.journal or null )))
++ ( appendix document' (toTex ( content.appendix or null )))
++ [ "\\directlua{commonFinal()}" ] # ToDo: Remove!
++ [ indentation.less "\\end{document}" ]
);
dependencies
= dependencies
++ [
acronyms
references
substances
];
}