From e7c3391ce0fa1c2b0dc076250ffe3ba0b72920d6 Mon Sep 17 00:00:00 2001
From: Tue Herlau <tuhe@dtu.dk>
Date: Sat, 4 Sep 2021 23:57:33 +0200
Subject: [PATCH] Port of s_tag and readme.md work

---
 README.md                                     |   64 +-
 docs/README.jinja.md                          |  119 ++
 docs/build_docs.py                            |   67 ++
 .../load_references.cpython-38.pyc            |  Bin 0 -> 1112 bytes
 example/citations.py                          |    9 +
 example/exercise1.py                          |   23 +
 example/latex/br.pdf                          |  Bin 0 -> 18385 bytes
 example/latex/index.aux                       |   38 +
 example/latex/index.bbl                       |   19 +
 example/latex/index.blg                       |   48 +
 example/latex/index.log                       | 1000 +++++++++++++++++
 example/latex/index.out                       |    1 +
 example/latex/index.pdf                       |  Bin 0 -> 71031 bytes
 example/latex/index.synctex.gz                |  Bin 0 -> 4732 bytes
 example/latex/index.tex                       |   59 +
 example/latex/library.bib                     |  289 +++++
 example/load_references.py                    |   32 +
 example/output/citations.py                   |   18 +
 example/output/load_references_a.py           |    6 +
 example/output/load_references_b.py           |    9 +
 requirements.txt                              |    2 +
 setup.py                                      |   21 +-
 src/snipper/__init__.py                       |    2 +-
 .../__pycache__/__init__.cpython-38.pyc       |  Bin 0 -> 167 bytes
 .../__pycache__/citations.cpython-38.pyc      |  Bin 0 -> 5040 bytes
 .../__pycache__/fix_cite.cpython-38.pyc       |  Bin 0 -> 2467 bytes
 src/snipper/__pycache__/fix_s.cpython-38.pyc  |  Bin 0 -> 3629 bytes
 .../__pycache__/snipper.cpython-38.pyc        |  Bin 12807 -> 0 bytes
 .../__pycache__/snipper.cpython-39.pyc        |  Bin 12500 -> 0 bytes
 .../__pycache__/snipper_main.cpython-38.pyc   |  Bin 0 -> 10073 bytes
 src/snipper/citations.py                      |  242 ++++
 src/snipper/fix_cite.py                       |   73 ++
 src/snipper/fix_s.py                          |  151 +++
 src/snipper/snip_dir.py                       |   22 +-
 src/snipper/{snipper.py => snipper_main.py}   |  101 +-
 35 files changed, 2281 insertions(+), 134 deletions(-)
 create mode 100644 docs/README.jinja.md
 create mode 100644 docs/build_docs.py
 create mode 100644 example/__pycache__/load_references.cpython-38.pyc
 create mode 100644 example/citations.py
 create mode 100644 example/exercise1.py
 create mode 100644 example/latex/br.pdf
 create mode 100644 example/latex/index.aux
 create mode 100644 example/latex/index.bbl
 create mode 100644 example/latex/index.blg
 create mode 100644 example/latex/index.log
 create mode 100644 example/latex/index.out
 create mode 100644 example/latex/index.pdf
 create mode 100644 example/latex/index.synctex.gz
 create mode 100644 example/latex/index.tex
 create mode 100644 example/latex/library.bib
 create mode 100644 example/load_references.py
 create mode 100644 example/output/citations.py
 create mode 100644 example/output/load_references_a.py
 create mode 100644 example/output/load_references_b.py
 create mode 100644 requirements.txt
 create mode 100644 src/snipper/__pycache__/__init__.cpython-38.pyc
 create mode 100644 src/snipper/__pycache__/citations.cpython-38.pyc
 create mode 100644 src/snipper/__pycache__/fix_cite.cpython-38.pyc
 create mode 100644 src/snipper/__pycache__/fix_s.cpython-38.pyc
 delete mode 100644 src/snipper/__pycache__/snipper.cpython-38.pyc
 delete mode 100644 src/snipper/__pycache__/snipper.cpython-39.pyc
 create mode 100644 src/snipper/__pycache__/snipper_main.cpython-38.pyc
 create mode 100644 src/snipper/citations.py
 create mode 100644 src/snipper/fix_cite.py
 create mode 100644 src/snipper/fix_s.py
 rename src/snipper/{snipper.py => snipper_main.py} (80%)

diff --git a/README.md b/README.md
index 9e27524..e8e0a45 100644
--- a/README.md
+++ b/README.md
@@ -94,7 +94,65 @@ Hello World"
 ```
 All these files can be directly imported into `LaTeX` using e.g. `minted`: You never need to mix `LaTeX` code and python again!
 
+
+## References: 
+Bibliography references can be loaded from `references.bib`-files and in-document references from the `.aux` file. 
+For this example, we will insert references shown in the `examples/latex/index.tex`-document. To do so, we can use these tags:
+```python
+def myfun(): #!s
+    """
+    To solve this exercise, look at \ref{eq1} in \ref{sec1}.
+    You can also look at \cite{bertsekasII} and \cite{herlau}
+    More specifically, look at \cite[Equation 117]{bertsekasII} and \cite[\ref{fig1}]{herlau}
+
+    We can also write a special tag to reduce repetition: \nref{fig1} and \nref{sec1}.
+    """
+    return 42 #!s
+
+```
+We can manually compile this example by first loading the aux-files and the bibliographies as follows:
+```python 
+# load_references.py
+    from snipper.citations import get_bibtex, get_aux 
+    bibfile = "latex/library.bib"
+    auxfile = 'latex/index.aux'
+    bibtex = get_bibtex(bibfile)
+    aux = get_aux(auxfile) 
+```
+Next, we load the python file containing the reference code and fix all references based on the aux and bibliography data. 
+```python 
+# load_references.py
+    file = "citations.py" 
+    with open(file, 'r') as f:
+        lines = f.read().splitlines()
+    lines = fix_aux(lines, aux=aux)
+    lines = fix_aux_special(lines, aux=aux, command='\\nref', bibref='herlau')
+    lines = fix_bibtex(lines, bibtex=bibtex)
+    with open('output/citations.py', 'w') as f:
+        f.write("\n".join(lines)) 
+```
+The middle command is a convenience feature: It allows us to specify a special citation command `\nref{..}` which always compiles to `\cite[\ref{...}]{herlau}`. This is useful if e.g. `herlau` is the bibtex key for your lecture notes. The result is as follows:
+```python 
+"""
+{{copyright}}
+
+References:
+  [Ber07] Dimitri P. Bertsekas. Dynamic Programming and Optimal Control, Vol. II. Athena Scientific, 3rd edition, 2007. ISBN 1886529302.
+
+  [Her21] Tue Herlau. Sequential decision making. (See 02465_Notes.pdf), 2021.
+
+"""
+def myfun(): #!s
+    """
+    To solve this exercise, look at eq. (1) in Section 1.
+    You can also look at (Ber07) and (Her21)
+    More specifically, look at (Ber07, Equation 117) and (Her21, Figure 1)
+
+    We can also write a special tag to reduce repetition: (Her21, Figure 1) and (Her21, Section 1).
+    """
+    return 42 #!s
+```
+Note this example uses the low-level api. Normally you would just pass the bibtex and aux-file to the main censor-file command.
+
 ## Additional features:
-- Include references using `\cite` and `\ref`: This works by parsing your `LaTeX` `.aux` files and automatically keep your 
-references in code synchronized with your written material. See the 02465 students repository for examples: None of the references to the exercise material or lecture notes are hard-coded!
--  You can name tags using `#!s=bar` to get a `foo_bar.py` snippet. This is useful when you need to cut multiple sessions. This also works for the other tags. 
+-  You can name tags using `#!s=bar` to get a `foo_bar.py` snippet. This is useful when you need to cut multiple sessions. This also works for the other tags. 
\ No newline at end of file
diff --git a/docs/README.jinja.md b/docs/README.jinja.md
new file mode 100644
index 0000000..add4775
--- /dev/null
+++ b/docs/README.jinja.md
@@ -0,0 +1,119 @@
+# Snipper
+A lightweight framework for removing code from student solutions.
+## Installation
+```console
+pip install codesnipper
+```
+## What it does
+This project address the following three challenges for administering a python-based course
+
+ - You need to maintain a (working) version for debugging as well as a version handed out to students (with code missing)
+ - You ideally want to make references in source code to course material *"(see equation 2.1 in exercise 5)"* but these tend to go out of date
+ - You want to include code snippets and code output in lectures notes/exercises/beamer slides
+ - You want to automatically create student solutions
+
+This framework address these problems and allow you to maintain a **single**, working project repository. 
+
+The project is currently used in **02465** at DTU. An example of student code can be found at:
+ - https://gitlab.gbar.dtu.dk/02465material/02465students/blob/master/irlc/ex02/dp.py
+
+A set of lectures notes where all code examples/output are automatically generated from the working repository can be found a
+- https://lab.compute.dtu.dk/tuhe/books (see **Sequential decision making**)
+ 
+## How it works
+The basic functionality is quite simple. You start with your working script in your private repository and add special tags to the script. 
+In this case I have added the tags `#!b` (cut a block) and `#!f` (cut function scope). 
+```python
+def myfun(): #!f The error I am going to raise
+    """ The function docstring will not be removed"""
+    print("This is a function")
+    return 42
+    
+def a_long_function():
+    a = 234
+    print("a line")
+    print("a line") #!b
+    print("a line")
+    print("a line") #!b Insert three missing print statements. 
+    print("a line")
+    return a
+    
+if __name__ == "__main__":
+    myfun()
+```
+This will produce the following file:
+```python
+def myfun():
+    """ The function docstring will not be removed"""
+    # TODO: 2 lines missing.
+    raise NotImplementedError("The error I am going to raise")
+    
+def a_long_function():
+    a = 234
+    print("a line")
+    # TODO: 3 lines missing.
+    raise NotImplementedError("Insert three missing print statements.")
+    print("a line")
+    return a
+    
+if __name__ == "__main__":
+    myfun()
+```
+You can also use the framework to capture code snippets, outputs and interactive python output. 
+To do this, save the following in `foo.py`
+```python
+def myfun(): #!s This snippet will be saved to foo.py in the output directory. 
+    print("Hello") #!s 
+
+print("Do not capture me") 
+for i in range(4): #!o
+    print("Output", i)
+print("Goodbuy world") #!o
+print("don't capture me")
+
+# Interactive pythong example
+print("Hello World") #!i #!i # this is a single-line cutout.
+````
+These block-tags will create a file `foo.py` (in the output directory) containing
+```python
+def myfun():
+    print("Hello") 
+```
+A file `foo.txt` containing the captured output
+```txt
+Output 0
+Output 1
+Output 2
+Output 3
+Goodbuy world
+```
+and a typeset version of an interactive python session in `foo.pyi` (use `pycon` in minted; this gitlab server appears not to support `pycon`)
+```pycon
+>>> print("hello world")
+Hello World"
+```
+All these files can be directly imported into `LaTeX` using e.g. `minted`: You never need to mix `LaTeX` code and python again!
+
+
+## References: 
+Bibliography references can be loaded from `references.bib`-files and in-document references from the `.aux` file. 
+For this example, we will insert references shown in the `examples/latex/index.tex`-document. To do so, we can use these tags:
+```python
+{{ citations_orig_py }}
+```
+We can manually compile this example by first loading the aux-files and the bibliographies as follows:
+```python 
+{{ load_references_a_py }}
+```
+Next, we load the python file containing the reference code and fix all references based on the aux and bibliography data. 
+```python 
+{{ load_references_b_py }}
+```
+The middle command is a convenience feature: It allows us to specify a special citation command `\nref{..}` which always compiles to `\cite[\ref{...}]{herlau}`. This is useful if e.g. `herlau` is the bibtex key for your lecture notes. The result is as follows:
+```python 
+{{ citations_py }}
+```
+Note this example uses the low-level api. Normally you would just pass the bibtex and aux-file to the main censor-file command.
+
+## Additional features:
+-  You can name tags using `#!s=bar` to get a `foo_bar.py` snippet. This is useful when you need to cut multiple sessions. This also works for the other tags. 
diff --git a/docs/build_docs.py b/docs/build_docs.py
new file mode 100644
index 0000000..02f7791
--- /dev/null
+++ b/docs/build_docs.py
@@ -0,0 +1,67 @@
+import slider.convert
+from slider.beamer_nup import beamer_nup
+import jinja2
+from slider import convert
+import os
+import shutil
+from slider.slider_cli import slider_cli
+# from example.load_references import reference_example
+# reference_example()
+
+def my_nup(path):
+    dir = os.path.dirname(path)
+    base = os.path.basename(dir)
+
+    out = beamer_nup(path, output="./" + base + "_nup.pdf", nup=2)
+    out_png = convert.pdf2png(out, scale_to=600)
+    print(out_png)
+
+if __name__ == "__main__":
+    from snipper.fix_s import save_s
+    from snipper.snipper_main import censor_file
+
+
+    #
+    # EX_BASE = "../examples"
+    # np = EX_BASE + "/new_project"
+
+    # if os.path.isdir(np):
+    #     shutil.rmtree(np)
+    # os.makedirs(np)
+    # slider_cli(latexfile=f"{np}/index.tex", force=True)
+    # np_basic1 = EX_BASE + "/basic1"
+    # if os.path.isdir(np_basic1):
+    #     shutil.rmtree(np_basic1)
+    # shutil.copytree(np, np_basic1)
+    # shutil.copyfile("myoverlay.svg", np_basic1 +"/osvgs/myoverlay.svg")
+    # slider_cli(latexfile=f"{np_basic1}/index.tex")
+    #
+    #
+    # my_nup(np + "/index.pdf")
+    # my_nup(f"{np_basic1}/index.pdf")
+    #
+    # # convert.pdf2png(np + "/index.pdf", "./index0.png")
+    # output = np +"/index_2up.pdf"
+    #
+    # data = {}
+    # data['resources'] = 'https://gitlab.compute.dtu.dk/tuhe/slider/-/raw/main'
+    # with open(np + "/index.tex", 'r') as f:
+    #     data['basic0_tex'] = f.read()
+
+    data = {}
+    # Build the docs.
+    import glob
+    with open("../example/citations.py", 'r') as f:
+        data['citations_orig_py'] = f.read()
+    for file in glob.glob("../example/output/*.*"):
+        with open(file, 'r') as f:
+            data[os.path.basename(file).replace(".", "_")] = f.read()
+
+    with open("README.jinja.md", 'r') as f:
+        s = jinja2.Environment(loader=jinja2.FileSystemLoader([".", "../example"])).from_string(f.read()).render(data)
+    with open("../README.md",'w') as f:
+        f.write(s)
+
+
+
+    pass
\ No newline at end of file
diff --git a/example/__pycache__/load_references.cpython-38.pyc b/example/__pycache__/load_references.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..8a3151612384c0983e6ff0b8e92b6f5675e27a62
GIT binary patch
literal 1112
zcmWIL<>g{vU|<k=ZJa2>!octt#6iYP3=9ko3=9m#N(>APDGVu$ISf$@DNHHMEeuhN
zsZ1#>*-S-psf^7Gj0`D^!3>(LFG0Hfl0hU4^D;0na56A3ID^a)VPs%PVN7AlVaR2y
zWyoc!Wn^SXVXkFLVX0-VVW?qhW~^nYVXR?pW~^l`VJ=~*VOhYskfE6|g&~Etl}VDJ
znURs9gt>+lM5i#Ou;sAjve&ZZa@4Zta@KNyT#>?_!<EZj%gM-)!cogr!c)VQ!r9E!
zFI3B2!@YoaA;SW`g$%Vk;S8n>feb+m5ezkKH9R$}DO|lwwLCTKU^aIOPYQ1@OD#_g
zM-5L6O9~%Iu7oFrKSiLKsb36i5`T)|0)ZNyg^UXs85t0!mGG1Zg6&hO<*wmG*q9<z
zB9tY(K%_))A!CYgFEg^96oz01O%cB$Mg|53O{QC1>8U00NtsC{sTH@_LF~lRiYmdJ
z#FEqs{hZ9CqQs&~y`;>fDt?GiW?o8ag<fK5#Y<L@e&$>3X_*!AiKP{{_@RvW;)2xV
z%*32qTp$66$(oF}*oqU&QsaxOc#<<q5=%1k^NRHfDsM3sX)@ko23g4(lUJ0Q7R8p4
zT9lJms>xggN-DS5lk;<P6Z2A{*pf1nic-@+20@Ih63#CzDJU(`M>Vhf79&>`hn_w}
z668M!D?TN&D2g*JGbc5^Ah9GvQ#4AjI4`rHAhk#jZa@(e0|P@5GXn#|E!Kjf%)F9Y
zEIFCQCAV0zQ!9(31Yqhx-b&6aNi70}KoJ{A4?9Q?FS3H-A`XxkOMXFW-Yu4*)Wnoq
zT*U=BnI$=yd8x&>Sj&qtOHyyKWaVe(-QtLk2RkhO7E^xlEf$dbZgC_f7N_PV=B8@$
zBAgY)o|KscQX0jcSXu#M6!Czp2L%<HYoOMH)ZAiByTuB&b|piR0s{lXFDqxOn9$<X
zqT-m6(u~v?m;B_?+|<01;uxq8Vp1y-a|?1(V{-BnQ{szK(^894^O94+F(wG-#zR%H
zfO47|DE~1DFtRYRFmf<*Fi9|SFo`hoFtIT5Fp4qqFbXj8F!C@;G4n7MfigG9&$)@2
wdGYa@%tcZlKfpvmevXd^yAz2}1O+CCO>TZlX-=vgDCri10-l4JLz;sT09ySj+W-In

