From 73598c96d6bcb65e7082a3e51e331b94344792e7 Mon Sep 17 00:00:00 2001
From: Luke Naylor <l.naylor@sms.ed.ac.uk>
Date: Mon, 26 Feb 2024 22:12:03 +0000
Subject: [PATCH] Adjust build

Build seen to work locally, now to test in CI
---
 .devcontainer/Dockerfile        |  7 +++++++
 .devcontainer/devcontainer.json |  5 ++---
 .gitlab-ci.yml                  |  8 +++++---
 Makefile                        | 35 +++++++++++++++++++++++++++++----
 content.tex                     | 22 ++-------------------
 main.tex                        | 20 ++++++++++++++++++-
 newunicodes.tex                 |  6 +++---
 packages.tex                    |  2 +-
 8 files changed, 70 insertions(+), 35 deletions(-)
 create mode 100644 .devcontainer/Dockerfile

diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
new file mode 100644
index 0000000..6e44e7a
--- /dev/null
+++ b/.devcontainer/Dockerfile
@@ -0,0 +1,7 @@
+FROM registry.gitlab.com/lukenaylor/latex/sage-tex-chroma-image:latest
+
+# Add the tree-sitter parser for Rust
+RUN git clone --depth=1 --branch v0.20.4 https://github.com/tree-sitter/tree-sitter-rust.git /root/src/tree-sitter-rust
+# Install the pseudowalls sage package
+RUN sage -pip install pseudowalls --extra-index-url https://gitlab.com/api/v4/projects/43962374/packages/pypi/simple
+
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 2b5fd14..d716dae 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -1,8 +1,7 @@
 // .devcontainer/devcontainer.json
 {
-    "name": "LaTeX&SageTex Devcontainer",
-    "image": "registry.gitlab.com/lukenaylor/latex/sagetex-image:latest",
-    "postCreateCommand": "sage -pip install pseudowalls --extra-index-url https://gitlab.com/api/v4/projects/43962374/packages/pypi/simple",
+    "name": "LaTeX&SageTex&Chromacode Devcontainer",
+    "dockerFile": "./Dockerfile",
     "customizations": {
         "vscode": {
             "settings": {
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 10ef63c..7e6c76b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,13 +2,15 @@ variables:
   GIT_SUBMODULE_STRATEGY: normal
 
 build:
-  image: registry.gitlab.com/lukenaylor/latex/sagetex-image:latest
+  # image: registry.gitlab.com/lukenaylor/latex/sagetex-image:latest
+  image:
+    dockerfile: .devcontainer/Dockerfile
   tags: ["x64"]
   script:
     - echo $SHELL
     - source /root/.bashrc
-    - sage -pip install "pseudowalls==0.0.3" --extra-index-url https://gitlab.com/api/v4/projects/43962374/packages/pypi/simple
-    - make main.pdf || echo make failed
+    - make pretex
+    - latexmk -use-make
   artifacts:
     paths:
       - main.pdf
diff --git a/Makefile b/Makefile
index b64f958..9dc0523 100644
--- a/Makefile
+++ b/Makefile
@@ -5,13 +5,15 @@ MAINTEXFILE = main.tex
 TEXFILES = ${MAINTEXFILE}
 NOTEBOOKBASENAMES = plots_and_expressions examples characteristic_curves rank_zero_case other_P_choice
 
-main.pdf: ${TEXFILES}  main.sagetex.sout.tmp
+SAGETEXARTIFACT=main.sagetex.sout
+
+main.pdf: ${TEXFILES} ${SAGETEXARTIFACT}
 	latexmk
 
-sage_artifacts: main.sagetex.sout.tmp
+sage_artifacts: ${SAGETEXARTIFACT}
 
 SAGETEXSCRIPT = main.sagetex.sage
-main.sagetex.sout.tmp: ${SAGETEXSCRIPT} notebook_py_libs
+${SAGETEXARTIFACT}: ${SAGETEXSCRIPT} notebook_py_libs
 	PYTHONPATH=./sagetexscripts/ sage ${SAGETEXSCRIPT}
 
 ${SAGETEXSCRIPT}: ${TEXFILES}
@@ -32,8 +34,33 @@ $(foreach _base, $(NOTEBOOKBASENAMES), $(eval $(call NOTEBOOK_TO_LIB_RULE, $(_ba
 
 notebook_py_libs: $(addsuffix .py, $(NOTEBOOKBASENAMES))	
 
+# TEX FILES FROM RUST
+
+define RUST_TO_TEX_RULE
+$(1).tex: $(1).rs
+	chromacode -r -i $(1).rs -o $(1).tex
+endef
+
+RUSTSNIPPETSBASE=tilt.rs/src/tilt_stability/considered_b_for_beta tilt.rs/src/tilt_stability/find_all
+RUSTBASENAMES=$(basename $(wildcard tilt.rs/src/**/*.rs)) ${RUSTSNIPPETSBASE}
+
+$(foreach _base, $(RUSTBASENAMES), $(eval $(call RUST_TO_TEX_RULE, $(_base))))
+
+rust_tex: $(addsuffix .tex, $(RUSTBASENAMES))
+
+# specific snippets of rust
+#
+tilt.rs/src/tilt_stability/considered_b_for_beta.rs: tilt.rs/src/tilt_stability/left_pseudo_semistabilizers.rs
+	sed -n -e '24,36p' $^ > $@
+
+tilt.rs/src/tilt_stability/find_all.rs: tilt.rs/src/tilt_stability/left_pseudo_semistabilizers.rs
+	sed -n -e '79,99p' $^ > $@
+
 # MISCELANEOUS
 
+# Stuff that can be built before ever running latex:
+pretex: rust_tex notebook_py_libs
+
 .PHONY: clean nosage noappendix
 clean:
 	rm -rf **/__pycache__
@@ -43,5 +70,5 @@ clean:
 nosage:
 	latexmk
 
-noappendix: ${TEXFILES}  main.sagetex.sout.tmp
+noappendix: ${TEXFILES} ${SAGETEXARTIFACT}
 	latexmk
diff --git a/content.tex b/content.tex
index fd3925d..5d2c559 100644
--- a/content.tex
+++ b/content.tex
@@ -1896,18 +1896,9 @@ $v$ has positive rank, that it satisfies $\Delta(v) \geq 0$, and that
 $\beta_{-}(v)$ is rational.
 
 \lstinputlisting[
-	escapeinside={<@}{@>},
-	captionpos=b,
-	frame=single,
-	numbers=left,
-	numberstyle={\scriptsize\ttfamily\color{black!60}},
-	basicstyle={\linespread{0.9}\scriptsize\ttfamily},
-	aboveskip=5mm,
-	firstline=79,
-	lastline=99,
 	caption={\raggedleft\texttt{tilt_stability::left_pseudo_semistabilizers\\::considered_b_for_beta}},
 	label={fig:code:consideredb}
-]{tilt.rs/src/tilt_stability/left_pseudo_semistabilizers.tex}
+]{tilt.rs/src/tilt_stability/considered_b_for_beta.tex}
 
 Take $\beta_{-}(v)=\frac{a_v}{n}$ in simplest terms.
 Iterate over $q = \frac{b}{n} \in [0,\chern_1^{\beta_{-}}(v)]\cap\frac{1}{n}\ZZ$.
@@ -1915,18 +1906,9 @@ The code used to generate the corresponding values for $b$ is shown in figure
 \ref{fig:code:consideredb}.
 
 \lstinputlisting[
-	escapeinside={<@}{@>},
-	captionpos=b,
-	frame=single,
-	numbers=left,
-	numberstyle={\scriptsize\ttfamily\color{black!60}},
-	basicstyle={\linespread{0.9}\scriptsize\ttfamily},
-	aboveskip=5mm,
-	firstline=79,
-	lastline=99,
 	caption={\raggedleft\texttt{tilt_stability::left_pseudo_semistabilizers\\::find_all}},
 	label={fig:code:reducingtoeachb}
-]{tilt.rs/src/tilt_stability/left_pseudo_semistabilizers.tex}
+]{tilt.rs/src/tilt_stability/find_all.tex}
 
 We can therefore reduce the problem of finding solutions to the problem to
 finding the solutions $u$ with each fixed possible $\chern_1^\beta(u)$
diff --git a/main.tex b/main.tex
index 00b82f3..8e3396e 100644
--- a/main.tex
+++ b/main.tex
@@ -4,6 +4,24 @@
 \input{newcommands.tex}
 \input{theoremstyles.tex}
 \input{newunicodes.tex}
+\lstset{
+	escapeinside={<@}{@>},
+  inputencoding=utf8,
+  extendedchars=true,
+	frame=single,
+	basicstyle={\linespread{0.9}\scriptsize\ttfamily},
+  showstringspaces=false,
+  showspaces=false,
+  numbers=left,
+	numberstyle={\scriptsize\ttfamily\color{black!60}},
+  numbersep=9pt,
+	aboveskip=5mm,
+  tabsize=2,
+  breaklines=true,
+  showtabs=false,
+  captionpos=b,
+  literate={β}{{\beta}}1 {μ}{{\mu}}1 {ü}{{\"u}}1 {°}{\dg}1 {ᵇ}{{b}}1 {ₙ}{{n}}1
+}
 
 \usepackage{sagetex}
 
@@ -39,4 +57,4 @@ Practical Methods for Narrowing Down Possible Walls}
 \newpage
 \printbibliography
 
-\end{document}
\ No newline at end of file
+\end{document}
diff --git a/newunicodes.tex b/newunicodes.tex
index 55c3f85..c2fbf4f 100644
--- a/newunicodes.tex
+++ b/newunicodes.tex
@@ -1,7 +1,7 @@
 \newunicodechar{ᵇ}{b}
 \newunicodechar{â‚™}{n}
-\newunicodechar{∈}{\in}
-\newunicodechar{𝜇}{\mu}
-\newunicodechar{â‹…}{\cdot}
+\newunicodechar{∈}{$\in$}
+\newunicodechar{𝜇}{$\mu$}
+\newunicodechar{â‹…}{$\cdot$}
 \newunicodechar{â„š}{$\mathbb{Q}$}
 \newunicodechar{ℤ}{{$\mathbb{Z}$}}
diff --git a/packages.tex b/packages.tex
index 4f8de64..8254283 100644
--- a/packages.tex
+++ b/packages.tex
@@ -9,7 +9,7 @@
 \usepackage{mathtools}
 \usepackage[]{breqn}
 \usepackage[nomap]{FiraMono}
-\usepackage[cache=false]{minted}
 \usepackage{newunicodechar}
 \usepackage{multicol}
+\usepackage{listingsutf8}
 
-- 
GitLab