diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 04ac6820db5851f6a7217f7a0432cd4ea6c7b8df..500ff56423ad55155d0d1a4d985b03769f5d6cbb 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 0bebe70d96db3874f2f97a22a611728675673f86..0000000000000000000000000000000000000000 --- 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 a46ef35f71399ee0932c8d376af74af0682a8e6c..0000000000000000000000000000000000000000 --- 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 e24ab194c44642e727a0eae4ce6e281f3a607fd8..0000000000000000000000000000000000000000 --- 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 102ef966eba2420c374279e5d1d32d67cdfaa4ba..0000000000000000000000000000000000000000 --- 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 c67581542aaf2fc407f65489a2db9a1713770335..0000000000000000000000000000000000000000 --- 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 43da4a7568b76ee8e1d479026bb4f2b032cf5e3f..0000000000000000000000000000000000000000 --- 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 d2254a59f55bb578875e2f0e81c6aa4264e14025..0000000000000000000000000000000000000000 --- 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 594e7182f50c536f1b6c5b7d8542f631325b1425..0000000000000000000000000000000000000000 --- 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 ad55d29ae0dcc9746768c017852d129e98ed5d3c..0000000000000000000000000000000000000000 --- 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 511932d118708e006a70e908b681fd50643a8647..0000000000000000000000000000000000000000 --- 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 2dd8694d7ac59705810fe9deb9816ad20f034655..0000000000000000000000000000000000000000 --- 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 c8c834a522846e935a44878b7140c5f2d0a6ebfe..0000000000000000000000000000000000000000 --- 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 2dd8694d7ac59705810fe9deb9816ad20f034655..0000000000000000000000000000000000000000 --- 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 8e406d195b7a016415ed00d0b0d42a0dd8b914bd..0000000000000000000000000000000000000000 --- 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 49c4eab954b5f0d2e9abbbe1034921d212d260af..0000000000000000000000000000000000000000 --- 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 9e464ffdc2be91d9a1d1ef8afc917d90fcf63f94..0000000000000000000000000000000000000000 --- 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 79b75f4c89cf835cdaf4fdd3ffc8a182d485a9cb..0000000000000000000000000000000000000000 --- 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 d8841f692e3920f289df75f62fffc46c869113dc..0000000000000000000000000000000000000000 --- 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 Binary files a/build/lib/slider/DTU_Beamer_files/blank.png and /dev/null differ 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 d248470b36886f1d90673adbb3acf3af777619d4..0000000000000000000000000000000000000000 --- 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 5cc71c689f9c944f821bd47c1786c8543e412d86..0000000000000000000000000000000000000000 --- 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 cda2381d7225b0ec1879df97e258b805a3cc8511..0000000000000000000000000000000000000000 --- 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 Binary files a/build/lib/slider/DTU_Beamer_files/tex_compute_uk.pdf and /dev/null differ 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 Binary files a/build/lib/slider/DTU_Beamer_files/tex_dtu_compute_a_uk.pdf and /dev/null differ 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 Binary files a/build/lib/slider/DTU_Beamer_files/tex_dtu_frise.pdf and /dev/null differ 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 Binary files a/build/lib/slider/DTU_Beamer_files/tex_dtu_logo.pdf and /dev/null differ 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 8f34c6d920f6d1c85472d72ed1d72cd4c672fc7b..0000000000000000000000000000000000000000 --- 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 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/build/lib/slider/__main__.py b/build/lib/slider/__main__.py deleted file mode 100644 index 0961f3387b6fd17172a24baf8122ccfbe5528207..0000000000000000000000000000000000000000 --- 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 7b11e781af1e18f1f049413c2dd96cfdfae3af63..0000000000000000000000000000000000000000 --- 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 61b85ca74723d2757bbffefbe129a21f2953c6dd..0000000000000000000000000000000000000000 --- 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 2e50e0978da7c792fd2d44a35209b4afdc3e7d71..0000000000000000000000000000000000000000 --- 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 058a79ed579aea5f505f5d78fc45634b3c1779ac..0000000000000000000000000000000000000000 --- 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 ec49193b9b7c4294f4bdaddf11985717560af0c7..0000000000000000000000000000000000000000 --- 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 3ca3f50ad5b9c32345121abc3a6f169468f6c337..0000000000000000000000000000000000000000 --- 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 683b44c1a56dd21e61e94621458d63a04264691b..0000000000000000000000000000000000000000 --- 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 a72e1217cb2497c3fcc5d0412dcefd9ab534c2d4..0000000000000000000000000000000000000000 --- 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 7e791aa321522671c2239366317a65c63df4c5e8..604eec007ea580a5de48901e31c7efbba037b7ac 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 63e5254d979c01c5381d0dc87110a5abb8795d23..843c3507d5f3420694a10fc58f79600e73e0dece 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 a3837ca860050ef0fe89c5b761d059ac2ccbc758..dbeae927398ddeee034c5524615a0dc3b46255cf 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 4ffe0deb3e99d670e96f281289415417e1ae6da7..bdee3fa42b55980270a7f22baa7f5aa2cbaebe82 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 0bb8fc34896645bb6d04f676c549b0568981e464..b9ffbe50f2a7f900c296e0c3b5b92477dcc40d83 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