literal 0
HcmV?d00001

diff --git a/example/citations.py b/example/citations.py
new file mode 100644
index 0000000..1bb8ac2
--- /dev/null
+++ b/example/citations.py
@@ -0,0 +1,9 @@
+def myfun(): #!s
+    """
+    To solve this exercise, look at \ref{eq1} in \ref{sec1}.
+    You can also look at \cite{bertsekasII} and \cite{herlau}
+    More specifically, look at \cite[Equation 117]{bertsekasII} and \cite[\ref{fig1}]{herlau}
+
+    We can also write a special tag to reduce repetition: \nref{fig1} and \nref{sec1}.
+    """
+    return 42 #!s
diff --git a/example/exercise1.py b/example/exercise1.py
new file mode 100644
index 0000000..e39a5df
--- /dev/null
+++ b/example/exercise1.py
@@ -0,0 +1,23 @@
+def mysum(a,b): #!f Implement the sum-function here #!s=b
+    """
+    Return the sum of a and b
+    """
+    return a+b #!s=b
+#!s=a
+def print_information(s):
+    print("s is", s) #!b
+    print("s printed twice", s, s) #!b Print s once and twice.
+    print("s printed three times", s, s, s)
+#!s=a
+# Let's both capture output and also typeset it is an interactive python session.
+print("Hello world") #!i
+for j in range(3): #!o
+    print(f"{j=}")  #!o
+print("Goodbuuy world") #!i
+# Cut a single line and put it in the 'b' snippet.
+3 * 45 #!s=b #!s=b
+
+if __name__ == "__main__":
+    mysum(2,2)
+    print_information("Cat")
+
diff --git a/example/latex/br.pdf b/example/latex/br.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..d512f261a3f5c936a6745207be0b7f6d9b12aba7
GIT binary patch
literal 18385
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
QLkj}~3ocbvSARDy082nLBLDyZ

literal 0
HcmV?d00001

