From 8f4a817d38db95fbfb01692a89b6f51d555851fe Mon Sep 17 00:00:00 2001
From: Tue Herlau <tuhe@dtu.dk>
Date: Wed, 15 Mar 2023 19:17:37 +0100
Subject: [PATCH] tmp updates

---
 .gitlab-ci.yml                                |   2 +-
 build/lib/jinjafy/__init__.py                 |  43 --
 build/lib/jinjafy/cache/__init__.py           |   8 -
 build/lib/jinjafy/cache/simplecache.py        |  94 ----
 build/lib/jinjafy/jinja_env.py                | 136 -----
 build/lib/jinjafy/jinja_matlab_load.py        | 149 ------
 build/lib/jinjafy/jinjafy.py                  | 214 --------
 build/lib/jinjafy/plot/__init__.py            |   1 -
 build/lib/jinjafy/plot/plot_helpers.py        |  48 --
 build/lib/jinjafy/snipper.py                  |  89 ----
 build/lib/jinjafy/textools.py                 | 187 -------
 .../02450_beamer_preamble.tex                 |  93 ----
 .../DTU_Beamer_files/02450_lectures_base.tex  |  25 -
 .../beamer_slider_preamble.tex                |  93 ----
 .../DTU_Beamer_files/beamercolorthemeDTU.sty  |  29 --
 .../DTU_Beamer_files/beamerfontthemeDTU.sty   |  38 --
 .../DTU_Beamer_files/beamerinnerthemeDTU.sty  |  52 --
 .../DTU_Beamer_files/beamerouterthemeDTU.sty  |  98 ----
 .../DTU_Beamer_files/beamerthemeDTU.sty       | 255 ---------
 build/lib/slider/DTU_Beamer_files/blank.png   | Bin 3161 -> 0 bytes
 .../slider/DTU_Beamer_files/departments.tex   | 130 -----
 .../DTU_Beamer_files/dtu_slideshow_base.tex   |  25 -
 .../slider/DTU_Beamer_files/dtucolours.tex    |  83 ---
 .../DTU_Beamer_files/tex_compute_uk.pdf       | Bin 3167 -> 0 bytes
 .../DTU_Beamer_files/tex_dtu_compute_a_uk.pdf | Bin 13504 -> 0 bytes
 .../slider/DTU_Beamer_files/tex_dtu_frise.pdf | Bin 32488 -> 0 bytes
 .../slider/DTU_Beamer_files/tex_dtu_logo.pdf  | Bin 1830 -> 0 bytes
 .../DTU_Beamer_files/textext_preamble.tex     |   9 -
 build/lib/slider/__init__.py                  |   0
 build/lib/slider/__main__.py                  |   6 -
 build/lib/slider/beamer_nup.py                |  79 ---
 build/lib/slider/convert.py                   | 126 -----
 build/lib/slider/latexutils.py                |  36 --
 build/lib/slider/legacy_importer.py           | 487 ------------------
 build/lib/slider/slide.py                     | 282 ----------
 build/lib/slider/slide_fixer.py               | 140 -----
 build/lib/slider/slider_cli.py                |  94 ----
 build/lib/slider/slider_init.py               |  66 ---
 src/beamer_slider.egg-info/PKG-INFO           |   2 +-
 src/beamer_slider.egg-info/SOURCES.txt        |   3 +-
 src/slider/convert.py                         |   2 +-
 src/slider/legacy_importer.py                 |   3 +-
 src/slider/version.py                         |   2 +-
 43 files changed, 8 insertions(+), 3221 deletions(-)
 delete mode 100644 build/lib/jinjafy/__init__.py
 delete mode 100644 build/lib/jinjafy/cache/__init__.py
 delete mode 100644 build/lib/jinjafy/cache/simplecache.py
 delete mode 100644 build/lib/jinjafy/jinja_env.py
 delete mode 100644 build/lib/jinjafy/jinja_matlab_load.py
 delete mode 100644 build/lib/jinjafy/jinjafy.py
 delete mode 100644 build/lib/jinjafy/plot/__init__.py
 delete mode 100644 build/lib/jinjafy/plot/plot_helpers.py
 delete mode 100644 build/lib/jinjafy/snipper.py
 delete mode 100644 build/lib/jinjafy/textools.py
 delete mode 100644 build/lib/slider/DTU_Beamer_files/02450_beamer_preamble.tex
 delete mode 100644 build/lib/slider/DTU_Beamer_files/02450_lectures_base.tex
 delete mode 100644 build/lib/slider/DTU_Beamer_files/beamer_slider_preamble.tex
 delete mode 100644 build/lib/slider/DTU_Beamer_files/beamercolorthemeDTU.sty
 delete mode 100644 build/lib/slider/DTU_Beamer_files/beamerfontthemeDTU.sty
 delete mode 100644 build/lib/slider/DTU_Beamer_files/beamerinnerthemeDTU.sty
 delete mode 100644 build/lib/slider/DTU_Beamer_files/beamerouterthemeDTU.sty
 delete mode 100644 build/lib/slider/DTU_Beamer_files/beamerthemeDTU.sty
 delete mode 100644 build/lib/slider/DTU_Beamer_files/blank.png
 delete mode 100644 build/lib/slider/DTU_Beamer_files/departments.tex
 delete mode 100644 build/lib/slider/DTU_Beamer_files/dtu_slideshow_base.tex
 delete mode 100644 build/lib/slider/DTU_Beamer_files/dtucolours.tex
 delete mode 100644 build/lib/slider/DTU_Beamer_files/tex_compute_uk.pdf
 delete mode 100644 build/lib/slider/DTU_Beamer_files/tex_dtu_compute_a_uk.pdf
 delete mode 100644 build/lib/slider/DTU_Beamer_files/tex_dtu_frise.pdf
 delete mode 100644 build/lib/slider/DTU_Beamer_files/tex_dtu_logo.pdf
 delete mode 100644 build/lib/slider/DTU_Beamer_files/textext_preamble.tex
 delete mode 100644 build/lib/slider/__init__.py
 delete mode 100644 build/lib/slider/__main__.py
 delete mode 100644 build/lib/slider/beamer_nup.py
 delete mode 100644 build/lib/slider/convert.py
 delete mode 100644 build/lib/slider/latexutils.py
 delete mode 100644 build/lib/slider/legacy_importer.py
 delete mode 100644 build/lib/slider/slide.py
 delete mode 100644 build/lib/slider/slide_fixer.py
 delete mode 100644 build/lib/slider/slider_cli.py
 delete mode 100644 build/lib/slider/slider_init.py

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 04ac682..500ff56 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -19,7 +19,7 @@ stages:
     - apt install -y xvfb # Virtual framebuffer for GL stuff.
     - apt install -y inkscape pdftk
     - apt install -y latexmk  poppler-utils # latexmk and pdftocairo
-    - DEBIAN_FRONTEND='noninteractive' apt install -y texlive-latex-recommended texlive-latex-extra texlive-science pdf2svg
+    - DEBIAN_FRONTEND='noninteractive' apt install -y texlive-latex-recommended texlive-latex-extra texlive-science pdf2svg texlive-fonts-extra texlive-fonts-recommended
     - pip install -U Pillow
     - pip install -e ./
     - cd tests
