This commit is contained in:
2026-02-26 12:07:07 -07:00
parent ee86f0d643
commit d5ccadb326

View File

@@ -127,6 +127,28 @@
element/footnotes-section?]
sp/NONE))))
(defn- read-and-patch-generated-svg [{:keys [file height depth]}]
;; dvisvgm writes standalone SVG files, to which we need to make a
;; few changes to use them inline within our HTML.
;; • XML header: Bad syntax when embedded in an HTML doc. Remove
;; it.
;; • Width and height: We override these with our own values
;; computed by `net.deertopia.doerg.tex` to ensure correct
;; positioning relative to the surrounding text. More
;; accurately, we remove the height and width attributes from
;; the SVG tag, and set the new values for height and
;; vertical-align in the style attribute
;; • Viewbox: Must be removed entirely for correct positioning.
(-> (slurp file)
(str/replace-first "<?xml version='1.0' encoding='UTF-8'?>" "")
(str/replace-first #" height=['\"][^\"']+[\"']" "")
(str/replace-first #" width=['\"][^\"']+[\"']" "")
(str/replace-first
#"viewBox=['\"][^\"']+[\"']"
(format "style=\"%s\""
(format "height:%.4fem;vertical-align:%.4f;display:inline-block"
height (- depth))))))
(defn- render-tex-snippets [doc]
(let [promises (atom [])
r (->> doc (sp/transform
@@ -148,11 +170,13 @@
(try (let [{:keys [value contents]} node
temml (tex/render-temml (or contents value))]
(if (tex/erroneous-temml-output? temml)
(let [{:keys [file]} (get @rendered-snippets value)]
(deliver
promise
[:div.latex-fragment
(hiccup/raw (slurp file))]))
(let [tex (get @rendered-snippets value)]
(if (:errors tex)
(deliver promise (hiccup/raw temml))
(->> tex
read-and-patch-generated-svg
hiccup/raw
(deliver promise))))
(deliver promise (hiccup/raw temml))))
(catch Exception e
(prn e)