diff --git a/example/latex/index.aux b/example/latex/index.aux
new file mode 100644
index 0000000..78d1269
--- /dev/null
+++ b/example/latex/index.aux
@@ -0,0 +1,38 @@
+\relax 
+\providecommand\hyper@newdestlabel[2]{}
+\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
+\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
+\global\let\oldcontentsline\contentsline
+\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
+\global\let\oldnewlabel\newlabel
+\gdef\newlabel#1#2{\newlabelxx{#1}#2}
+\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
+\AtEndDocument{\ifx\hyper@anchor\@undefined
+\let\contentsline\oldcontentsline
+\let\newlabel\oldnewlabel
+\fi}
+\fi}
+\global\let\hyper@last\relax 
+\gdef\HyperFirstAtBeginDocument#1{#1}
+\providecommand\HyField@AuxAddToFields[1]{}
+\providecommand\HyField@AuxAddToCoFields[2]{}
+\providecommand\babel@aux[2]{}
+\@nameuse{bbl@beforestart}
+\citation{bertsekasII}
+\citation{rosolia2018data}
+\citation{herlau}
+\bibstyle{alpha}
+\bibdata{library}
+\bibcite{bertsekasII}{Ber07}
+\bibcite{herlau}{Her21}
+\bibcite{rosolia2018data}{RZB18}
+\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces A figure}}{1}{figure.1}\protected@file@percent }
+\newlabel{fig1}{{1}{1}{A figure}{figure.1}{}}
+\newlabel{fig1@cref}{{[figure][1][]1}{[1][1][]1}}
+\babel@aux{english}{}
+\@writefile{toc}{\contentsline {section}{\numberline {1}First section}{1}{section.1}\protected@file@percent }
+\newlabel{sec1}{{1}{1}{First section}{section.1}{}}
+\newlabel{sec1@cref}{{[section][1][]1}{[1][1][]1}}
+\newlabel{eq1}{{1}{1}{First section}{equation.1.1}{}}
+\newlabel{eq1@cref}{{[equation][1][]1}{[1][1][]1}}
+\gdef \@abspage@last{1}
diff --git a/example/latex/index.bbl b/example/latex/index.bbl
new file mode 100644
index 0000000..d70f86d
--- /dev/null
+++ b/example/latex/index.bbl
@@ -0,0 +1,19 @@
+\begin{thebibliography}{RZB18}
+
+\bibitem[Ber07]{bertsekasII}
+Dimitri~P. Bertsekas.
+\newblock {\em Dynamic Programming and Optimal Control, Vol. II}.
+\newblock Athena Scientific, 3rd edition, 2007.
+
+\bibitem[Her21]{herlau}
+Tue Herlau.
+\newblock Sequential decision making.
+\newblock (See \textbf{02465\_Notes.pdf}), 2021.
+
+\bibitem[RZB18]{rosolia2018data}
+Ugo Rosolia, Xiaojing Zhang, and Francesco Borrelli.
+\newblock Data-driven predictive control for autonomous systems.
+\newblock {\em Annual Review of Control, Robotics, and Autonomous Systems},
+  1:259--286, 2018.
+
+\end{thebibliography}
diff --git a/example/latex/index.blg b/example/latex/index.blg
new file mode 100644
index 0000000..21b5201
--- /dev/null
+++ b/example/latex/index.blg
@@ -0,0 +1,48 @@
+This is BibTeX, Version 0.99d
+Capacity: max_strings=200000, hash_size=200000, hash_prime=170003
+The top-level auxiliary file: index.aux
+Reallocating 'name_of_file' (item size: 1) to 6 items.
+The style file: alpha.bst
+Reallocating 'name_of_file' (item size: 1) to 8 items.
+Database file #1: library.bib
+You've used 3 entries,
+            2543 wiz_defined-function locations,
+            577 strings with 4836 characters,
+and the built_in function-call counts, 984 in all, are:
+= -- 97
+> -- 41
+< -- 2
++ -- 13
+- -- 13
+* -- 64
+:= -- 178
+add.period$ -- 9
+call.type$ -- 3
+change.case$ -- 17
+chr.to.int$ -- 3
+cite$ -- 3
+duplicate$ -- 40
+empty$ -- 69
+format.name$ -- 18
+if$ -- 191
+int.to.chr$ -- 1
+int.to.str$ -- 0
+missing$ -- 3
+newline$ -- 18
+num.names$ -- 9
+pop$ -- 14
+preamble$ -- 1
+purify$ -- 20
+quote$ -- 0
+skip$ -- 32
+stack$ -- 0
+substring$ -- 46
+swap$ -- 2
+text.length$ -- 2
+text.prefix$ -- 2
+top$ -- 0
+type$ -- 20
+warning$ -- 0
+while$ -- 9
+width$ -- 4
+write$ -- 40
diff --git a/example/latex/index.log b/example/latex/index.log
new file mode 100644
index 0000000..a35abea
--- /dev/null
+++ b/example/latex/index.log
@@ -0,0 +1,1000 @@
+This is pdfTeX, Version 3.141592653-2.6-1.40.23 (MiKTeX 21.8) (preloaded format=pdflatex 2021.9.3)  4 SEP 2021 21:25
+entering extended mode
+**./index.tex
+(index.tex
+LaTeX2e <2021-06-01> patch level 1
+L3 programming layer <2021-08-27>
+(C:\Program Files\MiKTeX\tex/latex/base\article.cls
+Document Class: article 2021/02/12 v1.4n Standard LaTeX document class
+(C:\Program Files\MiKTeX\tex/latex/base\size12.clo
+File: size12.clo 2021/02/12 v1.4n Standard LaTeX file (size option)
+)
+\c@part=\count182
+\c@section=\count183
+\c@subsection=\count184
+\c@subsubsection=\count185
+\c@paragraph=\count186
+\c@subparagraph=\count187
+\c@figure=\count188
+\c@table=\count189
+\abovecaptionskip=\skip47
+\belowcaptionskip=\skip48
+\bibindent=\dimen138
+)
+(C:\Program Files\MiKTeX\tex/latex/xcolor\xcolor.sty
+Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK)
+
+(C:\Program Files\MiKTeX\tex/latex/graphics-cfg\color.cfg
+File: color.cfg 2016/01/02 v1.6 sample color configuration
+)
+Package xcolor Info: Driver file: pdftex.def on input line 225.
+
+(C:\Program Files\MiKTeX\tex/latex/graphics-def\pdftex.def
+File: pdftex.def 2020/10/05 v1.2a Graphics/color driver for pdftex
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/colortbl\colortbl.sty
+Package: colortbl 2020/01/04 v1.0e Color table columns (DPC)
+
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/tools\array.sty
+Package: array 2021/04/20 v2.5e Tabular extension package (FMi)
+\col@sep=\dimen139
+\ar@mcellbox=\box50
+\extrarowheight=\dimen140
+\NC@list=\toks16
+\extratabsurround=\skip49
+\backup@length=\skip50
+\ar@cellbox=\box51
+)
+\everycr=\toks17
+\minrowclearance=\skip51
+)
+\rownum=\count190
+Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348.
+Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1352.
+Package xcolor Info: Model `RGB' extended on input line 1364.
+Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366.
+Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367.
+Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368.
+Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369.
+Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370.
+Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371.
+)
+(C:\Program Files\MiKTeX\tex/latex/url\url.sty
+\Urlmuskip=\muskip16
+Package: url 2013/09/16  ver 3.4  Verb mode for urls, etc.
+)
+(C:\Program Files\MiKTeX\tex/latex/graphics\graphics.sty
+Package: graphics 2021/03/04 v1.4d Standard LaTeX Graphics (DPC,SPQR)
+
+(C:\Program Files\MiKTeX\tex/latex/graphics\trig.sty
+Package: trig 2016/01/03 v1.10 sin cos tan (DPC)
+)
+(C:\Program Files\MiKTeX\tex/latex/graphics-cfg\graphics.cfg
+File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
+)
+Package graphics Info: Driver file: pdftex.def on input line 107.
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/tools\multicol.sty
+Package: multicol 2019/12/09 v1.8y multicolumn formatting (FMi)
+\c@tracingmulticols=\count191
+\mult@box=\box52
+\multicol@leftmargin=\dimen141
+\c@unbalance=\count192
+\c@collectmore=\count193
+\doublecol@number=\count194
+\multicoltolerance=\count195
+\multicolpretolerance=\count196
+\full@width=\dimen142
+\page@free=\dimen143
+\premulticols=\dimen144
+\postmulticols=\dimen145
+\multicolsep=\skip52
+\multicolbaselineskip=\skip53
+\partial@page=\box53
+\last@line=\box54
+\maxbalancingoverflow=\dimen146
+\mult@rightbox=\box55
+\mult@grightbox=\box56
+\mult@gfirstbox=\box57
+\mult@firstbox=\box58
+\@tempa=\box59
+\@tempa=\box60
+\@tempa=\box61
+\@tempa=\box62
+\@tempa=\box63
+\@tempa=\box64
+\@tempa=\box65
+\@tempa=\box66
+\@tempa=\box67
+\@tempa=\box68
+\@tempa=\box69
+\@tempa=\box70
+\@tempa=\box71
+\@tempa=\box72
+\@tempa=\box73
+\@tempa=\box74
+\@tempa=\box75
+\@tempa=\box76
+\@tempa=\box77
+\@tempa=\box78
+\@tempa=\box79
+\@tempa=\box80
+\@tempa=\box81
+\@tempa=\box82
+\@tempa=\box83
+\@tempa=\box84
+\@tempa=\box85
+\@tempa=\box86
+\@tempa=\box87
+\@tempa=\box88
+\@tempa=\box89
+\@tempa=\box90
+\@tempa=\box91
+\@tempa=\box92
+\@tempa=\box93
+\@tempa=\box94
+\@tempa=\box95
+\c@minrows=\count197
+\c@columnbadness=\count198
+\c@finalcolumnbadness=\count199
+\last@try=\dimen147
+\multicolovershoot=\dimen148
+\multicolundershoot=\dimen149
+\mult@nat@firstbox=\box96
+\colbreak@box=\box97
+\mc@col@check@num=\count266
+)
+(C:\Program Files\MiKTeX\tex/generic/dvips\rotate.sty
+\@rotdimen=\dimen150
+\@rotbox=\box98
+)
+(C:\Program Files\MiKTeX\tex/latex/graphics\rotating.sty
+Package: rotating 2016/08/11 v2.16d rotated objects in LaTeX
+
+(C:\Program Files\MiKTeX\tex/latex/graphics\graphicx.sty
+Package: graphicx 2020/12/05 v1.2c Enhanced LaTeX Graphics (DPC,SPQR)
+
+(C:\Program Files\MiKTeX\tex/latex/graphics\keyval.sty
+Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
+\KV@toks@=\toks18
+)
+\Gin@req@height=\dimen151
+\Gin@req@width=\dimen152
+)
+(C:\Program Files\MiKTeX\tex/latex/base\ifthen.sty
+Package: ifthen 2020/11/24 v1.1c Standard LaTeX ifthen package (DPC)
+)
+\c@r@tfl@t=\count267
+\rotFPtop=\skip54
+\rotFPbot=\skip55
+\rot@float@box=\box99
+\rot@mess@toks=\toks19
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/booktabs\booktabs.sty
+Package: booktabs 2020/01/12 v1.61803398 Publication quality tables
+\heavyrulewidth=\dimen153
+\lightrulewidth=\dimen154
+\cmidrulewidth=\dimen155
+\belowrulesep=\dimen156
+\belowbottomsep=\dimen157
+\aboverulesep=\dimen158
+\abovetopsep=\dimen159
+\cmidrulesep=\dimen160
+\cmidrulekern=\dimen161
+\defaultaddspace=\dimen162
+\@cmidla=\count268
+\@cmidlb=\count269
+\@aboverulesep=\dimen163
+\@belowrulesep=\dimen164
+\@thisruleclass=\count270
+\@lastruleclass=\count271
+\@thisrulewidth=\dimen165
+)
+(C:\Program Files\MiKTeX\tex/latex/hyperref\hyperref.sty
+Package: hyperref 2021-06-07 v7.00m Hypertext links for LaTeX
+
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/ltxcmds\ltxcmds.sty
+Package: ltxcmds 2020-05-10 v1.25 LaTeX kernel commands for general use (HO)
+)
+(C:\Program Files\MiKTeX\tex/generic/iftex\iftex.sty
+Package: iftex 2020/03/06 v1.0d TeX engine tests
+)
+(C:\Program Files\MiKTeX\tex/generic/pdftexcmds\pdftexcmds.sty
+Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO
+)
+
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/infwarerr\infwarerr.sty
+Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO)
+)
+Package pdftexcmds Info: \pdf@primitive is available.
+Package pdftexcmds Info: \pdf@ifprimitive is available.
+Package pdftexcmds Info: \pdfdraftmode found.
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/kvsetkeys\kvsetkeys.sty
+Package: kvsetkeys 2019/12/15 v1.18 Key value parser (HO)
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/kvdefinekeys\kvdefinekeys.sty
+Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO)
+) (C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/pdfescape\pdfescape.sty
+Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO)
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/hycolor\hycolor.sty
+Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO)
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/letltxmacro\letltxmacro.sty
+Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO)
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/auxhook\auxhook.sty
+Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO)
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/kvoptions\kvoptions.sty
+Package: kvoptions 2020-10-07 v3.14 Key value format for package options (HO)
+)
+\@linkdim=\dimen166
+\Hy@linkcounter=\count272
+\Hy@pagecounter=\count273
+
+(C:\Program Files\MiKTeX\tex/latex/hyperref\pd1enc.def
+File: pd1enc.def 2021-06-07 v7.00m Hyperref: PDFDocEncoding definition (HO)
+Now handling font encoding PD1 ...
+... no UTF-8 mapping file for font encoding PD1
+)
+(C:\Program Files\MiKTeX\tex/latex/hyperref\hyperref-langpatches.def
+File: hyperref-langpatches.def 2021-06-07 v7.00m Hyperref: patches for babel la
+nguages
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/intcalc\intcalc.sty
+Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO)
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/etexcmds\etexcmds.sty
+Package: etexcmds 2019/12/15 v1.7 Avoid name clashes with e-TeX commands (HO)
+)
+\Hy@SavedSpaceFactor=\count274
+
+(C:\Program Files\MiKTeX\tex/latex/hyperref\puenc.def
+File: puenc.def 2021-06-07 v7.00m Hyperref: PDF Unicode definition (HO)
+Now handling font encoding PU ...
+... no UTF-8 mapping file for font encoding PU
+)
+Package hyperref Info: Hyper figures OFF on input line 4192.
+Package hyperref Info: Link nesting OFF on input line 4197.
+Package hyperref Info: Hyper index ON on input line 4200.
+Package hyperref Info: Plain pages OFF on input line 4207.
+Package hyperref Info: Backreferencing OFF on input line 4212.
+Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
+Package hyperref Info: Bookmarks ON on input line 4445.
+\c@Hy@tempcnt=\count275
+LaTeX Info: Redefining \url on input line 4804.
+\XeTeXLinkMargin=\dimen167
+
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/bitset\bitset.sty
+Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO)
+
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/bigintcalc\bigintcalc.sty
+Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO
+)
+))
+\Fld@menulength=\count276
+\Field@Width=\dimen168
+\Fld@charsize=\dimen169
+Package hyperref Info: Hyper figures OFF on input line 6076.
+Package hyperref Info: Link nesting OFF on input line 6081.
+Package hyperref Info: Hyper index ON on input line 6084.
+Package hyperref Info: backreferencing OFF on input line 6091.
+Package hyperref Info: Link coloring OFF on input line 6096.
+Package hyperref Info: Link coloring with OCG OFF on input line 6101.
+Package hyperref Info: PDF/A mode OFF on input line 6106.
+LaTeX Info: Redefining \ref on input line 6146.
+LaTeX Info: Redefining \pageref on input line 6150.
+
+(C:\Program Files\MiKTeX\tex/latex/base\atbegshi-ltx.sty
+Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi
+package with kernel methods
+)
+\Hy@abspage=\count277
+\c@Item=\count278
+\c@Hfootnote=\count279
+)
+Package hyperref Info: Driver (autodetected): hpdftex.
+
+(C:\Program Files\MiKTeX\tex/latex/hyperref\hpdftex.def
+File: hpdftex.def 2021-06-07 v7.00m Hyperref driver for pdfTeX
+
+(C:\Program Files\MiKTeX\tex/latex/base\atveryend-ltx.sty
+Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atvery packag
+e
+with kernel methods
+)
+\Fld@listcount=\count280
+\c@bookmark@seq@number=\count281
+
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/rerunfilecheck\rerunfilecheck.s
+ty
+Package: rerunfilecheck 2019/12/05 v1.9 Rerun checks for auxiliary files (HO)
+
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/uniquecounter\uniquecounter.s
+ty
+Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO)
+)
+Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2
+86.
+)
+\Hy@SectionHShift=\skip56
+) (C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/psnfss\pifont.sty
+Package: pifont 2020/03/25 PSNFSS-v9.3 Pi font support (SPQR) 
+LaTeX Font Info:    Trying to load font information for U+pzd on input line 63.
+
+
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/psnfss\upzd.fd
+File: upzd.fd 2001/06/04 font definitions for U/pzd.
+)
+LaTeX Font Info:    Trying to load font information for U+psy on input line 64.
+
+
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/psnfss\upsy.fd
+File: upsy.fd 2001/06/04 font definitions for U/psy.
+))
+(C:\Program Files\MiKTeX\tex/latex/base\latexsym.sty
+Package: latexsym 1998/08/17 v2.2e Standard LaTeX package (lasy symbols)
+\symlasy=\mathgroup4
+LaTeX Font Info:    Overwriting symbol font `lasy' in version `bold'
+(Font)                  U/lasy/m/n --> U/lasy/b/n on input line 52.
+)
+(C:\Program Files\MiKTeX\tex/generic/babel\babel.sty
+Package: babel 2021/07/22 3.63 The Babel package
+
+(C:\Program Files\MiKTeX\tex/generic/babel\babel.def
+File: babel.def 2021/07/22 3.63 Babel common definitions
+\babel@savecnt=\count282
+\U@D=\dimen170
+\l@unhyphenated=\language79
+
+(C:\Program Files\MiKTeX\tex/generic/babel\txtbabel.def)
+\bbl@readstream=\read2
+)
+\bbl@dirlevel=\count283
+
+*************************************
+* Local config file bblopts.cfg used
+*
+(C:\Program Files\MiKTeX\tex/latex/arabi\bblopts.cfg
+File: bblopts.cfg 2005/09/08 v0.1 add Arabic and Farsi to "declared" options of
+ babel
+)
+(C:\Program Files\MiKTeX\tex/latex/babel-english\english.ldf
+Language: english 2017/06/06 v3.3r English support from the babel system
+Package babel Info: Hyphen rules for 'canadian' set to \l@english
+(babel)             (\language0). Reported on input line 102.
+Package babel Info: Hyphen rules for 'australian' set to \l@ukenglish
+(babel)             (\language73). Reported on input line 105.
+Package babel Info: Hyphen rules for 'newzealand' set to \l@ukenglish
+(babel)             (\language73). Reported on input line 108.
+))
+(C:\Program Files\MiKTeX\tex/latex/epstopdf-pkg\epstopdf.sty
+Package: epstopdf 2020-01-24 v2.11 Conversion with epstopdf on the fly (HO)
+
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/grfext\grfext.sty
+Package: grfext 2019/12/03 v1.3 Manage graphics extensions (HO)
+)
+(C:\Program Files\MiKTeX\tex/latex/epstopdf-pkg\epstopdf-base.sty
+Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
+Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
+85.
+Package grfext Info: Graphics extension search list:
+(grfext)             [.pdf,.png,.jpg,.mps,.jpeg,.jbig2,.jb2,.PDF,.PNG,.JPG,.JPE
+G,.JBIG2,.JB2,.eps]
+(grfext)             \AppendGraphicsExtensions on input line 504.
+
+(C:\Program Files\MiKTeX\tex/latex/00miktex\epstopdf-sys.cfg
+File: epstopdf-sys.cfg 2021/03/18 v2.0 Configuration of epstopdf for MiKTeX
+)))
+(C:\Program Files\MiKTeX\tex/latex/etoolbox\etoolbox.sty
+Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW)
+\etb@tempcnta=\count284
+)
+(C:\Program Files\MiKTeX\tex/latex/amsmath\amsmath.sty
+Package: amsmath 2021/04/20 v2.17j AMS math features
+\@mathmargin=\skip57
+
+For additional information on amsmath, use the `?' option.
+(C:\Program Files\MiKTeX\tex/latex/amsmath\amstext.sty
+Package: amstext 2000/06/29 v2.01 AMS text
+
+(C:\Program Files\MiKTeX\tex/latex/amsmath\amsgen.sty
+File: amsgen.sty 1999/11/30 v2.0 generic functions
+\@emptytoks=\toks20
+\ex@=\dimen171
+))
+(C:\Program Files\MiKTeX\tex/latex/amsmath\amsbsy.sty
+Package: amsbsy 1999/11/29 v1.2d Bold Symbols
+\pmbraise@=\dimen172
+)
+(C:\Program Files\MiKTeX\tex/latex/amsmath\amsopn.sty
+Package: amsopn 2016/03/08 v2.02 operator names
+)
+\inf@bad=\count285
+LaTeX Info: Redefining \frac on input line 234.
+\uproot@=\count286
+\leftroot@=\count287
+LaTeX Info: Redefining \overline on input line 399.
+\classnum@=\count288
+\DOTSCASE@=\count289
+LaTeX Info: Redefining \ldots on input line 496.
+LaTeX Info: Redefining \dots on input line 499.
+LaTeX Info: Redefining \cdots on input line 620.
+\Mathstrutbox@=\box100
+\strutbox@=\box101
+\big@size=\dimen173
+LaTeX Font Info:    Redeclaring font encoding OML on input line 743.
+LaTeX Font Info:    Redeclaring font encoding OMS on input line 744.
+\macc@depth=\count290
+\c@MaxMatrixCols=\count291
+\dotsspace@=\muskip17
+\c@parentequation=\count292
+\dspbrk@lvl=\count293
+\tag@help=\toks21
+\row@=\count294
+\column@=\count295
+\maxfields@=\count296
+\andhelp@=\toks22
+\eqnshift@=\dimen174
+\alignsep@=\dimen175
+\tagshift@=\dimen176
+\tagwidth@=\dimen177
+\totwidth@=\dimen178
+\lineht@=\dimen179
+\@envbody=\toks23
+\multlinegap=\skip58
+\multlinetaggap=\skip59
+\mathdisplay@stack=\toks24
+LaTeX Info: Redefining \[ on input line 2923.
+LaTeX Info: Redefining \] on input line 2924.
+)
+(C:\Program Files\MiKTeX\tex/latex/amsfonts\amssymb.sty
+Package: amssymb 2013/01/14 v3.01 AMS font symbols
+
+(C:\Program Files\MiKTeX\tex/latex/amsfonts\amsfonts.sty
+Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
+\symAMSa=\mathgroup5
+\symAMSb=\mathgroup6
+LaTeX Font Info:    Redeclaring math symbol \hbar on input line 98.
+LaTeX Font Info:    Overwriting math alphabet `\mathfrak' in version `bold'
+(Font)                  U/euf/m/n --> U/euf/b/n on input line 106.
+))
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/multirow\multirow.sty
+Package: multirow 2021/03/15 v2.8 Span multiple rows of a table
+\multirow@colwidth=\skip60
+\multirow@cntb=\count297
+\multirow@dima=\skip61
+\bigstrutjot=\dimen180
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/fancyhdr\fancyhdr.sty
+Package: fancyhdr 2021/01/28 v4.0.1 Extensive control of page headers and foote
+rs
+\f@nch@headwidth=\skip62
+\f@nch@O@elh=\skip63
+\f@nch@O@erh=\skip64
+\f@nch@O@olh=\skip65
+\f@nch@O@orh=\skip66
+\f@nch@O@elf=\skip67
+\f@nch@O@erf=\skip68
+\f@nch@O@olf=\skip69
+\f@nch@O@orf=\skip70
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/cleveref\cleveref.sty
+Package: cleveref 2018/03/27 v0.21.4 Intelligent cross-referencing
+Package cleveref Info: `hyperref' support loaded on input line 2370.
+LaTeX Info: Redefining \cref on input line 2370.
+LaTeX Info: Redefining \Cref on input line 2370.
+LaTeX Info: Redefining \crefrange on input line 2370.
+LaTeX Info: Redefining \Crefrange on input line 2370.
+LaTeX Info: Redefining \cpageref on input line 2370.
+LaTeX Info: Redefining \Cpageref on input line 2370.
+LaTeX Info: Redefining \cpagerefrange on input line 2370.
+LaTeX Info: Redefining \Cpagerefrange on input line 2370.
+LaTeX Info: Redefining \labelcref on input line 2370.
+LaTeX Info: Redefining \labelcpageref on input line 2370.
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/todonotes\todonotes.sty
+Package: todonotes 2021/06/04 v1.1.5 Todonotes source and documentation.
+Package: todonotes 2021/06/04
+
+(C:\Program Files\MiKTeX\tex/latex/xkeyval\xkeyval.sty
+Package: xkeyval 2020/11/20 v2.8 package option processing (HA)
+
+(C:\Program Files\MiKTeX\tex/generic/xkeyval\xkeyval.tex
+(C:\Program Files\MiKTeX\tex/generic/xkeyval\xkvutils.tex
+\XKV@toks=\toks25
+\XKV@tempa@toks=\toks26
+)
+\XKV@depth=\count298
+File: xkeyval.tex 2014/12/03 v2.7a key=value parser (HA)
+))
+(C:\Program Files\MiKTeX\tex/latex/pgf/frontendlayer\tikz.sty
+(C:\Program Files\MiKTeX\tex/latex/pgf/basiclayer\pgf.sty
+(C:\Program Files\MiKTeX\tex/latex/pgf/utilities\pgfrcs.sty
+(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgfutil-common.tex
+\pgfutil@everybye=\toks27
+\pgfutil@tempdima=\dimen181
+\pgfutil@tempdimb=\dimen182
+
+(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgfutil-common-lists.tex))
+(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgfutil-latex.def
+\pgfutil@abb=\box102
+)
+(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgfrcs.code.tex
+(C:\Program Files\MiKTeX\tex/generic/pgf\pgf.revision.tex)
+Package: pgfrcs 2021/05/15 v3.1.9a (3.1.9a)
+))
+Package: pgf 2021/05/15 v3.1.9a (3.1.9a)
+
+(C:\Program Files\MiKTeX\tex/latex/pgf/basiclayer\pgfcore.sty
+(C:\Program Files\MiKTeX\tex/latex/pgf/systemlayer\pgfsys.sty
+(C:\Program Files\MiKTeX\tex/generic/pgf/systemlayer\pgfsys.code.tex
+Package: pgfsys 2021/05/15 v3.1.9a (3.1.9a)
+
+(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgfkeys.code.tex
+\pgfkeys@pathtoks=\toks28
+\pgfkeys@temptoks=\toks29
+
+(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgfkeysfiltered.code.tex
+\pgfkeys@tmptoks=\toks30
+))
+\pgf@x=\dimen183
+\pgf@y=\dimen184
+\pgf@xa=\dimen185
+\pgf@ya=\dimen186
+\pgf@xb=\dimen187
+\pgf@yb=\dimen188
+\pgf@xc=\dimen189
+\pgf@yc=\dimen190
+\pgf@xd=\dimen191
+\pgf@yd=\dimen192
+\w@pgf@writea=\write3
+\r@pgf@reada=\read3
+\c@pgf@counta=\count299
+\c@pgf@countb=\count300
+\c@pgf@countc=\count301
+\c@pgf@countd=\count302
+\t@pgf@toka=\toks31
+\t@pgf@tokb=\toks32
+\t@pgf@tokc=\toks33
+\pgf@sys@id@count=\count303
+
+(C:\Program Files\MiKTeX\tex/generic/pgf/systemlayer\pgf.cfg
+File: pgf.cfg 2021/05/15 v3.1.9a (3.1.9a)
+)
+Driver file for pgf: pgfsys-pdftex.def
+
+(C:\Program Files\MiKTeX\tex/generic/pgf/systemlayer\pgfsys-pdftex.def
+File: pgfsys-pdftex.def 2021/05/15 v3.1.9a (3.1.9a)
+
+(C:\Program Files\MiKTeX\tex/generic/pgf/systemlayer\pgfsys-common-pdf.def
+File: pgfsys-common-pdf.def 2021/05/15 v3.1.9a (3.1.9a)
+)))
+(C:\Program Files\MiKTeX\tex/generic/pgf/systemlayer\pgfsyssoftpath.code.tex
+File: pgfsyssoftpath.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+\pgfsyssoftpath@smallbuffer@items=\count304
+\pgfsyssoftpath@bigbuffer@items=\count305
+)
+(C:\Program Files\MiKTeX\tex/generic/pgf/systemlayer\pgfsysprotocol.code.tex
+File: pgfsysprotocol.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+))
+(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcore.code.tex
+Package: pgfcore 2021/05/15 v3.1.9a (3.1.9a)
+
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmath.code.tex
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathcalc.code.tex
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathutil.code.tex)
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathparser.code.tex
+\pgfmath@dimen=\dimen193
+\pgfmath@count=\count306
+\pgfmath@box=\box103
+\pgfmath@toks=\toks34
+\pgfmath@stack@operand=\toks35
+\pgfmath@stack@operation=\toks36
+)
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.code.tex
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.basic.code.tex)
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.trigonometric.co
+de.tex)
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.random.code.tex)
+
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.comparison.code.
+tex)
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.base.code.tex)
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.round.code.tex)
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.misc.code.tex)
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfunctions.integerarithmeti
+cs.code.tex)))
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmathfloat.code.tex
+\c@pgfmathroundto@lastzeros=\count307
+))
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfint.code.tex)
+(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorepoints.code.tex
+File: pgfcorepoints.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+\pgf@picminx=\dimen194
+\pgf@picmaxx=\dimen195
+\pgf@picminy=\dimen196
+\pgf@picmaxy=\dimen197
+\pgf@pathminx=\dimen198
+\pgf@pathmaxx=\dimen199
+\pgf@pathminy=\dimen256
+\pgf@pathmaxy=\dimen257
+\pgf@xx=\dimen258
+\pgf@xy=\dimen259
+\pgf@yx=\dimen260
+\pgf@yy=\dimen261
+\pgf@zx=\dimen262
+\pgf@zy=\dimen263
+)
+(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorepathconstruct.code.t
+ex
+File: pgfcorepathconstruct.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+\pgf@path@lastx=\dimen264
+\pgf@path@lasty=\dimen265
+)
+(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorepathusage.code.tex
+File: pgfcorepathusage.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+\pgf@shorten@end@additional=\dimen266
+\pgf@shorten@start@additional=\dimen267
+)
+(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorescopes.code.tex
+File: pgfcorescopes.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+\pgfpic=\box104
+\pgf@hbox=\box105
+\pgf@layerbox@main=\box106
+\pgf@picture@serial@count=\count308
+)
+(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcoregraphicstate.code.te
+x
+File: pgfcoregraphicstate.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+\pgflinewidth=\dimen268
+)
+(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcoretransformations.code
+.tex
+File: pgfcoretransformations.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+\pgf@pt@x=\dimen269
+\pgf@pt@y=\dimen270
+\pgf@pt@temp=\dimen271
+) (C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorequick.code.tex
+File: pgfcorequick.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+) (C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcoreobjects.code.tex
+File: pgfcoreobjects.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+)
+(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorepathprocessing.code.
+tex
+File: pgfcorepathprocessing.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+) (C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorearrows.code.tex
+File: pgfcorearrows.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+\pgfarrowsep=\dimen272
+) (C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcoreshade.code.tex
+File: pgfcoreshade.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+\pgf@max=\dimen273
+\pgf@sys@shading@range@num=\count309
+\pgf@shadingcount=\count310
+)
+(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcoreimage.code.tex
+File: pgfcoreimage.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+
+(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcoreexternal.code.tex
+File: pgfcoreexternal.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+\pgfexternal@startupbox=\box107
+))
+(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorelayers.code.tex
+File: pgfcorelayers.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+)
+(C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcoretransparency.code.te
+x
+File: pgfcoretransparency.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+) (C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorepatterns.code.tex
+File: pgfcorepatterns.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+) (C:\Program Files\MiKTeX\tex/generic/pgf/basiclayer\pgfcorerdf.code.tex
+File: pgfcorerdf.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+)))
+(C:\Program Files\MiKTeX\tex/generic/pgf/modules\pgfmoduleshapes.code.tex
+File: pgfmoduleshapes.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+\pgfnodeparttextbox=\box108
+)
+(C:\Program Files\MiKTeX\tex/generic/pgf/modules\pgfmoduleplot.code.tex
+File: pgfmoduleplot.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+)
+(C:\Program Files\MiKTeX\tex/latex/pgf/compatibility\pgfcomp-version-0-65.sty
+Package: pgfcomp-version-0-65 2021/05/15 v3.1.9a (3.1.9a)
+\pgf@nodesepstart=\dimen274
+\pgf@nodesepend=\dimen275
+)
+(C:\Program Files\MiKTeX\tex/latex/pgf/compatibility\pgfcomp-version-1-18.sty
+Package: pgfcomp-version-1-18 2021/05/15 v3.1.9a (3.1.9a)
+)) (C:\Program Files\MiKTeX\tex/latex/pgf/utilities\pgffor.sty
+(C:\Program Files\MiKTeX\tex/latex/pgf/utilities\pgfkeys.sty
+(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgfkeys.code.tex))
+(C:\Program Files\MiKTeX\tex/latex/pgf/math\pgfmath.sty
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmath.code.tex))
+(C:\Program Files\MiKTeX\tex/generic/pgf/utilities\pgffor.code.tex
+Package: pgffor 2021/05/15 v3.1.9a (3.1.9a)
+
+(C:\Program Files\MiKTeX\tex/generic/pgf/math\pgfmath.code.tex)
+\pgffor@iter=\dimen276
+\pgffor@skip=\dimen277
+\pgffor@stack=\toks37
+\pgffor@toks=\toks38
+))
+(C:\Program Files\MiKTeX\tex/generic/pgf/frontendlayer/tikz\tikz.code.tex
+Package: tikz 2021/05/15 v3.1.9a (3.1.9a)
+
+(C:\Program Files\MiKTeX\tex/generic/pgf/libraries\pgflibraryplothandlers.code.
+tex
+File: pgflibraryplothandlers.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+\pgf@plot@mark@count=\count311
+\pgfplotmarksize=\dimen278
+)
+\tikz@lastx=\dimen279
+\tikz@lasty=\dimen280
+\tikz@lastxsaved=\dimen281
+\tikz@lastysaved=\dimen282
+\tikz@lastmovetox=\dimen283
+\tikz@lastmovetoy=\dimen284
+\tikzleveldistance=\dimen285
+\tikzsiblingdistance=\dimen286
+\tikz@figbox=\box109
+\tikz@figbox@bg=\box110
+\tikz@tempbox=\box111
+\tikz@tempbox@bg=\box112
+\tikztreelevel=\count312
+\tikznumberofchildren=\count313
+\tikznumberofcurrentchild=\count314
+\tikz@fig@count=\count315
+ (C:\Program Files\MiKTeX\tex/generic/pgf/modules\pgfmodulematrix.code.tex
+File: pgfmodulematrix.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+\pgfmatrixcurrentrow=\count316
+\pgfmatrixcurrentcolumn=\count317
+\pgf@matrix@numberofcolumns=\count318
+)
+\tikz@expandcount=\count319
+
+(C:\Program Files\MiKTeX\tex/generic/pgf/frontendlayer/tikz/libraries\tikzlibra
+rytopaths.code.tex
+File: tikzlibrarytopaths.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+)))
+(C:\Program Files\MiKTeX\tex/generic/pgf/frontendlayer/tikz/libraries\tikzlibra
+rypositioning.code.tex
+File: tikzlibrarypositioning.code.tex 2021/05/15 v3.1.9a (3.1.9a)
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/tools\calc.sty
+Package: calc 2017/05/25 v4.3 Infix arithmetic (KKT,FJ)
+\calc@Acount=\count320
+\calc@Bcount=\count321
+\calc@Adimen=\dimen287
+\calc@Bdimen=\dimen288
+\calc@Askip=\skip71
+\calc@Bskip=\skip72
+LaTeX Info: Redefining \setlength on input line 80.
+LaTeX Info: Redefining \addtolength on input line 81.
+\calc@Ccount=\count322
+\calc@Cskip=\skip73
+)
+\c@@todonotes@numberoftodonotes=\count323
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/minted\minted.sty
+Package: minted 2017/07/19 v2.5 Yet another Pygments shim for LaTeX
+
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/fvextra\fvextra.sty
+Package: fvextra 2019/02/04 v1.4 fvextra - extensions and patches for fancyvrb
+
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/fancyvrb\fancyvrb.sty
+Package: fancyvrb 2021/08/12 v3.8 verbatim text (tvz,hv)
+\FV@CodeLineNo=\count324
+\FV@InFile=\read4
+\FV@TabBox=\box113
+\c@FancyVerbLine=\count325
+\FV@StepNumber=\count326
+\FV@OutFile=\write4
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/upquote\upquote.sty
+Package: upquote 2012/04/19 v1.3 upright-quote and grave-accent glyphs in verba
+tim
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/lineno\lineno.sty
+Package: lineno 2005/11/02 line numbers on paragraphs v4.41
+\linenopenalty=\count327
+\output=\toks39
+\linenoprevgraf=\count328
+\linenumbersep=\dimen289
+\linenumberwidth=\dimen290
+\c@linenumber=\count329
+\c@pagewiselinenumber=\count330
+\c@LN@truepage=\count331
+\c@internallinenumber=\count332
+\c@internallinenumbers=\count333
+\quotelinenumbersep=\dimen291
+\bframerule=\dimen292
+\bframesep=\dimen293
+\bframebox=\box114
+LaTeX Info: Redefining \\ on input line 3056.
+)
+\c@FV@TrueTabGroupLevel=\count334
+\c@FV@TrueTabCounter=\count335
+\FV@TabBox@Group=\box115
+\FV@TmpLength=\skip74
+\c@FV@HighlightLinesStart=\count336
+\c@FV@HighlightLinesStop=\count337
+\FV@LoopCount=\count338
+\FV@NCharsBox=\box116
+\FV@BreakIndent=\dimen294
+\FV@BreakIndentNChars=\count339
+\FV@BreakSymbolSepLeft=\dimen295
+\FV@BreakSymbolSepLeftNChars=\count340
+\FV@BreakSymbolSepRight=\dimen296
+\FV@BreakSymbolSepRightNChars=\count341
+\FV@BreakSymbolIndentLeft=\dimen297
+\FV@BreakSymbolIndentLeftNChars=\count342
+\FV@BreakSymbolIndentRight=\dimen298
+\FV@BreakSymbolIndentRightNChars=\count343
+\c@FancyVerbLineBreakLast=\count344
+\FV@LineBox=\box117
+\FV@LineIndentBox=\box118
+\FV@LineWidth=\dimen299
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/tools\shellesc.sty
+Package: shellesc 2019/11/08 v1.0c unified shell escape interface for LaTeX
+Package shellesc Info: Unrestricted shell escape enabled on input line 75.
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/ifplatform\ifplatform.sty
+Package: ifplatform 2017/10/13 v0.4a Testing for the operating system
+
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/catchfile\catchfile.sty
+Package: catchfile 2019/12/09 v1.8 Catch the contents of a file (HO)
+)
+(C:\Program Files\MiKTeX\tex/generic/iftex\ifluatex.sty
+Package: ifluatex 2019/10/25 v1.5 ifluatex legacy package. Use iftex instead.
+))
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/xstring\xstring.sty
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/xstring\xstring.tex
+\integerpart=\count345
+\decimalpart=\count346
+)
+Package: xstring 2021/07/21 v1.84 String manipulations (CT)
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/framed\framed.sty
+Package: framed 2011/10/22 v 0.96: framed or shaded text with page breaks
+\OuterFrameSep=\skip75
+\fb@frw=\dimen300
+\fb@frh=\dimen301
+\FrameRule=\dimen302
+\FrameSep=\dimen303
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/float\float.sty
+Package: float 2001/11/08 v1.3d Float enhancements (AL)
+\c@float@type=\count347
+\float@exts=\toks40
+\float@box=\box119
+\@float@everytoks=\toks41
+\@floatcapt=\box120
+)
+\minted@appexistsfile=\read5
+\minted@bgbox=\box121
+\minted@code=\write5
+\c@minted@FancyVerbLineTemp=\count348
+\c@minted@pygmentizecounter=\count349
+\@float@every@listing=\toks42
+\c@listing=\count350
+)
+runsystem(if not exist _minted-index mkdir _minted-index)...executed.
+
+runsystem(for ^%i in (pygmentize.exe pygmentize.bat pygmentize.cmd) do set > in
+dex.aex <nul: /p x=^%~$PATH:i>> index.aex)...executed.
+
+runsystem(del index.aex)...executed.
+
+
+(C:\Program Files\MiKTeX\tex/latex/l3backend\l3backend-pdftex.def
+File: l3backend-pdftex.def 2021-08-04 L3 backend support: PDF output (pdfTeX)
+\l__color_backend_stack_int=\count351
+\l__pdf_internal_box=\box122
+) (index.aux)
+\openout1 = `index.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 45.
+LaTeX Font Info:    ... okay on input line 45.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 45.
+LaTeX Font Info:    ... okay on input line 45.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 45.
+LaTeX Font Info:    ... okay on input line 45.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 45.
+LaTeX Font Info:    ... okay on input line 45.
+LaTeX Font Info:    Checking defaults for TS1/cmr/m/n on input line 45.
+LaTeX Font Info:    ... okay on input line 45.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 45.
+LaTeX Font Info:    ... okay on input line 45.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 45.
+LaTeX Font Info:    ... okay on input line 45.
+LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 45.
+LaTeX Font Info:    ... okay on input line 45.
+LaTeX Font Info:    Checking defaults for PU/pdf/m/n on input line 45.
+LaTeX Font Info:    ... okay on input line 45.
+
+(C:\Program Files\MiKTeX\tex/context/base/mkii\supp-pdf.mkii
+[Loading MPS to PDF converter (version 2006.09.02).]
+\scratchcounter=\count352
+\scratchdimen=\dimen304
+\scratchbox=\box123
+\nofMPsegments=\count353
+\nofMParguments=\count354
+\everyMPshowfont=\toks43
+\MPscratchCnt=\count355
+\MPscratchDim=\dimen305
+\MPnumerator=\count356
+\makeMPintoPDFobject=\count357
+\everyMPtoPDFconversion=\toks44
+)
+Package hyperref Info: Link coloring OFF on input line 45.
+ (C:\Program Files\MiKTeX\tex/latex/hyperref\nameref.sty
+Package: nameref 2021-04-02 v2.47 Cross-referencing by name of section
+
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/latex/refcount\refcount.sty
+Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO)
+)
+(C:\Users\tuhe\AppData\Roaming\MiKTeX\tex/generic/gettitlestring\gettitlestring
+.sty
+Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO)
+)
+\c@section@level=\count358
+)
+LaTeX Info: Redefining \ref on input line 45.
+LaTeX Info: Redefining \pageref on input line 45.
+LaTeX Info: Redefining \nameref on input line 45.
+ (index.out) (index.out)
+\@outlinefile=\write6
+\openout6 = `index.out'.
+
+LaTeX Font Info:    Trying to load font information for U+lasy on input line 48
+.
+ (C:\Program Files\MiKTeX\tex/latex/base\ulasy.fd
+File: ulasy.fd 1998/08/17 v2.2e LaTeX symbol font definitions
+)
+LaTeX Font Info:    Trying to load font information for U+msa on input line 48.
+
+ (C:\Program Files\MiKTeX\tex/latex/amsfonts\umsa.fd
+File: umsa.fd 2013/01/14 v3.01 AMS symbols A
+)
+LaTeX Font Info:    Trying to load font information for U+msb on input line 48.
+
+
+(C:\Program Files\MiKTeX\tex/latex/amsfonts\umsb.fd
+File: umsb.fd 2013/01/14 v3.01 AMS symbols B
+)
+<br.pdf, id=15, 279.0425pt x 200.75pt>
+File: br.pdf Graphic file (type pdf)
+<use br.pdf>
+Package pdftex.def Info: br.pdf  used on input line 53.
+(pdftex.def)             Requested size: 312.00119pt x 224.4678pt.
+ (index.bbl) [1{C:/Users/tuhe/AppData/Local/MiKTeX/pdftex/config/pdftex.map}pdf
+TeX warning (ext4): destination with the same identifier (name{figure.1}) has b
+een already used, duplicate ignored
+<argument> ...shipout:D \box_use:N \l_shipout_box 
+                                                  \__shipout_drop_firstpage_...
+l.60 \end{document}
+                   
+
+ <./br.pdf>] (index.aux)
+Package rerunfilecheck Info: File `index.out' has not changed.
+(rerunfilecheck)             Checksum: D96912DD8E67535EC65D76A02327F866;111.
+ ) 
+Here is how much of TeX's memory you used:
+ 26046 strings out of 478927
+ 486761 string characters out of 2862359
+ 824814 words of memory out of 3000000
+ 43413 multiletter control sequences out of 15000+600000
+ 410343 words of font info for 54 fonts, out of 8000000 for 9000
+ 1141 hyphenation exceptions out of 8191
+ 99i,7n,97p,437b,372s stack positions out of 5000i,500n,10000p,200000b,80000s
+<C:/Program Files/MiKTeX/fonts/type1/public/amsfonts/cm/cmbx12.pfb><C:/Progra
+m Files/MiKTeX/fonts/type1/public/amsfonts/cm/cmr12.pfb><C:/Program Files/MiKTe
+X/fonts/type1/public/amsfonts/cm/cmti12.pfb>
+Output written on index.pdf (1 page, 71031 bytes).
+PDF statistics:
+ 86 PDF objects out of 1000 (max. 8388607)
+ 9 named destinations out of 1000 (max. 500000)
+ 26 words of extra memory for PDF output out of 10000 (max. 10000000)
+
diff --git a/example/latex/index.out b/example/latex/index.out
new file mode 100644
index 0000000..ce0fc38
--- /dev/null
+++ b/example/latex/index.out
@@ -0,0 +1 @@
+\BOOKMARK [1][-]{section.1}{\376\377\000F\000i\000r\000s\000t\000\040\000s\000e\000c\000t\000i\000o\000n}{}% 1
diff --git a/example/latex/index.pdf b/example/latex/index.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..00ab4412307a86e459bf1528751a46cda41d313f
GIT binary patch
literal 71031
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
C-Zdfs