diff --git a/build/lib/jinjafy/__init__.py b/build/lib/jinjafy/__init__.py
deleted file mode 100644
index 0bebe70..0000000
--- a/build/lib/jinjafy/__init__.py
+++ /dev/null
@@ -1,43 +0,0 @@
-from jinjafy.jinjafy import jinjafy_comment
-from jinjafy.jinjafy import jinjafy_template
-from jinjafy.jinja_matlab_load import matlab_load
-# from slider import latexmk
-from jinjafy.textools import mat2table
-import subprocess
-# import os
-import platform
-# from subprocess import subprocess
-
-
-def execute_command(command, shell=True):
-    if not isinstance(command, list):
-        command = [command]
-    if not platform.uname()[0] == "Linux":
-        result = subprocess.run(command, stdout=subprocess.PIPE, shell=shell)
-        out = result.stdout
-    else:
-        out = subprocess.check_output(command, shell=shell)
-    s = out.decode("utf-8")
-    OK = True
-    return s, OK
-
-
-# def get_system_name():
-#     if is_win():
-#         return "Win"
-#     if is_compute():
-#         return "thinlinc.compute.dtu.dk"
-#     if is_cogsys_cluster():
-#         return "cogys cluster"
-
-# def execute_command(command, shell=True):
-#     if not isinstance(command, list):
-#         command = [command]
-#     # if not is_compute():
-#     # result = subprocess.run(command, stdout=subprocess.PIPE, shell=shell)
-#     # out = result.stdout
-#     # else:
-#     out = subprocess.check_output(command, shell=shell)
-#     s = out.decode("utf-8")
-#     OK = True
-#     return s, OK
\ No newline at end of file
diff --git a/build/lib/jinjafy/cache/__init__.py b/build/lib/jinjafy/cache/__init__.py
deleted file mode 100644
index a46ef35..0000000
--- a/build/lib/jinjafy/cache/__init__.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from jinjafy.cache.simplecache import cache_update_str as cache_update_str
-from jinjafy.cache.simplecache import cache_contains_str as cache_contains_str
-
-from jinjafy.cache.simplecache import cache_update_file as cache_update_file
-from jinjafy.cache.simplecache import cache_contains_file as cache_contains_file
-
-from jinjafy.cache.simplecache import cache_update_dir as cache_update_dir
-from jinjafy.cache.simplecache import cache_contains_dir as cache_contains_dir
\ No newline at end of file
diff --git a/build/lib/jinjafy/cache/simplecache.py b/build/lib/jinjafy/cache/simplecache.py
deleted file mode 100644
index e24ab19..0000000
--- a/build/lib/jinjafy/cache/simplecache.py
+++ /dev/null
@@ -1,94 +0,0 @@
-from hashlib import md5
-import os
-import pickle
-import glob
-
-def dir_content_cache_(dir, pattern="*"):
-    fl = glob.glob(dir + "/" + pattern)
-    s = ''.join(fl)
-    key = "key_"+dir
-    return fl, s,key
-
-def cache_contains_dir(cache_base, dir, pattern="*"):
-    # fl = glob.glob(dir)
-    fl,s,key =  dir_content_cache_(dir, pattern=pattern)
-
-    v = [cache_contains_file(cache_base, f) for f in fl]
-    if all(v) and cache_contains_str(cache_base, key, s):
-        return True
-    return False
-
-def cache_update_dir(cache_base, dir, pattern="*"):
-    fl, s, key = dir_content_cache_(dir, pattern=pattern)
-    cache_update_str(cache_base, key, s)
-    for f in fl:
-        cache_update_file(cache_base, f)
-
-
-def cache_contains_str(cache_base,key=None,value=None):
-    assert(key or value)
-    value = hash_binary_(value.encode())
-    if not key: key = value
-    return cache_contains_hash(cache_base, key, value)
-
-def cache_update_str(cache_base,key,value):
-    assert(key or value)
-    value = hash_binary_(value.encode())
-    if not key: key = value
-    return cache_update_hash(cache_base, key, value)
-
-
-def cache_contains_file(cache_base,file):
-    key = os.path.abspath(file)
-    if not os.path.exists(file):
-        return False
-    value = hash_file_(file)
-    return cache_contains_hash(cache_base, key, value)
-
-def hash_file_(file):
-    import hashlib
-    hasher = hashlib.md5()
-    with open(file, 'rb') as afile:
-        buf = afile.read()
-        hasher.update(buf)
-    return hasher.hexdigest()
-
-def cache_update_file(cache_base, file):
-    key = os.path.abspath(file)
-    value = hash_file_(file)
-    return cache_update_hash(cache_base, key, value)
-
-
-def cache_contains_hash(cache_base,key,hash_val):
-    cc = load_cache(cache_base)
-    return cc.get(key,"Not found") == hash_val
-
-def cache_update_hash(cache_base,key,hash_val):
-    cc = load_cache(cache_base)
-    cc[key] = hash_val
-    save_cache(cache_base, cc)
-
-
-def hash_binary_(str_bin):
-    return md5(str_bin).hexdigest()
-
-
-def cache_file(cache_base):
-    return os.path.join(cache_base, "cache.pkl")
-
-def save_cache(cache_base, cache):
-    with open(cache_file(cache_base), 'wb') as f:
-        pickle.dump(cache,f)
-
-def load_cache(cache_base):
-    if not os.path.exists(cache_file(cache_base)):
-        save_cache(cache_base, {'default' : 42})
-        return load_cache(cache_base)
-    with open(cache_file(cache_base), 'rb') as f:
-        return pickle.load(f)
-
-
-if __name__ == "__main__":
-    cache_base = "./"
-
-    print("Hello World")
diff --git a/build/lib/jinjafy/jinja_env.py b/build/lib/jinjafy/jinja_env.py
deleted file mode 100644
index 102ef96..0000000
--- a/build/lib/jinjafy/jinja_env.py
+++ /dev/null
@@ -1,136 +0,0 @@
-import numpy as np
-from fractions import Fraction
-import jinja2
-
-
-def format_list_symbols(list, pattern, symbol="x", seperator=",\ "):
-    return format_join(list, pattern=symbol+"_{%i}", seperator=seperator)
-
-
-def n2w(i):
-    w = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight',
-         9: 'nine', 10: 'ten'}
-    return i if i < 0 or i > 10 else w[i]
-
-
-def format_list(list_, pattern):
-    list_ = tolist(list_)
-    return [pattern % s for s in list_]
-
-
-def format_join(list, pattern, seperator=",\ ",withand=False,withor=False,lastsep=None):
-    ls = format_list(list, pattern)
-    if withand:
-        return seperator.join(ls[:-1]) + "$, and $" + ls[-1]
-    if withor:
-        return seperator.join(ls[:-1]) + "$, or $" + ls[-1]
-    return seperator.join(ls)
-
-
-def format_join_enum(list, pattern="x_{%i}=%g", seperator=",\ "):
-    list = tolist(list)
-    return seperator.join(format_list( zip( range(1,len(list)+1 ), list), pattern))
-
-
-def as_set(l, symbol='f_{%i}'):
-    if type(l) != list and type(l) != np.ndarray:
-        l = [l]
-    l = tolist(l)
-    s = [symbol%(i,) for i in l]
-    s = '\{' + ", ".join(s) + "\}"
-    return s
-
-
-def as_set_list(ll, symbol='%g'):
-    s = []
-    for l in ll.flat:
-        l = tolist(l)
-        s.append(as_set(l, symbol))
-    s = ["$"+ds+"$" for ds in s]
-    s = ", ".join(s)
-    return s
-
-
-def infty(n,tol=10^8):
-    if n > tol:
-        s = '\infty'
-    else:
-        s = str(n)
-    return s
-
-
-def flatten(ar):
-    v = []
-    if type(ar) is np.ndarray or type(ar) is np.array:
-        for x in ar.flat:
-            m = flatten(x)
-            if type(m) == list:
-                v = v + m
-            else:
-                v.append(m)
-    else:
-        v = ar
-    return v
-
-
-def tolist(l):
-    if type(l) == np.ndarray:
-        l2 = []
-        for x in l.flat:
-            l2.append(  x.tolist() if isinstance(x,np.ndarray) else x  )
-        l = l2
-
-    elif type(l) == list or hasattr(l, '__iter__'):
-        pass
-    else:
-        l = [l]
-    return l
-
-
-def jget(A,n=0):
-    A = flatten(A)
-    return A[n]
-
-
-def as_rational(x, output='tex', always_frac=False):
-    if type(x) == jinja2.runtime.Undefined:
-        return "UNDEFINED(jinja2)"
-    b = Fraction.from_float(x).limit_denominator(10000)
-    s = "output_error_in_as_rational_filter"
-    if output == 'tex':
-        if (b.denominator == 1 or b.numerator == 0) and not always_frac:
-            s = '%i'%b.numerator
-        else:
-            s = "\\frac{%i}{%i}"%(b.numerator, b.denominator)
-    return s
-
-
-def mylen(l):
-    if isinstance(l, np.ndarray):
-        sz = l.size
-    else:
-        sz = len(l)
-    return sz
-
-
-def permute_exam_answers(section,permutation):
-    v = section.split("\\item")
-    v = v[:5] + v[-1:]
-    assert(len(v) == 6)
-    permutation = [0] + permutation + [5]
-    v[0] = "\\begin{answer}[%i]\n"%permutation.index(1)
-    v2 = "\\item".join( [v[i] for i in permutation] )
-    return v2
-
-
-def startswithvowel(value):
-    if value.lower().startswith(("a", "e", "i", "o","u")):
-        return True
-    else:
-        return False
-
-
-def aan(s):
-    if s.startswith("no "):
-        return ""
-    return "an" if startswithvowel(s) else "a"
diff --git a/build/lib/jinjafy/jinja_matlab_load.py b/build/lib/jinjafy/jinja_matlab_load.py
deleted file mode 100644
index c675815..0000000
--- a/build/lib/jinjafy/jinja_matlab_load.py
+++ /dev/null
@@ -1,149 +0,0 @@
-import numpy as np
-import scipy.io as spio
-
-def matlab_load(mfile):
-    j = mfile.rfind('.')
-    if j > -1:
-        ex = mfile[j + 1:]
-        base = mfile[:j]
-    else:
-        ex = ''
-        base = mfile
-    mat = loadmat(base + '.mat')
-    mat = uuroll(mat)
-    mat = fix_1_arrays(mat)
-    mat = fix_strings(mat)
-    mat = fix_simple_lists(mat)
-    return mat
-
-
-def loadmat(filename):
-    '''
-    this function should be called instead of direct spio.loadmat
-    as it cures the problem of not properly recovering python dictionaries
-    from mat files. It calls the function check keys to cure all entries
-    which are still mat-objects
-    '''
-    data = spio.loadmat(filename,struct_as_record=False)
-    data2 = _check_keys(data)
-    return data2
-
-
-def _check_keys(dd):
-    '''
-    checks if entries in dictionary are mat-objects. If yes
-    todict is called to change them to nested dictionaries
-    '''
-    if isinstance(dd, spio.matlab.mio5_params.mat_struct):
-        dd = _check_keys(_todict(dd))
-    elif type(dd) == dict:
-        for key in dd:
-            kv = flist(dd[key])
-            if type( kv ) == spio.matlab.mio5_params.mat_struct:
-                dd[key] = _check_keys(kv)
-            else:
-                dd[key] = _check_keys(dd[key])
-    elif type(dd) == list:
-        dd = [_check_keys(l) for l in dd]
-    elif type(dd) == np.ndarray:
-        if dd.dtype.str == '|O' and dd.size > 0:
-            if type( flist(dd.flat[0]) ) == spio.matlab.mio5_params.mat_struct:
-                for i in range( dd.size ):
-                    dd.flat[i] = _check_keys( flist( dd.flat[i]) )
-        else:
-            for i in range(dd.size):
-                dd.flat[i] = _check_keys(dd.flat[i])
-
-    return dd
-
-def fix_simple_lists(l):
-    if type(l) == dict:
-        for k,v in l.items():
-            l[k] = fix_simple_lists(v)
-    elif type(l) == np.ndarray and l.dtype.name == "uint8" and l.shape[0] == 1 and l.ndim == 2:
-        # l = l.tolist()
-        l = l.tolist()[0]
-    return l
-
-def apply_recursively(l, myfun):
-    if type(l) == dict:
-        for k,v in l.items():
-            l[k] = apply_recursively(v, myfun)
-    elif type(l) == np.ndarray and l.dtype.str == '|O' and l.size > 0:
-        for i in range( l.size ):
-            l.flat[i] = apply_recursively( l.flat[i], myfun)
-    else:
-        l = myfun(l)
-    return l
-
-
-def fix_1_arrays(l):
-    def _fix_1_arrays(l):
-        if type(l) == np.ndarray and l.size == 1 and np.issubdtype(l.dtype, np.number):
-            l = l.flat[0]
-        return l
-    l = apply_recursively(l, _fix_1_arrays)
-    return l
-
-
-def fix_strings(l):
-    if type(l) == dict:
-        for k,v in l.items():
-            l[k] = fix_strings(v)
-    elif type(l) == np.ndarray and l.size > 0:
-        tp = type(superpop(l.flat[0]))
-        if tp == str or tp == np.str_:
-            l = [superpop(x) for x in l.flat ]
-            if len(l) == 1:
-                l = l.pop()
-    return l
-
-
-def superpop(l):
-    if type(l) == list and len(l) == 1:
-        return superpop(l[0])
-    if type(l) == np.ndarray and l.size == 1:
-        return superpop(l.tolist())
-    return l
-
-
-def flist(l):
-    if type(l) == list and len(l) == 1:
-        l = flist( l.pop() )
-
-    if type(l) == np.ndarray and l.dtype.name == "object":
-        l3 = [flist(v) for v in l.flat]
-        l = flist( l3 )
-    return l
-
-
-def _todict(matobj):
-    '''
-    A recursive function which constructs from matobjects nested dictionaries
-    '''
-    dict = {}
-    for strg in matobj._fieldnames:
-        elem = matobj.__dict__[strg]
-        if isinstance(elem, spio.matlab.mio5_params.mat_struct):
-            dict[strg] = _todict(elem)
-        else:
-            dict[strg] = elem
-    return dict
-
-
-def uuroll(v):
-    if type(v) is dict:
-        for key,val in v.items():
-            v[key] = uuroll(val)
-    if type(v) is np.ndarray or type(v) is np.array:
-        for j in range(v.size):
-            v.flat[j] = uuroll(v.flat[j])
-    return v
-
-
-def uroll(mat):
-    for k in mat.keys():
-        v = mat[k]
-        v = uuroll(v)
-        mat[k] = v
-    return mat
\ No newline at end of file
diff --git a/build/lib/jinjafy/jinjafy.py b/build/lib/jinjafy/jinjafy.py
deleted file mode 100644
index 43da4a7..0000000
--- a/build/lib/jinjafy/jinjafy.py
+++ /dev/null
@@ -1,214 +0,0 @@
-import inspect
-import jinja2
-from math import floor, log10
-import os
-import numpy as np
-from jinjafy import jinja_env
-
-
-def jinjafy_template(data,file_in,file_out=None, filters={},template_searchpath=None):
-    if template_searchpath:
-        file_in = os.path.relpath(file_in, template_searchpath)
-
-    return jinjafy_comment(data, file_in=file_in, file_out=file_out,jinja_tag=None, filters=filters,template_searchpath=template_searchpath)
-
-
-def jinjafy_comment(data,file_in=None,file_out=None,jinja_tag="jinja",jinja_code=None,trim_whitespace=True,trim_comments=True,comment_char="#",
-                    filters={},template_searchpath=None):
-    # Extract all comments from the given file and jinjafy them.
-    if file_in is None:
-        frame = inspect.stack()[1]
-        module = inspect.getmodule(frame[0])
-        file_in = module.__file__
-    elif not jinja_tag:
-        trim_comments=False
-        trim_whitespace=False
-
-    if not template_searchpath:
-        with open(file_in,'r') as f:
-            s = f.read()
-            if jinja_tag:
-                stag = "<" + jinja_tag + ">"
-                etag = "</" + jinja_tag + ">"
-
-                i_start = s.find(stag)
-                i_end = s.find(etag)
-                s = s[i_start+len(stag):i_end]
-            ss = [s]
-            if trim_comments:
-                ss = [ds.strip()[1:] for ds in s.splitlines() if len(ds.strip()) > 0 and ds.strip()[0] in ["#", "%"] ]
-            if trim_whitespace:
-                ss = [ds.strip() for ds in ss]
-
-            jinja_code = '\n'.join(ss)
-
-    from jinjafy.snipper import SnipperExtension
-    extensions = [SnipperExtension]
-    if template_searchpath:
-        if not isinstance(template_searchpath, list):
-            template_searchpath = [template_searchpath]
-        template_searchpath = [ts.replace("\\", "/") for ts in template_searchpath]
-        templateLoader = jinja2.FileSystemLoader(searchpath=template_searchpath)
-        env = jinja2.Environment(lstrip_blocks=True, trim_blocks=True,loader=templateLoader, extensions=extensions)
-    else:
-        env = jinja2.Environment(lstrip_blocks=True, trim_blocks=True, extensions=extensions)
-
-    import math
-    env.globals['exp'] = math.exp
-    env.globals['sqrt'] = math.sqrt
-    env.globals['cos'] = math.cos
-    env.globals['sin'] = math.sin
-
-    env.globals['mround'] = mround
-    env.globals['bold'] = bold
-    env.globals['fmat'] = fmat
-    env.globals['enumerate'] = enumerate
-    env.globals['zip'] = zip
-    env.globals['ensure_numpy'] = ensure_numpy
-    env.globals['transpose'] = transpose
-    import math
-    env.globals['ceil'] = math.ceil
-    env.globals['floor'] = math.floor
-
-
-    from pylatexenc import latexencode
-    env.globals['utf8tolatex'] = latexencode.utf8tolatex
-    env.globals['as_set'] = jinja_env.as_set
-    env.globals['as_set_list'] = jinja_env.as_set_list
-    env.globals['len'] = jinja_env.mylen
-    env.globals['get'] = jinja_env.jget
-    env.globals['tolist'] = jinja_env.tolist
-
-    filters['as_set'] =  jinja_env.as_set
-    filters['format_list'] =jinja_env.format_list
-    filters['format_join'] = jinja_env.format_join
-    filters['format_join_enum'] = jinja_env.format_join_enum
-    filters['pm'] = lambda x: f" {x}" if x < 0 else f"+{x}"
-    filters['bold'] = bold
-    filters['capfirst'] = lambda x: (x[0].upper() + x[1:] if len(x) > 1 else x.upper()) if x != None and isinstance(x, str) else x
-    filters['lowerfirst'] = lambda x: (x[0].lower() + x[1:] if len(x) > 1 else x.lower()) if x != None and isinstance(x, str) else x
-    filters['infty'] = jinja_env.infty
-    filters['n2w'] = jinja_env.n2w
-    def latex_url(url):
-        if not isinstance(url, str):
-            return url
-        url = url.replace("%", r"\%")
-        return url
-    filters['latex_url'] = latex_url
-    filters['format_list_symbols'] = jinja_env.format_list_symbols
-    filters['mround'] = mround
-    def eround(val,l):
-        x = str(mround(val, l))
-        if l == 0:
-            return x
-        if '.' not in x:
-            x = x + "."
-        n = l - (len(x) - x.find(".") - 1)
-        if n > 0:
-            x = x + "0"*n
-        return x
-
-    filters['eround'] = eround
-    filters['get'] = jinja_env.jget
-    filters['flatten'] = jinja_env.flatten
-    filters['aan'] = jinja_env.aan
-    filters['bracket'] = bracket
-    filters['tolist'] = jinja_env.tolist
-    filters['rational'] = jinja_env.as_rational
-    filters['permute_exam_answers'] = jinja_env.permute_exam_answers
-    env.filters.update(filters)
-
-    data['block_start_string'] = '{%'
-    if not template_searchpath:
-        jinja_out = env.from_string(jinja_code).render(data)
-    else:
-        file_in = file_in.replace("\\", "/")
-        template = env.get_template(file_in)
-        jinja_out = template.render(data)
-
-    if file_out is not None:
-        with open(file_out,'w',encoding='utf-8') as f:
-            # jinja_out = jinja_out.encode('utf-8')
-
-            f.write(jinja_out)
-            print("Writing to: " + file_out)
-
-    return jinja_out
-
-
-def bold(bob,d=True) :
-    if not isinstance(bob, str) :
-        bob = str(bob)
-    if d :
-        bob = '\\textbf{' + bob +"}"
-    return bob
-
-
-def fmat(bob,l=2,dobold=False) :
-    bob = mround(bob,l)
-    bob = bold(bob, dobold)
-    return bob
-
-def bracket(s):
-    return "{"+str(s)+"}"
-
-def un2str(x, xe, precision=2):
-    """pretty print nominal value and uncertainty
-
-        x  - nominal value
-        xe - uncertainty
-        precision - number of significant digits in uncertainty
-
-        returns shortest string representation of `x +- xe` either as
-        x.xx(ee)e+xx
-        or as
-        xxx.xx(ee)"""
-    # base 10 exponents
-    x_exp = int(floor(log10(x)))
-    xe_exp = int(floor(log10(xe)))
-
-    # uncertainty
-    un_exp = xe_exp - precision + 1
-    un_int = round(xe * 10 ** (-un_exp))
-
-    # nominal value
-    no_exp = un_exp
-    no_int = round(x * 10 ** (-no_exp))
-
-    # format - nom(unc)exp
-    fieldw = x_exp - no_exp
-    fmt = '%%.%df' % fieldw
-    result1 = (fmt + '(%.0f)e%d') % (no_int * 10 ** (-fieldw), un_int, x_exp)
-
-    # format - nom(unc)
-    fieldw = max(0, -no_exp)
-    fmt = '%%.%df' % fieldw
-    result2 = (fmt + '(%.0f)') % (no_int * 10 ** no_exp, un_int * 10 ** max(0, un_exp))
-
-    # return shortest representation
-    if len(result2) <= len(result1):
-        return result2
-    else:
-        return result1
-
-
-def mround(val, l=2):
-    if not isinstance(l, int):
-        return un2str(val, l, 1)
-    else:
-        if isinstance(val, np.ndarray):
-            return np.round(val * 10 ** l) / (10 ** l)
-        else:
-            return round(val * 10 ** l) / (10 ** l)
-
-
-def transpose(X):
-    return np.transpose( ensure_numpy( X) )
-
-
-def ensure_numpy(X):
-    if type(X) != np.ndarray:
-        X = np.asarray(X)
-    if X.ndim == 1:
-        X = np.transpose( np.expand_dims(X,1) )
-    return X
\ No newline at end of file
diff --git a/build/lib/jinjafy/plot/__init__.py b/build/lib/jinjafy/plot/__init__.py
deleted file mode 100644
index d2254a5..0000000
--- a/build/lib/jinjafy/plot/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# from thtools.plot.plot_helpers import *
diff --git a/build/lib/jinjafy/plot/plot_helpers.py b/build/lib/jinjafy/plot/plot_helpers.py
deleted file mode 100644
index 594e718..0000000
--- a/build/lib/jinjafy/plot/plot_helpers.py
+++ /dev/null
@@ -1,48 +0,0 @@
-import matplotlib.pyplot as plt
-import numpy as np
-import seaborn as sns
-import inspect
-import os
-from datetime import datetime
-
-def subplots(nrows=2, ncols=2, size_inches=(10,12), *args):
-    fig,axx = plt.subplots(nrows, ncols, *args)
-    fig.set_size_inches(size_inches[0], size_inches[1])
-    if not isinstance(axx, list):
-        axx = np.asarray(axx, dtype=np.object).reshape((nrows, ncols))
-    return fig, axx
-
-def get_colors(palette="dark",max_colors=5):
-    return sns.color_palette(palette, max_colors)
-
-
-def watermark_plot(extra="", nback=2, fz_y=10):
-    # from slider.thtools_base import watermark_string
-    s = watermark_string(nback=nback)
-    plt.figtext(0.05, 0.95, s)
-
-
-
-def watermark_string(nback=2):
-
-
-    tm =  datetime.now().strftime('%b-%d-%I:%M%p')
-    # for line in traceback.format_stack():
-    #     #     print(line.strip())
-    v = inspect.stack()
-    ss = []
-    j = 0
-    for i in range(len(v)):
-        if "plot_helpers.py" in v[i].filename: continue
-        ss.append( os.path.basename( v[i].filename) )
-        j = j + 1
-        if j > nback: break
-    # from thtools import execute_command
-    from jinjafy import execute_command
-    v, _ = execute_command("git rev-parse --short HEAD".split())
-
-    ss.append(tm)
-    return ('/'.join(ss) + f" @{v}").strip()
-
-
-
diff --git a/build/lib/jinjafy/snipper.py b/build/lib/jinjafy/snipper.py
deleted file mode 100644
index ad55d29..0000000
--- a/build/lib/jinjafy/snipper.py
+++ /dev/null
@@ -1,89 +0,0 @@
-from jinja2 import nodes
-from jinja2.ext import Extension
-import os
-
-
-class SnipperExtension(Extension):
-    # a set of names that trigger the extension.
-    tags = set(['snipper'])
-
-    def __init__(self, environment):
-        super(SnipperExtension, self).__init__(environment)
-
-        # add the defaults to the environment
-        environment.extend(
-            fragment_cache_prefix='',
-            fragment_cache=None
-        )
-        self.ofile = ""
-
-    def parse(self, parser):
-        # the first token is the token that started the tag.  In our case
-        # we only listen to ``'cache'`` so this will be a name token with
-        # `cache` as value.  We get the line number so that we can give
-        # that line number to the nodes we create by hand.
-        lineno = next(parser.stream).lineno
-
-        # now we parse a single expression that is used as cache key.
-        args = [parser.parse_expression()]
-        ofile = os.path.join(os.path.dirname(parser.filename), args[0].value)
-        args[0].value = ofile
-        if not os.path.isdir(os.path.dirname(ofile)):
-            os.makedirs(os.path.dirname(ofile))
-        self.ofile = ofile
-        print("Snipper args", args, "ofile", ofile)
-
-        # if there is a comma, the user provided a timeout.  If not use
-        # None as second parameter.
-        if parser.stream.skip_if('comma'):
-            args.append(parser.parse_expression())
-        else:
-            args.append(nodes.Const(None))
-
-        # now we parse the body of the cache block up to `endcache` and
-        # drop the needle (which would always be `endcache` in that case)
-        body = parser.parse_statements(['name:endsnipper'], drop_needle=True)
-
-        # now return a `CallBlock` node that calls our _cache_support
-        # helper method on this extension.
-        return nodes.CallBlock(self.call_method('_snip_method', args),
-                                [], [], body).set_lineno(lineno)
-
-        # parser.environment.loader.searchpath
-        # parser.parse_statements(body)
-        return body
-
-    def _snip_method(self, name, timeout, caller):
-        # rv = 0
-        # key = self.environment.fragment_cache_prefix + name
-
-        # try to load the block from the cache
-        # if there is no fragment in the cache, render it and store
-        # it in the cache.
-        # rv = self.environment.fragment_cache.get(key)
-        # if rv is not None:
-        #     return rv
-        rv = caller()
-        outfile = name
-        print("Actually snipping to ", self.ofile, "name", name, "timeout", timeout)
-        with open(name, 'w') as f:
-            f.write(rv)
-        # print("Actually snipping to ", self.ofile, 'writing', rv)
-
-        # self.environment.fragment_cache.add(key, rv, timeout)
-        return rv
-
-
-    def _cache_support(self, name, timeout, caller):
-        """Helper callback."""
-        key = self.environment.fragment_cache_prefix + name
-
-        # try to load the block from the cache
-        # if there is no fragment in the cache, render it and store
-        # it in the cache.
-        rv = self.environment.fragment_cache.get(key)
-        if rv is not None:
-            return rv
-        rv = caller()
-        self.environment.fragment_cache.add(key, rv, timeout)
-        return rv
\ No newline at end of file
diff --git a/build/lib/jinjafy/textools.py b/build/lib/jinjafy/textools.py
deleted file mode 100644
index 511932d..0000000
--- a/build/lib/jinjafy/textools.py
+++ /dev/null
@@ -1,187 +0,0 @@
-from jinjafy import jinjafy_comment
-import numpy as np
-
-#"<jinja1>"
-#\begin{tabular}{ {{cc}} }
-# {% if bookstabs %}\toprule{% endif %}
-# {% if vvlabels %}
-#   {% for vl in vvlabels %}
-#       {% if loop.index > 1 %} & {% endif %}  \multicolumn{ {{vl[0]}} }{ {{vl[2]}} }{ {{vl[1]}} }
-#   {% endfor %} \\
-#   {% for vl in vvlabels %}
-#       {% if vl[3] %}
-# 	     \cmidrule(r){ {{vl[3]}} }
-#       {% endif %}
-#   {% endfor %}
-# {% endif %}
-# {% for row in X %}
-# {% if bookstabs and loop.index == 2%}\midrule{% endif %}
-# {% for c in row %}
-# {% if loop.index > 1 %} & {% endif %} {{ c['tex'] }} {% if loop.index == W %} \\ {% endif %}
-# {% endfor %}
-# {% endfor %}
-# {% if bookstabs %}\bottomrule{% endif %}
-#\end{tabular}
-#</jinja1>
-# Convert a matrix to a table super quickly
-def mat2table(X,vlabels=None,hlabels=None,file_out = None, bookstabs=True, vvlabels=None,plot=False,pdf_out=None, standalone=False):
-    X, Xx, Xerr,Xdl = fmat_X2dict(X)
-    if pdf_out: plot = True
-    #%%
-    if plot:
-        import matplotlib.pyplot as plt
-        #plt.style.use('ggplot')
-        plt.style.use('seaborn')
-        fig = plt.figure()
-        ax = fig.gca()
-        #ax = plt.gca()
-        ls = []
-        for j in range(X.shape[0]):
-            ls.append(ax.plot(Xx[j, :]).pop() )
-
-            if Xerr[j]:
-                plt.errorbar(range(X.shape[1]), Xx[j,:], yerr=Xerr[j], color=ls[j].get_color())
-
-            for i in range( X.shape[1] ):
-                if 'xs' in X[j,i]:
-                    plt.plot([i]*len(X[j,i]['xs']), X[j,i]['xs'], '.', color=ls[j].get_color())
-
-        if vlabels:
-            plt.legend(ls, vlabels, bbox_to_anchor=(1.04, 1), loc="upper left")
-        if hlabels:
-            plt.xticks(range(X.shape[1]), hlabels[1:])
-        #plt.subplots_adjust(right=0.5)
-        plt.tight_layout(rect=[0, 0, 1, 1])
-        plt.show()
-        #if pdf_out:
-        #    fig.savefig(pdf_out, bbox_inches='tight')
-
-
-    if vlabels:
-        vltex =  [{'tex': v} for v in vlabels]
-        for i in range(len(Xdl)):
-            Xdl[i] = [vltex[i]] + Xdl[i]
-
-    if hlabels:
-        Xdl = [ [{'tex': h} for h in hlabels] ] + Xdl
-
-    if vvlabels:
-        cc = 1
-        for i in range(len(vvlabels)):
-            if len(vvlabels[i]) < 3:
-                vvlabels[i].append("c")
-            dl = vvlabels[i][0]
-            if dl == 1:
-                a = None
-            else:
-                a = "%i-%i"%(cc, cc+dl-1)
-            cc = cc + dl
-            vvlabels[i] = vvlabels[i] + [a]
-
-    H = len(Xdl)
-    W = len(Xdl[0])
-    cc = ["c" for i in range(W)]
-    if vlabels:
-        cc[0] = "l"
-    cc = "".join(cc)
-
-    def fmat(x):
-        if isinstance(x, int):
-            x = str(x)
-        if isinstance(x, float):
-            x = "%2.3f"%x
-        return x
-
-    #X = [ [fmat(x) for x in row] for row in X]
-
-    data = {'X' : Xdl, 'hlabels': hlabels, 'vlabels': vlabels, 'cc': cc, 'H':H, 'W': W, 'bookstabs': bookstabs,
-            'vvlabels': vvlabels}
-
-    from jinjafy.jinjafy import jinjafy_comment
-    s = jinjafy_comment(data,jinja_tag="jinja1")
-    if file_out:
-        print("Writing to: " + file_out)
-
-        if standalone:
-            s = jinjafy_comment({"s": s}, jinja_tag="jinja3")
-
-        with open(file_out, 'w') as f:
-            f.write(s)
-        if standalone:
-
-            from slider import latexmk
-            latexmk(file_out)
-
-
-    return s
-# "<jinja3>"
-# \documentclass[crop]{standalone}
-# \usepackage{booktabs}
-# \usepackage{siunitx}
-# \begin{document}
-# {{s}}
-# \end{document}
-# </jinja3>
-
-def fmat_X2dict(X):
-    X = np.asarray(X, dtype=np.object)
-    if len(X.shape) > 2:
-        X2 = np.ndarray(X.shape[:2], dtype=np.object)
-        for i in range(X.shape[0]):
-            for j in range(X.shape[1]):
-                X2[i, j] = X[i, j, :].squeeze()
-        X = X2
-    X = np.reshape(X, X.shape[:2])
-
-    for i in range(X.shape[0]):
-        for j in range(X.shape[1]):
-            dx = X[i,j]
-            if isinstance(dx, (list, np.ndarray)):
-                dx = [x for x in np.ravel(dx)]
-
-            if not isinstance(dx, dict):
-                dx = {'x': dx}
-            elif not isinstance(dx['x'], str):
-                x = dx['x']
-                # if isinstance(x, np.ndarray):
-                if 'tex' not in dx:
-                    dx['std'] = np.std(x)
-                    dx['std_mean'] = np.std(x) / np.sqrt( len(x))
-                    dx['xs'] = x
-                    dx['x'] = np.mean(x)
-                    x2, u2 = mround( dx['x'], dx['std_mean'] )
-
-                    dx['tex'] = '\\SI{%g\\pm %.2f}{}'%(x2, u2)
-
-            if 'tex' not in dx:
-                dx['tex'] = dx['x']
-
-            X[i,j] = dx
-
-    Xerr = [None] * X.shape[0]
-    Xx = np.zeros(X.shape)
-
-    for i in range(X.shape[0]):
-        if "std" in X[0,0]:
-            Xerr[i] = [dx['std_mean'] for dx in X[i]]
-
-        for j in range(X.shape[1]):
-            Xx[i,j] = X[i,j]['x']
-
-    Xdl = []
-    for i in range(X.shape[0]):
-        dx = []
-        for j in range(X.shape[1]):
-            dx.append(X[i,j])
-        Xdl.append(dx)
-
-
-    return X,Xx,Xerr,Xdl
-
-import math
-def mround(x,u):
-    n = np.floor(np.log10(x)+1)
-    dx = np.round(x / np.power(10.0, n), 2)
-    du = np.round(u / np.power(10.0, n), 2)
-    return dx * np.power(10, n), du * np.power(10.0,n)
-
diff --git a/build/lib/slider/DTU_Beamer_files/02450_beamer_preamble.tex b/build/lib/slider/DTU_Beamer_files/02450_beamer_preamble.tex
deleted file mode 100644
index 2dd8694..0000000
--- a/build/lib/slider/DTU_Beamer_files/02450_beamer_preamble.tex
+++ /dev/null
@@ -1,93 +0,0 @@
-% WARNING! This file was automatically generated; see slider/DTU_Beamer_files for original version.
-\usepackage[T1]{fontenc}
-\usepackage[utf8]{inputenc}
-\usepackage[english]{babel}
-\usepackage{pgfplots}
-\pgfplotsset{compat=newest}
-\usepackage{booktabs}
-\usepackage{siunitx}
-
-\usepackage[inkscape=true,inkscapeformat=pdf,inkscapelatex=true]{svg}
-\svgpath{osvgs/}
-
-\usepackage{url}
-\usepackage{pmboxdraw}
-\usepackage{amssymb}
-\usepackage{pgffor}
-	
-\usetheme[department=compute]{DTU}
-\newcommand{\tabitem}{{\color{dtured}$\bullet$} }
-\usepackage[absolute,overlay]{textpos}
-\textblockorigin{0mm}{0mm}
-
-\setlength{\TPHorizModule}{\paperwidth}
-\setlength{\TPVertModule}{\paperheight}
-
-% Latin Modern
-\usepackage{lmodern}
-\newcommand{\overlabel}[1]{ \begin{textblock}{1}(0,0) \url{#1} \end{textblock} }
-
-% Verdana font type
-%\usepackage{verdana}
-% Helvetica
-%\usepackage{helvet}
-% Times (text and math)
-%\usepackage{newtx, newtxmath}
-
-% \usetheme[department=compute]{DTU}
-
-\makeatletter
-
-\def\osvg{\@ifnextchar[{\@with}{\@without} }
-\def\@with[#1]#2{
-	\foreach[count=\n] \x in {#1}{
-		\iftoggle{overlabel_includesvgs}{
-			\IfFileExists{osvgs/x_do_not_edit_#2-l\n_nofonts.pdf}{
-			\begin{textblock}{1}(0,0)
-				\includegraphics<\x>[width=1.0\linewidth]{osvgs/x_do_not_edit_#2-l\n_nofonts}
-			\end{textblock}
-			}{ File: \url{osvgs/x_do_not_edit_#2-l\n_nofonts.pdf} does not exist; bad layer import? Check \url{osvgs/#2.svg} including layer information.
-			}
-		}
-	}
-	\olabel{#2}
-}
-\def\@without#1{
-	% Try to include first 10 layer files if they are there.
-	\foreach[count=\n] \x in {1,...,10}{
-		\iftoggle{overlabel_includesvgs}{
-			\IfFileExists{osvgs/x_do_not_edit_#1-l\n_nofonts.pdf}{
-				\begin{textblock}{1}(0,0)
-					\includegraphics<\n->[width=1.0\linewidth]{osvgs/x_do_not_edit_#1-l\n_nofonts}
-				\end{textblock}
-			}{
-		}
-	}
-	}
-	\olabel{#1}
-}
-\newcommand{\olabel}[1]{
-	\iftoggle{overlabel_includelabels}{
-		\begin{textblock}{1}(0,0) \url{#1} \end{textblock}
-	}{ 
-	\begin{textblock}{1}(0,0) 	{\color{white} \url{#1} } \end{textblock}
-	}
-}
-
-\makeatother
-
-\makeatother
-\ifdefined\bluem
-% nothing.
-\else
-
-\newcommand\bluem[1]{{\textcolor[rgb]{0.20, 0.40, 0.80}{ #1 }}}
-\newcommand\redm[1]{{\textcolor[rgb]{0.60, 0.00, 0.00}{ #1 }}}
-\newcommand\greenm[1]{{\textcolor[HTML]{398E00}{ #1 }}}
-\newcommand\yellowm[1]{{\textcolor[rgb]{1.00, 0.80, 0.00}{ #1 }}}
-				
-\newcommand\bluet[1]{{\textcolor[rgb]{0.20, 0.40, 0.80}{\textbf{#1}}}}
-\newcommand\redt[1]{{\textcolor[rgb]{0.60, 0.00, 0.00}{\textbf{#1}}}}
-\newcommand\greent[1]{{\textcolor[HTML]{398E00}{\textbf{#1}}}}
-\newcommand\yellowt[1]{{\textcolor[rgb]{1.00, 0.80, 0.00}{\textbf{#1}}}}
-\fi
\ No newline at end of file
diff --git a/build/lib/slider/DTU_Beamer_files/02450_lectures_base.tex b/build/lib/slider/DTU_Beamer_files/02450_lectures_base.tex
deleted file mode 100644
index c8c834a..0000000
--- a/build/lib/slider/DTU_Beamer_files/02450_lectures_base.tex
+++ /dev/null
@@ -1,25 +0,0 @@
-\documentclass[aspectratio=43]{beamer}
-\usepackage{etoolbox}
-\newtoggle{overlabel_includesvgs}
-\newtoggle{overlabel_includelabels}
-
-\toggletrue{overlabel_includesvgs}
-\toggletrue{overlabel_includelabels}
-
-\input{02450_beamer_preamble}
-
-\IfFileExists{generated/slide1.tex}{ \input{generated/slide1} }{ }
-\begin{document}
-	\begin{frame}
-	\maketitle
-\end{frame}
-\begin{frame}
-\IfFileExists{generated/slide2.tex}{ \input{generated/slide2} }{ }
-\end{frame}
-\begin{frame}
-\IfFileExists{generated/slide3.tex}{ \input{generated/slide3} }{ }
-\end{frame}
-
-\input{svg_converted_slides}
-
-\end{document}
diff --git a/build/lib/slider/DTU_Beamer_files/beamer_slider_preamble.tex b/build/lib/slider/DTU_Beamer_files/beamer_slider_preamble.tex
deleted file mode 100644
index 2dd8694..0000000
--- a/build/lib/slider/DTU_Beamer_files/beamer_slider_preamble.tex
+++ /dev/null
@@ -1,93 +0,0 @@
-% WARNING! This file was automatically generated; see slider/DTU_Beamer_files for original version.
-\usepackage[T1]{fontenc}
-\usepackage[utf8]{inputenc}
-\usepackage[english]{babel}
-\usepackage{pgfplots}
-\pgfplotsset{compat=newest}
-\usepackage{booktabs}
-\usepackage{siunitx}
-
-\usepackage[inkscape=true,inkscapeformat=pdf,inkscapelatex=true]{svg}
-\svgpath{osvgs/}
-
-\usepackage{url}
-\usepackage{pmboxdraw}
-\usepackage{amssymb}
-\usepackage{pgffor}
-	
-\usetheme[department=compute]{DTU}
-\newcommand{\tabitem}{{\color{dtured}$\bullet$} }
-\usepackage[absolute,overlay]{textpos}
-\textblockorigin{0mm}{0mm}
-
-\setlength{\TPHorizModule}{\paperwidth}
-\setlength{\TPVertModule}{\paperheight}
-
-% Latin Modern
-\usepackage{lmodern}
-\newcommand{\overlabel}[1]{ \begin{textblock}{1}(0,0) \url{#1} \end{textblock} }
-
-% Verdana font type
-%\usepackage{verdana}
-% Helvetica
-%\usepackage{helvet}
-% Times (text and math)
-%\usepackage{newtx, newtxmath}
-
-% \usetheme[department=compute]{DTU}
-
-\makeatletter
-
-\def\osvg{\@ifnextchar[{\@with}{\@without} }
-\def\@with[#1]#2{
-	\foreach[count=\n] \x in {#1}{
-		\iftoggle{overlabel_includesvgs}{
-			\IfFileExists{osvgs/x_do_not_edit_#2-l\n_nofonts.pdf}{
-			\begin{textblock}{1}(0,0)
-				\includegraphics<\x>[width=1.0\linewidth]{osvgs/x_do_not_edit_#2-l\n_nofonts}
-			\end{textblock}
-			}{ File: \url{osvgs/x_do_not_edit_#2-l\n_nofonts.pdf} does not exist; bad layer import? Check \url{osvgs/#2.svg} including layer information.
-			}
-		}
-	}
-	\olabel{#2}
-}
-\def\@without#1{
-	% Try to include first 10 layer files if they are there.
-	\foreach[count=\n] \x in {1,...,10}{
-		\iftoggle{overlabel_includesvgs}{
-			\IfFileExists{osvgs/x_do_not_edit_#1-l\n_nofonts.pdf}{
-				\begin{textblock}{1}(0,0)
-					\includegraphics<\n->[width=1.0\linewidth]{osvgs/x_do_not_edit_#1-l\n_nofonts}
-				\end{textblock}
-			}{
-		}
-	}
-	}
-	\olabel{#1}
-}
-\newcommand{\olabel}[1]{
-	\iftoggle{overlabel_includelabels}{
-		\begin{textblock}{1}(0,0) \url{#1} \end{textblock}
-	}{ 
-	\begin{textblock}{1}(0,0) 	{\color{white} \url{#1} } \end{textblock}
-	}
-}
-
-\makeatother
-
-\makeatother
-\ifdefined\bluem
-% nothing.
-\else
-
-\newcommand\bluem[1]{{\textcolor[rgb]{0.20, 0.40, 0.80}{ #1 }}}
-\newcommand\redm[1]{{\textcolor[rgb]{0.60, 0.00, 0.00}{ #1 }}}
-\newcommand\greenm[1]{{\textcolor[HTML]{398E00}{ #1 }}}
-\newcommand\yellowm[1]{{\textcolor[rgb]{1.00, 0.80, 0.00}{ #1 }}}
-				
-\newcommand\bluet[1]{{\textcolor[rgb]{0.20, 0.40, 0.80}{\textbf{#1}}}}
-\newcommand\redt[1]{{\textcolor[rgb]{0.60, 0.00, 0.00}{\textbf{#1}}}}
-\newcommand\greent[1]{{\textcolor[HTML]{398E00}{\textbf{#1}}}}
-\newcommand\yellowt[1]{{\textcolor[rgb]{1.00, 0.80, 0.00}{\textbf{#1}}}}
-\fi
\ No newline at end of file
diff --git a/build/lib/slider/DTU_Beamer_files/beamercolorthemeDTU.sty b/build/lib/slider/DTU_Beamer_files/beamercolorthemeDTU.sty
deleted file mode 100644
index 8e406d1..0000000
--- a/build/lib/slider/DTU_Beamer_files/beamercolorthemeDTU.sty
+++ /dev/null
@@ -1,29 +0,0 @@
-% beamercolorthemeDTU.sty
-% This file is a part of the DTU beamer package and makes sure that
-% the DTU colours are available. This file does neither redefine 
-% beamer settings, nor does it add new configurations. It has to be 
-% maintained for backward compatibility.
-%
-% Changelog
-% 2011-06-23 jowr Replaced the old colour definitions with the new ones from the design guide
-% 2011-07-05 jowr Added alternative colours for the graphs
-% 2011-08-16 jowr Moved colour definitions to resources folder, also used in poster class
-% 2014-09-27 jowr Added documentation and prepared merge to git repository
-%
-%
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Load the file if it exists, throw a warning otherwise
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-\InputIfFileExists{dtucolours}{
-    \PackageInfo{dtubeamer}{Successfully loaded the DTU colours.}
-  }{
-    \PackageWarning{dtubeamer}{Could not load the colours from dtucolours.sty. This compilation is likely to fail.}
-  }%
-
-\mode<presentation>
-
-% The new design does not need any adaption here, black is 
-% the default colour. 
-
-\mode<all> 
\ No newline at end of file
diff --git a/build/lib/slider/DTU_Beamer_files/beamerfontthemeDTU.sty b/build/lib/slider/DTU_Beamer_files/beamerfontthemeDTU.sty
deleted file mode 100644
index 49c4eab..0000000
--- a/build/lib/slider/DTU_Beamer_files/beamerfontthemeDTU.sty
+++ /dev/null
@@ -1,38 +0,0 @@
-% Copyright 2014 by Remus Mihail Prunescu
-
-% LaTeX Support Group 2014
-% DTU Official Presentation
-
-% For PDFLATEX
-\usefonttheme{professionalfonts}
-
-% Title font
-\setbeamerfont{title}{size=\large, series=\bfseries}
-\setbeamercolor{title}{fg=black}
-
-% Subtitle font
-\setbeamerfont{subtitle}{size=\small, series=\normalfont}
-
-% Author font
-\setbeamerfont{author}{size=\small, series=\normalfont}
-
-% Footline
-\setbeamerfont{framecounter in head/foot}{size=\tiny}
-\setbeamerfont{department in head/foot}{size=\tiny, series=\bfseries}
-\setbeamerfont{title in head/foot}{size=\tiny}
-\setbeamerfont{date in head/foot}{size=\tiny}
-
-% Frametitle
-\setbeamerfont{frametitle}{size=\large, series=\bfseries}
-\setbeamerfont{block body}{size=\small}
-\setbeamerfont{section title}{size=\small}
-\setbeamerfont{block body alerted}{size=\small}
-\setbeamerfont{block body example}{size=\small}
-\setbeamerfont{block title}{size=\large,parent={structure,block body}}
-\setbeamerfont{block title alerted}{parent={block title,alerted text}}
-\setbeamerfont{block title example}{parent={block title,example text}}
-\setbeamerfont{itemize/enumerate body}{size=\small}
-
-% Colors
-\setbeamercolor{frametitle}{fg=black}
-\setbeamercolor{structure}{fg=black}
\ No newline at end of file
diff --git a/build/lib/slider/DTU_Beamer_files/beamerinnerthemeDTU.sty b/build/lib/slider/DTU_Beamer_files/beamerinnerthemeDTU.sty
deleted file mode 100644
index 9e464ff..0000000
--- a/build/lib/slider/DTU_Beamer_files/beamerinnerthemeDTU.sty
+++ /dev/null
@@ -1,52 +0,0 @@
-% Copyright 2007 by Till Tantau
-% Copyright 2010 by Remus Mihail Prunescu
-
-% LaTeX Support Group 2010
-% DTU Official Presentation
-
-
-\mode<presentation>
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Title page: DTU
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\defbeamertemplate*{title page}{DTU}[1][]
-{
-	% Set bInTitle to true to make sure the right footline is printed
-	\global\edef\bInTitle{true}
-	
-	\linespread{1.45}
-	% Content of the title page
-	
-	% Title + Subtitle
-	\vspace{\dimTitleOffset}
-	\begin{beamercolorbox}[left]{title box}
-		\usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle\par
-		\ifx\insertsubtitle\@empty
-		\else
-			\vspace{\dimSubtitleOffset}
-			{\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle}\insertsubtitle\par}
-		\fi
-	\end{beamercolorbox}
-	
-	\vspace{\dimAuthorOffset}
-	% Author
-	\begin{beamercolorbox}[left]{author box}
-		\usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor
-	\end{beamercolorbox}
-	
-	\vspace{\dimInstituteOffset}% Institute
-	\begin{beamercolorbox}[left]{institute box}
-		\usebeamerfont{institute}\usebeamercolor[fg]{author}\insertinstitute
-	\end{beamercolorbox}
-
-	% Title graphic
-	{\usebeamercolor[fg]{titlegraphic}\inserttitlegraphic\par}
-	
-	% Fill the space till bottom
-	\vskip0pt plus 1filll
-}
-
-\mode
-<all> 
diff --git a/build/lib/slider/DTU_Beamer_files/beamerouterthemeDTU.sty b/build/lib/slider/DTU_Beamer_files/beamerouterthemeDTU.sty
deleted file mode 100644
index 79b75f4..0000000
--- a/build/lib/slider/DTU_Beamer_files/beamerouterthemeDTU.sty
+++ /dev/null
@@ -1,98 +0,0 @@
-% Copyright 2014 by Remus Mihail Prunescu
-
-% LaTeX Support Group 2014
-% DTU Official Presentation
-
-\mode<presentation>
-
-\setbeamercolor*{framecounter in head/foot}{parent=palette tertiary}
-\setbeamercolor*{department in head/foot}{parent=palette tertiary}
-\setbeamercolor*{title in head/foot}{parent=palette tertiary}
-\setbeamercolor*{date in head/foot}{parent=palette tertiary}
-
-% No navigation symbols
-\setbeamertemplate{navigation symbols}{} 
-
-% Header
-\setbeamertemplate{headline}
-{
-	\ifdefstring{\bDTUWhiteFrame}{true}
-	{
-		\insertFrameDTUWhiteLogo
-	}
-	{
-		\ifdefstring{\bInTitle}{true}
-		{
-			\insertTitleDTULogo
-		}
-		{
-			\insertFrameDTULogo
-		}
-	}
-}
-
-% Footer
-\setbeamertemplate{footline}
-{
-	\ifdefstring{\bInTitle}{true}
-	{
-		\vspace{-0.35\paperheight}
-		\begin{beamercolorbox}[wd=\paperwidth]{title bottom}
-			\vbox{%
-				\makebox[0pt][l]{\hspace{\dimDTUDepLogoXOffset}\insertdepartmentlogoA}%
-				\vbox{%
-					\hspace{\dimDTUFriseXOffset}%
-					\makebox[0pt][l]{\insertDTUFrise}%
-					\vspace{\dimDTUDepFriseOffset}%
-				}%
-			}%
-			\vspace{\dimDTUFriseYOffset}
-		\end{beamercolorbox}
-		\global\def\bInTitle{false}
-	}
-	{
-		\ifdefstring{\bDTUWhiteFrame}{true}
-		{
-		}
-		{ %
-			\hbox{ %
-				\hspace{\dimTextLeftMargin}\hspace{-1.5pt}\insertframenumber %
-				\setlength{\widthframenumber}{2em + \widthof{\insertframenumber}} %
-				\setlength{\widthdepartment}{1em + \widthof{\insertdepartmentandinstitute}} %
-				\setlength{\widthdate}{1em + \widthof{00 00000000 0000}} % Tue: Added extra 0's (2 to 7) to prevent wrap
-				\setlength{\widthtitle}{\textwidth-\widthframenumber-\widthdepartment-\widthdate-\dimTextLeftMargin-\dimTextLeftMargin} %
-				%\parbox[t]{\widthframenumber}{\insertframenumber} %
-				\parbox[t]{\widthdepartment}{\insertdepartmentandinstitute} %
-				\parbox[t]{\widthtitle}{\raggedleft\insertshorttitleinfooter} %
-				\parbox[t]{\widthdate}{\raggedleft\DTUDateFormat\insertdate} %
-				\vspace{\dimFootlineYOffset} %
-			}
-		}
-	}
-}
-
-% Position the frame title so that it would get into the headline
-\setbeamertemplate{frametitle}
-{
-	\vspace{\dimPlaceTitleInHeader}
-	\ifdefstring{\inShowSection}{true}
-	{
-			\usebeamerfont{section title}\color{black!20}%
-			\ifnumcomp{\thesection}{=}{0}{%
-				\ \par%
-			}
-			{%
-				\insertsection\par
-			}
-	}
-	{
-		\vspace{\dimFrameTitleOffset}
-	}
-	\vspace{-1pt}\usebeamerfont{frametitle}%
-	\ifdefstring{\bDTUWhiteFrame}{true}{\color{white}}{\color{black}}%
-	\insertframetitle
-	\vspace{\dimAfterFrameTitleOffset}
-}
-
-\mode
-<all>
diff --git a/build/lib/slider/DTU_Beamer_files/beamerthemeDTU.sty b/build/lib/slider/DTU_Beamer_files/beamerthemeDTU.sty
deleted file mode 100644
index d8841f6..0000000
--- a/build/lib/slider/DTU_Beamer_files/beamerthemeDTU.sty
+++ /dev/null
@@ -1,255 +0,0 @@
-% Copyright Remus Mihail Prunescu
-
-% LaTeX Support Group
-% DTU Official Presentation
-
-\mode<presentation>
-
-\RequirePackage{etoolbox}
-\RequirePackage{datetime}
-\RequirePackage{keyval}
-\RequirePackage{calc}
-
-% Enlarge slide size
-\beamer@paperwidth 1.09375\beamer@paperwidth%
-\beamer@paperheight 1.09375\beamer@paperheight%
-
-% Extra package
-\InputIfFileExists{departments}%
-	{\ClassInfo{}{The file departments.tex with department logo file naming has been loaded.}}%
-	{\ClassInfo{}{The file departments.tex is missing. Consult the manual.}%
-}%
-
-% Default values for options
-\newcommand{\inDepartmentShortName}{elektro}
-\newcommand{\inLanguage}{english}
-\newcommand{\inShowSection}{true}
-
-% Check language
-\@ifpackagewith{babel}{danish}{%
-	\renewcommand{\inLanguage}{danish}%
-}{}
-
-
-% Save options
-\DeclareOptionBeamer{department}{\renewcommand{\inDepartmentShortName}{#1}}
-\DeclareOptionBeamer{showsection}{\renewcommand{\inShowSection}{#1}}
-\ProcessOptionsBeamer
-
-% % % % % % % % % % % %
-% Define Dimensions
-% % % % % % % % % % % %
-
-\newcommand{\dimDTULogoWidth}{0.0394\paperwidth} % Percent
-\newcommand{\dimDTULogoHeight}{0.0777\paperheight} % Percent
-\newcommand{\dimDTULogoYOffset}{0.0404\paperheight} % Percent
-\newcommand{\dimDTULogoXOffset}{0.9176\paperwidth} % Percent
-
-\newcommand{\dimDTUDepLogoXOffset}{0.062\paperwidth} % Percent
-\newcommand{\dimDTUDepLogoHeight}{0.0897\paperheight} % Percent
-
-\newcommand{\dimDTUFriseYOffset}{0.03\paperheight} % Percent
-\newcommand{\dimDTUFriseXOffset}{0.418\paperwidth} % Percent
-\newcommand{\dimDTUFriseHeight}{0.3412\paperheight} % Percent
-\newcommand{\dimDTUDepFriseOffset}{0.018\paperheight} % Percent
-
-\newcommand{\dimTitleOffset}{0.148\paperheight}
-\newcommand{\dimSubtitleOffset}{0.0175\paperheight}
-\newcommand{\dimFrameTitleOffset}{0.033\paperheight}
-\newcommand{\dimAfterFrameTitleOffset}{-0.008\paperheight}
-\newcommand{\dimAuthorOffset}{0.06\paperheight}
-\newcommand{\dimInstituteOffset}{0.027\paperheight}
-
-\newcommand{\dimFootlineYOffset}{0.025\paperheight} % Tue: This was 0.0355 in original file
-
-\newcommand{\dimLeftMarginI}{0.02\paperwidth}
-\newcommand{\dimTextLeftMargin}{0.0669\paperwidth} % Percent
-
-\newcommand{\dimPlaceTitleInHeader}{-0.09\paperheight}
-
-
-\makeatletter
-\setbeamersize{text margin left=\dimTextLeftMargin, text margin right=\dimTextLeftMargin}
-\makeatother
-
-% % % % % % % % % % % %
-% End of Dimensions
-% % % % % % % % % % % %
-
-% New commands to be used in the DTU template
-%\newcommand{\insertdepartmentandinstitute}{\departmenttitle , \institutetitle}
-\newcommand{\insertdepartmentandinstitute}{\departmenttitle}
-\newcommand{\insertDTULogo}{\includegraphics[width=\dimDTULogoWidth]{tex_dtu_logo}}
-\newcommand{\insertDTUWhiteLogo}{}
-\newcommand{\inserttitlefootline}{}
-\newcommand{\inserttitleheadline}{}
-\newcommand{\institutetitle}{}
-
-% Internal variable to check if \titlepage was called: false by default
-\def\bInTitle{false}
-\def\bDTUWhiteFrame{false}
-
-% Process language
-% Is it DK or UK?
-\ifdefstring{\inLanguage}{danish}
-{
-	\renewcommand{\institutetitle}{Danmarks Tekniske Universitet}
-	\renewcommand{\insertDTUWhiteLogo}{\includegraphics[height=\dimDTULogoHeight]{tex_dtu_dk_a1_neg}}
-}
-{
-	\ifdefstring{\inLanguage}{english}
-	{
-		\renewcommand{\institutetitle}{Technical University of Denmark}
-		\renewcommand{\insertDTUWhiteLogo}{\includegraphics[height=\dimDTULogoHeight]{tex_dtu_uk_a1_neg}}
-	}
-	{
-		% Undefined language
-		% Default values are used
-	}
-}
-
-\ifcsdef{department@\inDepartmentShortName}
-{
-	\activateDepartmentInfo{\inLanguage}{\inDepartmentShortName}
-}
-{
-	\PackageError{DTU Beamer Template}{Department is undefined. Reverting to default (elektro).}{Check the user guide for defined departments. If you cannot find it then contact support group to add the department.}
-	\activateDepartmentInfo{\inLanguage}{elektro}
-}
-
-% Command for generating the department title
-\newcommand{\departmenttitle}{\thedepartmentNameText}
-% Command for inserting the department logo
-\newcommand{\insertdepartmentlogoA}{%
-	\ifdefstring{\inDepartmentShortName}{admin}
-	{
-	}
-	{
-		\includegraphics[height=\dimDTUDepLogoHeight]{\thedepartmentLogo}
-	}
-}
-% Command for inserting frise
-\newcommand{\insertDTUFrise}{\includegraphics[height=\dimDTUFriseHeight]{\thedepartmentFrise}}
-
-% Command used from frame DTU logo (headline)
-\newcommand{\insertFrameDTULogo}
-{
-	\vspace{\dimDTULogoYOffset}
-	\begin{beamercolorbox}[right]{logo in head/foot}%
-		\insertDTULogo\makebox[\dimDTULogoWidth][]{}
-	\end{beamercolorbox}
-}
-\newcommand{\insertFrameDTUWhiteLogo}
-{
-	\vspace{\dimDTULogoYOffset}
-	\begin{beamercolorbox}[right]{logo in head/foot}%
-		\insertDTUWhiteLogo\makebox[\dimDTULogoWidth][]{}
-	\end{beamercolorbox}
-}
-
-% Command used in title page for inserting the DTU logo in headline
-\newcommand{\insertTitleDTULogo}
-{
-	\insertFrameDTULogo
-}
-
-% Change themes
-\usefonttheme{DTU}
-\useoutertheme{DTU}
-\useinnertheme{DTU}
-\usecolortheme{DTU}
-
-% Left margin for list environment
-\setlength{\leftmargini}{\dimLeftMarginI}
-
-% Adjust bullets placement
-\setlength\labelsep{3pt}
-
-\setbeamersize{text margin left=\dimTextLeftMargin}
-
-% Itemize
-\setbeamertemplate{items}[circle]
-\setbeamercolor{itemize item}{fg=dtured}
-\setbeamercolor{itemize subitem}{fg=dtured}
-
-\setbeamerfont{section in toc}{size=\small}
-\setbeamerfont{subsection in toc}{size=\scriptsize}
-
-\setbeamertemplate{enumerate items}[circle]
-\setbeamercolor{item projected}{fg=white,bg=dtured}
-
-% Table of contents
-\setbeamertemplate{section in toc}{%
-	\color{dtured}$\bullet$  \inserttocsection \par}
-
-\setbeamertemplate{subsection in toc}{
-	\hskip1em{\color{dtured}$\bullet$} \inserttocsubsection \par}
-
-% Fix space between sections and subsections in toc
-\makeatletter
-\patchcmd{\beamer@sectionintoc}
-  {\vfill}
-  {\vskip\itemsep}
-  {}
-  {}
-\pretocmd{\beamer@subsectionintoc}
-  {\vskip0.5\itemsep}
-  {}
-  {}
-\makeatother 
-
-
-% Date format
-\newcommand{\DTUDateFormat}{\DTUDate}
-\newdateformat{DTUDate}{\THEDAY.\THEMONTH.\THEYEAR}
-
-% Customize blocks
-\setbeamertemplate{blocks}[rounded][shadow=true]
-\setbeamercolor{block title}{fg=white,bg=dtured}
-\setbeamerfont{block title}{series=\bfseries\small}
-\setbeamercolor{block body}{fg=black,bg=white}
-
-
-\newcommand{\defaultDTUFrameStyle}{
-	\setbeamertemplate{background}{}
-	\color{black}
-}
-
-% White DTU frame
-\makeatletter
-\define@key{beamerframe}{dtuwhitelogo}[true]{%
-	\global\def\bDTUWhiteFrame{true}
-	\color{white}
-}
-\define@key{beamerframe}{bgfilename}{%
-	\setbeamertemplate{background}{
-		\includegraphics[width=\paperwidth,height=\paperheight,keepaspectratio]{#1}
-	}
-}
-% Default framestyle
-\pretocmd{\beamer@@@@frame}
-{
-	\global\def\bDTUWhiteFrame{false}
-	\defaultDTUFrameStyle
-}
-{}{}
-\makeatother
-
-% Lengths for footer
-\newlength{\widthframenumber}
-\newlength{\widthdepartment}
-\newlength{\widthtitle}
-\newlength{\widthdate}
-
-% Short title for the footer
-\makeatletter
-\newcommand\insertshorttitleinfooter{%
-	\beamer@shorttitle%
-}
-\makeatother
-
-% Description list
-\setbeamercolor{description item}{fg=dtured}
-
-\mode
-<all>
diff --git a/build/lib/slider/DTU_Beamer_files/blank.png b/build/lib/slider/DTU_Beamer_files/blank.png
deleted file mode 100644
index 082daebc2e8b00d950bcd22987c75a26f0349d97..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3161
zcmeAS@N?(olHy`uVBq!ia0y~yV3uKEU~=GKV_;xlw@ENyU|?V@4sv&5Sa(k5B?AKk
zOS+@4BLl<6e(pbstPBhcoCO|{#S9EWB_ParFHOFJfr0y-r;B4qMcmu#hKvUk1P&Zn
z{?C@#S#`qOyw0{YwY&@r4iA2FGcbIZ^N@jo!KjUyf#HM%9|MCzvIPS}L(iz-Xn>3+
zhS7{LS~855ila5cXl*!J8;;h7qqX6ntqnWQ$hiA+)W}+XC}Ln>VDNPHb6Mw<&;$Tp
CXOsT`

diff --git a/build/lib/slider/DTU_Beamer_files/departments.tex b/build/lib/slider/DTU_Beamer_files/departments.tex
deleted file mode 100644
index d248470..0000000
--- a/build/lib/slider/DTU_Beamer_files/departments.tex
+++ /dev/null
@@ -1,130 +0,0 @@
-% departments.tex
-% This file is a part of the DTU letter package and contains the file path for
-% the grahic file, and text name for the different departments.
-%
-% Changelog
-% 2010-04-07 Added % at the end of each line to make it possible to use the definitions in the documentation
-% 2010-04-09 Added the 5th mandatory argument (long text name)
-% 2010-04-23 Moved the new argument, #6, to #4 and added all info. However two graphic files are missing and I have therefore made a test: if the graphic file is missing the administration logo is used.  
-% 2013-02-11 Added compute and diplom department entries.  Added check to see that the department macros are defined, otherwise an error is printed.
-% 
-%\makeDepartmentInfo{<danish|english>}{<departmentname>}{<text graphic file name>}{<Big department logo file name>}{<department text name>}{<department long text name>}
-%
-
-\RequirePackage{etoolbox}
-
-\newcommand\setDepartmentNameLogo[1]{\def\@departmentNameLogo{#1}}%
-\newcommand\thedepartmentNameLogo{\@departmentNameLogo}%
-\newcommand\setDepartmentNameText[1]{\def\@departmentNameText{#1}}%
-\newcommand\thedepartmentNameText{\@departmentNameText}%
-\newcommand\setDepartmentLongNameText[1]{\def\@departmentLongNameText{#1}}%
-\newcommand\thedepartmentLongNameText{\@departmentLongNameText}%
-\newcommand\setDepartmentLogo[1]{\def\@departmentLogo{#1}}%
-\newcommand\thedepartmentLogo{\@departmentLogo}%
-\newcommand\setDepartmentFrise[1]{\def\@departmentFrise{#1}}%
-\newcommand\thedepartmentFrise{\@departmentFrise}%
-%
-\newcommand\createDepartment[1]{%
-\expandafter\def\csname department@#1\endcsname{#1}}%
-%
-\newcommand\aliasDepartment[2]{%
-\expandafter\def\csname department@#2\endcsname{#1}}%
-%
-\ifundef{\makeDepartmentInfo}{%
-	\newcommand\makeDepartmentInfo[7]{%
-		\def\@departmentcmd{\csname department@#2\endcsname}
-		\createDepartment{#2}
-		\expandafter\def\csname namelogo#1@\@departmentcmd\endcsname{\setDepartmentNameLogo{#3}}%
-		\expandafter\def\csname deplogo#1@\@departmentcmd\endcsname{\setDepartmentLogo{#4}}%
-		\expandafter\def\csname depfrise#1@\@departmentcmd\endcsname{\setDepartmentFrise{#5}}%
-		\expandafter\def\csname nametext#1@\@departmentcmd\endcsname{\setDepartmentNameText{#6}}%
-		\expandafter\def\csname namelongtext#1@\@departmentcmd\endcsname{\setDepartmentLongNameText{#7}}%
-		
-	}%
-}{}%
-%
-\newcommand\activateDepartmentInfo[2]{%
-	\ifcsname department@#2\endcsname%
-		\def\@departmentcmd{\csname department@#2\endcsname}%
-	\else%
-		\def\@departmentcmd{\department@admin}%
-	\fi%
-	\csname namelogo#1@\@departmentcmd\endcsname% TODO test if command exists before executing it
-	\csname nametext#1@\@departmentcmd\endcsname%
-	\csname namelongtext#1@\@departmentcmd\endcsname%
-	\csname deplogo#1@\@departmentcmd\endcsname%
-	\csname depfrise#1@\@departmentcmd\endcsname%
-	% \fromdepartment{\thedepartmentLongNameText}
-}%
-%
-\makeDepartmentInfo{danish} {aqua}{tex_aqua_dk}{tex_dtu_aqua_a}{tex_dtu_aqua_frise}{DTU Aqua}{Institut for Akvatiske Ressourcer}%
-\makeDepartmentInfo{english}{aqua}{tex_aqua_uk}{tex_dtu_aqua_a_uk}{tex_dtu_aqua_frise}{DTU Aqua}{National Institute of Aquatic Resources}%
-
-\makeDepartmentInfo{danish} {byg}{tex_byg_dk}{tex_dtu_byg_a}{tex_dtu_byg_frise}{DTU Byg}{Institut for Byggeri og Anl\ae g}%
-\makeDepartmentInfo{english}{byg}{tex_byg_uk}{tex_dtu_byg_a_uk}{tex_dtu_byg_frise}{DTU Civil Engineering}{Department of Civil Engineering}%
-
-\makeDepartmentInfo{danish}{compute}{tex_compute_uk}{tex_dtu_compute_a}{tex_dtu_frise}{DTU Compute}{Institut for Matematik og Computer Science}
-\makeDepartmentInfo{english}{compute}{tex_compute_uk}{tex_dtu_compute_a_uk}{tex_dtu_frise}{DTU Compute}{Department of Applied Mathematics and Computer Science}
-
-\makeDepartmentInfo{danish} {elektro}{tex_elektro_dk}{tex_dtu_elektro_a}{tex_dtu_frise}{DTU Elektro}{Institut for Elektroteknologi}
-\makeDepartmentInfo{english}{elektro}{tex_elektro_uk}{tex_dtu_elektro_a_uk}{tex_dtu_frise}{DTU Electrical Engineering}{Department of Electrical Engineering}
-
-\makeDepartmentInfo{danish} {energi}{tex_energikonvertering_dk}{tex_dtu_energi_a}{tex_dtu_energi_frise}{DTU Energi}{Institut for Energikonvertering og -lagring}
-\makeDepartmentInfo{english}{energi}{tex_energikonvertering_uk}{tex_dtu_energi_a_uk}{tex_dtu_energi_frise}{DTU Energy}{Department of Energy Conversion and Storage}
-
-\makeDepartmentInfo{danish} {fotonik}{tex_fotonik_dk}{tex_dtu_fotonik_a}{tex_dtu_frise}{DTU Fotonik}{Institut for Fotonik}
-\makeDepartmentInfo{english}{fotonik}{tex_fotonik_uk}{tex_dtu_fotonik_a_uk}{tex_dtu_frise}{DTU Fotonik}{Department of Photonics Engineering}
-
-\makeDepartmentInfo{danish} {fysik}{tex_fysik_dk}{tex_dtu_fysik_a}{tex_dtu_fysik_frise}{DTU Fysik}{Institut for Fysik}
-\makeDepartmentInfo{english}{fysik}{tex_fysik_uk}{tex_dtu_fysik_a_uk}{tex_dtu_fysik_frise}{DTU Physics}{Department of Physics}
-
-\makeDepartmentInfo{danish} {food}{tex_fodevareinstituttet_dk}{tex_dtu_fdevareinstituttet_a}{tex_dtu_frise}{DTU F\o devareinstituttet}{F\o devareinstituttet}
-\makeDepartmentInfo{english}{food}{tex_fodevareinstituttet_uk}{tex_dtu_fdevareinstituttet_a_uk}{tex_dtu_frise}{DTU Food}{National Food Institute}
-
-\makeDepartmentInfo{danish} {kemi}{tex_kemi_dk}{tex_dtu_kemi_a}{tex_dtu_kemi_frise}{DTU Kemi}{Institut for Kemi}
-\makeDepartmentInfo{english}{kemi}{tex_kemi_uk}{tex_dtu_kemi_a_uk}{tex_dtu_kemi_frise}{DTU Chemistry}{Department of Chemistry}
-
-\makeDepartmentInfo{danish} {kemiteknik}{tex_kemiteknik_dk}{tex_dtu_kemiteknik_a}{tex_dtu_kemiteknik_frise}{DTU Kemiteknik}{Institut for Kemiteknik}
-\makeDepartmentInfo{english}{kemiteknik}{tex_kemiteknik_uk}{tex_dtu_kemiteknik_a_uk}{tex_dtu_kemiteknik_frise}{DTU Chemical Engineering}{Department of Chemical and Biochemical Engineering}
-
-\makeDepartmentInfo{danish} {management}{tex_management_dk}{tex_dtu_management_a}{tex_dtu_frise}{DTU Management}{Institut for Systemer, Produktion og Ledelse}
-\makeDepartmentInfo{english}{management}{tex_management_uk}{tex_dtu_management_a_uk}{tex_dtu_frise}{DTU Management Engineering}{Department of Management Engineering}
-
-\makeDepartmentInfo{danish} {mekanik}{tex_mekanik_dk}{tex_dtu_mekanik_a}{tex_dtu_mek_frise}{DTU Mekanik}{Institut for Mekanisk Teknologi}
-\makeDepartmentInfo{english}{mekanik}{tex_mekanik_uk}{tex_dtu_mekanik_a_uk}{tex_dtu_mek_frise}{DTU Mechanical Engineering}{Department of Mechanical Engineering}
-
-\makeDepartmentInfo{danish} {miljo}{tex_miljo_dk}{tex_dtu_milj_a}{tex_dtu_miljoe_frise}{DTU Milj\o}{Institut for Vand og Milj\o teknologi}
-\makeDepartmentInfo{english}{environmentalEng}{tex_miljo_uk}{tex_dtu_milj_a_uk}{tex_dtu_miljoe_frise}{DTU Environment}{Department of Environmental Engineering}
-
-\makeDepartmentInfo{danish} {nanotek}{tex_nanotek_dk}{tex_dtu_nanotek_a}{tex_dtu_frise}{DTU Nanotek}{Institut for Mikro- og Nanoteknologi}
-\makeDepartmentInfo{english}{nanotek}{tex_nanotek_uk}{tex_dtu_nanotek_a_uk}{tex_dtu_frise}{DTU Nanotech}{Department of Micro- and Nanotechnology}
-
-\makeDepartmentInfo{danish} {space}{tex_space_dk}{tex_dtu_space_a}{tex_dtu_space_frise}{DTU Space}{Institut for Rumforskning og Rumteknologi}
-\makeDepartmentInfo{english}{space}{tex_space_uk}{tex_dtu_space_a_uk}{tex_dtu_space_frise}{DTU Space}{National Space Institute}
-
-\makeDepartmentInfo{danish} {systembiologi}{}{tex_dtu_systembiologi_a}{tex_dtu_frise}{DTU Systembiologi}{Institut for Systembiologi}
-\makeDepartmentInfo{english}{systembiologi}{}{tex_dtu_systembiologi_a_uk}{tex_dtu_frise}{DTU Systems Biology}{Department of Systems Biology}
-
-\makeDepartmentInfo{danish} {transport}{tex_transport_dk}{tex_dtu_transport_a}{tex_dtu_transport_frise}{DTU Transport}{Institut for Transport}
-\makeDepartmentInfo{english}{transport}{tex_transport_uk}{tex_dtu_transport_a_uk}{tex_dtu_transport_frise}{DTU Transport}{Department of Transport}
-
-\makeDepartmentInfo{danish} {vaterinaerinstituttet}{tex_veterinaertinstituttet_dk}{tex_dtu_veterinerinstituttet_a}{tex_dtu_vet_frise}{DTU Veterin\ae rinstituttet}{Veterin\ae rinstituttet}
-\makeDepartmentInfo{english}{vaterinaerinstituttet}{tex_veterinaertinstituttet_uk}{tex_dtu_veterinerinstituttet_a_uk}{tex_dtu_vet_frise}{DTU Vet}{National Veterinary Institute}
-
-\makeDepartmentInfo{danish} {vindenergi}{tex_vindenergi_dk}{tex_dtu_vindenergi_a}{tex_dtu_vindenergi_frise}{DTU Vindenergi}{Institut for Vindenergi}
-\makeDepartmentInfo{english}{vindenergi}{tex_vindenergi_uk}{tex_dtu_vindenergi_a_uk}{tex_dtu_vindenergi_frise}{DTU Wind Energy}{Department of Wind Energy}
-
-
-% Extra
-\makeDepartmentInfo{danish} {bibliotek}{tex_bibliotek_dk}{tex_dtu_bibliotek_a}{tex_dtu_bibliotek_frise}{DTU Bibliotek}{Danmarks Tekniske Informationcenter}%
-\makeDepartmentInfo{english}{bibliotek}{tex_bibliotek_uk}{tex_dtu_bibliotek_uk_a}{tex_dtu_bibliotek_frise}{DTU Library}{Technical Information Center of Denmark}%
-
-\makeDepartmentInfo{danish} {admin}{tex_dtu_navn_dk}{}{tex_dtu_frise}{Danmarks Tekniske Universitet}{}%
-\makeDepartmentInfo{english}{admin}{tex_dtu_navn_uk}{}{tex_dtu_frise}{Technical University of Denmark}{}%
-
-\makeDepartmentInfo{danish} {riso}{tex_riso_dk}{tex_ris_dtu_a}{tex_dtu_frise}{Ris\o\ DTU}{Nationallaboratoriet for B\ae redygtig Energi}
-\makeDepartmentInfo{english}{riso}{tex_riso_uk}{tex_ris_dtu_a_uk}{tex_dtu_frise}{Ris\o\ DTU}{National Laboratory for Sustainable Energy}
-
-\makeDepartmentInfo{danish}{diplom}{tex_diplom_dk}{tex_dtu_diplom_a}{tex_dtu_frise}{Center for Diplomingeni\o ruddannelse}{DTU Diplom}
-\makeDepartmentInfo{english}{diplom}{tex_diplom_dk}{tex_dtu_diplom_a_uk}{tex_dtu_frise}{Center for Diplomingeni\o ruddannelse}{DTU Diplom}
-
diff --git a/build/lib/slider/DTU_Beamer_files/dtu_slideshow_base.tex b/build/lib/slider/DTU_Beamer_files/dtu_slideshow_base.tex
deleted file mode 100644
index 5cc71c6..0000000
--- a/build/lib/slider/DTU_Beamer_files/dtu_slideshow_base.tex
+++ /dev/null
@@ -1,25 +0,0 @@
-% This is the basic DTU slideshow file. Used when creating a new slideshow with slider
-\documentclass[aspectratio=43]{beamer}
-\usepackage{etoolbox}
-
-\input{02450_beamer_preamble}
-%\IfFileExists{generated/slide2.tex}{ \input{generated/slide2} }{ }
-\newtoggle{overlabel_includesvgs}
-\newtoggle{overlabel_includelabels}
-
-\toggletrue{overlabel_includesvgs}
-\toggletrue{overlabel_includelabels}
-
-\begin{document}
-\begin{frame}
-\maketitle
-\end{frame}
-
-\begin{frame} \osvg{osvg01}
-\frametitle{Example frame}
-\begin{enumerate}
-	\item Item 1	
-\end{enumerate}
-\end{frame}
-
-\end{document}
\ No newline at end of file
diff --git a/build/lib/slider/DTU_Beamer_files/dtucolours.tex b/build/lib/slider/DTU_Beamer_files/dtucolours.tex
deleted file mode 100644
index cda2381..0000000
--- a/build/lib/slider/DTU_Beamer_files/dtucolours.tex
+++ /dev/null
@@ -1,83 +0,0 @@
-% dtucolours.sty
-% This file has been a part of the DTU beamer package and is now
-% moved to the resources folder because there are other parts of the 
-% DTU package that need the colours as well.
-%
-% Changelog
-% 2011-06-23 jowr Replaced the old colour definitions with the new ones from the design guide
-% 2011-07-05 jowr Added alternative colours for the graphs
-% 2011-08-16 jowr Moved colour definitions to resources folder, also used in poster class
-% 2012-06-19 jowr Added colours for cooperation with IPU
-% 2014-09-27 jowr Replaced definecolor with providecolor, do not overwrite custom colour definitions
-%
-%
-\RequirePackage{xcolor}
-%
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Define primary colours (designguide v2.3, page 13)
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\providecolor{dtured}       {rgb}{0.60, 0.00, 0.00} % Primærfarve 1 - CMYK:   0/ 91/ 72/ 23 - RGB: 153/  0/  0
-\providecolor{dtugrey}      {rgb}{0.60, 0.60, 0.60} % Primærfarve 2 - CMYK:   0/  0/  0/ 56 - RGB: 153/153/153
-% 
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Define secondary colours  (designguide v2.3, page 13)
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Please note that dtured and dtubrown have the same rgb and hex values and only differ in cmyk and pms notation.
-\providecolor{dtuyellow}    {rgb}{1.00, 0.80, 0.00} % Sekundærfarve 12 - CMYK:   0/ 25/100/  0 - RGB: 255/204/  0 - HEX: FFCC00
-\providecolor{dtuorange}    {rgb}{1.00, 0.60, 0.00} % Sekundærfarve 1  - CMYK:   0/ 50/100/  0 - RGB: 255/153/  0 - HEX: FF9900
-\providecolor{dtulightred}  {rgb}{1.00, 0.00, 0.00} % Sekundærfarve 3  - CMYK:   0/100/100/  0 - RGB: 255/  0/  0 - HEX: FF0000
-\providecolor{dtubrown}     {rgb}{0.60, 0.00, 0.00} % Sekundærfarve 4  - CMYK:   0/100/100/ 50 - RGB: 153/  0/  0 - HEX: 990000
-\providecolor{dtupurple}    {rgb}{0.80, 0.20, 0.60} % Sekundærfarve 6  - CMYK:  25/100/  0/  0 - RGB: 204/ 51/153 - HEX: CC3399
-\providecolor{dtuviolet}    {rgb}{0.40, 0.00, 0.60} % Sekundærfarve 9  - CMYK:  75/ 75/  0/  0 - RGB: 102/  0/153 - HEX: 660099
-\providecolor{dtudarkblue}  {rgb}{0.20, 0.40, 0.80} % Sekundærfarve 13 - CMYK:  75/ 50/  0/  0 - RGB:  51/102/204 - HEX: 3366CC
-\providecolor{dtulightblue} {rgb}{0.20, 0.80, 1.00} % Sekundærfarve 10 - CMYK:  50/  0/  0/  0 - RGB:  51/204/255 - HEX: 33CCFF
-\providecolor{dtulightgreen}{rgb}{0.60, 0.80, 0.20} % Sekundærfarve 11 - CMYK:  25/  0/100/  0 - RGB: 153/204/ 51 - HEX: 99CC33
-\providecolor{dtudarkgreen} {rgb}{0.40, 0.80, 0.00} % Sekundærfarve 14 - CMYK:  50/  0/100/  0 - RGB: 102/204/  0 - HEX: 66CC00
-\providecolor{dtucoolgrey}  {rgb}{0.59, 0.58, 0.57} % Farve til poster - CMYK:   0/  1/  5/ 39 - RGB: 150/148/145 - HEX: 969491
-% 
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Define colours for drawings and graphs (designguide v2.3, page 14)
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\providecolor{graph01}{named}{dtuorange}
-\providecolor{graph02}{named}{dtupurple}
-\providecolor{graph03}{named}{dtulightblue}
-\providecolor{graph04}{named}{dtubrown}
-%
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Define alternate colours for drawings and graphs 
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Define alternate colours for graphs, which are compatible with black 
-% and white printers. The initial set of colours makes it hard to distinguish 
-% between the two lighter and the two darker colours.
-\providecolor{graph01alt}{named}{dtuviolet}
-\providecolor{graph02alt}{named}{dtuyellow}
-\providecolor{graph03alt}{named}{dtulightred}
-\providecolor{graph04alt}{named}{dtulightgreen}
-\providecolor{graph05alt}{named}{dtugrey}
-%
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Define colours for IPU related documents, from IPU Designguide (16.09.2008)
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\providecolor{ipugreen}     {rgb}{0.00, 0.40, 0.20} % Dark green, 1st  standard colour  - CMYK: 088/000/095/026 - RGB: 000/102/051
-\providecolor{ipugrey}      {rgb}{0.45, 0.47, 0.49} % Dark grey, 2nd standard colour    - CMYK: 015/000/000/075 - RGB: 114/121/126
-\providecolor{ipulightgreen}{rgb}{0.36, 0.67, 0.15} % Light green, 1sr secondary colour - CMYK: 070/000/100/000 - RGB: 091/172/038
-\providecolor{ipulightgrey} {rgb}{0.85, 0.86, 0.87} % Light grey, 2nd secondary colour  - CMYK: 003/000/003/020 - RGB: 217/220/222
-%
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Old definitions
-% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \providecolor{dtured}       {cmyk}{0.00, 0.95, 0.72, 0.27}
-% \providecolor{dtudarkgray}  {cmyk}{0.00, 0.00, 0.00, 0.56}
-% \providecolor{dtugray}      {cmyk}{0.00, 0.00, 0.00, 0.37}
-% \providecolor{dtulightgray} {cmyk}{0.00, 0.00, 0.00, 0.19}
-% \providecolor{dtudarkblue}  {cmyk}{1.00, 0.72, 0.00, 0.38}
-% \providecolor{dtublue}      {cmyk}{0.60, 0.44, 0.00, 0.24}
-% \providecolor{dtulightblue} {cmyk}{0.30, 0.22, 0.00, 0.12}
-% \providecolor{dtudarkgreen} {cmyk}{1.00, 0.00, 0.83, 0.47}
-% \providecolor{dtugreen}     {cmyk}{0.725,0.004,1.00, 0.004}
-% \providecolor{dtuyellow}    {cmyk}{0.00, 0.00, 1.00, 0.00}
-% \providecolor{dtuorange}    {cmyk}{0.00, 0.34, 0.91, 0.00}
-% \providecolor{dtudarkorange}{cmyk}{0.00, 0.51, 1.00, 0.00}
-% \providecolor{dtupurpur}    {cmyk}{0.00, 0.94, 0.00, 0.43}
-% \providecolor{dtupurple}    {cmyk}{0.83, 1.00, 0.00, 0.23}
-%
diff --git a/build/lib/slider/DTU_Beamer_files/tex_compute_uk.pdf b/build/lib/slider/DTU_Beamer_files/tex_compute_uk.pdf
deleted file mode 100644
index 1488ea4bb66ad14ada91789909d4f3b9448e1103..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3167
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

diff --git a/build/lib/slider/DTU_Beamer_files/tex_dtu_compute_a_uk.pdf b/build/lib/slider/DTU_Beamer_files/tex_dtu_compute_a_uk.pdf
deleted file mode 100644
index d0d2f4efcdd8ace82a3d969627865501743c2671..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13504
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
Zuf-*aMI~S#8X6m!8FHzry863u0RZ*ql*j-8

diff --git a/build/lib/slider/DTU_Beamer_files/tex_dtu_frise.pdf b/build/lib/slider/DTU_Beamer_files/tex_dtu_frise.pdf
deleted file mode 100644
index a099312f58e8adc076799f45f00699408020fcc2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 32488
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

diff --git a/build/lib/slider/DTU_Beamer_files/tex_dtu_logo.pdf b/build/lib/slider/DTU_Beamer_files/tex_dtu_logo.pdf
deleted file mode 100644
index 862fbcd41103ab0c721cdcf46f52131c89dfbe03..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1830
zcmY!laB<T$)HCH$-THRjZ!Tj61BLvgEG`=x1%02?y!4U`1rr4Wg&-~k1qFS#%$$<c
zA_aZ7oWzn;m(=9^lvFM|JFeoAqSVA(u8KLS)4cms%z0eCTea#X^m@Fi=8-?Balp9y
z)zKT@*=7ECMDi{+|EZ;FB(h}2U+b%vQjB~5{BN(XdnR9h_0Q+~N0vUfJ0<Z`yLjTZ
zrX2<O-+Y)Bq+Xc)WV%uv%eIx=udk#>PSP{rk7gHovuNJ^=}X>sFg&=ZY}N2>TkMHB
zJ(cZh4zY7Wb8Pl~(plW!{C-bpsle4u(~iF16s)Gzta<v#w{SH*;ii<Sq0<A;ubp<b
zW`U^GMu9C}+gaK)%eA`wC+MYi&tcgsp11At=hcFtF*A3+n)TK)@$UL7g*Fzq&%D*&
zqh9;|2V33`;T>MtOB_5{KSnWWCTAVm^3Z<H^G)W;iIbN(xxZyR>;K#8#jgA8D<_=E
zaeVOST5&a-&Gm(O)nzl5v6sd+Yzxcat4Ot<nC#RR@98G7Aok-_{jTX5HhY(_W`E8!
zxi~+)WZ~A99c$yVo=G+=W!iiE+4e^gZ*`_#@)v3D`d2ln<F=^Kk-0pT)AuZHemMQt
zKR&-(_GwKb9!=>{`i|WWHgjgU?3$jqaAz7@;LYGE84{j%Em@NabvN6s*H*ga7dNv!
zvbr+nZTdH<tgsB0kGIyX2zns+$4Z91s(yo9_{!eu&E*R%53PJTd*wT8kqc7S3*B~q
zsa<`r<HEPKY!klwq_4gIMVL+H(?pi=3Y*KUN5bzhX83QM@;B#AWW$Gr<v{`N4}~5l
z8P5tiej-G6S8?LX()k?fwq3q6`&Pd_`l9AUx83*J+owJhswThc_svw2UYZfPdiEQ!
zwd=mG^m15nb@%xlrCK-GRgS$+m7W-q^}gIK$ziTyrYrm9F2$K5zR^7=vn<~&QJE9=
zLUO9f=}XK<H_S<0SLdvGsm`de-9O>#!Y>&$D=tT_7R{QFH+{a8-t8{=IahBbTsoMR
z&)Ll7a{44s(6Y?S>leBmu*wbT>f!&iviQfBuZM40s89JCvTNo!77MFAiv4cd*DVjc
ze4Vz=V%hdjo5dE0|M_BC_Umg$f7<5vCthZk2+psbZfCG>&cTiyYq#pZe(0}J{7lX0
z{-k^}**xv~&3|MLyezGHC-x%RKa2JMvHgNSjx*N(nD4lM=8V`oYm@ht=#}p1@vXZ3
z(8}$yO09jt_X}lKkD3YuuPR5c(t6GLxi6e!nf#yc$M@O3P+k_4(zA8_lKJA|u6Or^
zgp2GuIQgewtCwESI}W)gGiz6NcNw^gm~B7RudydB(tO$FlP|LET`TvlTW0@i@$r8r
zJ63#q!@1EV^~bUDuK4hp{CB_n{;&jf@Mu5#v;9xhQTxmF)BnGJ#+90v0?ojwc`2Z*
z56bT#T0ud<($oMX58@fY3kGme;961Q9$b=GlB!^10}=og4~Yf}pkl+>QNd6_KRHps
zP{Ga)Bxh#_DkY$%o5Iae&=09BNLA1eNK8)!Dbo)~EK1EQQ80v;H@>MUnTbyM6$;S`
z1_}lW#uj=OCME_3Mhd28dS+${v0z=!`FSO&c_qaPprR`XEaYC4Us{0VFo->1QII^y
zt-%WVAw`LK#RVWclPh7u&cO=$E~#ai$*Do^P9Q;u5A=gli}Op1l2eNnK;aOC<R6f0
zLE!`PIm8~2e~LkR^}RDwiWQ<2Kwb`lyS5bMMI-~vkOIWHC^fMpzeqtNIWe;+U%^n%
z&`{4vK_jE2q`*pFA1s(&lvt3FnOv-wUzDz?3AQGnC_kk%Ih7P`c6P9MHAk`@;(q7E
zlEj?+bcoT3>8Zug7(wW%C`wJ^GElJKGJpdGGgDJzQ-w4IsF<O#iHQPORv`~AW?+UP
zW?*1wimA@T2t&-!*bGC=#K00m%oJH&Nl{{EPHGXjHVe+IN>#7``zk0uzeEA#aY%CU
g%uCBx07U~hUW-c-i%P&gG&Hra;8Im}^>^a}0Anr1<p2Nx

diff --git a/build/lib/slider/DTU_Beamer_files/textext_preamble.tex b/build/lib/slider/DTU_Beamer_files/textext_preamble.tex
deleted file mode 100644
index 8f34c6d..0000000
--- a/build/lib/slider/DTU_Beamer_files/textext_preamble.tex
+++ /dev/null
@@ -1,9 +0,0 @@
-\usepackage{amsmath}
-\usepackage{amsfonts}
-\usepackage{color}
-\usepackage{bm}
-
-\newcommand{\m}[1]{\bm{ #1} }
-\newcommand{\mcal}[1]{\mathcal{ #1}}
-
-	
\ No newline at end of file
diff --git a/build/lib/slider/__init__.py b/build/lib/slider/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/build/lib/slider/__main__.py b/build/lib/slider/__main__.py
deleted file mode 100644
index 0961f33..0000000
--- a/build/lib/slider/__main__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-# from jinjafy import execute_command
-from slider.latexutils import latexmk
-from slider.slider_cli import clize_main_entry_point
-
-if __name__ == "__main__":
-    clize_main_entry_point()
\ No newline at end of file
diff --git a/build/lib/slider/beamer_nup.py b/build/lib/slider/beamer_nup.py
deleted file mode 100644
index 7b11e78..0000000
--- a/build/lib/slider/beamer_nup.py
+++ /dev/null
@@ -1,79 +0,0 @@
-import os
-import glob
-
-
-def beamer_nup(pdf_file, nup=6, output=None):
-    # pdf_file = pdf_file[:-4] + ".pdf"
-    if nup not in [1, 2, 3, 4, 6]:
-        assert False
-
-    jinja = os.path.dirname( __file__ ) + "/../../jinja"
-    if os.path.isdir(jinja):
-        js = {}
-        for name in glob.glob(jinja + "/*.tex"):
-            with open(name, 'r') as f:
-                js[os.path.basename(name)[:-4] ] = f.read()
-
-        s = ""
-        for k, v in js.items():
-            v = v.replace("\\", "\\\\")
-
-            s += f'{k} = """\n' + v + '\n"""' + "\n"
-
-        with open(os.path.dirname(__file__) + "/jinjastrings/generated.py", 'w') as f:
-            s = "# WARNING! THIS FILE IS AUTOMATICALLY GENERATED! ALL CHANGES WILL BE WIPED. SEE JINJA DIRECTORY\n"*10  + s
-            f.write(s)
-
-
-
-    from slider.jinjastrings.generated import lecture_collector_partial
-
-    import jinja2
-
-    import tempfile
-    # tempfile.gettempdir()
-    tmp = tempfile.TemporaryDirectory().name
-    os.mkdir(tmp)
-    import shutil
-    dest_pdf = tmp + "/" + os.path.basename(pdf_file)
-    shutil.copyfile(pdf_file, dest_pdf)
-
-    import jinja2
-    data = {'a4': False,
-            'twoup': False,
-            'sixup': False}
-    if nup == 1:
-        data['a4'] = True
-    if nup == 2:
-        data['twoup'] = True
-    if nup == 3:
-        data['threeup'] = True
-    if nup == 4:
-        data['fourup'] = True
-    if nup == 6:
-        data['sixup'] = True
-    data['frame'] = True
-
-    data['pdffiles'] = [os.path.basename(dest_pdf)]
-
-    # data = {'hello': 'world'}
-    print(tmp)
-    s = jinja2.Environment().from_string(lecture_collector_partial).render(data)
-
-    with open(tmp +"/nup.tex", 'w') as f:
-        f.write(s)
-
-    from slider import latexmk
-    latexmk(tmp +"/nup.tex", shell=True)
-
-    if output == None:
-        output = os.path.dirname(pdf_file) + "/" + os.path.basename(pdf_file)[:-4] + f"_{nup}up.pdf"
-    shutil.move(tmp +"/nup.pdf", output)
-    print("[Beamer-nup] Wrote output to", output)
-    return output
-
-
-
-if __name__ == "__main__":
-    beamer_nup("../../examples/new_project/index.pdf")
-
diff --git a/build/lib/slider/convert.py b/build/lib/slider/convert.py
deleted file mode 100644
index 61b85ca..0000000
--- a/build/lib/slider/convert.py
+++ /dev/null
@@ -1,126 +0,0 @@
-from jinjafy import execute_command
-import os
-from bs4 import BeautifulSoup
-
-def svg2pdf(fin, fout=None, crop=True, text_to_path=False, export_area_page=True):
-    """
-     -C, --export-area-page                     Area to export is page
-       -T, --export-text-to-path                  Convert text to paths (PS/EPS/PDF/SVG)
-    """
-    # text_to_path = True
-    if fout is None:
-        fout = fin[:-4] + ".pdf"
-    cmd = ['inkscape']
-    if export_area_page:
-        cmd.append("-C")
-    if text_to_path: # Good idea for inkscape which seems to bungle the fonts (space in font names?)
-        cmd.append("-T")
-    cmd.append(fin)
-    cmd.append(f"--export-filename={fout}")
-    # '-C', '--without-gui', f'--file={fin}', f'--export-pdf={fout}']
-    # cmd = ['inkscape', '-C', '-T', '--without-gui', '--file=%s'%svg_fonts_layers[-1], '--export-pdf=%s' % pdf_nofonts_layers[-1]]
-    execute_command(cmd)
-    # cmd = f"pdftocairo {fout} -pdf {fout}"
-    # execute_command(cmd.split())
-
-    if crop:
-        cmd = ['pdfcrop', fout, fout]
-        execute_command(cmd)
-
-
-
-def pdf2svg(fin, fout, page_no=None):
-    '''
-    To remove fonts look at
-    https://tex.stackexchange.com/questions/23407/how-can-i-convert-text-to-paths-with-pdflatex
-    convert to ps and back to pdf
-    '''
-    if fout is None:
-        fout = fin[:-4] + ".svg"
-
-    '''
-    pdftocairo -svg C:/Users/tuhe/Documents/02465public/Lectures/Lecture_2/Latex/Lecture_2_NO_SVGS.pdf C:/Users/tuhe/Documents/02465public/Lectures/Lecture_2/Latex/osvgs/tmp/determpath.svg -f 2 -l 2
-    
-    '''
-    cmd = ['pdftocairo', '-svg', fin, fout]
-    if page_no is not None:
-        if not isinstance(page_no, str):
-            page_no = str(page_no)
-        cmd += ['-f', str(page_no), '-l', str(page_no)]
-
-    execute_command(cmd)
-
-
-def pdf2png(fin, fout=None, scale_to=None):
-    if fout is None:
-        fout = fin[:-4] + ".png"
-    fout = fout[:-4]
-    cmd = f"pdftocairo -png -singlefile {fin} {fout}"
-    if scale_to is not None:
-        cmd += f" -scale-to {scale_to}"
-    execute_command(cmd.split())
-    return fout + ".png"
-
-
-def pdfcrop(fin, fout=None):
-    if fout is None:
-        fout = fin
-    cmd = f"pdfcrop {fin} {fout}"
-    execute_command(cmd.split())
-
-
-
-def svg_edit_to_importable(svg_edit_file,verbose=False, keep_background_layer=True):
-    assert False
-    """
-    Take an inkscape file as input and split it into layers.
-    CODE NOT IN USE RIGHT NOW; MUST WORK OUT WHAT TO USE IT FOR.
-    """
-    odir = os.path.dirname(svg_edit_file)
-    fn = os.path.basename(svg_edit_file)[:-4]
-
-    pdf_nofonts_base = odir + "/x_do_not_edit_%s-l%s_nofonts.pdf"
-    svg_fonts_base =  odir + "/" + SVG_TEXINCLUDE_RELPATH + "/%s-l%s_fonts.svg"
-    if not os.path.exists(os.path.dirname(svg_fonts_base)):
-        os.mkdir(os.path.dirname(svg_fonts_base))
-
-    pdf_nofonts_layers = []
-    svg_fonts_layers = []
-
-    with open(svg_edit_file, 'r', encoding="UTF-8",errors="surrogateescape") as f:
-        soup = BeautifulSoup(f, 'xml', from_encoding="UTF-8")
-        for i in soup.findAll("image", {'id': 'image4444th'}):
-            i.extract()
-
-        layer_labels = []
-        for i in soup.findAll("g", {'inkscape:groupmode': 'layer'}):
-            if i['inkscape:label'] == "bg_layer":
-                #i.extract()
-                pass
-            else:
-                layer_labels.append(i['inkscape:label'])
-
-        for j in range(len(layer_labels)):
-            s2 = soup.__copy__()
-            for i in s2.findAll("g", {'inkscape:groupmode': 'layer'}):
-                if layer_labels[j] == i['inkscape:label'] or i['inkscape:label'] == "bg_layer":
-                    pass
-                else:
-                    i.extract()
-            # now you got an image only with this layer. save it.
-            layer_number = layer_labels[j].split(" ").pop()
-            pdf_nofonts_layers.append(pdf_nofonts_base%(fn,layer_number))
-            svg_fonts_layers.append(svg_fonts_base % (fn, layer_number))
-
-            with open(svg_fonts_layers[-1], 'bw') as f2:
-                f2.write(s2.encode("UTF-8"))
-
-            cmd = ['inkscape', '-C', '-T', '--without-gui', '--file=%s'%svg_fonts_layers[-1], '--export-pdf=%s' % pdf_nofonts_layers[-1]]
-            execute_command(cmd)
-
-    if verbose:
-        print("svg_edit_to_importable called. Converting svg file\n  > %s\nto files:"%svg_edit_file)
-        for s in pdf_nofonts_layers + svg_fonts_layers:
-            print("  > " + s)
-
-    return pdf_nofonts_layers, svg_fonts_layers
diff --git a/build/lib/slider/latexutils.py b/build/lib/slider/latexutils.py
deleted file mode 100644
index 2e50e09..0000000
--- a/build/lib/slider/latexutils.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from jinjafy import execute_command
-import os
-import shutil
-
-def latexmk(texfile,pdf_out=None,shell=True,cleanup=False, Linux=False):
-    cdir = os.getcwd()
-    dname = os.path.dirname(texfile)
-    os.chdir(dname)
-    texfile = os.path.basename(texfile)
-    if Linux:
-        CMD = "latexmk -f -g -pdf -interaction=nonstopmode " + texfile
-        print("Running LaTeX command>> " + CMD)
-        s = execute_command(CMD.split(" "), shell=shell)
-    else:
-        CMD = "latexmk -f -g -pdf -shell-escape -interaction=nonstopmode " + texfile
-        print("Running LaTeX command>> " + CMD)
-        s = execute_command(CMD.split(" "),shell=shell)
-
-    if pdf_out:
-        shutil.copyfile(texfile[:-4]+".pdf", pdf_out)
-    else:
-        pdf_out = os.path.join(os.path.dirname(texfile), texfile[:-4]+".pdf")
-
-    if cleanup and os.path.exists(pdf_out):
-        bft = ['bbl', 'blg', 'fdb_latexmk', 'fls', 'aux', 'synctex.gz', 'log']
-        for ex in bft:
-            import glob
-            fl = glob.glob(dname + "/*."+ex)
-            for f in fl:
-                os.remove(f)
-
-    os.chdir(cdir)
-    return pdf_out
-
-
-
diff --git a/build/lib/slider/legacy_importer.py b/build/lib/slider/legacy_importer.py
deleted file mode 100644
index 058a79e..0000000
--- a/build/lib/slider/legacy_importer.py
+++ /dev/null
@@ -1,487 +0,0 @@
-# Control import of slides from pdf to svg-editable format.
-# inkscape -z -f "Input.pdf" -l "Output.svg"
-# https://github.com/eea/odfpy
-import os
-import shutil
-from jinjafy import jinjafy_comment
-from bs4 import BeautifulSoup
-import glob
-from jinjafy import execute_command
-
-CDIR = os.path.dirname(os.path.realpath(__file__))
-CDIR = CDIR.replace('\\','/')
-
-SVG_EDIT_RELPATH = "osvgs" # files that are supposed to be edited goes here.
-SVG_TMP_RELPATH = "tmp" # various files that can be flat out deleted goes here
-SVG_TEXINCLUDE_RELPATH = "do_not_edit" # the no_fonts version and the pure (+fonts) versions goes here
-DTU_beamer_base = CDIR +"/DTU_Beamer_files"
-BLANK_PNG =DTU_beamer_base + "/blank.png"
-
-def ensure_dir(dname):
-    assert False
-    if not os.path.exists(dname):
-        os.mkdir(dname)
-
-def join_pdfs(slide_deck_pdf, outfile):
-    assert False
-    dn = os.path.dirname(slide_deck_pdf[0])
-    files = [os.path.relpath(os.path.dirname(pdf), start=dn) + "/" + os.path.basename(pdf) for pdf in slide_deck_pdf]
-    outf = os.path.relpath(os.path.dirname(outfile), start=dn) + "/" + os.path.basename(outfile)
-    cmd = "cd " + dn + " && pdftk " + " ".join(files) + " cat output " + outf
-    execute_command(cmd.split())
-
-
-def li_import(slide_deck_pdf, tex_output_path=None, num_to_take=None, force=False, svg_pfix="osvg", svg_height=743.75, svg_width=992.5,
-              svg_converted_slides="svg_converted_slides.tex"):
-    assert False
-    '''
-    svg_height and svg_width are used to scale the converted image. This is useful because otherwise the viewbox
-    will fail to match the DTU template. I.e. these numbers will generally change dependent on the LaTeX template.
-
-    :param slide_deck_pdf:
-    :param tex_output_path:
-    :param num_to_take:
-    :param force:
-    :param svg_pfix:
-    :param svg_height:
-    :param svg_width:
-    :return:
-    '''
-    # take this slide deck. Generate beamer, svg output.
-
-    if isinstance(slide_deck_pdf, list):
-        dn = os.path.dirname(slide_deck_pdf[0])
-        ofile = os.path.join(dn, "tmp.pdf")
-        join_pdfs(slide_deck_pdf, ofile)
-        slide_deck_pdf = ofile
-
-    if tex_output_path is None:
-        tex_output_path = slide_deck_pdf[:-4]+"_output.tex"
-
-    output_dir = os.path.dirname(tex_output_path)
-
-    # if output_dir is None:
-    #     output_dir = os.path.dirname(slide_deck_pdf)
-    assert(os.path.exists(output_dir))
-    svg_tmp_dir = output_dir + "/" + SVG_EDIT_RELPATH +"/" + SVG_TMP_RELPATH
-    svg_texinclude_dir = output_dir + "/" + SVG_EDIT_RELPATH +"/" +SVG_TEXINCLUDE_RELPATH
-    svg_edit_dir = output_dir + "/" +SVG_EDIT_RELPATH
-    tex_output_file = os.path.basename(tex_output_path)
-
-    print("Converting slides to output: " + tex_output_file)
-    if os.path.exists(output_dir + "/" + tex_output_file) or glob.glob(svg_edit_dir + "/*.svg"):
-        print("Non-empty output directory...")
-        if not force:
-            raise Exception("Non-empty output directory. Please clean")
-
-    ensure_dir(svg_edit_dir)
-    ensure_dir(svg_tmp_dir)
-    ensure_dir(svg_texinclude_dir)
-
-    if not output_dir:
-        raise Exception("Must specify output directory!")
-
-    lecture_tex_out = move_template_files(output_dir, tex_output_file)
-    osvgs_basename = []
-    print("Splitting slide deck into images...")
-
-    # slide_deck_split_svg = slidedeck_to_images(slide_deck_pdf, svg_tmp_dir + "/" + svg_pfix + "-%i.svg",
-    #                                            num_to_take=num_to_take)
-    slide_deck_split_svg = slidedeck_to_images(slide_deck_pdf, svg_tmp_dir+"/"+svg_pfix+"-%i.svg", num_to_take=num_to_take)
-    print("Converting svg to osvg..")
-    for i,osvg in enumerate(slide_deck_split_svg):
-        dosvg = raw_svg_to_osvg(osvg, overwrite_existing=True, height=svg_height, width=svg_width)
-        osvgs_basename.append(dosvg)
-
-    print("jinjafying and cleaning...")
-    # osvgs_basename = osvgs_basename[3:] # Drop first 3 slides; automatically generated.
-    data = {'osvgs_basename' : osvgs_basename}
-    s = jinjafy_comment(data, jinja_tag="jinja1")
-    with open(output_dir + "/%s"%svg_converted_slides, 'w') as f:
-        f.write(s)
-    return lecture_tex_out
-
-# <jinja1>
-# {% for sf in osvgs_basename %}
-# \begin{frame}\osvg{{"{"}}{{sf}}{{"}"}}
-# % add content here
-# \end{frame}
-# {% endfor %}
-# </jinja1>
-# \begin{textblock}{1}(0,0)
-# 	\includesvg[width=1.0\linewidth]{{"{"}}{{sf}}{{"}"}}
-# \end{textblock}\overlabel{ {{sf}} }
-# SVG editable file (i.e. with background image) to file which can be imported into
-# the .tex file.
-
-'''
-Take a raw svg in the tmp directory and compile it into the nice svg format with empty, white background.
-This can be used when importing a new slide deck or when inserting a new overlabel tag somewhere in a
-tex document.
-'''
-def raw_svg_to_osvg(raw_svg_file, overwrite_existing=False, height=None, width=None):
-    svg_tmp_dir = os.path.dirname(raw_svg_file)
-    svg_edit_dir = os.path.dirname(svg_tmp_dir)
-    ofile_edit = svg_edit_dir + "/" + os.path.basename(raw_svg_file)
-    # if height is not None and width is not None:
-    #     svg_set_hw_(raw_svg_file, raw_svg_file,height=height, width=width)
-
-    ofile_fonts_pure = rm_svg_bg(svg_input=raw_svg_file, svg_output=ofile_edit, height=height, width=width)
-    png_file = svg_tmp_dir + "/" + os.path.basename(ofile_fonts_pure)[:-4] + ".png"
-    shutil.copyfile(BLANK_PNG, png_file)
-    ofile_edit = add_png_background_to_svg(svg_input=ofile_fonts_pure, svg_output=None, png_file=png_file)
-    pdf_nofonts, svg_fonts = svg_edit_to_importable(ofile_edit)
-    osvgs_basename = os.path.basename(raw_svg_file)[:-4]
-    return osvgs_basename
-
-
-'''
-Related to li_import. 
-Set the width/height of an imported slide svg image in case it does not match the DTU template. 
-'''
-def svg_set_hw_(svg_in, svg_out, height, width):
-    assert False
-    print(f"HW fix [{height} {width}] > {svg_in} -> {svg_out}")
-
-    with open(svg_in, 'r', encoding="UTF-8") as f:
-        soup = BeautifulSoup(f, 'xml', from_encoding="UTF-8")
-        tags = soup.find_all("svg")
-        assert (len(tags) == 1)
-        tag = tags[0]
-        tag['height'] = str(height)
-        tag['width'] = str(width)
-        tag['viewBox'] = f"0 0 {height} {width}"
-    # print([svg_input, logo_rem, bg_rem, tx_rem])
-    with open(svg_out, 'bw') as f:
-        f.write(soup.encode("UTF-8"))
-    return
-    with open(svg_in, 'r', encoding="UTF-8", errors="surrogateescape") as f:
-        soup = BeautifulSoup(f, 'xml', from_encoding="UTF-8")
-        tags = soup.find_all("svg")
-        assert(len(tags) == 1)
-        tag = tags[0]
-        tag['height'] = str(height)
-        tag['width'] = str(width)
-        tag['viewBox'] = f"0 0 {height} {width}"
-        s2 = soup.__copy__()
-        # sout = s2.encode("UTF-8")
-    # f.close()
-    with open(svg_out, 'w', encoding="UTF-8") as f2:
-        f2.write(str(s2))
-
-def svg_check_background_layer(svg_edit_file, verbose=False):
-    assert False
-
-    # Check if svg background layer is pointing to the right .png file.
-    # this may not be the case sometimes because svg files are moved, etc. which overwrite the default
-    # background .png path.
-    with open(svg_edit_file, 'r', encoding="UTF-8",errors="surrogateescape") as f:
-        soup = BeautifulSoup(f, 'xml', from_encoding="UTF-8")
-        g = None
-        for i in soup.findAll("g", {'inkscape:groupmode': 'layer'}):
-            if i['inkscape:label'] == "bg_layer":
-                g = i
-                break
-        ok = True
-        bgim = g.find("image")
-        bg_png = bgim['xlink:href']
-        real_png = os.path.dirname(svg_edit_file) + "/" + SVG_TMP_RELPATH + "/" + os.path.basename(svg_edit_file)[:-4] + ".png"
-        real_png = os.path.relpath(real_png, start=os.path.dirname( svg_edit_file) )
-        bg_png = os.path.relpath(bg_png,start=os.path.dirname( svg_edit_file)  )
-        if real_png != bg_png:
-            print("slider:warning> Bungled background png image in " + svg_edit_file)
-            s = jinjafy_comment({'png_file': real_png}, jinja_tag="jinja3")
-            new_img = BeautifulSoup(s, "html.parser")
-            g.insert_after( new_img)
-            g.unwrap()
-            bgim.unwrap()
-
-            with open(svg_edit_file[:-4]+"_test.svg", "w") as f2:
-                f2.write(soup.prettify(formatter="xml"))
-
-# <jinja3>
-# <g inkscape:groupmode="layer" id="layer1" inkscape:label="bg_layer" style="display:inline" sodipodi:insensitive="true">
-#      <image
-#        xlink:href="{{png_file}}"
-#        width="100%"
-#        height="100%"
-#        preserveAspectRatio="none"
-#        style="image-rendering:optimizeQuality"
-#        id="image4444th"
-#        x="0"
-#        y="0" />
-#  </g>
-# </jinja3>
-
-
-
-def svg_edit_to_importable(svg_edit_file,verbose=False):
-    odir = os.path.dirname(svg_edit_file)
-    fn = os.path.basename(svg_edit_file)[:-4]
-
-    pdf_nofonts_base = odir + "/x_do_not_edit_%s-l%s_nofonts.pdf"
-    svg_fonts_base =  odir + "/" + SVG_TEXINCLUDE_RELPATH + "/%s-l%s_fonts.svg"
-    if not os.path.exists(os.path.dirname(svg_fonts_base)):
-        os.mkdir(os.path.dirname(svg_fonts_base))
-
-    pdf_nofonts_layers = []
-    svg_fonts_layers = []
-
-    with open(svg_edit_file, 'r', encoding="UTF-8",errors="surrogateescape") as f:
-        soup = BeautifulSoup(f, 'xml', from_encoding="UTF-8")
-
-        for i in soup.findAll("image", {'id': 'image4444th'}):
-            i.extract()
-
-        layer_labels = []
-        for i in soup.findAll("g", {'inkscape:groupmode': 'layer'}):
-            if i['inkscape:label'] == "bg_layer":
-                #i.extract()
-                pass
-            else:
-                layer_labels.append(i['inkscape:label'])
-
-        for j in range(len(layer_labels)):
-            s2 = soup.__copy__()
-            for i in s2.findAll("g", {'inkscape:groupmode': 'layer'}):
-                if layer_labels[j] == i['inkscape:label'] or i['inkscape:label'] == "bg_layer":
-                    pass
-                else:
-                    i.extract()
-            # now you got an image only with this layer. save it.
-            layer_number = layer_labels[j].split(" ").pop()
-            pdf_nofonts_layers.append(pdf_nofonts_base%(fn,layer_number))
-            svg_fonts_layers.append(svg_fonts_base % (fn, layer_number))
-
-            with open(svg_fonts_layers[-1], 'bw') as f2:
-                f2.write(s2.encode("UTF-8"))
-
-            from slider.convert import svg2pdf
-            svg2pdf(svg_fonts_layers[-1], fout=pdf_nofonts_layers[-1], crop=False, text_to_path=True, export_area_page=True)
-            # cmd = ['inkscape', '-C', '-T', '--without-gui', '--file=%s'%svg_fonts_layers[-1], '--export-pdf=%s' % pdf_nofonts_layers[-1]]
-
-    if verbose:
-        print("svg_edit_to_importable called. converted svg file\n  > %s\nto files:"%svg_edit_file)
-        for s in pdf_nofonts_layers + svg_fonts_layers:
-            print("  > " + s)
-
-    return pdf_nofonts_layers, svg_fonts_layers
-
-# <jinja2>
-# {{svg_start}}
-# <g inkscape:groupmode="layer" id="layer1" inkscape:label="bg_layer" style="display:inline" sodipodi:insensitive="true">
-#      <image
-#        xlink:href="{{png_file}}"
-#        width="100%"
-#        height="100%"
-#        preserveAspectRatio="none"
-#        style="image-rendering:optimizeQuality"
-#        id="image4444th"
-#        x="0"
-#        y="0" />
-#  </g>
-# <g inkscape:groupmode="layer"
-#     id="layer2"
-#     inkscape:label="Layer 1"
-#     style="display:inline">
-# {{svg_end}}
-# </g></svg>
-# </jinja2>
-def add_png_background_to_svg(svg_input, png_file, svg_output=None):
-    if not svg_output: svg_output = svg_input
-    rp = os.path.relpath(png_file, os.path.commonprefix([svg_output, png_file]))
-    rp = rp.replace("\\", "/")
-
-    with open(svg_input,'r', encoding="UTF-8") as f:
-        svg = f.read()
-    mds = "</metadata>"
-    mds_id = svg.find(mds)
-    if mds_id < 0:
-        # file has no meta data.
-        j = svg.find(">", svg.find("<svg"))
-        svg = svg[:j+1] + "<metadata></metadata>" +svg[j+1:]
-        mds_id = svg.find(mds)
-
-    mds_dex = mds_id+len(mds)
-
-    data = {'png_file' : rp, 'svg_start': svg[:mds_dex],'svg_end': svg[mds_dex:]}
-    svg = jinjafy_comment(data, jinja_tag="jinja2")
-
-    si = svg.find("<svg") + 4
-    dsvg = ' xmlns:sodipodi = "http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"\n xmlns:inkscape = "http://www.inkscape.org/namespaces/inkscape" \n'
-    svg = svg[:si] + dsvg + svg[si:]
-
-    with open(svg_output, 'w',encoding="UTF-8") as f:
-        f.write(svg)
-    return svg_output
-
-
-def slidedeck_to_images(slide_deck_pdf, base_out_pattern, num_to_take=None):
-    assert False
-    if not os.path.exists(os.path.dirname(base_out_pattern)):
-        os.mkdir(os.path.dirname(base_out_pattern))
-    num_pages = num_pages_in_pdf(slide_deck_pdf)
-    opat = base_out_pattern[:-4] + "_tmp.pdf"
-    opat.replace("%i", '%d')
-    cmd = f"pdftk {slide_deck_pdf} burst output {opat} compress"
-    print("pdftk splitting into ", num_pages)
-
-    execute_command(cmd.split())
-    outfiles = []
-    slide_deck_split_pdf = [base_out_pattern[:-4] % (i + 1) + "_tmp.pdf" for i in range(num_pages)]
-    for i, opdf in enumerate(slide_deck_split_pdf):
-        print("convertion", i, opdf)
-        ofile = base_out_pattern %(i+1)
-        cmd = f"pdf2svg {opdf} {ofile}"
-        execute_command(cmd.split())
-        b = os.path.getsize(ofile)
-        # print(b)
-        if b == 0:
-            print("Skipping this file because it has size 0...")
-        else:
-            outfiles.append(ofile)
-
-    return outfiles
-
-def slidedeck_to_images_DEFUNCT(slide_deck_pdf, base_out_pattern, num_to_take=None):
-    assert False
-    if not os.path.exists(os.path.dirname(base_out_pattern)):
-        os.mkdir(os.path.dirname(base_out_pattern))
-
-    num_pages = num_pages_in_pdf(slide_deck_pdf)
-    slide_deck_split_pdf = [base_out_pattern[:-4] % (i + 1) + "_tmp.pdf" for i in range(num_pages)]
-    if num_to_take: slide_deck_split_pdf = slide_deck_split_pdf[0:num_to_take]
-
-    outfiles = []
-    for i, opdf in enumerate(slide_deck_split_pdf):
-        print("convertion", i, opdf)
-        ofile = base_out_pattern %(i+1)
-        slide_to_image(slide_deck_pdf, ofile, page_to_take=i+1)
-        outfiles.append(ofile)
-    return outfiles
-
-def num_pages_in_pdf(pdf_file):
-    assert False
-    cmd = ['pdftk', '%s' % pdf_file, 'dump_data']
-    ss = execute_command(cmd)[0].splitlines()
-    s = int([s for s in ss if 'NumberOfPages' in s].pop().split()[-1])
-    return s
-
-
-def slide_to_image(slide_deck_pdf, output, page_to_take=1, use_inkscape=True):
-    if not os.path.exists(os.path.dirname(output)):
-        os.mkdir(os.path.dirname(output))
-    slide_deck_split_pdf = output[:-4] + "_tmp.pdf"
-    ext = output[-3:]
-    if ext == "svg":
-        from slider.convert import pdf2svg
-        pdf2svg(slide_deck_pdf, fout=output, page_no=page_to_take)
-        # cmd = ['pdftk', '%s' % slide_deck_pdf, 'cat', '%i' % page_to_take, 'output', '%s' % slide_deck_split_pdf]
-        # # page_to_take = 1
-
-        # if use_inkscape:
-        #     cmd = ['inkscape', '-C', '--without-gui', '--file=%s' % slide_deck_split_pdf, '-l', '%s' % output]
-        # else:
-        #     cmd = ['pdf2svg', slide_deck_split_pdf, output]
-    else:
-        if os.path.exists(output):
-            os.remove(output)
-        cmd = ("pdftocairo -png -f %i -l %i"% (page_to_take, page_to_take)).split(" ") + [slide_deck_pdf, output]
-        execute_command(cmd)
-    if ext == "png":
-        png_with_postfix = glob.glob(output + "-*.png")
-        if not png_with_postfix:
-            print("WARNING! no png generated.")
-            print(output)
-        else:
-            png_with_postfix = png_with_postfix.pop()
-            shutil.move(png_with_postfix, output)
-
-    return output
-
-
-def move_template_files(output_dir="examples/output", output_tex_file=None):
-    files_to_move = ["tex_dtu_logo.pdf", "tex_dtu_compute_a_uk.pdf", "tex_dtu_frise.pdf", "dtucolours.tex",
-                     "beamerthemeDTU.sty", "beamerfontthemeDTU.sty","beamercolorthemeDTU.sty",
-                     "beamerinnerthemeDTU.sty", "beamerouterthemeDTU.sty", "departments.tex", "tex_compute_uk.pdf",
-                     "02450_beamer_preamble.tex",  # Deprecated.
-                     'beamer_slider_preamble.tex', # The current version.
-                     ]
-    sd = list( zip(files_to_move, files_to_move) )
-    if output_tex_file:
-        sd.append( ("02450_lectures_base.tex", output_tex_file))
-    for (source,dest) in sd:
-        shutil.copy(DTU_beamer_base + "/" + source, output_dir + "/" + dest)
-
-    if output_tex_file:
-        lecture_tex_out = output_dir + "/" + output_tex_file
-    else:
-        lecture_tex_out = None
-
-    return lecture_tex_out
-
-
-def rm_svg_bg(svg_input, svg_output=None, fix_bg=True, fix_txt=True, fix_logo=True, height=None, width=None):
-    logo_rem = 0
-    tx_rem = 0
-    bg_rem = 0
-    if not svg_output:
-        svg_output = svg_input
-
-    with open(svg_input, 'r', encoding="UTF-8") as f:
-        soup = BeautifulSoup(f, 'xml', from_encoding="UTF-8")
-        BG_white = ["fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none", "fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"]
-        for bgw in BG_white:
-            gg = soup.findAll("path", {"style" : bgw})
-            for g in gg:
-                if not fix_bg: break
-                g['style'] = bgw.replace("opacity:1", "opacity:0")
-                bg_rem += 1
-                if bg_rem >= 2: break
-
-        dtulogo = soup.findAll("image")
-        for i in dtulogo:
-            if "iVBORw0KGgoAAAANSUhEUgAABawAAAFcCAYAAAAkg" in i['xlink:href'] and fix_logo:
-                i.extract()
-                logo_rem += 1
-
-        btx = ["font-variant:normal;font-weight:bold;font-size:8px;font-family:Verdana;-inkscape-font-specification:Verdana-Bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none",
-               "font-variant:normal;font-weight:normal;font-size:9px;font-family:Verdana;-inkscape-font-specification:Verdana;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none",
-               "font-variant:normal;font-weight:bold;font-size:9px;font-family:Verdana;-inkscape-font-specification:Verdana-Bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none",
-               "font-variant:normal;font-weight:bold;font-size:8px;font-family:Arial;-inkscape-font-specification:Arial-BoldMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none",
-               "font-variant:normal;font-weight:normal;font-size:9px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"]
-
-        for j,style in enumerate(btx):
-            if not fix_txt:
-                break
-            for tx in soup.findAll("text", {"style": style}):
-                tx.extract()
-                tx_rem += 1
-
-        # soup = BeautifulSoup(f, 'xml', from_encoding="UTF-8")
-        if height is not None and width is not None:
-            ''' 
-            We are doing this if the svg is being imported and the height/width might not match the DTU template viewbox. 
-                        
-            '''
-            tags = soup.find_all("svg")
-            if len(tags) != 1:
-                a = 1234
-
-            assert (len(tags) == 1)
-            tag = tags[0]
-            tag['height'] = str(height)
-            tag['width'] = str(width)
-            tag['viewBox'] = f"0 0 {height} {width}"
-
-
-    print([svg_input, logo_rem, bg_rem, tx_rem])
-    with open(svg_output, 'bw') as f:
-        f.write(soup.encode("UTF-8"))
-    return svg_output
-
-
-if __name__ == "__main__":
-    print("operating...")
-    lecture_tex_out = li_import("examples/ex1/Lecture11.pdf", output_dir="examples/output", num_to_take=3)
-    print("Wrote new main file: " + lecture_tex_out)
\ No newline at end of file
diff --git a/build/lib/slider/slide.py b/build/lib/slider/slide.py
deleted file mode 100644
index ec49193..0000000
--- a/build/lib/slider/slide.py
+++ /dev/null
@@ -1,282 +0,0 @@
-#!python
-# The above makes the script executable.
-
-import slider.legacy_importer
-import PyPDF2
-import os
-from jinjafy import execute_command
-# from slider import slide
-from slider import legacy_importer
-from slider.legacy_importer import SVG_EDIT_RELPATH, SVG_TMP_RELPATH, move_template_files, DTU_beamer_base, svg_edit_to_importable
-from jinjafy.cache import cache_update_str, cache_contains_str, cache_contains_file, cache_update_file
-import shutil
-from slider.slide_fixer import check_svg_file_and_fix_if_broken
-from slider.latexutils import latexmk
-import clize
-import glob
-
-dc = "\\documentclass"
-
-def fix_handout(s):
-    i = s.find(dc) + len(dc)
-    j1 = s.find('[', i)
-    j2 = s.find("{", i)
-    if 0 < j1 < j2:
-        s = s[:j1 + 1] + "handout," + s[j1 + 1:]
-    else:
-        s = s[:j2 + 1] + "[handout]" + s[j2 + 1:]
-    return s
-
-def set_svg_background_images(lecture_tex, verbose=False,
-                              fix_broken_osvg_files=False,
-                              recompile_on_change=True,
-                              clean_temporary_files=False,
-                              copy_template_resource_files=True,
-                              force_recompile=False,
-                              force_fix_broken_osvg_files = None,
-                              ):
-    '''
-    Main file for fixing/setting osvg background images in the given lecture .pdf.
-    Usage:
-
-    > slider <text-file-to-convert>
-
-    :param lecture_tex: File to set background image in.
-    :return:
-    '''
-    MAIN_TEX_DIR = os.path.dirname(lecture_tex)
-    SVG_TMP_DIR = MAIN_TEX_DIR + "/" + SVG_EDIT_RELPATH + "/" + SVG_TMP_RELPATH
-    SVG_OSVG_DIR = MAIN_TEX_DIR + "/" + SVG_EDIT_RELPATH
-    force_fix_broken_osvg_files = [] if force_fix_broken_osvg_files is None else force_fix_broken_osvg_files
-
-    print("Slider is setting the background images for the .tex. file\n>  %s" % os.path.abspath(lecture_tex))
-    if copy_template_resource_files:
-        move_template_files(output_dir=MAIN_TEX_DIR, output_tex_file=None)
-    if not os.path.exists(lecture_tex):
-        # move a basic .tex file to this location and proceed
-        shutil.copyfile(DTU_beamer_base +"/dtu_slideshow_base.tex", lecture_tex)
-
-    ANY_CHANGES = True
-    tex = recursive_tex_apply(lecture_tex)
-    tex = "\n".join([tex[k] for k in tex])
-    all_tex = tex
-    tex = tex.splitlines()
-
-    ol = "\\osvg"
-    tex = [s.strip() for s in tex if ol in s and "@ifnextchar" not in s and "%" not in s[:s.find(ol)]] # exclude definition of osvg command
-    sinfo = {}
-
-    for s in tex:
-        i = s.find(ol) + len(ol)
-        if s[i] == "[": i = s.find("]", i)
-        i = s.find("{", i)
-        ie = s.find("}", i)
-        if ie == -1: continue
-        s = s[i+1:ie]
-        ii = all_tex.find(s)
-        frame_start = all_tex.rfind("\\begin{frame}", 0, ii)
-        frame_end = all_tex.find("\\end{frame}", ii, len(all_tex))
-
-        cs = all_tex[frame_start:frame_end]
-        d = {"pdf_label": s, "svg_edit_file": MAIN_TEX_DIR + "/" + SVG_EDIT_RELPATH + "/" + s + ".svg", 'slide_tex': cs}
-        sinfo[s] = d
-        # print(d)
-
-    if not os.path.exists(MAIN_TEX_DIR + "/" + SVG_EDIT_RELPATH):
-        os.mkdir(MAIN_TEX_DIR + "/" + SVG_EDIT_RELPATH)
-    # Prepare alternative .tex file; compile with handout and watermarks for later reference.
-    lecture_tex_nosvg = lecture_tex[:-4] + "_NO_SVGS.tex"
-    with open(lecture_tex, "r") as f:
-        s = f.read()
-
-    if s.find(dc) < 0:
-        # find and fix the import
-        dc2 = "\\input{"
-        j1 = s.find(dc2)+len(dc2)
-        j2 = s.find(dc2) + s.find("}", s.find(dc2))
-        fhead = MAIN_TEX_DIR + "/" + s[j1:j2]+".tex"
-        with open(fhead, 'r') as f:
-            sh = f.read()
-            sh = fix_handout(sh)
-            with open(fhead, 'w') as f2:
-                f2.write(sh)
-    else:
-        s = fix_handout(s)
-
-    i = s.find("\\begin{document}")
-    ii = s.rfind("\n", i - 10, i)
-    s = s[:ii] + "\n \\togglefalse{overlabel_includesvgs}\n\\toggletrue{overlabel_includelabels}\n" + s[ii:]
-
-    with open(lecture_tex_nosvg, "w") as f:
-        f.write(s)
-
-    lecture_tex_nosvg_pdf = lecture_tex_nosvg[:-4] + ".pdf"
-
-    # lecture_tex_nosvg_tex = recursive_tex_apply(lecture_tex_nosvg)
-
-    if cache_contains_str(MAIN_TEX_DIR, key='all_tex', value=all_tex) and os.path.exists(lecture_tex_nosvg_pdf):
-        print("slider> Cache contains nosvg tex file")
-    else:
-        cdir = os.getcwd()
-        os.chdir(os.path.dirname(lecture_tex_nosvg))
-        execute_command(("latexmk -shell-escape -f -pdf -interaction=nonstopmode " + os.path.basename(lecture_tex_nosvg)).split(" "))
-        os.chdir(cdir)
-        cache_update_file(MAIN_TEX_DIR, lecture_tex_nosvg)
-        ANY_CHANGES = True
-
-    # Make .png background images.
-    with open(lecture_tex_nosvg_pdf, 'rb') as f:
-        pdfdoc = PyPDF2.PdfFileReader(f)
-        for i in range(pdfdoc.getNumPages()):
-            content = pdfdoc.getPage(i).extractText()
-            for osvg_name, d in sinfo.items(): #enumerate(sinfo):
-
-                if d['pdf_label'] in content:
-                    d['pdf_page'] = i
-                    d['png_bgimg'] = SVG_TMP_DIR + "/" + d['pdf_label'] + ".png"
-                    if not os.path.exists(d['svg_edit_file']):
-                        '''
-                        Found \osvg{myslide}, but myslide.svg does not exist. Re-create it from the original slide.
-                        '''
-                        print("Failed to find editable file: %s. Re-creating from snapshot..."%d['svg_edit_file'])
-                        tmp_svg_file = "%s/%s/%s"%(os.path.dirname(d['svg_edit_file']),
-                                                   SVG_TMP_RELPATH,
-                                                   os.path.basename(d['svg_edit_file']))
-                        tmp_svg_file = legacy_importer.slide_to_image(lecture_tex_nosvg_pdf, tmp_svg_file, i + 1)
-                        legacy_importer.raw_svg_to_osvg(tmp_svg_file, overwrite_existing=True)
-                        ANY_CHANGES = True
-
-                    if cache_contains_str(MAIN_TEX_DIR, key=d['pdf_label'], value=d['slide_tex']):
-                        # print("slider> Cache contains slide tex; continuing: " + d['pdf_label'] )
-                        continue
-                    legacy_importer.slide_to_image(lecture_tex_nosvg_pdf, d['png_bgimg'], i + 1)
-                    ANY_CHANGES = True
-                    cache_update_str(MAIN_TEX_DIR, key=d['pdf_label'], value=d['slide_tex'])
-
-
-    # This is the step that actually fixes the svg files. i.e. squeeze fonts, etc.
-    for osvg_name, d in sinfo.items():
-        if (osvg_name+".svg") not in force_fix_broken_osvg_files:
-            if cache_contains_file(MAIN_TEX_DIR, d['svg_edit_file']) and not force_recompile:
-                continue
-        '''        
-        Check if the svg image pass sanity checks: Does it exist and is it okay?                
-        '''
-        if fix_broken_osvg_files:
-            check_svg_file_and_fix_if_broken(d['svg_edit_file'], verbose=verbose)
-
-        legacy_importer.svg_edit_to_importable(d['svg_edit_file'], verbose=verbose)
-        # legacy_importer.svg_check_background_layer(d['svg_edit_file'], verbose=verbose) # This was an old check for BG img.
-        cache_update_file(MAIN_TEX_DIR, d['svg_edit_file'])
-        ANY_CHANGES = True
-
-    if ANY_CHANGES and recompile_on_change:
-
-        latexmk(lecture_tex)
-
-    if clean_temporary_files:
-        if verbose:
-            print("> SlideConverter: Removing temporary dirs...")
-        # raise Exception()
-        DNE = SVG_OSVG_DIR + "/do_not_edit"
-        if os.path.exists(SVG_TMP_DIR):
-            for v in glob.glob(SVG_TMP_DIR + "/*"):
-                if not v.endswith("png"):
-                    os.remove(v)
-
-        if os.path.exists(DNE):
-            for v in glob.glob(DNE + "/*"):
-                if not v.endswith("png"):
-                    os.remove(v)
-
-def slide_no_by_text(pdf_file, text):
-    assert False
-    # Make .png background images.
-    if os.path.exists(pdf_file):
-        with open(pdf_file, 'rb') as f:
-            print(pdf_file)
-            pdfdoc = PyPDF2.PdfFileReader(f)
-            for i in range(pdfdoc.getNumPages()):
-                content = pdfdoc.getPage(i).extractText()
-                # for j, d in enumerate(sinfo):
-                if text in content:
-                    return i+1
-    else:
-        print("Warning: slide.py() -> slide_no_by_text(): PDF file not found " + pdf_file)
-    return -1
-    # raise Exception()
-
-def recursive_tex_apply(doc, fun=None, current_output=None):
-    if not fun:
-        def mfun(curdoc, txt, cur_out):
-            if not cur_out: cur_out = dict()
-            cur_out[curdoc] = txt
-            return cur_out
-
-        fun = mfun
-    if os.path.exists(doc):
-        def rfile(doc, encoding):
-            with open(doc, 'r', encoding=encoding) as f:
-                tex = f.read()
-            return tex
-        try:
-            tex = rfile(doc, encoding="utf-8")
-        except Exception as e:
-            print("Problem reading file", doc)
-            print(e)
-            import glob
-            from chardet.universaldetector import UniversalDetector
-            detector = UniversalDetector()
-            detector.reset()
-            with open(doc, 'rb') as f:
-                detector.feed(f.read())
-            detector.close()
-            res = detector.result['encoding']
-            print("Detecting encoding with chardet...")
-            print(res)
-            tex = rfile(doc, encoding=detector.result['encoding'])
-
-        current_output = fun(doc, tex, current_output)
-        for s in tex.splitlines():
-            fs = '\\input{'
-            if fs in s and not s.strip().startswith("%"):
-                j = s.find(fs)
-                rec_file = s[j + len(fs):s.find("}", j)]
-                if os.path.isabs(rec_file):
-                    rec_file_tex = rec_file
-                else:
-                    rec_file_tex = os.path.dirname(doc) + "/" + rec_file
-                    if not rec_file_tex.endswith(".tex"):
-                        rec_file_tex += ".tex"
-
-                current_output = recursive_tex_apply(rec_file_tex, fun, current_output)
-    return current_output
-
-def recursive_tex_collect(doc):
-    assert False
-    sdict = recursive_tex_apply(doc)
-    def gathersub(file):
-        lines = []
-        if file not in sdict:
-            print(sdict)
-            raise Exception("Bad error occured in split lines " + file )
-        for s in sdict[file].splitlines():
-            fs = '\\input{'
-            if fs in s and not s.strip().startswith("%"):
-                j = s.find(fs)
-                rec_file = s[j + len(fs):s.find("}", j)]
-                if os.path.isabs(rec_file):
-                    rec_file_tex = rec_file
-                else:
-                    rec_file_tex = os.path.dirname(file) + "/" + rec_file
-                    if not rec_file_tex.endswith(".tex"):
-                        rec_file_tex += ".tex"
-
-                lines += gathersub(rec_file_tex)
-            else:
-                lines.append(s)
-        return lines
-
-    lines = gathersub(doc)
-    return "\n".join(lines)
-
diff --git a/build/lib/slider/slide_fixer.py b/build/lib/slider/slide_fixer.py
deleted file mode 100644
index 3ca3f50..0000000
--- a/build/lib/slider/slide_fixer.py
+++ /dev/null
@@ -1,140 +0,0 @@
-"""
-Fix broken issues in osvg files.
-for instance, you copy a random file, and it has the wrong dimensions, etc.
-Need some fairly serious checking I guess...
-
-Example of a good file:
-
-inkscape:groupmode="layer"
-     id="layer1"
-     inkscape:label="bg_layer"
-     style="display:inline"
-     sodipodi:insensitive="true">
-"""
-
-
-good_file = """<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns:sodipodi = "http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape = "http://www.inkscape.org/namespaces/inkscape"
- height="297.638pt" version="1.2" viewBox="0 0 396.85 297.638" width="396.85pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><metadata></metadata>
-<g inkscape:groupmode="layer" id="layer1" inkscape:label="bg_layer" style="display:inline" sodipodi:insensitive="true">
-<image
-xlink:href="{0}"
-width="100%"
-height="100%"
-preserveAspectRatio="none"
-style="image-rendering:optimizeQuality"
-id="image4444th"
-x="0"
-y="0" />
-</g>
-<g inkscape:groupmode="layer"
-id="layer2"
-inkscape:label="Layer 1"
-style="display:inline">
-</svg>
-"""
-
-""""
-First idea would be to simply load files, replace the tmp-stuff, and check if they agree.
-"""
-from bs4 import BeautifulSoup
-import os
-
-def check_svg_file_and_fix_if_broken(osvg_file, verbose=True):
-    assert False
-    '''
-    Sanity check the given file. Does the slide appears to be in okay shape? Is it broken?
-    if it is, fix it.
-    '''
-    # print(osvg_file)
-    png_ = "tmp/" + os.path.basename(osvg_file)[:-4] + ".png"
-
-    ID = 'image4444th'
-    to_save = None
-    with open(osvg_file, 'r', encoding="UTF-8",errors="surrogateescape") as f:
-        soup = BeautifulSoup(f, 'xml', from_encoding="UTF-8")
-
-        bg_tags = soup.findAll("image", {'id': ID})
-
-        if len(bg_tags) == 0:
-            print("uh oh. No background image found in", osvg_file)
-
-        g = None
-        is_file_ok = True
-        for i in soup.findAll("g", {'inkscape:groupmode': 'layer'}):
-            if i['inkscape:label'] == "bg_layer":
-                g = i
-        if g is not None:
-            bgim = g.find("image")
-            if bgim['id'] == ID:
-                # We have a BG image, it has the right ID. Also check if the path matches.
-                bg_png = bgim['xlink:href']
-
-                if bg_png != png_:
-                    print("Mismatching background PNGs", osvg_file)
-                    print(bg_png, png_)
-                    bgim['xlink:href'] = png_
-                    to_save = soup.prettify(formatter="xml")
-
-            else:
-                print("We found the bg_layer tag, but it has no image in it. SVG is broken", osvg_file)
-                is_file_ok = False
-        else:
-            is_file_ok = False
-
-        if is_file_ok:
-            # Do sanity check of svg height property.
-            height = soup.find('svg')['height']
-            if height.find("pt") > 0:
-                height = height[:-2]
-            height = float(height)
-            # float(soup.find('svg')['height'])
-            if abs(height - 297.638) > 5:
-                is_file_ok = False
-
-    if to_save is not None:
-        # raise Exception("asdfsdaf", osvg_file)
-        with open(osvg_file, 'w', encoding="UTF-8", errors="surrogateescape") as f:
-            f.write(to_save)
-        return
-
-    if not is_file_ok:
-        # raise Exception("Broken file", osvg_file)
-        # File is not ok. We have to fix it. But how?
-
-        gsoup = BeautifulSoup(good_file, 'xml', from_encoding="UTF-8")
-        bstag = BeautifulSoup(str(gsoup.svg.g).format(png_), 'lxml', from_encoding="UTF-8")
-        g_bg = str(bstag.g)
-        with open(osvg_file, 'r', encoding="UTF-8", errors="surrogateescape") as f:
-            s = f.read()
-            soup = BeautifulSoup(s, 'xml', from_encoding="UTF-8")
-            print("Finding all tags")
-            # c = 0
-            for j in soup.svg.find_all(recursive=False):
-                IL= "inkscape:label"
-                if IL in j.attrs and j[IL] == "bg_layer":
-                    # gsoup = BeautifulSoup(good_file, 'xml', from_encoding="UTF-8")
-                    j.replaceWith(bstag.g)
-                    # print( j['inkscape:label']  )
-                    break
-                    # print("FOUND")
-                # print(j)
-                # c += 1
-                # print(c, "-----")
-                # if c == 4:
-                #     break
-
-            soup.svg.attrs = gsoup.svg.attrs
-            s = str(soup)
-            # j = s.find("<defs")
-            # print("Found defs at j", j)
-            # s = good_file.format( png_) + "\n" + s[j:]
-        # import time
-        # time.sleep(0.1)
-        # print(s[:4000])
-        # soup2 = BeautifulSoup(s, 'xml', from_encoding="UTF-8")
-
-        with open(osvg_file, 'w', encoding="UTF-8", errors="surrogateescape") as f:
-            f.write(s)
-    a = 234
\ No newline at end of file
diff --git a/build/lib/slider/slider_cli.py b/build/lib/slider/slider_cli.py
deleted file mode 100644
index 683b44c..0000000
--- a/build/lib/slider/slider_cli.py
+++ /dev/null
@@ -1,94 +0,0 @@
-import  clize
-import os
-import sys
-import shutil
-from slider.slide import set_svg_background_images
-import click
-
-def confirm_start_new_project(latexfile, force=False):
-    try:
-        if force or click.confirm(f"Do you want to create a new Slider LaTeX file named {latexfile}?", abort=True):
-            # print("Starting new project")
-            from slider.slider_init import slider_init
-            slider_init(latexfile)
-
-    except click.exceptions.Abort as e:
-        sys.exit()
-
-
-def slider_cli(latexfile=None, force=False, verbose=False):
-    """
-    Slider software for manipulating overlay-svg images.
-    To get started, first start a slider project by creating a new folder and running
-
-    > python -m slider index.tex
-
-    This will create a bunch of files including a folder named osvgs. This is where you keep the slides!
-
-    When you edit/change overlays, remember to run
-
-    > python -m slider index.tex
-    > python -m slider
-
-    to keep everything synchronized.
-    You can add new overlays by simply using the LaTeX \osvg{labelname}-tag on new slides (and running slider)
-    Edit the overlays by looking in the \osvg-folder, in this case osvg/labelname.svg.
-
-    Remember the overlays by default import the content of the slides (useful if you want to move existing equations around)
-    so remember to remove non-wanted contents.
-    When done, run slider again to keep everything in sync.
-
-    :param latexfile:
-    :param force:
-    :param verbose:
-    """
-
-    # print("Initializing da slides.")
-    wdir = os.getcwd()
-    print(wdir)
-    if latexfile == None:
-        print("Trying to manually detect main latex file.")
-        import glob
-        files = glob.glob("*.tex")
-        mfiles = []
-        for name in files:
-            with open(name, 'r') as f:
-                lines = [l.strip() for l in f.read().splitlines()]
-            s = "\n".join([l for l in lines if not l.startswith("%")] )
-            if "\\begin{document}" in s and "{beamer}" in s and "_NO_SVGS" not in name:
-                print("Main file found!")
-                mfiles.append(name)
-        if len(mfiles) != 1:
-            print("Many candidate files found")
-            print(mfiles)
-            sys.exit()
-        else:
-            latexfile = mfiles[0]
-        # latexfile = "index.tex"
-    if not latexfile.endswith(".tex"):
-        latexfile += ".tex"
-    latexfile = os.path.join(wdir, latexfile)
-    if os.path.exists(latexfile):
-        # print("File already exists:", latexfile)
-        # print("Doing the slide-stuff.")
-        set_svg_background_images(lecture_tex=latexfile)
-    else:
-        confirm_start_new_project(latexfile=latexfile, force=force)
-
-
-def clize_main_entry_point():
-    """
-    I collect this in one function to make a single entry point regardless of where
-    > slider
-    or
-    > python -m slider
-
-    is used.
-
-    :return:
-    """
-    clize.run(slider_cli)
-
-
-if __name__ == '__main__':
-    clize_main_entry_point()
diff --git a/build/lib/slider/slider_init.py b/build/lib/slider/slider_init.py
deleted file mode 100644
index a72e121..0000000
--- a/build/lib/slider/slider_init.py
+++ /dev/null
@@ -1,66 +0,0 @@
-#!python
-# No, do this instead: https://setuptools.readthedocs.io/en/latest/userguide/entry_point.html
-# The above makes the script executable.
-
-import clize
-import os
-import sys
-import shutil
-
-base_slide = """ 
-\\documentclass[aspectratio=43]{beamer}
-\\usepackage{etoolbox}
-\\newtoggle{overlabel_includesvgs}
-\\newtoggle{overlabel_includelabels}
-\\toggletrue{overlabel_includesvgs}
-\\toggletrue{overlabel_includelabels}
-\\input{beamer_slider_preamble.tex}
-
-\\title{Example slide show}
-\\author{Tue Herlau}
-\\begin{document}
-\\begin{frame}
-\\maketitle
-\\end{frame}
-
-\\begin{frame}\\osvg{myoverlay} % Use the \\osvg{labelname} - tag to create new overlays. Run slider and check the ./osvgs directory for the svg files!
-\\title{Slide with an overlay}
-This is some example text!
-\\end{frame}
-
-\\end{document}
-"""
-
-def slider_init(latexfile=None):
-    # return
-    # print("Initializing da slides.")
-    wdir = os.getcwd()
-    print(wdir)
-    if latexfile == None:
-        latexfile = "index.tex"
-    if not latexfile.endswith(".tex"):
-        latexfile += ".tex"
-    latexfile = os.path.join(wdir, latexfile)
-    if os.path.exists(latexfile):
-        print("File already exists", latexfile)
-        # sys.exit()
-    # Done with the introductory bullshit.
-
-    if not os.path.isdir(os.path.dirname(latexfile)):
-        os.makedirs(os.path.dirname(latexfile))
-
-    import jinja2
-    with open(latexfile, 'w') as f:
-        f.write(base_slide)
-
-    print("Initializing with", latexfile)
-
-    # jinja2.Environment().from_string(base_slide)
-    from slider.slide import set_svg_background_images
-    set_svg_background_images(latexfile, clean_temporary_files=True)
-
-if __name__ == "__main__":
-    # slider_init("../../test/index.tex")
-    # from slider.latexutils import latexmk
-    # import slider
-    clize.run(slider_init)
diff --git a/src/beamer_slider.egg-info/PKG-INFO b/src/beamer_slider.egg-info/PKG-INFO
index 7e791aa..604eec0 100644
--- a/src/beamer_slider.egg-info/PKG-INFO
+++ b/src/beamer_slider.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: beamer-slider
-Version: 0.1.25.6
+Version: 0.1.26.1
 Summary: Software to create inkscape overlays in Beamer
 Home-page: https://lab.compute.dtu.dk/tuhe/slider
 Author: Tue Herlau
diff --git a/src/beamer_slider.egg-info/SOURCES.txt b/src/beamer_slider.egg-info/SOURCES.txt
index 63e5254..843c350 100644
--- a/src/beamer_slider.egg-info/SOURCES.txt
+++ b/src/beamer_slider.egg-info/SOURCES.txt
@@ -43,4 +43,5 @@ src/slider/data/DTU_Beamer_files/dtucolours.tex
 src/slider/data/DTU_Beamer_files/tex_compute_uk.pdf
 src/slider/data/DTU_Beamer_files/tex_dtu_compute_a_uk.pdf
 src/slider/data/DTU_Beamer_files/tex_dtu_frise.pdf
-src/slider/data/DTU_Beamer_files/tex_dtu_logo.pdf
\ No newline at end of file
+src/slider/data/DTU_Beamer_files/tex_dtu_logo.pdf
+tests/test_slider.py
\ No newline at end of file
diff --git a/src/slider/convert.py b/src/slider/convert.py
index a3837ca..dbeae92 100644
--- a/src/slider/convert.py
+++ b/src/slider/convert.py
@@ -16,7 +16,7 @@ def svg2pdf(fin, fout=None, crop=True, text_to_path=False, export_area_page=True
     if text_to_path: # Good idea for inkscape which seems to bungle the fonts (space in font names?)
         cmd.append("-T")
     cmd.append(fin)
-    cmd.append(f"--export-filename={fout}")
+    cmd.append(f'--export-filename="{fout}"')
     # '-C', '--without-gui', f'--file={fin}', f'--export-pdf={fout}']
     # cmd = ['inkscape', '-C', '-T', '--without-gui', '--file=%s'%svg_fonts_layers[-1], '--export-pdf=%s' % pdf_nofonts_layers[-1]]
     execute_command(cmd)
diff --git a/src/slider/legacy_importer.py b/src/slider/legacy_importer.py
index 4ffe0de..bdee3fa 100644
--- a/src/slider/legacy_importer.py
+++ b/src/slider/legacy_importer.py
@@ -25,7 +25,8 @@ def ensure_dir(dname):
         os.mkdir(dname)
 
 def join_pdfs(slide_deck_pdf, outfile):
-    assert False
+    # Used by the legacy slide importer.
+    # assert False
     dn = os.path.dirname(slide_deck_pdf[0])
     files = [os.path.relpath(os.path.dirname(pdf), start=dn) + "/" + os.path.basename(pdf) for pdf in slide_deck_pdf]
     outf = os.path.relpath(os.path.dirname(outfile), start=dn) + "/" + os.path.basename(outfile)
diff --git a/src/slider/version.py b/src/slider/version.py
index 0bb8fc3..b9ffbe5 100644
--- a/src/slider/version.py
+++ b/src/slider/version.py
@@ -1 +1 @@
-__version__ = "0.1.25.6"
\ No newline at end of file
+__version__ = "0.1.26.1"
\ No newline at end of file
-- 
GitLab