From 964ffcf20ea5a884b0aac5234e28e83f3eed2ff9 Mon Sep 17 00:00:00 2001 From: Sam Ritchie Date: Fri, 10 May 2024 10:10:21 -0600 Subject: [PATCH] tex rendering --- deps.edn | 6 ++++-- dev/examples/mafs.clj | 2 +- dev/examples/power_series.clj | 11 +++++++++-- dev/examples/simulation/ellipsoid.clj | 3 +++ dev/examples/simulation/phase_portrait.clj | 1 - dev/examples/vega/pendulum.clj | 2 +- src/emmy/clerk.cljc | 13 ++++++++++--- 7 files changed, 28 insertions(+), 10 deletions(-) diff --git a/deps.edn b/deps.edn index 1feed992..3fb79648 100644 --- a/deps.edn +++ b/deps.edn @@ -1,7 +1,9 @@ {:paths ["src" "resources"] :deps {org.clojure/data.json {:mvn/version "2.4.0"} - org.mentat/emmy {:mvn/version "0.31.0"} + org.mentat/emmy + #_{:mvn/version "0.31.0"} + {:local/root "../emmy"} org.mentat/jsxgraph.cljs {:mvn/version "0.2.1"} org.mentat/leva.cljs {:mvn/version "0.3.0"} org.mentat/mathbox.cljs {:mvn/version "0.2.2"} @@ -16,7 +18,7 @@ {org.clojure/clojure {:mvn/version "1.11.1"} org.clojure/clojurescript {:mvn/version "1.11.60"} io.github.nextjournal/cas-client - {:git/sha "84ab35c3321c1e51a589fddbeee058aecd055bf8"} + {:git/sha "22ef8360689cd3938e43a3223023ab1b9711818f"} io.github.nextjournal/clerk {:git/sha "d80187013d7b7b96db3d8b114b8d99f687170668"} diff --git a/dev/examples/mafs.clj b/dev/examples/mafs.clj index 32eb4252..c7d334b6 100644 --- a/dev/examples/mafs.clj +++ b/dev/examples/mafs.clj @@ -261,7 +261,7 @@ (let [f ((expt D 3) tanh)] (clerk/col - (->tex (f 'x)) + (->TeX (f 'x)) (mafs/mafs {:zoom {:min 0.1 :max 2}} (mafs/cartesian) (mafs/of-x f {:color :blue})))) diff --git a/dev/examples/power_series.clj b/dev/examples/power_series.clj index a7348940..cd86dcd6 100644 --- a/dev/examples/power_series.clj +++ b/dev/examples/power_series.clj @@ -1,5 +1,12 @@ ^{:nextjournal.clerk/visibility {:code :hide}} (ns examples.power-series - {:nextjournal.clerk/toc true}) + {:nextjournal.clerk/toc true} + (:require [emmy.env :refer :all] + [emmy.clerk :as ec])) -;; ## Power Series +;; ## TeX Rendering + +^{:nextjournal.clerk/visibility {:code :hide :result :hide}} +(ec/install!) + +(->TeX (sin 'x)) diff --git a/dev/examples/simulation/ellipsoid.clj b/dev/examples/simulation/ellipsoid.clj index f30a100d..1f50cd08 100644 --- a/dev/examples/simulation/ellipsoid.clj +++ b/dev/examples/simulation/ellipsoid.clj @@ -137,3 +137,6 @@ :state->xyz (ev/with-params {:atom !opts :params [:a :b :c]} e->r)})))) + + +;; https://2.maria.cloud/gist/1b981499d785c4291ba83f8f7006ca35 diff --git a/dev/examples/simulation/phase_portrait.clj b/dev/examples/simulation/phase_portrait.clj index 90c25b7f..cca2d660 100644 --- a/dev/examples/simulation/phase_portrait.clj +++ b/dev/examples/simulation/phase_portrait.clj @@ -26,7 +26,6 @@ {::clerk/width :wide} ;; potential energy term: - (defn T [m l] (fn [[_ _ thetadot]] (* 1/2 m (square (* l thetadot))))) diff --git a/dev/examples/vega/pendulum.clj b/dev/examples/vega/pendulum.clj index bb97d21e..38438cdb 100644 --- a/dev/examples/vega/pendulum.clj +++ b/dev/examples/vega/pendulum.clj @@ -241,7 +241,7 @@ false (first xs) {:calling-convention :structure}) - pv (principal-value Math/PI)] + pv (principal-value Math/PI)] (map (fn [[t [theta1 theta2] [thetadot1 thetadot2] :as state]] (let [[x1 y1 x2 y2] (xform state)] {:t t diff --git a/src/emmy/clerk.cljc b/src/emmy/clerk.cljc index 0c55a3b8..941f526e 100644 --- a/src/emmy/clerk.cljc +++ b/src/emmy/clerk.cljc @@ -11,6 +11,7 @@ (:require [clojure.walk :refer [postwalk]] [emmy.env :as e] [emmy.expression :as x] + [emmy.expression.render :as render] [emmy.viewer :as ev] #?(:clj [emmy.viewer.css :as vc]) #?(:clj [mentat.clerk-utils.build :as b]) @@ -164,8 +165,8 @@ renders the original input." [expr & {:keys [simplify?]}] (let [expr (if simplify? - expr - (e/simplify expr))] + (e/simplify expr) + expr)] (viewer/tex (e/->TeX expr)))) (def literal-viewer @@ -178,6 +179,12 @@ :transform-fn (viewer/update-val x/expression-of)}) +(def tex-viewer + {:name `tex-viewer + :pred render/tex? + :transform-fn (viewer/update-val + #(viewer/tex (.-s %)))}) + #?(:clj (alter-var-root #'ev/reagent-viewer (constantly reagent-viewer)) :cljs (set! ev/reagent-viewer reagent-viewer)) @@ -188,7 +195,7 @@ [[install!]] is required for any Mafs, MathBox etc code to render correctly." [& viewers] (let [high-priority [meta-viewer] - low-priority [literal-viewer]] + low-priority [literal-viewer tex-viewer]] (viewer/add-viewers! (into high-priority (concat viewers low-priority)))))