literal 0
HcmV?d00001

diff --git a/example/latex/index.synctex.gz b/example/latex/index.synctex.gz
new file mode 100644
index 0000000000000000000000000000000000000000..7b8a1d1e7388c8f21f2f042b94ca1b1b5db253f7
GIT binary patch
literal 4732
zcmb2|=3oE=uC+1I`HwB8)tz7eqHZ;l7VACzO6e~N4M&p<n(xj%s$=yx!Fto;-rSwK
zmXp6E{Qq5dWvWtUyBGhi)he&&eEvAWCfsYq{~G(ef2)7|=Kmi%=k+Ely9>MPt>@{T
zWv>14^5MsP(|LAg)1N>3*njm|kw%~I-w65BmseWYi{-CAoEdNPF5LIyw+OlUUEAO9
zc>Q$d<o~aC-kKZUF8?p&UH7k#=b!FRUgCcI?#VUbr5|@#nLka7uetx`b=;KaUDuxG
zv!+g1Q{_2P@#nUc->&Z5U$cJp_qedM6HR4RdgfpMrtPkN!%%RYd4(#2|Iu$Bzic_W
z`TdT!f+ZWC)mzN{w<9a8|9{|GzNdxahqr2(y#8D9`0Q~V*6dYT@yXWbR+sZ1OFQ$b
z=-zJoc_OOZV##|xGQJRMcoy@n=Aq2v*>9h&IJjl*l=?hI{^_<nyJoFDmb?3o=<!D}
zd2;jPP6z+3SSPjM=Ou5Q&BE<fb_aw`%jDgwVc5&^U};5t?Ac}cMY6l@n4Ld*QGBbn
zd17p+{@JY9esejg(;H7cFK5|qe5ZKFN5(@dDxBvghJQbM``L#O{&4xX+h+1HJl)p2
zK6lNBmVEb<jyt*y*D_sR%db4`{0f`A{~N86bC+4m2kN=kRIcr2D+~57w_Eg!N9j;j
zrB2m_m+k$#74B8Nj=VDa>dG1KYK|Or{Qh&VxBK6#$D?w7{a(~KQ8sLL@zeX&Gv??V
zjfuTC@1e)xtH+}raLZmhon4w0kbLFx-2UmpTil=9*j{|J<71Kf`IS;i_xIgj-?#hn
zs+%_ATlv3fuFo)A{kP(4`Zvyg4Yu{VN%NmteyoXF>AfLf{)S(rHxKCk?p}YAse1l~
zvco~X+wIc)j$RDyJG<+~)$>nnb?!0?oL*ED(%L!a(&F$3TP^mBA7388yzPpqfV2K_
z-L@vhytt<McAuISr9^x<z46c2pqy2wH#%Om`~6f|-{7a;^WfS$*F3bJZnOI3rYJV!
zH_ywWUvFRj{+8JgDe#qf#;?20Cs)Sax|@^#`g^ne)Z0@}XIxrcy7B$LZ>{;#MP3y~
zPL;Pio*z0JEqwC1#K%{AqNex1{wjCzhJI~o+~+pI_uY^4;;)_W|NHg#zsxHN>I&k^
zcddNT_<i~GyFU)+pAw6H`fiWzy;=VrDL)Ol=vn%1Zs`vX%ZJk^IR7+iUUNU)drtDS
z*4G->u9iH`o){dmp6_eoRU7{BcpLRoRgccrn1=fGd_7XWc~xAh<a3q1>;CqIJdIec
z9y>QJ`S}dhB{2c3@A4`gx;6d0W%7rox25G13M+D~PZfXd|9H$jT1IvI>c`Li{(Nb3
z??=XIe}!+XMGBu@6g*yB`-tPwN~<v5X(f9;e=N%Rwl>?oeYN_!&rVq!7kb>Ier>yX
zjA8xsWp}RIIrY7qS9bgOTgkBILrMFq+|T8mntuOJ=aU&5oE;x%nai@&{o=56dn0g%
z<<v43$^GXx3rp2nFX-b9?s!ypCx6x9g;u|`i>+5YTX0vI(RB0GeX_~<$=k9Y%s=~d
zD$_~V+adm~>%-#`A1t`DZEpAVOR{IHIMmet9248H@?4#gv1Q_og$kvnM-y9CrpInM
zX?=7@ldw+jNt>%2;XB{HabB}0c)N;NR{oUZM}u2t=6^YuviDB@r(D~(jlWmK8~#k2
z*YLXb_|#arlzkhIPbl4*>$mO}$928?Z;~%u-kGIUzDla$)}94*N5!2s>|uC+;MOB1
z^Y$Yyx%=FI805;!I6eK{%>VR_Wz(s0cKKIZtdtww6Moh`XwKC??pyv&_|endE>i37
z-r+F4Z+vORyS+@OCO9|Fmax6=dFjRTs~=Zdxor5ESCpH{e`Cugw__X&G*5n?w)(V8
zC9mrIV(EOvRi_QPwoa)z*Q<8JInsT$+sWrPSx&lvGv0O?hwZ3rOPo?zxBN-*x@~vE
zSF5o_zsm|RY&-dVgGIo+RhLW+1=IG`s~W_fINW6R{IuG_ynV$>7wUh_nr?8l=6P4*
zYu{3>N1;C+#6HhG^KfnC?{oT2=gQYe>~ySf{9M@<xI{_s?*rABxgX;7pFUG<JM(?5
z#HOhK`5QeYBA=bU{CZl$rNrPXTdUQj5}*GL>)C6ySk(W;?`oN~b#b<;ZytRA5n1VB
zd5HaeO1`sLzD8gF>J>*8eEGg3{I_!4dH%RtX%>u|5)1F_IeudQ@x2L=d4fW}{>kmP
zTFleWAfB@3)yqxqcg^_st#T??WR7DKm!kh~ExzkI&r7Zz+<MeAcwOxNulLUWD%e&3
z*3NF1`ggB$`yQXL%=#-a?Ow2P^I6N9-d~5_zWJ(?YRSIgrQ22aliz3XOUIom?q^NA
z+r6Ck|8*0GFU{pU!_%KmvpDoC=AhW)C%0>AeqED2=sMx&%jEcVu_tf%ZvOr8oy|*0
z+XHr@-|Q+*R$q2C{9pW2%=y{!iAT76j0^04Ynn_wy@B)X=gZ#j0+z4Ri&dR`>T%7-
z?Lv3AM;%<9t|eA4Us&+=Kydv`N8NumNx!@HRK@XLm%Q;v{M6fr|6W(x-aGR^to~M+
z<=?86vyyh4J0P}y(e3HSA4PnfE_vlqxbj`IYv+&3iJ9F$byVN&)LTyTbxGgy(kIOS
zQIzy}pKf9Pr{%jPQ|8U*ncwhM|Lw{x{2Ok3x__b2(y4xKZN`oRe~xdLWt{VTYSB*a
z1kne+cT<<$EMhM>Tk`!okH+)6C+DpXpDli5$xA)EvZWVyzue=$Bz$^iW8U-rUhbZJ
z-|wY|9xm09e|`Gp6}hXs;+0P=I^WnAaqDNcm6rJaugng=Sx;6NH~&83?znqV<|(#W
z<;P6^TQc*%wave{+S^!R#f1~ol~d{!N^Y+IlOLGzZuRSTPd`2lSYPwdHGiGro^P%8
z>1$qp{r66P`Z31?Z{Gdeb4&Jg?#|49kvoM-JAdEa$nxjz{rVrL%c8~4GVlC7|K+#k
zW?Rkq%k39+Z+!A@{+D;@zj&<`Ov2Bs$ae}{%p1t>qj~n>v->QY7}h<J-dR0wbJ=zF
z0Egd2&DVGxCkgG~t~<Xou4(z-ukT*p&6{xiul|qE#oNk)q|XGOcjL(XK8543W$r=o
zHG#*qdR6X7^@n<8b{??dcpfDnyix1uRL8>xMOlkk(ieXU|G8}L&XY!GlSBLr+)O`D
zd3=dWb<L|O&Ni|UGcP!KJaRnLFg10SPV&(Zfe-FsX}w!KRE1Yxn38d9S1#jfK^McL
z&)2wlnm-n)yz_2}j^GVvE9qxqtEX;CpZYESkk_Y*gy62z(zgN+_dGlEYfXH*wwl_r
z-}7!aEd45FV3@olq2yN6v~OGG&j;?j5<czfVj;b$l7Gtk>?XeteZ1oN+6QX)&aPjW
z%8@y7`;in$p>-_z4bvl6RoOhr_BnH^^X?(nwO4JUe8O3nIYbxiExi-veYjO(=kJ>V
z&H){U?<>#eHzWrC2|M(5@ALRe=hIhP1@08O5%z3tmi@e`GOsRX*sRuF*wgmQaFxmI
zkM+IZ6l2WARq6_*7DmZ`can6R`hIC{%A&ciG~Kc^RnOF1zVXcL(%VTje*QLLhZGcE
zy(~PwcB|9urOS@TSJ$zm^)VznGj{FWy5XyUyk7f^?3Z8uEUmR$duYY>OD=*7s}FQ6
zG!EXv@z|&5ic9dTnJYK4EpuAiv~nw#gv4B-GmqaL4|h^BKEc@%y>9Bet!6xdP8)Vk
zsB5^LwEOQwQ}a!xi2=HSQ3ax0k$M`N-*gFFI~%ZW@j{K({|3vL4J|tYXYhPI@%EO=
zJnO?(T_PglUiYLhJeZ?+x$0J(tY(nFqQ#W~e6G6v>YtuUNiG!Bw3dntT)IT5bE2qu
z2fvDx<R62|(%dH<K5GpNR%E0+x196o$cc`bvwlvgOX*H<2-)%Yv0g;;|Hv&NJp$cI
z4{psfJ~ijMYxOw+!I^uq;(H`5%Jvxc2tRJRCaSuTcS=;hjh%Uv(ks`370cHwSopLz
z%7N{)uCifE{^^_*M>Up3FYa=0zPxkN`&lyrW0Z|tl9u%rJ>=>y-gYK*g3heXu8*9p
zI_FDwpVGc1=(nP&KJNBJO*hu0ho9Mn-1Soul6dz|OWFNmDQoLhzdN}FSNNkek0`w_
zT;3n}L$+9XXP|U(bYH~6N5>-;9GMWIxTER&j@f=cD!f+P6~?p~uHLtW=dx4pYDd*W
z4DUCEH7(Q+<KSXT;g+~--Z#f_W5+uMe+Aao%m-4|`G-Y!JiLEp>a!J|x1YS75$IxU
zYq<U7J=^et+;_I`fASWKx}3?630ufnw>D5(^@reAfo`R`8EcEUB|j<u<Iq&Db6eqh
z<NG}R)otuNo@b)j)~xIedam>=&xfzR<=aHP$9z@0c#f`<+1t4I$E8c>pVk)N$h*=Y
zV6^r0goKQTfvuN0<98hE_>>|!_1T+{8%tN3yGh6-a84CYNp?%$`e$q5eJid<OsRUl
z{Y$3z8LT~Ku*_Kgx-I_#!Q%$f;fHs0i7YTE(K9*a$0j^YBi@Ob(YpVp^X(f;f3`j6
zI_YWgpJQJCWx09vp7!n*Zbu(v^;}tTQ{&#Uijb2kkC<m}WzuagoZ5Rq_?`Fv7)4>@
zeA9p$kKFdVK01dvJXacUZIevk`o5J}hWqXA?aGG&ZgO&cZ;}l>f5WptrNDxDtD#cx
z5mRHvMG~y4B@d?^>EM`nZ0U3k!P^}(+dDQb_IBScHTSzqxRc@ChfO`392W*~7sxW^
z8r@>&7uTIE)T|&UC6Z@!;fi2DY^KRG!GobIXQ`{O7}=_8U20s&o#b=Vf!&TviFfgw
z?y2b-8n-8Xn)S)e;ydr!6M|E$Zz^4PYnk@qLGF&nbrL)R%1-fpXKdqwr<``Gkdwcn
zENeZhN}=b?V>O`)qsb{sZ`hd1;&=J-s7_daG38Z6lh)}AjjSwBYaFvX7udE3ox8U5
zf?j?bOJmg{-vf#wO7huzZKf3LK3m$wAfqS5vNo_|))5J*?x$R9JPs|ANK#U4Y;s9{
zH<9I3_qrBtRf$(Ii-Uw@`b9r-=-*}YJ7$ox<CvTDz2&=D4$pXfBSj}eHfDc~vF(f*
zwln3D_C5SLL$2w0atAm{_D_`)TTt=x;9{m*yYi!(za&hMOVG-&cE2<I-_HqhY%%LT
z$je@GPLg!<5Gh{qHH0DaG3&nY7k50=)9$(-)-XxcaqnCbB~-t3$6LN!t6khTj<ghS
zco!{Z!4%%8@V1-(k;I(R%bko9W52&Vby0O!sgv3-m%t47i`Q6_w~2&oeqnj}mKED~
z?ymt(A}a;+s$)fXw;$SIBi8CK-1(#`b=4Ka1CgD+{!@2dNqp#O)>0<Ysqs$tP>i<0
z0?j;se)o&>)w!-U{S<bx?z_LPPQ>6yyqkbuN3cRvmb+mIn^B<KbN<pkjbNdV%*|I>
zJkM1$F3etEHJe3ymE={qSv-6G3Y?Kna#7^sc5XjqdeG>V!Onhb?uj?{%s$xpX@<Sz
zT%jK2#14PK#F~@F0{dbV?{o!p7yQ|GNLl#Zp0h2EU4BQimQ=g^sH#;|vv^W}#OTKh
zkJn|PTUZ;)G7DxIf9vI~yEJXXsRa+`xwvyRbuRHzbJ*#kd-%`Uuu~dVom_oh2S2c^
zaCqKprQtYHLnXn4v+IzY;H+75i;i+#KltW|O4eLyuekzSS7`H^hCe?bu(Z?on}^6$
z<x|l|*RRuD-0`Qw?_)^7%SSU6IRhSgc`L1N_Tntxq{R4&@8?W^Nyod{9A1a-zCSIf
zb+<99`iGfefP{{G7$eWL-D{E$1>W|G5Dfozbc&)6%P$p;IEl|r96mu_C-cM(KPX@2
z^^Vg=WX9gy`{Bn$&P+cc(ps3L`%$C$n#kG}F2A2@t4$Ss+_KWz-k_^xLEoY^(aTv_
zb(d%B2_N=ky4$(KPG*w0l*~i{SDzBr0EJWPfp6E`dJ!T2Lq(*tP=Td2uxQJSZ>#K9
ze7YEDG?U@!x`&1Hgc^%VGS()uEs$+Kee%@a%Lc;CoAyic1n>Ogw<b(U=1O3UxMGlq
z>k_wMfmM$+=5UxsTP(a_TD{24^K2!P$Xw2A=hQTg?VX>dV<=;le(Tq#91DMuiQ>9Z
zTcrCIEo~EzxjH5I)I_nxcR$3vVqKuNY{_4tMhB&;nkUoW&A9*kyNuYilXJ3|Q?IXP
ztDl;o=d1DfmY<9K(>;pI6k3Y6JTh$6=9M<+EZkAbu4AIuJWEE+LD)#>W#Hv0Yy~c7
z?@re>bX{<2y5`+Aj}B=~k~qF-abddHM4nqdA*^N#O`VI}vwRjP&PpuLaWen1??qH;
zSCiTF<*6b@c3m?IWZud!JK0Ps%<r6Y_{XlJ&&;BxJk&60zodQe;=XzRKOJOuOWr#B
z?2TFm*WMR)K2nx~@x8}(?MnVKjj`-C*U`p>;&ZO_u<ZXPFY>48`(o3kJAd#0=)dXq
z|Ap7T?X&C`9sHRcYQFk#RlLoezfbJSOJ4qe=YCDFZiV^tPgi32_{;zE7v49@_YG%Y
F007MCQ8@qr

literal 0
HcmV?d00001

diff --git a/example/latex/index.tex b/example/latex/index.tex
new file mode 100644
index 0000000..4a08b20
--- /dev/null
+++ b/example/latex/index.tex
@@ -0,0 +1,59 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% DO NOT EDIT THIS FILE. IT WILL BE AUTOMATICALLY OVERWRITTEN
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% TeX-command-extra-options: "-shell-escape"
+
+
+\documentclass[12pt,twoside]{article}
+\usepackage[table]{xcolor} % important to avoid options clash.
+%\input{book_preamble}
+%\input{02465shared_preamble}
+%\input{structure.tex}
+\usepackage{url}
+\usepackage{graphics}
+%\usepackage{fancybox}
+\usepackage{multicol}
+\usepackage{rotate}
+%\usepackage{epsf}
+\usepackage{rotating}
+%\usepackage{color}
+\usepackage{booktabs}
+\usepackage{hyperref}
+\usepackage{pifont}
+\usepackage{latexsym}
+\usepackage[english]{babel}
+\usepackage{epstopdf}
+\usepackage{etoolbox}
+%\usepackage{epsfig}
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{multirow,epstopdf}
+%\usepackage{cite}
+\usepackage{fancyhdr}
+\usepackage{booktabs}
+%\usepackage[most]{tcolorbox}
+\definecolor{LightGray}{HTML}{EEEEEE}
+\usepackage{cleveref}
+\usepackage{todonotes}
+%\pagestyle{fancy}
+\usepackage{minted}
+\usepackage{cleveref}
+
+
+\begin{document}
+\section{First section}\label{sec1}. 
+Math is hard \cite{bertsekasII,rosolia2018data,herlau} as can also be seen from \cref{eq1} and from \cref{fig1}.
+\begin{equation}
+2+2 = 4 \label{eq1}
+\end{equation}
+\begin{figure}\centering
+	\includegraphics[width=.8\linewidth]{br}\caption{A figure}\label{fig1}
+\end{figure}
+
+ 
+\bibliographystyle{alpha}
+\bibliography{library}
+						
+\end{document}
\ No newline at end of file
diff --git a/example/latex/library.bib b/example/latex/library.bib
new file mode 100644
index 0000000..f7471d2
--- /dev/null
+++ b/example/latex/library.bib
@@ -0,0 +1,289 @@
+@unpublished{herlau,
+	author  = {Tue Herlau},
+	title   = {Sequential Decision Making},
+	year    = {2021},
+	note    = {(See \textbf{02465\_Notes.pdf})}
+}
+@misc{brown2020combining,
+	title={Combining Deep Reinforcement Learning and Search for Imperfect-Information Games}, 
+	author={Noam Brown and Anton Bakhtin and Adam Lerer and Qucheng Gong},
+	year={2020},
+	eprint={2007.13544},
+	archivePrefix={arXiv},
+	primaryClass={cs.GT}
+}
+@unpublished{aa203,
+	author  = {James Harrison},
+	title   = {Optimal and Learning-based Control Combined Course Notes},
+	year    = {2020},
+	note    = {(See \textbf{AA203combined.pdf})},	
+	url = {https://github.com/StanfordASL/AA203-Notes/}
+}
+@book{bertsekasII,
+	author = {Bertsekas, Dimitri P.},
+	title = {Dynamic Programming and Optimal Control, Vol. II},
+	year = {2007},
+	isbn = {1886529302},
+	publisher = {Athena Scientific},
+	edition = {3rd},
+	abstract = {A major revision of the second volume of a textbook on the far-ranging algorithmic methododogy of Dynamic Programming, which can be used for optimal control, Markovian decision problems, planning and sequential decision making under uncertainty, and discrete/combinatorial optimization. The second volume is oriented towards mathematical analysis and computation, and treats infinite horizon problems extensively. New features of the 3rd edition are: 1) A major enlargement in size and scope: the length has increased by more than 50%, and most of the old material has been restructured and/or revised. 2) Extensive coverage (more than 100 pages) of recent research on simulation-based approximate dynamic programming (neuro-dynamic programming), which allow the practical application of dynamic programming to large and complex problems. 3) An in-depth development of the average cost problem (more than 100 pages), including a full analysis of multichain problems, and an extensive analysis of infinite-spaces problems. 4) An introduction to infinite state space stochastic shortest path problems. 5) Expansion of the theory and use of contraction mappings in infinite state space problems and in neuro-dynamic programming. 6) A substantive appendix on the mathematical measure-theoretic issues that must be addressed for a rigorous theory of stochastic dynamic programming. Much supplementary material can be found in the book's web page: http://www.athenasc.com/dpbook.html}
+}
+@article{rosolia2018data,
+	title={Data-driven predictive control for autonomous systems},
+	author={Rosolia, Ugo and Zhang, Xiaojing and Borrelli, Francesco},
+	journal={Annual Review of Control, Robotics, and Autonomous Systems},
+	volume={1},
+	pages={259--286},
+	year={2018},
+	publisher={Annual Reviews}
+}
+@article{rosolia2017learning2,
+	title={Learning model predictive control for iterative tasks: A computationally efficient approach for linear system},
+	author={Rosolia, Ugo and Borrelli, Francesco},
+	journal={IFAC-PapersOnLine},
+	volume={50},
+	number={1},
+	pages={3142--3147},
+	year={2017},
+	publisher={Elsevier}
+}
+
+@article{rosolia2017learning,
+	title={Learning model predictive control for iterative tasks. a data-driven control framework},
+	author={Rosolia, Ugo and Borrelli, Francesco},
+	journal={IEEE Transactions on Automatic Control},
+	volume={63},
+	number={7},
+	pages={1883--1896},
+	year={2017},
+	publisher={IEEE}
+}
+
+
+@book{caldentey,
+	author = {René Caldentey},
+	publisher = {Stern School of Business, New York University},
+	title = {Dynamic Programming with Applications},
+	year = {2011},
+	note= {(see \textbf{caldentey.pdf})},	
+	url = {http://people.stern.nyu.edu/rcaldent/courses/DP-ClassNotes-HEC.pdf}
+}  
+
+@book{herlau02450,
+	author = {Herlau, Tue and Mørup, Morten and Schmidt, Mikkel N.},
+	publisher = {02450 Lecture notes},
+	title = {Introduction to Machine Learning and Data Mining},
+	year = {2020},
+	note= {(See \textbf{02450Book.pdf})},	
+}  
+@inproceedings{rosolia,
+	title={Autonomous racing using learning model predictive control},
+	author={Rosolia, Ugo and Carvalho, Ashwin and Borrelli, Francesco},
+	booktitle={2017 American Control Conference (ACC)},
+	pages={5115--5120},
+	year={2017},
+	organization={IEEE},
+	note= {(See \textbf{rosolia2017.pdf})},
+}
+@book{sutton,
+	added-at = {2019-07-13T10:11:53.000+0200},
+	author = {Sutton, Richard S. and Barto, Andrew G.},
+	edition = {Second},
+	keywords = {},
+	publisher = {The MIT Press},
+	timestamp = {2019-07-13T10:11:53.000+0200},
+	title = {Reinforcement Learning: An Introduction},
+	url = {http://incompleteideas.net/book/the-book-2nd.html},
+	year = {2018 },
+	note= {(See \textbf{sutton2018.pdf})},	
+}
+
+@unpublished{cemgil,
+	author  = {Ali Taylan Cemgil},
+	title   = {A Tutorial Introduction to Monte Carlo methods, Markov Chain Monte Carlo and Particle Filtering},
+	year    = {2012},
+	note    = {(See \textbf{cemgil2012.pdf})},	
+	url = {https://www.cmpe.boun.edu.tr/~cemgil/Courses/cmpe548/cmpe58n-lecture-notes.pdf},
+}
+
+@article{kelly,
+	title={An introduction to trajectory optimization: How to do your own direct collocation},
+	author={Kelly, Matthew},
+	journal={SIAM Review},
+	volume={59},
+	number={4},
+	pages={849--904},
+	year={2017},
+	publisher={SIAM},
+	url = {https://epubs.siam.org/doi/pdf/10.1137/16M1062569},
+	note    = {(See \textbf{kelly2017.pdf})},	
+}
+
+
+@article{bertsekas,
+	title={Reinforcement learning and optimal control},
+	author={Bertsekas, Dimitri P},
+	journal={Athena Scientific},
+	year={2019},
+	url={http://web.mit.edu/dimitrib/www/RL_1-SHORT-INTERNET-POSTED.pdf},
+	note= {(See \textbf{bertsekas2019.pdf})},	
+}
+
+@inproceedings{tassa,
+	title={Synthesis and stabilization of complex behaviors through online trajectory optimization},
+	author={Tassa, Yuval and Erez, Tom and Todorov, Emanuel},
+	booktitle={2012 IEEE/RSJ International Conference on Intelligent Robots and Systems},
+	pages={4906--4913},
+	year={2012},
+	organization={IEEE},
+	url={https://ieeexplore.ieee.org/abstract/document/6386025},
+	note= {(See \textbf{tassa2012.pdf})},	
+}
+
+
+@book{betts2010practical,
+	title={Practical methods for optimal control and estimation using nonlinear programming},
+	author={Betts, John T},
+	volume={19},
+	year={2010},
+	publisher={Siam}
+}
+
+@book{bertsekas1995dynamic,
+	title={Dynamic programming and optimal control},
+	author={Bertsekas, Dimitri P and Bertsekas, Dimitri P and Bertsekas, Dimitri P and Bertsekas, Dimitri P},
+	volume={1},
+	number={2},
+	year={1995},
+	publisher={Athena scientific Belmont, MA}
+}
+
+@article{bellman1957markovian,
+	title={A Markovian decision process},
+	author={Bellman, Richard},
+	journal={Journal of mathematics and mechanics},
+	pages={679--684},
+	year={1957},
+	publisher={JSTOR}
+}
+
+@inproceedings{bertsekas2010distributed,
+	title={Distributed asynchronous policy iteration in dynamic programming},
+	author={Bertsekas, Dimitri P and Yu, Huizhen},
+	booktitle={2010 48th Annual Allerton Conference on Communication, Control, and Computing (Allerton)},
+	pages={1368--1375},
+	year={2010},
+	organization={IEEE}
+}
+@inproceedings{Gal2016,
+  title={Improving {PILCO} with {B}ayesian neural network dynamics models},
+  author={Gal, Yarin and McAllister, Rowan and Rasmussen, Carl Edward},
+  booktitle={Data-Efficient Machine Learning workshop, International Conference on Machine Learning},
+  year={2016},
+  note= {(See \textbf{gal2016.pdf})},	
+}
+
+@book{bertsekasvolI,
+	title={Dynamic Programming and Optimal Control},
+	author={Bertsekas, D.P.},
+	number={v. 1},
+	isbn={9781886529267},
+	lccn={lc00091281},
+	series={Athena Scientific optimization and computation series},
+	year={2005},
+	publisher={Athena Scientific}
+}
+
+@book{russell2002artificial,
+	title={Artificial Intelligence: a modern approach},
+	author={Russell, Stuart J. and Norvig, Peter},
+	edition={3},
+	year={2009},
+	publisher={Pearson}
+}
+
+
+
+% Deep learning related
+@inproceedings{hessel2018rainbow,
+	title={Rainbow: Combining improvements in deep reinforcement learning},
+	author={Hessel, Matteo and Modayil, Joseph and Van Hasselt, Hado and Schaul, Tom and Ostrovski, Georg and Dabney, Will and Horgan, Dan and Piot, Bilal and Azar, Mohammad and Silver, David},
+	booktitle={Thirty-Second AAAI Conference on Artificial Intelligence},
+	year={2018}
+}
+@article{wang2015dueling,
+	title={Dueling network architectures for deep reinforcement learning},
+	author={Wang, Ziyu and Schaul, Tom and Hessel, Matteo and Van Hasselt, Hado and Lanctot, Marc and De Freitas, Nando},
+	journal={arXiv preprint arXiv:1511.06581},
+	year={2015}
+}
+
+
+
+% MC intro chapter:
+
+
+@article{metropolisrrtt53,
+	added-at = {2011-05-09T23:10:52.000+0200},
+	author = {Metropolis, A. W. and Rosenbluth, A. W. and Rosenbluth, M. N. and Teller, A. H. and Teller, E.},
+	biburl = {https://www.bibsonomy.org/bibtex/24b3752b2936a9c524e2f0ca70e63d537/josephausterwei},
+	interhash = {09015548d3568943e67d50619297521e},
+	intrahash = {4b3752b2936a9c524e2f0ca70e63d537},
+	journal = {Journal of Chemical Physics},
+	keywords = {imported},
+	pages = {1087-1092},
+	timestamp = {2011-05-10T10:42:42.000+0200},
+	title = {Equations of state calculations by fast computing machines},
+	volume = 21,
+	year = 1953
+}
+@book{brooksmcbook,
+	added-at = {2019-11-27T16:57:20.000+0100},
+	author = {Brooks, Steve and Gelman, Andrew and Jones, Galin L. and Meng, Xiao-Li},
+	biburl = {https://www.bibsonomy.org/bibtex/221d785dfbbec4874e3aa0b1e4df45639/kirk86},
+	description = {Handbook of Markov Chain Monte Carlo},
+	interhash = {0b127e40d41a970274484b65a7e0744f},
+	intrahash = {21d785dfbbec4874e3aa0b1e4df45639},
+	keywords = {book mcmc},
+	timestamp = {2019-11-27T16:59:18.000+0100},
+	title = {Handbook of Markov Chain Monte Carlo
+	},
+	publisher={Chapman \& Hall},
+	url = {http://www.mcmchandbook.net/HandbookTableofContents.html},
+	year = 2011
+}
+
+@book{GVK516124188,
+	added-at = {2009-08-21T12:21:08.000+0200},
+	address = {Singapore [u.a.]},
+	author = {Rosenthal, {Jeffrey S.}},
+	biburl = {https://www.bibsonomy.org/bibtex/21ebbf183aa3295652ca2ac4e29dea8a8/fbw_hannover},
+	edition = {Reprinted},
+	interhash = {6b3625b54aac7aa32af07e7d91994cd3},
+	intrahash = {1ebbf183aa3295652ca2ac4e29dea8a8},
+	isbn = {9810243030},
+	keywords = {Wahrscheinlichkeitsrechnung Wahrscheinlichkeitstheorie},
+	pagetotal = {XIV, 177},
+	ppn_gvk = {516124188},
+	publisher = {World Scientific},
+	timestamp = {2009-08-21T12:21:56.000+0200},
+	title = {A first look at rigorous probability theory},
+	url = {http://gso.gbv.de/DB=2.1/CMD?ACT=SRCHA&SRT=YOP&IKT=1016&TRM=ppn+516124188&sourceid=fbw_bibsonomy},
+	year = 2005
+}
+
+@article{MET49,
+	added-at = {2009-03-03T17:19:04.000+0100},
+	author = {Metropolis, N. and Ulam, S.},
+	biburl = {https://www.bibsonomy.org/bibtex/23a9872b3a3572e446d5cedf42f2dc7d3/bronckobuster},
+	interhash = {f23e8d1798ee5feb71cd41eea30d830d},
+	intrahash = {3a9872b3a3572e446d5cedf42f2dc7d3},
+	journal = {J.~Am.~Stat.~Assoc.},
+	keywords = {imported},
+	nota = {mm:},
+	pages = 335,
+	timestamp = {2009-03-03T17:19:30.000+0100},
+	title = {The Monte Carlo method},
+	volume = 44,
+	year = 1949
+}
diff --git a/example/load_references.py b/example/load_references.py
new file mode 100644
index 0000000..9718dde
--- /dev/null
+++ b/example/load_references.py
@@ -0,0 +1,32 @@
+import os
+
+
+def reference_example():
+    # Load references and insert them.
+    from snipper.citations import get_bibtex, get_aux #!s=a
+    bibfile = "latex/library.bib"
+    auxfile = 'latex/index.aux'
+    bibtex = get_bibtex(bibfile)
+    aux = get_aux(auxfile) #!s
+
+    print(list(bibtex.keys())[:5])
+    print(aux)
+
+    from snipper.fix_cite import fix_aux, fix_aux_special, fix_bibtex
+    from snipper.fix_s import save_s
+
+    file = "citations.py" #!s=b
+    with open(file, 'r') as f:
+        lines = f.read().splitlines()
+    lines = fix_aux(lines, aux=aux)
+    lines = fix_aux_special(lines, aux=aux, command='\\nref', bibref='herlau')
+    lines = fix_bibtex(lines, bibtex=bibtex)
+    with open('output/citations.py', 'w') as f:
+        f.write("\n".join(lines)) #!s=b
+    # save_s(lines, output_dir="./output", file_path=file)
+
+    with open(__file__, 'r') as f:
+        save_s(f.read().splitlines(), output_dir="./output", file_path=os.path.basename(__file__) )
+
+if __name__ == "__main__":
+    reference_example()
\ No newline at end of file
diff --git a/example/output/citations.py b/example/output/citations.py
new file mode 100644
index 0000000..a081fab
--- /dev/null
+++ b/example/output/citations.py
@@ -0,0 +1,18 @@
+"""
+{{copyright}}
+
+References:
+  [Ber07] Dimitri P. Bertsekas. Dynamic Programming and Optimal Control, Vol. II. Athena Scientific, 3rd edition, 2007. ISBN 1886529302.
+
+  [Her21] Tue Herlau. Sequential decision making. (See 02465_Notes.pdf), 2021.
+
+"""
+def myfun(): #!s
+    """
+    To solve this exercise, look at eq. (1) in Section 1.
+    You can also look at (Ber07) and (Her21)
+    More specifically, look at (Ber07, Equation 117) and (Her21, Figure 1)
+
+    We can also write a special tag to reduce repetition: (Her21, Figure 1) and (Her21, Section 1).
+    """
+    return 42 #!s
\ No newline at end of file
diff --git a/example/output/load_references_a.py b/example/output/load_references_a.py
new file mode 100644
index 0000000..304c800
--- /dev/null
+++ b/example/output/load_references_a.py
@@ -0,0 +1,6 @@
+# load_references.py
+    from snipper.citations import get_bibtex, get_aux 
+    bibfile = "latex/library.bib"
+    auxfile = 'latex/index.aux'
+    bibtex = get_bibtex(bibfile)
+    aux = get_aux(auxfile) 
\ No newline at end of file
diff --git a/example/output/load_references_b.py b/example/output/load_references_b.py
new file mode 100644
index 0000000..97642b5
--- /dev/null
+++ b/example/output/load_references_b.py
@@ -0,0 +1,9 @@
+# load_references.py
+    file = "citations.py" 
+    with open(file, 'r') as f:
+        lines = f.read().splitlines()
+    lines = fix_aux(lines, aux=aux)
+    lines = fix_aux_special(lines, aux=aux, command='\\nref', bibref='herlau')
+    lines = fix_bibtex(lines, bibtex=bibtex)
+    with open('output/citations.py', 'w') as f:
+        f.write("\n".join(lines)) 
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..40f9707
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,2 @@
+wexpect
+pexpect
diff --git a/setup.py b/setup.py
index 72a886d..9dc3229 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,10 @@
 # Use this guide:
+# Use:  pipreqs.exe slider --no-pin --force for requirements.txt
 # https://packaging.python.org/tutorials/packaging-projects/
-# from unitgrade2.version import __version__
+# py -m build && twine upload dist/*
+
 import setuptools
+import pkg_resources
 # with open("src/unitgrade2/version.py", "r", encoding="utf-8") as fh:
 #     __version__ = fh.read().split(" = ")[1].strip()[1:-1]
 # long_description = fh.read()
@@ -30,19 +33,5 @@ setuptools.setup(
     package_dir={"": "src"},
     packages=setuptools.find_packages(where="src"),
     python_requires=">=3.8",
-    install_requires=['jinja2',],
+    install_requires=pkg_resources.parse_requirements('requirements.txt'),
 )
-
-# setup(
-#     name='unitgrade',
-#     version=__version__,
-#     packages=['unitgrade2'],
-#     url=,
-#     license='MIT',
-#     author='Tue Herlau',
-#     author_email='tuhe@dtu.dk',
-#     description="""
-# A student homework/exam evaluation framework build on pythons unittest framework. This package contains all files required to run unitgrade tests as a student. To develop tests, please use unitgrade_private.
-# """,
-#     include_package_data=False,
-# )
diff --git a/src/snipper/__init__.py b/src/snipper/__init__.py
index b437600..f102a9c 100644
--- a/src/snipper/__init__.py
+++ b/src/snipper/__init__.py
@@ -1 +1 @@
-__version__ == "0.0.1"
+__version__ = "0.0.1"
diff --git a/src/snipper/__pycache__/__init__.cpython-38.pyc b/src/snipper/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..f52a70bcdae56e64584b49d2330bcdd216e21e6d
GIT binary patch
literal 167
zcmWIL<>g{vU|_iV*)UO@fq~&Mh=Yt785kHG7#J9eIT#oiQW&BbQW%37G?}Vc4fG83
z4E;12Z*j-Rm!%dJXXfX{$FF24Vq#!`5WmcwtztrpQ;UjYN=h?QV_fo+OLJ56N{VBO
r^D+wxQj21Wi<05&`1s7c%#!$cy@JYH95%W6DWy57b|A|?gIoguWe+PF

literal 0
HcmV?d00001

diff --git a/src/snipper/__pycache__/citations.cpython-38.pyc b/src/snipper/__pycache__/citations.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..9a647f415713b55177e96ceff6c8c791938806ce
GIT binary patch
literal 5040
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
Q2=lOTsB?I5@pHHX0KU?#RsaA1

literal 0
HcmV?d00001

diff --git a/src/snipper/__pycache__/fix_cite.cpython-38.pyc b/src/snipper/__pycache__/fix_cite.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..25fca9463f8b858cdaef0c4b55b0579b45ebbe74
GIT binary patch
literal 2467
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
Xq}qYX>tawD0jeIjSh*y*Sh-jMsni`t

literal 0
HcmV?d00001

diff --git a/src/snipper/__pycache__/fix_s.cpython-38.pyc b/src/snipper/__pycache__/fix_s.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a4e3cf8604fe8f78dcdcc41bf88f448690de8363
GIT binary patch
literal 3629
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
XgNuWSLz#t_gP8{$q<oBAEG&!w7ETK>

literal 0
HcmV?d00001

diff --git a/src/snipper/__pycache__/snipper.cpython-38.pyc b/src/snipper/__pycache__/snipper.cpython-38.pyc
deleted file mode 100644
index 71b07e1eb0fc48f94614ddd3c0c39e38faeb6047..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12807
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
TE><o{E(I<QE-nT}F#HPuEi}=U

diff --git a/src/snipper/__pycache__/snipper.cpython-39.pyc b/src/snipper/__pycache__/snipper.cpython-39.pyc
deleted file mode 100644
index 6d64dde9973aef39e4ed1df9bd73fc265199803d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12500
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
A7ytkO

diff --git a/src/snipper/__pycache__/snipper_main.cpython-38.pyc b/src/snipper/__pycache__/snipper_main.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..6a50df2c7fb13fcde076d5ddf2d54c8687e166e5
GIT binary patch
literal 10073
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
Bo__!U

literal 0
HcmV?d00001

diff --git a/src/snipper/citations.py b/src/snipper/citations.py
new file mode 100644
index 0000000..798900f
--- /dev/null
+++ b/src/snipper/citations.py
@@ -0,0 +1,242 @@
+import os
+import io
+from coursebox.core.info_paths import get_paths
+from pybtex import plugin
+from pybtex.database.input import bibtex
+
+### Newstyle loading.
+
+def get_aux(auxfile):
+    # paths = get_paths()
+    # auxfile = os.path.join(paths['02450public'], auxfile)
+    if not os.path.exists(auxfile):
+        print(auxfile)
+        from warnings import warn
+        warn("Could not find file")
+        return {}
+
+    with open(auxfile, 'r') as f:
+        items = f.readlines()
+    entries = {}
+    for e in items:
+        e = e.strip()
+        if e.startswith("\\newlabel") and "@cref" in e:
+            # print(e)
+            i0 = e.find("{")
+            i1 = e.find("@cref}")
+            key = e[i0+1:i1]
+
+            j0 = e.find("{{[", i0)+3
+            j1 = e.find("}", j0)
+
+            val = e[j0:j1]
+
+            label = val[:val.find("]")]
+            number = val[val.rfind("]")+1:]
+
+            if label == "equation":
+                nlabel = f"eq. ({number})"
+            else:
+                nlabel = label.capitalize() + " " + number
+
+            # coderef = "\\cite[%s]{%s}"%(nlabel, bibtex) if bibtex is not None else None
+
+            entries[key] = {'nicelabel': nlabel, 'rawlabel': label, 'number': number}
+    return entries
+
+
+def get_bibtex(bibfile):
+    """
+    all references.
+    """
+    if not os.path.exists(bibfile):
+        return None
+
+    pybtex_style = plugin.find_plugin('pybtex.style.formatting', 'alpha')()
+    pybtex_html_backend = plugin.find_plugin('pybtex.backends', 'html')()
+    pybtex_plain_backend = plugin.find_plugin('pybtex.backends', 'plaintext')()
+    pybtex_parser = bibtex.Parser()
+
+    with open(bibfile, 'r', encoding='utf8') as f:
+        data = pybtex_parser.parse_stream(f)
+
+    data_formatted = pybtex_style.format_entries(data.entries.values())
+    refs = {}
+
+    # if 'auxfile' in gi:
+    #     all_references = parse_aux(gi['auxfile'], bibtex=gi['bibtex'])
+    # else:
+    #     all_references = {}
+
+    for entry in data_formatted:
+        output = io.StringIO()
+        output_plain = io.StringIO()
+        pybtex_plain_backend.output = output_plain.write
+        pybtex_html_backend.output = output.write
+        pybtex_html_backend.write_entry(entry.key, entry.label, entry.text.render(pybtex_html_backend))
+
+        pybtex_plain_backend.write_entry(entry.key, entry.label, entry.text.render(pybtex_plain_backend))
+
+        html = output.getvalue()
+        plain = output_plain.getvalue()
+
+        entry.text.parts[-2].__str__()
+        url = ""
+        for i,p in enumerate(entry.text.parts):
+            if "\\url" in p.__str__():
+                url = entry.text.parts[i+1]
+                break
+        url = url.__str__()
+        i1 = html.find("\\textbf")
+        i2 = html.find("</span>", i1)
+        dht = html[i1:i2]
+        dht = dht[dht.find(">")+1:]
+        html = html[:i1] + " <b>"+dht+"</b> " + html[i2+7:]
+
+        plain = plain.replace("\\textbf ", "")
+        iu = plain.find("URL")
+        if iu > 0:
+            plain = plain[:iu]
+
+        refs[entry.key] = {'html': html,
+                           'plain': plain,
+                           'label': entry.label,
+                           'filename': url,
+                           }
+
+    # newref = {}
+    # ls = lambda x: x if isinstance(x, list) else [x]
+    # if 'tex_command' in gi:
+    #     for cmd, aux, display in zip( ls(gi['tex_command']), ls(gi['tex_aux'] ), ls( gi['tex_display'] ) ):
+    #         ax = parse_aux(aux, bibtex=gi['bibtex'])
+    #         for k in ax:
+    #             ax[k]['pyref'] = display%(ax[k]['nicelabel'],)
+    #         newref[cmd] = ax
+
+    return refs#, newref
+
+
+
+def find_tex_cite(s, start=0, key="\\cite"):
+    txt = None
+    i = s.find(key, start)
+    if i < 0:
+        return (i,None), None, None
+    j = s.find("}", i)
+    cite = s[i:j + 1]
+
+    if cite.find("[") > 0:
+        txt = cite[cite.find("[") + 1:cite.find("]")]
+
+    reference = cite[cite.find("{") + 1:cite.find("}")]
+    return (i, j), reference, txt
+
+### Oldstyle loading
+def get_references(bibfile, gi):
+    """
+    all references.
+    """
+    if not os.path.exists(bibfile):
+        return None
+
+    pybtex_style = plugin.find_plugin('pybtex.style.formatting', 'alpha')()
+    pybtex_html_backend = plugin.find_plugin('pybtex.backends', 'html')()
+    pybtex_plain_backend = plugin.find_plugin('pybtex.backends', 'plaintext')()
+    pybtex_parser = bibtex.Parser()
+
+    with open(bibfile, 'r', encoding='utf8') as f:
+        data = pybtex_parser.parse_stream(f)
+
+    data_formatted = pybtex_style.format_entries(data.entries.values())
+    refs = {}
+
+    if 'auxfile' in gi:
+        all_references = parse_aux(gi['auxfile'], bibtex=gi['bibtex'])
+    else:
+        all_references = {}
+
+    for entry in data_formatted:
+        output = io.StringIO()
+        output_plain = io.StringIO()
+        pybtex_plain_backend.output = output_plain.write
+        pybtex_html_backend.output = output.write
+        pybtex_html_backend.write_entry(entry.key, entry.label, entry.text.render(pybtex_html_backend))
+
+        pybtex_plain_backend.write_entry(entry.key, entry.label, entry.text.render(pybtex_plain_backend))
+
+        html = output.getvalue()
+        plain = output_plain.getvalue()
+
+        entry.text.parts[-2].__str__()
+        url = ""
+        for i,p in enumerate(entry.text.parts):
+            if "\\url" in p.__str__():
+                url = entry.text.parts[i+1]
+                break
+        url = url.__str__()
+        i1 = html.find("\\textbf")
+        i2 = html.find("</span>", i1)
+        dht = html[i1:i2]
+        dht = dht[dht.find(">")+1:]
+        html = html[:i1] + " <b>"+dht+"</b> " + html[i2+7:]
+
+        plain = plain.replace("\\textbf ", "")
+        iu = plain.find("URL")
+        if iu > 0:
+            plain = plain[:iu]
+
+        refs[entry.key] = {'html': html,
+                           'plain': plain,
+                           'label': entry.label,
+                           'filename': url,
+                           'references': all_references}
+
+    newref = {}
+    ls = lambda x: x if isinstance(x, list) else [x]
+    if 'tex_command' in gi:
+        for cmd, aux, display in zip( ls(gi['tex_command']), ls(gi['tex_aux'] ), ls( gi['tex_display'] ) ):
+            ax = parse_aux(aux, bibtex=gi['bibtex'])
+            for k in ax:
+                ax[k]['pyref'] = display%(ax[k]['nicelabel'],)
+            newref[cmd] = ax
+
+    return refs, newref
+
+
+def parse_aux(auxfile, bibtex=None):
+    paths = get_paths()
+    auxfile = os.path.join(paths['02450public'], auxfile)
+    if not os.path.exists(auxfile):
+        print(auxfile)
+        from warnings import warn
+        warn("Could not find file")
+        return {}
+
+    with open(auxfile, 'r') as f:
+        items = f.readlines()
+    entries = {}
+    for e in items:
+        e = e.strip()
+        if e.startswith("\\newlabel") and "@cref" in e:
+            # print(e)
+            i0 = e.find("{")
+            i1 = e.find("@cref}")
+            key = e[i0+1:i1]
+
+            j0 = e.find("{{[", i0)+3
+            j1 = e.find("}", j0)
+
+            val = e[j0:j1]
+
+            label = val[:val.find("]")]
+            number = val[val.rfind("]")+1:]
+
+            if label == "equation":
+                nlabel = f"eq. ({number})"
+            else:
+                nlabel = label.capitalize() + " " + number
+
+            coderef = "\\cite[%s]{%s}"%(nlabel, bibtex) if bibtex is not None else None
+            entries[key] = {'pyref': coderef, 'nicelabel': nlabel, 'rawlabel': label, 'number': number}
+    return entries
+
diff --git a/src/snipper/fix_cite.py b/src/snipper/fix_cite.py
new file mode 100644
index 0000000..9c6aadc
--- /dev/null
+++ b/src/snipper/fix_cite.py
@@ -0,0 +1,73 @@
+from snipper.citations import find_tex_cite
+from snipper.snipper_main import COMMENT
+
+def fix_references(lines, info, strict=True):
+    for cmd in info['new_references']:
+        lines = fix_single_reference(lines, cmd, info['new_references'][cmd], strict=strict)
+    return lines
+
+def fix_single_reference(lines, cmd, aux, strict=True):
+    references = aux
+    s = "\n".join(lines)
+    i = 0
+    while True:
+        (i, j), reference, txt = find_tex_cite(s, start=i, key=cmd)
+        if i < 0:
+            break
+        if reference not in references:
+            er = "cref label not found for label: " + reference
+            if strict:
+                raise IndexError(er)
+            else:
+                print(er)
+                continue
+        r = references[reference]
+        rtxt = r['nicelabel']
+        s = s[:i] + rtxt + s[j + 1:]
+        i = i + len(rtxt)
+        print(cmd, rtxt)
+
+    lines = s.splitlines(keepends=False)
+    return lines
+
+
+def fix_aux_special(lines, aux, command='\\nref', bibref='herlau'):
+    daux = {name: {'nicelabel': f'\\cite[' + v["nicelabel"] + ']{' + bibref + "}"} for name, v in aux.items()}
+    l2 = fix_single_reference(lines, aux=daux, cmd=command, strict=True)
+    return l2
+
+def fix_aux(lines, aux, strict=True):
+    l2 = fix_single_reference(lines, aux=aux, cmd="\\ref", strict=True)
+    print("\n".join(l2))
+    return l2
+
+def fix_bibtex(lines, bibtex):
+    # lines = fix_references(lines, info, strict=strict)
+    s = "\n".join(lines)
+    i = 0
+    all_refs = []
+    while True:
+        (i, j), reference, txt = find_tex_cite(s, start=i, key="\\cite")
+        if i < 0:
+            break
+        if reference not in bibtex:
+            raise IndexError("no such reference: " + reference)
+        ref = bibtex[reference]
+        label = ref['label']
+        rtxt = f"({label}" + (", "+txt if txt is not None else "") + ")"
+        r = ref['plain']
+        if r not in all_refs:
+            all_refs.append(r)
+        s = s[:i] + rtxt + s[j+1:]
+        i = i + len(rtxt)
+
+    cpr = "{{copyright}}"
+    if not s.startswith(COMMENT):
+        s = f"{COMMENT}\n{cpr}\n{COMMENT}\n" + s
+    if len(all_refs) > 0:
+        i = s.find(COMMENT, s.find(COMMENT)+1)
+        all_refs = ["  " + r for r in all_refs]
+        s = s[:i] + "\nReferences:\n" + "\n".join(all_refs) + "\n" + s[i:]
+
+    # s = s.replace(cpr, info['code_copyright'])
+    return s.splitlines()
\ No newline at end of file
diff --git a/src/snipper/fix_s.py b/src/snipper/fix_s.py
new file mode 100644
index 0000000..0eed3c8
--- /dev/null
+++ b/src/snipper/fix_s.py
@@ -0,0 +1,151 @@
+import functools
+from collections import defaultdict
+from snipper.snipper_main import full_strip, block_process
+
+def f2(lines, tag, i=0, j=0):
+    for k in range(i, len(lines)):
+        index = lines[k].find(tag, j if k == i else 0)
+        if index >= 0:
+            return k, index
+    return None, None
+
+def block_iterate(lines, tag):
+    contents = {'joined': lines}
+    while True:
+        contents = block_split(contents['joined'], tag)
+        if contents is None:
+            break
+
+        yield  contents
+
+def block_split(lines, tag):
+    stag = tag[:2]  # Start of any next tag.
+
+    def join(contents):
+        return contents['first'] + [contents['block'][0] + contents['post1']] + contents['block'][1:-1] \
+                + [contents['block'][-1] + contents['post2']] + contents['last']
+    contents = {}
+    i, j = f2(lines, tag)
+
+    def get_tag_args(line):
+        k = line.find(" ")
+        tag_args = (line[:k + 1] if k >= 0 else line)[len(tag):]
+        if len(tag_args) == 0:
+            return {'': ''}  # No name.
+        tag_args = dict([t.split("=") for t in tag_args.split(";")])
+        return tag_args
+
+    if i is None:
+        return None
+    else:
+        start_tag_args = get_tag_args(lines[i][j:])
+        START_TAG = f"{tag}={start_tag_args['']}" if '' in start_tag_args else tag
+        END_TAG = START_TAG
+        i2, j2 = f2(lines, END_TAG, i=i, j=j+1)
+        if i2 == None:
+            END_TAG = tag
+            i2, j2 = f2(lines, END_TAG, i=i, j=j+1)
+
+    if i == i2:
+        # Splitting a single line. To reduce confusion, this will be treated slightly differently:
+        l2 = lines[:i] + [lines[i][:j2], lines[i][j2:]] + lines[i2+1:]
+        c2 = block_split(l2, tag=tag)
+        c2['block'].pop()
+        c2['joined'] = join(c2)
+        return c2
+    else:
+        contents['first'] = lines[:i]
+        contents['last'] = lines[i2+1:]
+
+        def argpost(line, j):
+            nx_tag = line.find(stag, j+1)
+            arg1 = line[j+len(tag):nx_tag]
+            if nx_tag >= 0:
+                post = line[nx_tag:]
+            else:
+                post = ''
+            return arg1, post
+
+        contents['arg1'], contents['post1'] = argpost(lines[i], j)
+        contents['arg2'], contents['post2'] = argpost(lines[i2], j2)
+        blk = [lines[i][:j]] + lines[i+1:i2] + [lines[i2][:j2]]
+        contents['block'] = blk
+        contents['joined'] = join(contents)
+        contents['start_tag_args'] = start_tag_args
+        contents['name'] = start_tag_args['']
+        return contents
+
+
+def get_s(lines):
+    """ Return snips from 'lines' """
+    blocks = defaultdict(list)
+    for c in block_iterate(lines, "#!s"):
+        blocks[c['name']].append(c)
+    output = {}
+    for name, co in blocks.items():
+        output[name] = [l for c in co for l in c['block']]
+    return output
+
+import os
+
+def save_s(lines, output_dir, file_path): # save file snips to disk
+    content = get_s(lines)
+    if not os.path.isdir(output_dir):
+        os.mkdir(output_dir)
+    for name, ll in content.items():
+        if file_path is not None:
+            ll = [f"# {file_path}"] + ll
+        out = "\n".join(ll)
+        with open(output_dir + "/" + os.path.basename(file_path)[:-3] + ("_" + name if len(name) > 0 else name) + ".py", 'w') as f:
+            f.write(out)
+
+        # out = "\n".join([f"# {include_path_base}"] + ["\n".join(v[1]) for v in c if v[0] == outf])
+        # with open(outf, 'w') as f:
+        #     f.write(out)
+
+    # def block_fun(lines, start_extra, end_extra, art, output, **kwargs):
+    #     outf = output + ("_" + art if art is not None and len(art) > 0 else "") + ".py"
+    #     lines = full_strip(lines)
+    #     return lines, [outf, lines]
+    # try:
+    #     a,b,c,_ = block_process(lines, tag="#!s", block_fun=functools.partial(block_fun, output=output))
+    #     if len(c)>0:
+    #         kvs= { v[0] for v in c}
+    #         for outf in kvs:
+    #             out = "\n".join([f"# {include_path_base}"]  + ["\n".join(v[1]) for v in c if v[0] == outf] )
+    #             with open(outf, 'w') as f:
+    #                 f.write(out)
+    #
+    # except Exception as e:
+    #     print("lines are")
+    #     print("\n".join(lines))
+    #     print("Bad thing in #!s command in file", file)
+    #     raise e
+    # return lines
+
+s1 = """
+L1
+L2 #!s=a
+L3 #!s=b
+L4
+L5 
+L6 
+L7 #!s=a
+L8 
+L9 #!s=b
+went
+"""
+
+if __name__ == "__main__":
+    # for c in block_iterate(s1.splitlines(), tag="#!s"):
+    #     print(c['block'])
+    output = get_s(s1.splitlines())
+    for k, v in output.items():
+        print("name:", k)
+        print("\n".join(v))
+        print("="*10)
+    # contents = block_split(s1.splitlines(), tag="#!s")
+    # contents = block_split(contents['joined'], tag="#!s")
+    # lines2 = contents['first'] +
+    a = 234
+    pass
\ No newline at end of file
diff --git a/src/snipper/snip_dir.py b/src/snipper/snip_dir.py
index ca98568..0a68a9d 100644
--- a/src/snipper/snip_dir.py
+++ b/src/snipper/snip_dir.py
@@ -1,10 +1,8 @@
 import os, shutil
-# from thtools.coursebox.core.info_paths import get_paths
-# from thtools.coursebox.core.info import class_information
-from snipper.snipper import censor_file
-# from thtools.coursebox.material.homepage_lectures_exercises import fix_shared
+from snipper.snipper_main import censor_file
 from pathlib import Path
 import time
+import fnmatch
 
 
 def snip_dir(source_dir, dest_dir, exclude=None, clean_destination_dir=True):
@@ -24,9 +22,7 @@ def snip_dir(source_dir, dest_dir, exclude=None, clean_destination_dir=True):
     out = dest_dir
     hw = {'base': source_dir,
           'exclusion': exclude}
-    # def fix_hw(info, hw, out, run_files=False, cut_files=False, students_irlc_tools=None, **kwargs):
-    # CE = info['CE']
-    # paths = get_paths()
+
     print(f"[snipper] Synchronizing directories: {hw['base']} -> {out}")
     if os.path.exists(out):
         shutil.rmtree(out)
@@ -38,7 +34,6 @@ def snip_dir(source_dir, dest_dir, exclude=None, clean_destination_dir=True):
 
     ls = list(Path(out).glob('**/*.*'))
     acceptable = []
-    import fnmatch
     for l in ls:
         split = os.path.normpath(os.path.relpath(l, out))
         m = [fnmatch.fnmatch(split, ex) for ex in exclude]
@@ -85,15 +80,4 @@ def snip_dir(source_dir, dest_dir, exclude=None, clean_destination_dir=True):
                 if os.path.isdir(rm_file + "\\"):
                     shutil.rmtree(rm_file)
 
-    # for f in hw['exclusion']:
-    #     rm_file = os.path.join(out, f)
-    #     if any([df_ in rm_file for df_ in hw['inclusion']]):
-    #         continue
-    #
-    #     rm_file = os.path.abspath(rm_file)
-    #     if os.path.isfile(rm_file):
-    #         os.remove(rm_file)
-    #     else:
-    #         if os.path.isdir(rm_file + "\\"):
-    #             shutil.rmtree(rm_file)
     return n
diff --git a/src/snipper/snipper.py b/src/snipper/snipper_main.py
similarity index 80%
rename from src/snipper/snipper.py
rename to src/snipper/snipper_main.py
index 386a360..1886033 100644
--- a/src/snipper/snipper.py
+++ b/src/snipper/snipper_main.py
@@ -1,9 +1,8 @@
-from thtools.coursebox.core.info import find_tex_cite
 import os
 import functools
-from thtools import execute_command
 import textwrap
 import re
+# from snipper.fix_s import save_s
 
 COMMENT = '"""'
 def indent(l):
@@ -98,7 +97,6 @@ def block_process(lines, tag, block_fun):
 
 def rem_nonprintable_ctrl_chars(txt):
     """Remove non_printable ascii control characters """
-    #Removes the ascii escape chars
     try:
         txt = re.sub(r'[^\x20-\x7E|\x09-\x0A]','', txt)
         # remove non-ascii characters
@@ -118,8 +116,8 @@ def run_i(lines, file, output):
         lines = textwrap.dedent(s).strip().splitlines()
 
         if extra['python'] is None:
-            import thtools
-            if thtools.is_win():
+            import os
+            if os.name == 'nt':
                 import wexpect as we
             else:
                 import pexpect as we
@@ -204,29 +202,6 @@ def run_i(lines, file, output):
         raise e
     return lines
 
-def save_s(lines, file, output, include_path_base=None): # save file snips to disk
-    def block_fun(lines, start_extra, end_extra, art, output, **kwargs):
-        outf = output + ("_" + art if art is not None and len(art) > 0 else "") + ".py"
-        lines = full_strip(lines)
-        return lines, [outf, lines]
-    try:
-        a,b,c,_ = block_process(lines, tag="#!s", block_fun=functools.partial(block_fun, output=output))
-
-        if len(c)>0:
-            kvs= { v[0] for v in c}
-            for outf in kvs:
-
-                out = "\n".join([f"# {include_path_base}"]  + ["\n".join(v[1]) for v in c if v[0] == outf] )
-
-                with open(outf, 'w') as f:
-                    f.write(out)
-
-    except Exception as e:
-        print("lines are")
-        print("\n".join(lines))
-        print("Bad thing in #!s command in file", file)
-        raise e
-    return lines
 
 def run_o(lines, file, output):
     def block_fun(lines, start_extra, end_extra, art, output, **kwargs):
@@ -317,76 +292,12 @@ def fix_b2(lines, keep=False):
         else:
             l2 = ([id+start_extra] if len(start_extra) > 0 else []) + [id + f"# TODO: {cc} lines missing.", id+f'raise NotImplementedError("{ee}")']
 
-
-        # if "\n".join(l2).find("l=l")>0:
-        #     a = 2342342
         stats['n'] += cc
         return l2, cc
     lines2, _, _, cutout = block_process(lines, tag="#!b", block_fun=functools.partial(block_fun, stats=stats))
     return lines2, stats['n'], cutout
 
 
-def fix_references(lines, info, strict=True):
-    for cmd in info['new_references']:
-        lines = fix_single_reference(lines, cmd, info['new_references'][cmd], strict=strict)
-    return lines
-
-def fix_single_reference(lines, cmd, aux, strict=True):
-    references = aux
-    s = "\n".join(lines)
-    i = 0
-    while True:
-        (i, j), reference, txt = find_tex_cite(s, start=i, key=cmd)
-        if i < 0:
-            break
-        if reference not in references:
-            er = "cref label not found for label: " + reference
-            if strict:
-                raise IndexError(er)
-            else:
-                print(er)
-                continue
-        r = references[reference]
-        rtxt = r['pyref']
-        s = s[:i] + rtxt + s[j + 1:]
-        i = i + len(rtxt)
-        print(cmd, rtxt)
-
-    lines = s.splitlines(keepends=False)
-    return lines
-
-
-def fix_cite(lines, info, strict=True):
-    lines = fix_references(lines, info, strict=strict)
-
-    s = "\n".join(lines)
-    i = 0
-    all_refs = []
-    while True:
-        (i, j), reference, txt = find_tex_cite(s, start=i, key="\\cite")
-        if i < 0:
-            break
-        if reference not in info['references']:
-            raise IndexError("no such reference: " + reference)
-        ref = info['references'][reference]
-        label = ref['label']
-        rtxt = f"({label}" + (", "+txt if txt is not None else "") + ")"
-        r = ref['plain']
-        if r not in all_refs:
-            all_refs.append(r)
-        s = s[:i] + rtxt + s[j+1:]
-        i = i + len(rtxt)
-
-    cpr = "{{copyright}}"
-    if not s.startswith(COMMENT):
-        s = f"{COMMENT}\n{cpr}\n{COMMENT}\n" + s
-    if len(all_refs) > 0:
-        i = s.find(COMMENT, s.find(COMMENT)+1)
-        all_refs = ["  " + r for r in all_refs]
-        s = s[:i] + "\nReferences:\n" + "\n".join(all_refs) + "\n" + s[i:]
-
-    s = s.replace(cpr, info['code_copyright'])
-    return s
 
 def full_strip(lines, tags=None):
     if tags is None:
@@ -397,13 +308,12 @@ def full_strip(lines, tags=None):
 
 
 def censor_code(lines, keep=True):
-    # lines = code.split("\n")
     dbug = True
     lines = fix_f(lines, dbug)
     lines, nB, cut = fix_b2(lines, keep=True)
     return lines
 
-    # print("safs")
+
 
 
 def censor_file(file, info, paths, run_files=True, run_out_dirs=None, cut_files=True, solution_list=None,
@@ -479,4 +389,5 @@ def censor_file(file, info, paths, run_files=True, run_out_dirs=None, cut_files=
     with open(file, 'w', encoding='utf-8') as f:
         f.write(s2)
     return nB
-# lines: 294, 399, 420, 270
\ No newline at end of file
+# lines: 294, 399, 420, 270
+
-- 
GitLab