This commit is contained in:
@@ -4,7 +4,8 @@
|
||||
[clj-cbor.core :as cbor]
|
||||
[clojure.java.io :as io]
|
||||
[clojure.string :as str]
|
||||
[clojure.tools.logging :as l])
|
||||
[clojure.tools.logging :as l]
|
||||
[babashka.fs :as fs])
|
||||
(:import (java.io ByteArrayOutputStream)))
|
||||
|
||||
;;; XeLaTeX
|
||||
@@ -74,16 +75,46 @@
|
||||
"--bbox=preview" "-o" "%9p.svg" file)]
|
||||
r))
|
||||
|
||||
(defn- snippet-file-names
|
||||
"Return a map of TeX snippets (as strings, including the math
|
||||
delimiters) to file names as would be output by
|
||||
`invoke-dvisvgm`. The returned file names are relative to dvisvgm's
|
||||
output directory."
|
||||
[snippets]
|
||||
(let [svgs (for [i (range)]
|
||||
(format "%09d.svg" i))]
|
||||
(zipmap (reverse snippets) svgs)))
|
||||
|
||||
(defn- instantiate-preview-template [snippets]
|
||||
(let [contents (->> (for [s snippets]
|
||||
(format "\\begin{preview}\n%s\\end{preview}" s))
|
||||
(format "\\begin{preview}\n%s\n\\end{preview}" s))
|
||||
(str/join "\n"))]
|
||||
(-> (io/resource "net/deertopia/doerg/preview-template.tex")
|
||||
slurp
|
||||
(str/replace-first "% {{contents}}" contents))))
|
||||
|
||||
(defn render-xelatex [& snippets]
|
||||
)
|
||||
(defn render-xelatex [output-dir & snippets]
|
||||
(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-keys #(fs/file dir %)))]
|
||||
(fs/create-dirs output-dir)
|
||||
(->> (instantiate-preview-template snippets)
|
||||
(spit preview-tex))
|
||||
(invoke-xelatex :output-dir dir :file preview-tex)
|
||||
(invoke-dvisvgm :output-dir output-dir :file preview-xdv)
|
||||
snippet->file
|
||||
#_
|
||||
(do (when (fs/exists? "/tmp/doerg-tex-test") ; For debugging
|
||||
(fs/delete-tree "/tmp/doerg-tex-test"))
|
||||
(fs/copy-tree dir "/tmp/doerg-tex-test")))))
|
||||
|
||||
(comment
|
||||
(render-xelatex "/tmp/doerg-tex-svgs"
|
||||
"\\(c = \\sqrt{x^2 + y^2}\\)"
|
||||
"x" "y" "x"
|
||||
"\\undefinedcommandlol"))
|
||||
|
||||
|
||||
;;; Temml
|
||||
|
||||
Reference in New Issue
Block a user