diff --git a/doerg/doerg-tex/.gitignore b/doerg/doerg-tex/.gitignore deleted file mode 100644 index d366d2e..0000000 --- a/doerg/doerg-tex/.gitignore +++ /dev/null @@ -1 +0,0 @@ -classes \ No newline at end of file diff --git a/doerg/doerg-tex/compile.clj b/doerg/doerg-tex/compile.clj deleted file mode 100644 index 13f96d1..0000000 --- a/doerg/doerg-tex/compile.clj +++ /dev/null @@ -1,2 +0,0 @@ -(compile 'serialise) -(compile 'deserialise) diff --git a/doerg/doerg-tex/deserialise.clj b/doerg/doerg-tex/deserialise.clj index e3be265..cb0011c 100644 --- a/doerg/doerg-tex/deserialise.clj +++ b/doerg/doerg-tex/deserialise.clj @@ -1,7 +1,5 @@ (ns deserialise (:require [clj-cbor.core :as cbor] - [clojure.string :as str]) - (:gen-class)) + [clojure.string :as str])) -(defn -main [] - (prn (cbor/decode cbor/default-codec System/in :eof))) +(prn (cbor/decode cbor/default-codec System/in :eof)) diff --git a/doerg/doerg-tex/serialise.clj b/doerg/doerg-tex/serialise.clj index 207766f..417a648 100644 --- a/doerg/doerg-tex/serialise.clj +++ b/doerg/doerg-tex/serialise.clj @@ -1,7 +1,6 @@ (ns serialise (:require [clj-cbor.core :as cbor] - [clojure.string :as str]) - (:gen-class)) + [clojure.string :as str])) (defn w [x] (cbor/encode cbor/default-codec System/out x)) @@ -12,13 +11,9 @@ #_ (w "\\naturalto") -(defn -main [] - (w "\\begin{align*} -x &= y -\\\\ &= zzz -\\end{align*}") +(w "\\ifxetex blah \\fi") - #_#_#_ - (w "c = \\sqrt{a^2 + y^2}") - (w "c = \\sqrt{a^ + y^2") - (w "\\alpha^\\beta")) +#_#_#_ +(w "c = \\sqrt{a^2 + y^2}") +(w "c = \\sqrt{a^ + y^2") +(w "\\alpha^\\beta") diff --git a/doerg/resources/net/deertopia/doerg/preview-template.tex b/doerg/resources/net/deertopia/doerg/preview-template.tex index 6761074..a7c93db 100644 --- a/doerg/resources/net/deertopia/doerg/preview-template.tex +++ b/doerg/resources/net/deertopia/doerg/preview-template.tex @@ -2,6 +2,7 @@ \usepackage{amsmath} \usepackage[active,tightpage,auctex,dvips]{preview} \usepackage{fontspec} +\usepackage{ifxetex} %% \usepackage{syd-plex} \begin{document} diff --git a/doerg/src/net/deertopia/doerg/render.clj b/doerg/src/net/deertopia/doerg/render.clj index a11abd9..1216e07 100644 --- a/doerg/src/net/deertopia/doerg/render.clj +++ b/doerg/src/net/deertopia/doerg/render.clj @@ -127,6 +127,13 @@ element/footnotes-section?] sp/NONE)))) +(defn- collect-latex-headers [doc] + (->> doc + (sp/select + [element/postorder-walker + #(element/of-keyword-type? % "LATEX_HEADER") + (sp/view :value)]))) + (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. @@ -139,15 +146,19 @@ ;; 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 "" "") - (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)))))) + (let [r (-> (slurp file) + (str/replace-first "" "") + (str/replace-first #" height=['\"][^\"']+[\"']" "") + (str/replace-first #" width=['\"][^\"']+[\"']" "") + (str/replace-first + #"viewBox=['\"][^\"']+[\"']" + (fn [s] + (format "%s style=\"%s\"" + s + (format "height:%.4fem;vertical-align:%.4fem;display:inline-block" + height (- depth))))))] + (spit (fs/file "/tmp" (fs/file-name file)) r) + r)) (defn- render-tex-snippets [doc] (let [promises (atom []) @@ -181,7 +192,10 @@ (catch Exception e (prn e) (flush) - (throw e)))))))] + (throw e)))) + (when (fs/exists? "/tmp/doerg-svgs") + (fs/delete-tree "/tmp/doerg-svgs")) + (fs/copy-tree svg-dir "/tmp/doerg-svgs"))))] (future-call (bound-fn* f)) r)) @@ -331,19 +345,12 @@ (str "@" key)) (defmethod org-element "latex-fragment" [{:keys [contents value] :as e}] - (let [display? (str/starts-with? value "\\[")] - [:span.latex-fragment - (-> e ::rendered (deref 2000 "«timed out»"))] - #_ - [:span.latex-fragment - (hiccup/raw (tex/render-temml contents :display? display?))])) + [:span.latex-fragment + (-> e ::rendered (deref 2000 "«timed out»"))]) (defmethod org-element "latex-environment" [{:keys [value] :as e}] [:span.latex-fragment - (-> e ::rendered (deref 2000 "«timed out»"))] - #_ - [:span.latex-fragment - (hiccup/raw (tex/render-temml value :display? true))]) + (-> e ::rendered (deref 2000 "«timed out»"))]) (defmethod org-element "example-block" [{:keys [value]}] [:pre value]) @@ -362,7 +369,6 @@ ;; Completely ignore the LATEX_COMPILER keyword. (defmethod org-keyword "LATEX_COMPILER" [_] nil) -;; TODO: Real LatEx support. (defmethod org-keyword "LATEX_HEADER" [_] nil) ;; Not sure how to deal with this one yet.