package forester
A tool for tending mathematical forests
Install
Dune Dependency
Authors
Maintainers
Sources
4.3.0.tar.gz
md5=4cf7ec6a0a36810572f8b3a2af58631c
sha512=818f859dac00a18807563fd79663ec54232c8df196a8dc2de5e269a1d0c71085b1b490297ea0ecf3ef9cd32e40fb05ad2e10c241b03958c15e25c2942271eede
doc/src/forester.render/LaTeX_pipeline.ml.html
Source file LaTeX_pipeline.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
open Forester_prelude open Forester_core module EP = Eio.Path type 'a env = 'a constraint 'a = < cwd : Eio.Fs.dir_ty EP.t; process_mgr : _ Eio.Process.mgr; stdout : _ Eio.Flow.sink; .. > as 'a let indent_string string = string |> String.split_on_char '\n' |> List.map (Format.sprintf "\t%s") |> String.concat "\n" let latex_to_dvi ~(env : _ env) code = let cwd = Eio.Stdenv.cwd env in let mgr = Eio.Stdenv.process_mgr env in Eio_util.with_open_tmp_dir ~env @@ fun tmp -> let tex_fn = "job.tex" in EP.save ~append:false ~create:(`Or_truncate 0o644) EP.(tmp / tex_fn) code; (* `latex' sends errors to stdout rather than stderr. *) let out_buf = Buffer.create 1000 in let stdout = Eio.Flow.buffer_sink out_buf in let stderr = Eio_util.null_sink () in let cmd = ["latex"; "-halt-on-error"; "-interaction=nonstopmode"; tex_fn] in begin try Eio.Process.run ~cwd:tmp ~stdout ~stderr mgr cmd with exn -> let formatted_output = Buffer.contents out_buf |> indent_string in Reporter.fatalf External_error "Encountered fatal LuaLaTeX error: @.@.%s@.@. while running `%s` in directory `%s`." formatted_output (String.concat " " cmd) (Eio.Path.native_exn tmp) end; EP.load EP.(tmp / "job.dvi") let dvi_to_svg ~env dvi = let cwd = Eio.Stdenv.cwd env in let mgr = Eio.Stdenv.process_mgr env in let out_buf = Buffer.create 1000 in let err_buf = Buffer.create 1000 in let stdout = Eio.Flow.buffer_sink out_buf in let stderr = Eio_util.null_sink () in let stdin = Eio.Flow.string_source dvi in let cmd = ["dvisvgm"; "--exact"; "--clipjoin"; "--font-format=woff"; "--bbox=papersize"; "--zoom=1.5"; "--stdin"; "--stdout"] in begin try Eio.Process.run ~cwd ~stdin ~stdout ~stderr mgr cmd with _ -> Reporter.fatalf External_error "Encountered fatal error running `dvisvgm`" end; Buffer.contents out_buf let latex_to_svg ~env code = code |> latex_to_dvi ~env |> dvi_to_svg ~env
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>