From f6da1187ada802277398da17c7a12401e9b545aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Madeleine=20Sydney=20=C5=9Alaga?= Date: Wed, 25 Feb 2026 17:06:33 -0700 Subject: [PATCH] --- doerg/src/net/deertopia/doerg/tex.clj | 44 +++++++++++++++++---------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/doerg/src/net/deertopia/doerg/tex.clj b/doerg/src/net/deertopia/doerg/tex.clj index 63d37ec..dc64d78 100644 --- a/doerg/src/net/deertopia/doerg/tex.clj +++ b/doerg/src/net/deertopia/doerg/tex.clj @@ -72,7 +72,8 @@ dimensional-info (->> r (drop 2) (map parse-long)) errors (-> out (subs (.end m-start) (.start m-end)) - (str/replace-first #"[^!]*" ""))] + (str/replace-first #"[^!]*" "") + str/trim)] (assert (= snippet-ix snippet-ix*)) (recur (conj acc (-> (snippet-dimensions tightpage-info dimensional-info) @@ -90,13 +91,12 @@ ;; dvisvgm --page=1- --optimize --clipjoin --relative --no-fonts -v3 --message='processing page {?pageno}: output written to {?svgpath}' --bbox=preview -o %B-%%9p.svg %f (defn- invoke-dvisvgm [& {:keys [file output-dir]}] - (let [r (invoke - {:dir output-dir} - "dvisvgm" "--page=1-" "--optimize" "--clipjoin" - "--relative" "--no-fonts" "-v3" - "--message=processing page {?pageno}: output written to {?svgpath}" - "--bbox=preview" "-o" "%9p.svg" file)] - r)) + (invoke + {:dir output-dir} + "dvisvgm" "--page=1-" "--optimize" "--clipjoin" + "--relative" "--no-fonts" "-v3" + "--message=processing page {?pageno}: output written to {?svgpath}" + "--bbox=preview" "-o" "%9p.svg" file)) (defn- snippet-file-names "Return a map of TeX snippets (as strings, including the math @@ -120,14 +120,26 @@ (fs/with-temp-dir [dir {:prefix "doerg-xelatex"}] (let [preview-tex (fs/file dir "preview.tex") preview-xdv (fs/file dir "preview.xdv") - snippet->file (-> (snippet-file-names snippets) - (update-vals #(fs/file dir %)))] + distinct-snippets (distinct snippets)] (fs/create-dirs output-dir) - (->> (instantiate-preview-template snippets) + (->> (instantiate-preview-template distinct-snippets) (spit preview-tex)) - (invoke-xelatex :output-dir dir :file preview-tex) - (invoke-dvisvgm :output-dir output-dir :file preview-xdv) - snippet->file + (let [dimensions (-> (invoke-xelatex :output-dir dir :file preview-tex) + ::out parse-xelatex-output) + _ (invoke-dvisvgm :output-dir output-dir :file preview-xdv)] + ;; Adorn each snippet with dimensions and errors parsed from + ;; XeLaTeX's output, and the paths to SVG files generated by + ;; dvisvgm. + (assert (= (count distinct-snippets) (count dimensions))) + (->> (map (fn [ix snippet dimensions] + {snippet + (-> dimensions + (assoc :file + (fs/file dir (format "%09d.svg" (inc ix)))))}) + (range) + distinct-snippets + dimensions) + (into {}))) #_ (do (when (fs/exists? "/tmp/doerg-tex-test") ; For debugging (fs/delete-tree "/tmp/doerg-tex-test")) @@ -136,8 +148,8 @@ (comment (render-xelatex "/tmp/doerg-tex-svgs" "\\(c = \\sqrt{x^2 + y^2}\\)" - "x" "y" "x" - "\\undefinedcommandlol")) + "\\(x\\)" "\\(y\\)" "\\(x\\)" + "\\(\\undefinedcommandlol\\)")) ;;; Temml