mirror of
https://github.com/reanimate/reanimate.git
synced 2026-09-15 18:12:20 +00:00
424 lines
37 KiB
HTML
424 lines
37 KiB
HTML
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<style type="text/css">
|
|
span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
|
|
span.nottickedoff { background: yellow}
|
|
span.istickedoff { background: white }
|
|
span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
|
|
span.tickonlytrue { margin: -1px; border: 1px solid #60de51; background: #60de51 }
|
|
span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
|
|
span.decl { font-weight: bold }
|
|
span.spaces { background: white }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<pre>
|
|
<span class="decl"><span class="nottickedoff">never executed</span> <span class="tickonlytrue">always true</span> <span class="tickonlyfalse">always false</span></span>
|
|
</pre>
|
|
<pre>
|
|
<span class="lineno"> 1 </span>{-# LANGUAGE DeriveAnyClass #-}
|
|
<span class="lineno"> 2 </span>{-# LANGUAGE DeriveGeneric #-}
|
|
<span class="lineno"> 3 </span>{-# LANGUAGE OverloadedStrings #-}
|
|
<span class="lineno"> 4 </span>{-# LANGUAGE PatternSynonyms #-}
|
|
<span class="lineno"> 5 </span>{-# LANGUAGE ScopedTypeVariables #-}
|
|
<span class="lineno"> 6 </span>
|
|
<span class="lineno"> 7 </span>-- |
|
|
<span class="lineno"> 8 </span>-- Copyright : Written by David Himmelstrup
|
|
<span class="lineno"> 9 </span>-- License : Unlicense
|
|
<span class="lineno"> 10 </span>-- Maintainer : lemmih@gmail.com
|
|
<span class="lineno"> 11 </span>-- Stability : experimental
|
|
<span class="lineno"> 12 </span>-- Portability : POSIX
|
|
<span class="lineno"> 13 </span>module Reanimate.LaTeX
|
|
<span class="lineno"> 14 </span> ( latexCfg,
|
|
<span class="lineno"> 15 </span> TexEngine (..),
|
|
<span class="lineno"> 16 </span> TexConfig (..),
|
|
<span class="lineno"> 17 </span> latex,
|
|
<span class="lineno"> 18 </span> latexWithHeaders,
|
|
<span class="lineno"> 19 </span> latexChunks,
|
|
<span class="lineno"> 20 </span> xelatex,
|
|
<span class="lineno"> 21 </span> xelatexWithHeaders,
|
|
<span class="lineno"> 22 </span> ctex,
|
|
<span class="lineno"> 23 </span> ctexWithHeaders,
|
|
<span class="lineno"> 24 </span> latexAlign,
|
|
<span class="lineno"> 25 </span>
|
|
<span class="lineno"> 26 </span> -- * Font configurations
|
|
<span class="lineno"> 27 </span> chalkduster,
|
|
<span class="lineno"> 28 </span> calligra,
|
|
<span class="lineno"> 29 </span> noto,
|
|
<span class="lineno"> 30 </span> helvet,
|
|
<span class="lineno"> 31 </span> libertine,
|
|
<span class="lineno"> 32 </span> biolinum,
|
|
<span class="lineno"> 33 </span> droidSerif,
|
|
<span class="lineno"> 34 </span> droidSans,
|
|
<span class="lineno"> 35 </span> )
|
|
<span class="lineno"> 36 </span>where
|
|
<span class="lineno"> 37 </span>
|
|
<span class="lineno"> 38 </span>import Control.Lens
|
|
<span class="lineno"> 39 </span>import qualified Data.ByteString as B
|
|
<span class="lineno"> 40 </span>import Data.Hashable
|
|
<span class="lineno"> 41 </span>import Data.Monoid
|
|
<span class="lineno"> 42 </span>import Data.Text (Text)
|
|
<span class="lineno"> 43 </span>import qualified Data.Text as T
|
|
<span class="lineno"> 44 </span>import qualified Data.Text.Encoding as T
|
|
<span class="lineno"> 45 </span>import GHC.Generics (Generic)
|
|
<span class="lineno"> 46 </span>import Graphics.SvgTree
|
|
<span class="lineno"> 47 </span> ( Tree,
|
|
<span class="lineno"> 48 </span> clipPathRef,
|
|
<span class="lineno"> 49 </span> clipRule,
|
|
<span class="lineno"> 50 </span> mapTree,
|
|
<span class="lineno"> 51 </span> parseSvgFile,
|
|
<span class="lineno"> 52 </span> strokeColor,
|
|
<span class="lineno"> 53 </span> pattern ClipPathTree,
|
|
<span class="lineno"> 54 </span> pattern None,
|
|
<span class="lineno"> 55 </span> )
|
|
<span class="lineno"> 56 </span>import Reanimate.Animation (SVG)
|
|
<span class="lineno"> 57 </span>import Reanimate.Cache
|
|
<span class="lineno"> 58 </span>import Reanimate.External
|
|
<span class="lineno"> 59 </span>import Reanimate.Misc
|
|
<span class="lineno"> 60 </span>import Reanimate.Parameters
|
|
<span class="lineno"> 61 </span>import Reanimate.Svg
|
|
<span class="lineno"> 62 </span>import System.FilePath
|
|
<span class="lineno"> 63 </span> ( replaceExtension,
|
|
<span class="lineno"> 64 </span> takeFileName,
|
|
<span class="lineno"> 65 </span> (</>),
|
|
<span class="lineno"> 66 </span> )
|
|
<span class="lineno"> 67 </span>import System.IO.Unsafe (unsafePerformIO)
|
|
<span class="lineno"> 68 </span>
|
|
<span class="lineno"> 69 </span>-- | TeX backends. They have different features and capabilities.
|
|
<span class="lineno"> 70 </span>data TexEngine = LaTeX | XeLaTeX | LuaLaTeX
|
|
<span class="lineno"> 71 </span> deriving (Generic, Hashable, <span class="decl"><span class="nottickedoff">Eq</span></span>, <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Ord</span></span></span></span></span></span></span></span></span></span>, <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Read</span></span></span></span></span></span>, <span class="decl"><span class="nottickedoff">Show</span></span>)
|
|
<span class="lineno"> 72 </span>
|
|
<span class="lineno"> 73 </span>-- | TeX configurations can load packages and set up environments for tex scripts.
|
|
<span class="lineno"> 74 </span>data TexConfig = TexConfig
|
|
<span class="lineno"> 75 </span> { <span class="nottickedoff"><span class="decl"><span class="nottickedoff">texConfigEngine</span></span></span> :: TexEngine,
|
|
<span class="lineno"> 76 </span> <span class="nottickedoff"><span class="decl"><span class="nottickedoff">texConfigHeaders</span></span></span> :: [T.Text],
|
|
<span class="lineno"> 77 </span> <span class="nottickedoff"><span class="decl"><span class="nottickedoff">texConfigPostScript</span></span></span> :: [T.Text]
|
|
<span class="lineno"> 78 </span> }
|
|
<span class="lineno"> 79 </span> deriving (Generic, Hashable, <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Read</span></span></span></span></span></span>, <span class="decl"><span class="nottickedoff">Show</span></span>, <span class="decl"><span class="nottickedoff">Eq</span></span>, <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Ord</span></span></span></span></span></span></span></span></span></span>)
|
|
<span class="lineno"> 80 </span>
|
|
<span class="lineno"> 81 </span>-- | Render TeX script using a given configuration.
|
|
<span class="lineno"> 82 </span>latexCfg :: TexConfig -> T.Text -> SVG
|
|
<span class="lineno"> 83 </span><span class="decl"><span class="nottickedoff">latexCfg (TexConfig engine headers postscript) =</span>
|
|
<span class="lineno"> 84 </span><span class="spaces"> </span><span class="nottickedoff">gen headers postscript</span>
|
|
<span class="lineno"> 85 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
|
<span class="lineno"> 86 </span><span class="spaces"> </span><span class="nottickedoff">gen =</span>
|
|
<span class="lineno"> 87 </span><span class="spaces"> </span><span class="nottickedoff">case engine of</span>
|
|
<span class="lineno"> 88 </span><span class="spaces"> </span><span class="nottickedoff">LaTeX -> someTexWithHeaders engine "latex" "dvi" []</span>
|
|
<span class="lineno"> 89 </span><span class="spaces"> </span><span class="nottickedoff">XeLaTeX -> someTexWithHeaders engine "xelatex" "xdv" ["-no-pdf"]</span>
|
|
<span class="lineno"> 90 </span><span class="spaces"> </span><span class="nottickedoff">LuaLaTeX -> someTexWithHeaders engine "lualatex" "pdf" []</span></span>
|
|
<span class="lineno"> 91 </span>
|
|
<span class="lineno"> 92 </span>-- | Invoke latex and import the result as an SVG object. SVG objects are
|
|
<span class="lineno"> 93 </span>-- cached to improve performance.
|
|
<span class="lineno"> 94 </span>--
|
|
<span class="lineno"> 95 </span>-- Example:
|
|
<span class="lineno"> 96 </span>--
|
|
<span class="lineno"> 97 </span>-- > latex "$e^{i\\pi}+1=0$"
|
|
<span class="lineno"> 98 </span>--
|
|
<span class="lineno"> 99 </span>-- <<docs/gifs/doc_latex.gif>>
|
|
<span class="lineno"> 100 </span>latex :: T.Text -> Tree
|
|
<span class="lineno"> 101 </span><span class="decl"><span class="istickedoff">latex = latexWithHeaders <span class="nottickedoff">[]</span></span></span>
|
|
<span class="lineno"> 102 </span>
|
|
<span class="lineno"> 103 </span>-- | Invoke latex with extra script headers.
|
|
<span class="lineno"> 104 </span>latexWithHeaders :: [T.Text] -> T.Text -> Tree
|
|
<span class="lineno"> 105 </span><span class="decl"><span class="istickedoff">latexWithHeaders = someTexWithHeaders <span class="nottickedoff">LaTeX</span> <span class="nottickedoff">"latex"</span> <span class="nottickedoff">"dvi"</span> <span class="nottickedoff">[]</span> <span class="nottickedoff">[]</span></span></span>
|
|
<span class="lineno"> 106 </span>
|
|
<span class="lineno"> 107 </span>someTexWithHeaders ::
|
|
<span class="lineno"> 108 </span> TexEngine ->
|
|
<span class="lineno"> 109 </span> String ->
|
|
<span class="lineno"> 110 </span> String ->
|
|
<span class="lineno"> 111 </span> [String] ->
|
|
<span class="lineno"> 112 </span> [T.Text] ->
|
|
<span class="lineno"> 113 </span> [T.Text] ->
|
|
<span class="lineno"> 114 </span> T.Text ->
|
|
<span class="lineno"> 115 </span> Tree
|
|
<span class="lineno"> 116 </span><span class="decl"><span class="istickedoff">someTexWithHeaders _engine _exec _dvi _args _headers _postscript tex</span>
|
|
<span class="lineno"> 117 </span><span class="spaces"> </span><span class="istickedoff">| <span class="tickonlytrue">pNoExternals</span> = mkText tex</span>
|
|
<span class="lineno"> 118 </span><span class="spaces"></span><span class="istickedoff">someTexWithHeaders engine exec dvi args headers postscript tex =</span>
|
|
<span class="lineno"> 119 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">(unsafePerformIO . (cacheMem . cacheDiskSvg) (latexToSVG engine dvi exec args))</span></span>
|
|
<span class="lineno"> 120 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">script</span></span>
|
|
<span class="lineno"> 121 </span><span class="spaces"> </span><span class="istickedoff">where</span>
|
|
<span class="lineno"> 122 </span><span class="spaces"> </span><span class="istickedoff"><span class="nottickedoff">script = mkTexScript exec args headers (T.unlines (postscript ++ [tex]))</span></span></span>
|
|
<span class="lineno"> 123 </span>
|
|
<span class="lineno"> 124 </span>-- | Invoke latex and separate results.
|
|
<span class="lineno"> 125 </span>latexChunks :: [T.Text] -> [Tree]
|
|
<span class="lineno"> 126 </span><span class="decl"><span class="nottickedoff">latexChunks chunks | pNoExternals = map mkText chunks</span>
|
|
<span class="lineno"> 127 </span><span class="spaces"></span><span class="nottickedoff">latexChunks chunks = worker (svgGlyphs $ latex $ T.concat chunks) chunks</span>
|
|
<span class="lineno"> 128 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
|
<span class="lineno"> 129 </span><span class="spaces"> </span><span class="nottickedoff">merge lst = mkGroup [fmt svg | (fmt, _, svg) <- lst]</span>
|
|
<span class="lineno"> 130 </span><span class="spaces"> </span><span class="nottickedoff">worker [] [] = []</span>
|
|
<span class="lineno"> 131 </span><span class="spaces"> </span><span class="nottickedoff">worker _ [] = error "latex chunk mismatch"</span>
|
|
<span class="lineno"> 132 </span><span class="spaces"> </span><span class="nottickedoff">worker everything (x : xs) =</span>
|
|
<span class="lineno"> 133 </span><span class="spaces"> </span><span class="nottickedoff">let width = length $ svgGlyphs (latex x)</span>
|
|
<span class="lineno"> 134 </span><span class="spaces"> </span><span class="nottickedoff">in merge (take width everything) : worker (drop width everything) xs</span></span>
|
|
<span class="lineno"> 135 </span>
|
|
<span class="lineno"> 136 </span>-- | Invoke xelatex and import the result as an SVG object. SVG objects are
|
|
<span class="lineno"> 137 </span>-- cached to improve performance. Xelatex has support for non-western scripts.
|
|
<span class="lineno"> 138 </span>xelatex :: Text -> Tree
|
|
<span class="lineno"> 139 </span><span class="decl"><span class="nottickedoff">xelatex = xelatexWithHeaders []</span></span>
|
|
<span class="lineno"> 140 </span>
|
|
<span class="lineno"> 141 </span>-- | Invoke xelatex with extra script headers.
|
|
<span class="lineno"> 142 </span>xelatexWithHeaders :: [T.Text] -> T.Text -> Tree
|
|
<span class="lineno"> 143 </span><span class="decl"><span class="nottickedoff">xelatexWithHeaders = someTexWithHeaders XeLaTeX "xelatex" "xdv" [] ["-no-pdf"]</span></span>
|
|
<span class="lineno"> 144 </span>
|
|
<span class="lineno"> 145 </span>-- | Invoke xelatex with "\usepackage[UTF8]{ctex}" and import the result as an
|
|
<span class="lineno"> 146 </span>-- SVG object. SVG objects are cached to improve performance. Xelatex has
|
|
<span class="lineno"> 147 </span>-- support for non-western scripts.
|
|
<span class="lineno"> 148 </span>--
|
|
<span class="lineno"> 149 </span>-- Example:
|
|
<span class="lineno"> 150 </span>--
|
|
<span class="lineno"> 151 </span>-- > ctex "中文"
|
|
<span class="lineno"> 152 </span>--
|
|
<span class="lineno"> 153 </span>-- <<docs/gifs/doc_ctex.gif>>
|
|
<span class="lineno"> 154 </span>ctex :: T.Text -> Tree
|
|
<span class="lineno"> 155 </span><span class="decl"><span class="nottickedoff">ctex = ctexWithHeaders []</span></span>
|
|
<span class="lineno"> 156 </span>
|
|
<span class="lineno"> 157 </span>-- | Invoke xelatex with extra script headers + ctex headers.
|
|
<span class="lineno"> 158 </span>ctexWithHeaders :: [T.Text] -> T.Text -> Tree
|
|
<span class="lineno"> 159 </span><span class="decl"><span class="nottickedoff">ctexWithHeaders headers = xelatexWithHeaders ("\\usepackage[UTF8]{ctex}" : headers)</span></span>
|
|
<span class="lineno"> 160 </span>
|
|
<span class="lineno"> 161 </span>-- | Invoke latex and import the result as an SVG object. SVG objects are
|
|
<span class="lineno"> 162 </span>-- cached to improve performance. This wraps the TeX code in an 'align*'
|
|
<span class="lineno"> 163 </span>-- context.
|
|
<span class="lineno"> 164 </span>--
|
|
<span class="lineno"> 165 </span>-- Example:
|
|
<span class="lineno"> 166 </span>--
|
|
<span class="lineno"> 167 </span>-- > latexAlign "R = \\frac{{\\Delta x}}{{kA}}"
|
|
<span class="lineno"> 168 </span>--
|
|
<span class="lineno"> 169 </span>-- <<docs/gifs/doc_latexAlign.gif>>
|
|
<span class="lineno"> 170 </span>latexAlign :: Text -> Tree
|
|
<span class="lineno"> 171 </span><span class="decl"><span class="istickedoff">latexAlign tex = latex $ T.unlines ["\\begin{align*}", tex, "\\end{align*}"]</span></span>
|
|
<span class="lineno"> 172 </span>
|
|
<span class="lineno"> 173 </span>postprocess :: Tree -> Tree
|
|
<span class="lineno"> 174 </span><span class="decl"><span class="nottickedoff">postprocess =</span>
|
|
<span class="lineno"> 175 </span><span class="spaces"> </span><span class="nottickedoff">simplify</span>
|
|
<span class="lineno"> 176 </span><span class="spaces"> </span><span class="nottickedoff">. lowerTransformations</span>
|
|
<span class="lineno"> 177 </span><span class="spaces"> </span><span class="nottickedoff">. scaleXY 0.1 (-0.1)</span>
|
|
<span class="lineno"> 178 </span><span class="spaces"> </span><span class="nottickedoff">. removeClipPaths</span>
|
|
<span class="lineno"> 179 </span><span class="spaces"> </span><span class="nottickedoff">. lowerIds</span>
|
|
<span class="lineno"> 180 </span><span class="spaces"> </span><span class="nottickedoff">. mapTree clearDrawAttr</span>
|
|
<span class="lineno"> 181 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
|
<span class="lineno"> 182 </span><span class="spaces"> </span><span class="nottickedoff">clearDrawAttr t = t & strokeColor .~ Last Nothing</span></span>
|
|
<span class="lineno"> 183 </span>
|
|
<span class="lineno"> 184 </span>enginePostprocess :: TexEngine -> Tree -> Tree
|
|
<span class="lineno"> 185 </span><span class="decl"><span class="nottickedoff">enginePostprocess LuaLaTeX svg = translate 0 (svgHeight svg) svg</span>
|
|
<span class="lineno"> 186 </span><span class="spaces"></span><span class="nottickedoff">enginePostprocess _ svg = svg</span></span>
|
|
<span class="lineno"> 187 </span>
|
|
<span class="lineno"> 188 </span>removeClipPaths :: SVG -> SVG
|
|
<span class="lineno"> 189 </span><span class="decl"><span class="nottickedoff">removeClipPaths = mapTree worker</span>
|
|
<span class="lineno"> 190 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
|
<span class="lineno"> 191 </span><span class="spaces"> </span><span class="nottickedoff">worker ClipPathTree {} = None</span>
|
|
<span class="lineno"> 192 </span><span class="spaces"> </span><span class="nottickedoff">worker t = t & clipRule .~ Last Nothing & clipPathRef .~ Last Nothing</span></span>
|
|
<span class="lineno"> 193 </span>
|
|
<span class="lineno"> 194 </span>-- executable, arguments, header, tex
|
|
<span class="lineno"> 195 </span>latexToSVG :: TexEngine -> String -> String -> [String] -> Text -> IO Tree
|
|
<span class="lineno"> 196 </span><span class="decl"><span class="nottickedoff">latexToSVG engine dviExt latexExec latexArgs tex = do</span>
|
|
<span class="lineno"> 197 </span><span class="spaces"> </span><span class="nottickedoff">latexBin <- requireExecutable latexExec</span>
|
|
<span class="lineno"> 198 </span><span class="spaces"> </span><span class="nottickedoff">withTempDir $ \tmp_dir -> withTempFile "tex" $ \tex_file -></span>
|
|
<span class="lineno"> 199 </span><span class="spaces"> </span><span class="nottickedoff">withTempFile "svg" $ \svg_file -> do</span>
|
|
<span class="lineno"> 200 </span><span class="spaces"> </span><span class="nottickedoff">let dvi_file =</span>
|
|
<span class="lineno"> 201 </span><span class="spaces"> </span><span class="nottickedoff">tmp_dir </> replaceExtension (takeFileName tex_file) dviExt</span>
|
|
<span class="lineno"> 202 </span><span class="spaces"> </span><span class="nottickedoff">B.writeFile tex_file (T.encodeUtf8 tex)</span>
|
|
<span class="lineno"> 203 </span><span class="spaces"> </span><span class="nottickedoff">runCmd</span>
|
|
<span class="lineno"> 204 </span><span class="spaces"> </span><span class="nottickedoff">latexBin</span>
|
|
<span class="lineno"> 205 </span><span class="spaces"> </span><span class="nottickedoff">( latexArgs</span>
|
|
<span class="lineno"> 206 </span><span class="spaces"> </span><span class="nottickedoff">++ [ "-interaction=nonstopmode",</span>
|
|
<span class="lineno"> 207 </span><span class="spaces"> </span><span class="nottickedoff">"-halt-on-error",</span>
|
|
<span class="lineno"> 208 </span><span class="spaces"> </span><span class="nottickedoff">"-output-directory=" ++ tmp_dir,</span>
|
|
<span class="lineno"> 209 </span><span class="spaces"> </span><span class="nottickedoff">tex_file</span>
|
|
<span class="lineno"> 210 </span><span class="spaces"> </span><span class="nottickedoff">]</span>
|
|
<span class="lineno"> 211 </span><span class="spaces"> </span><span class="nottickedoff">)</span>
|
|
<span class="lineno"> 212 </span><span class="spaces"> </span><span class="nottickedoff">if dviExt == "pdf"</span>
|
|
<span class="lineno"> 213 </span><span class="spaces"> </span><span class="nottickedoff">then do</span>
|
|
<span class="lineno"> 214 </span><span class="spaces"> </span><span class="nottickedoff">pdf2svg <- requireExecutable "pdf2svg"</span>
|
|
<span class="lineno"> 215 </span><span class="spaces"> </span><span class="nottickedoff">runCmd</span>
|
|
<span class="lineno"> 216 </span><span class="spaces"> </span><span class="nottickedoff">pdf2svg</span>
|
|
<span class="lineno"> 217 </span><span class="spaces"> </span><span class="nottickedoff">[dvi_file, svg_file]</span>
|
|
<span class="lineno"> 218 </span><span class="spaces"> </span><span class="nottickedoff">else do</span>
|
|
<span class="lineno"> 219 </span><span class="spaces"> </span><span class="nottickedoff">dvisvgm <- requireExecutable "dvisvgm"</span>
|
|
<span class="lineno"> 220 </span><span class="spaces"> </span><span class="nottickedoff">runCmd</span>
|
|
<span class="lineno"> 221 </span><span class="spaces"> </span><span class="nottickedoff">dvisvgm</span>
|
|
<span class="lineno"> 222 </span><span class="spaces"> </span><span class="nottickedoff">[ dvi_file,</span>
|
|
<span class="lineno"> 223 </span><span class="spaces"> </span><span class="nottickedoff">"--precision=5",</span>
|
|
<span class="lineno"> 224 </span><span class="spaces"> </span><span class="nottickedoff">"--exact", -- better bboxes.</span>
|
|
<span class="lineno"> 225 </span><span class="spaces"> </span><span class="nottickedoff">"--no-fonts", -- use glyphs instead of fonts.</span>
|
|
<span class="lineno"> 226 </span><span class="spaces"> </span><span class="nottickedoff">"--verbosity=0",</span>
|
|
<span class="lineno"> 227 </span><span class="spaces"> </span><span class="nottickedoff">"-o",</span>
|
|
<span class="lineno"> 228 </span><span class="spaces"> </span><span class="nottickedoff">svg_file</span>
|
|
<span class="lineno"> 229 </span><span class="spaces"> </span><span class="nottickedoff">]</span>
|
|
<span class="lineno"> 230 </span><span class="spaces"> </span><span class="nottickedoff">svg_data <- B.readFile svg_file</span>
|
|
<span class="lineno"> 231 </span><span class="spaces"> </span><span class="nottickedoff">case parseSvgFile svg_file svg_data of</span>
|
|
<span class="lineno"> 232 </span><span class="spaces"> </span><span class="nottickedoff">Nothing -> error "Malformed svg"</span>
|
|
<span class="lineno"> 233 </span><span class="spaces"> </span><span class="nottickedoff">Just svg -></span>
|
|
<span class="lineno"> 234 </span><span class="spaces"> </span><span class="nottickedoff">return $</span>
|
|
<span class="lineno"> 235 </span><span class="spaces"> </span><span class="nottickedoff">enginePostprocess engine $</span>
|
|
<span class="lineno"> 236 </span><span class="spaces"> </span><span class="nottickedoff">postprocess $ unbox $ replaceUses svg</span></span>
|
|
<span class="lineno"> 237 </span>
|
|
<span class="lineno"> 238 </span>mkTexScript :: String -> [String] -> [Text] -> Text -> Text
|
|
<span class="lineno"> 239 </span><span class="decl"><span class="nottickedoff">mkTexScript latexExec latexArgs texHeaders tex =</span>
|
|
<span class="lineno"> 240 </span><span class="spaces"> </span><span class="nottickedoff">T.unlines $</span>
|
|
<span class="lineno"> 241 </span><span class="spaces"> </span><span class="nottickedoff">[ "% " <> T.pack (unwords (latexExec : latexArgs)),</span>
|
|
<span class="lineno"> 242 </span><span class="spaces"> </span><span class="nottickedoff">"\\documentclass[preview]{standalone}",</span>
|
|
<span class="lineno"> 243 </span><span class="spaces"> </span><span class="nottickedoff">"\\usepackage{amsmath}",</span>
|
|
<span class="lineno"> 244 </span><span class="spaces"> </span><span class="nottickedoff">"\\usepackage{gensymb}"</span>
|
|
<span class="lineno"> 245 </span><span class="spaces"> </span><span class="nottickedoff">]</span>
|
|
<span class="lineno"> 246 </span><span class="spaces"> </span><span class="nottickedoff">++ texHeaders</span>
|
|
<span class="lineno"> 247 </span><span class="spaces"> </span><span class="nottickedoff">++ [ "\\usepackage[english]{babel}",</span>
|
|
<span class="lineno"> 248 </span><span class="spaces"> </span><span class="nottickedoff">"\\linespread{1}",</span>
|
|
<span class="lineno"> 249 </span><span class="spaces"> </span><span class="nottickedoff">"\\begin{document}",</span>
|
|
<span class="lineno"> 250 </span><span class="spaces"> </span><span class="nottickedoff">tex,</span>
|
|
<span class="lineno"> 251 </span><span class="spaces"> </span><span class="nottickedoff">"\\end{document}"</span>
|
|
<span class="lineno"> 252 </span><span class="spaces"> </span><span class="nottickedoff">]</span></span>
|
|
<span class="lineno"> 253 </span>
|
|
<span class="lineno"> 254 </span>{- Packages used by manim.
|
|
<span class="lineno"> 255 </span>
|
|
<span class="lineno"> 256 </span>\\\usepackage{amsmath}\n\
|
|
<span class="lineno"> 257 </span>\\\usepackage{amssymb}\n\
|
|
<span class="lineno"> 258 </span>\\\usepackage{dsfont}\n\
|
|
<span class="lineno"> 259 </span>\\\usepackage{setspace}\n\
|
|
<span class="lineno"> 260 </span>\\\usepackage{relsize}\n\
|
|
<span class="lineno"> 261 </span>\\\usepackage{textcomp}\n\
|
|
<span class="lineno"> 262 </span>\\\usepackage{mathrsfs}\n\
|
|
<span class="lineno"> 263 </span>\\\usepackage{calligra}\n\
|
|
<span class="lineno"> 264 </span>\\\usepackage{wasysym}\n\
|
|
<span class="lineno"> 265 </span>\\\usepackage{ragged2e}\n\
|
|
<span class="lineno"> 266 </span>\\\usepackage{physics}\n\
|
|
<span class="lineno"> 267 </span>\\\usepackage{xcolor}\n\
|
|
<span class="lineno"> 268 </span>\\\usepackage{textcomp}\n\
|
|
<span class="lineno"> 269 </span>\\\usepackage{xfrac}\n\
|
|
<span class="lineno"> 270 </span>\\\usepackage{microtype}\n\
|
|
<span class="lineno"> 271 </span>-}
|
|
<span class="lineno"> 272 </span>
|
|
<span class="lineno"> 273 </span>-- | Chalkduster font. Depends on lualatex.
|
|
<span class="lineno"> 274 </span>-- Font files are automatically downloaded.
|
|
<span class="lineno"> 275 </span>--
|
|
<span class="lineno"> 276 </span>-- @
|
|
<span class="lineno"> 277 </span>-- `latexCfg` `chalkduster` "chalkduster"
|
|
<span class="lineno"> 278 </span>-- @
|
|
<span class="lineno"> 279 </span>--
|
|
<span class="lineno"> 280 </span>-- <<docs/gifs/doc_chalkduster.gif>>
|
|
<span class="lineno"> 281 </span>chalkduster :: TexConfig
|
|
<span class="lineno"> 282 </span><span class="decl"><span class="nottickedoff">chalkduster =</span>
|
|
<span class="lineno"> 283 </span><span class="spaces"> </span><span class="nottickedoff">TexConfig</span>
|
|
<span class="lineno"> 284 </span><span class="spaces"> </span><span class="nottickedoff">{ texConfigEngine = XeLaTeX,</span>
|
|
<span class="lineno"> 285 </span><span class="spaces"> </span><span class="nottickedoff">texConfigHeaders =</span>
|
|
<span class="lineno"> 286 </span><span class="spaces"> </span><span class="nottickedoff">[ "\\usepackage[no-math]{fontspec}",</span>
|
|
<span class="lineno"> 287 </span><span class="spaces"> </span><span class="nottickedoff">"\\setmainfont[Mapping=tex-text,Path={" <> chalkdusterFont <> "/},Extension=.ttf]{Chalkduster}",</span>
|
|
<span class="lineno"> 288 </span><span class="spaces"> </span><span class="nottickedoff">"\\usepackage[defaultmathsizes]{mathastext}"</span>
|
|
<span class="lineno"> 289 </span><span class="spaces"> </span><span class="nottickedoff">],</span>
|
|
<span class="lineno"> 290 </span><span class="spaces"> </span><span class="nottickedoff">texConfigPostScript = []</span>
|
|
<span class="lineno"> 291 </span><span class="spaces"> </span><span class="nottickedoff">}</span>
|
|
<span class="lineno"> 292 </span><span class="spaces"> </span><span class="nottickedoff">where</span>
|
|
<span class="lineno"> 293 </span><span class="spaces"> </span><span class="nottickedoff">chalkdusterFont =</span>
|
|
<span class="lineno"> 294 </span><span class="spaces"> </span><span class="nottickedoff">T.pack $</span>
|
|
<span class="lineno"> 295 </span><span class="spaces"> </span><span class="nottickedoff">zipArchive</span>
|
|
<span class="lineno"> 296 </span><span class="spaces"> </span><span class="nottickedoff">"https://www.ffonts.net/Chalkduster.font.zip"</span>
|
|
<span class="lineno"> 297 </span><span class="spaces"> </span><span class="nottickedoff">"Wplv4RjuFiI0hDQnAM5MVHl2evrZqWstRLdVAfBomCM="</span></span>
|
|
<span class="lineno"> 298 </span>
|
|
<span class="lineno"> 299 </span>-- |
|
|
<span class="lineno"> 300 </span>-- @
|
|
<span class="lineno"> 301 </span>-- `latexCfg` `calligra` "calligra"
|
|
<span class="lineno"> 302 </span>-- @
|
|
<span class="lineno"> 303 </span>--
|
|
<span class="lineno"> 304 </span>-- <<docs/gifs/doc_calligra.gif>>
|
|
<span class="lineno"> 305 </span>calligra :: TexConfig
|
|
<span class="lineno"> 306 </span><span class="decl"><span class="nottickedoff">calligra =</span>
|
|
<span class="lineno"> 307 </span><span class="spaces"> </span><span class="nottickedoff">TexConfig</span>
|
|
<span class="lineno"> 308 </span><span class="spaces"> </span><span class="nottickedoff">{ texConfigEngine = LaTeX,</span>
|
|
<span class="lineno"> 309 </span><span class="spaces"> </span><span class="nottickedoff">texConfigHeaders = ["\\usepackage{calligra}"],</span>
|
|
<span class="lineno"> 310 </span><span class="spaces"> </span><span class="nottickedoff">texConfigPostScript = ["\\calligra"]</span>
|
|
<span class="lineno"> 311 </span><span class="spaces"> </span><span class="nottickedoff">}</span></span>
|
|
<span class="lineno"> 312 </span>
|
|
<span class="lineno"> 313 </span>-- |
|
|
<span class="lineno"> 314 </span>-- @
|
|
<span class="lineno"> 315 </span>-- `latexCfg` `noto` "noto"
|
|
<span class="lineno"> 316 </span>-- @
|
|
<span class="lineno"> 317 </span>--
|
|
<span class="lineno"> 318 </span>-- <<docs/gifs/doc_noto.gif>>
|
|
<span class="lineno"> 319 </span>noto :: TexConfig
|
|
<span class="lineno"> 320 </span><span class="decl"><span class="nottickedoff">noto =</span>
|
|
<span class="lineno"> 321 </span><span class="spaces"> </span><span class="nottickedoff">TexConfig</span>
|
|
<span class="lineno"> 322 </span><span class="spaces"> </span><span class="nottickedoff">{ texConfigEngine = LaTeX,</span>
|
|
<span class="lineno"> 323 </span><span class="spaces"> </span><span class="nottickedoff">texConfigHeaders = ["\\usepackage{noto}"],</span>
|
|
<span class="lineno"> 324 </span><span class="spaces"> </span><span class="nottickedoff">texConfigPostScript = []</span>
|
|
<span class="lineno"> 325 </span><span class="spaces"> </span><span class="nottickedoff">}</span></span>
|
|
<span class="lineno"> 326 </span>
|
|
<span class="lineno"> 327 </span>-- |
|
|
<span class="lineno"> 328 </span>-- @
|
|
<span class="lineno"> 329 </span>-- `latexCfg` `helvet` "helvet"
|
|
<span class="lineno"> 330 </span>-- @
|
|
<span class="lineno"> 331 </span>--
|
|
<span class="lineno"> 332 </span>-- <<docs/gifs/doc_helvet.gif>>
|
|
<span class="lineno"> 333 </span>helvet :: TexConfig
|
|
<span class="lineno"> 334 </span><span class="decl"><span class="nottickedoff">helvet =</span>
|
|
<span class="lineno"> 335 </span><span class="spaces"> </span><span class="nottickedoff">TexConfig</span>
|
|
<span class="lineno"> 336 </span><span class="spaces"> </span><span class="nottickedoff">{ texConfigEngine = LaTeX,</span>
|
|
<span class="lineno"> 337 </span><span class="spaces"> </span><span class="nottickedoff">texConfigHeaders = ["\\usepackage{helvet}"],</span>
|
|
<span class="lineno"> 338 </span><span class="spaces"> </span><span class="nottickedoff">texConfigPostScript = []</span>
|
|
<span class="lineno"> 339 </span><span class="spaces"> </span><span class="nottickedoff">}</span></span>
|
|
<span class="lineno"> 340 </span>
|
|
<span class="lineno"> 341 </span>-- |
|
|
<span class="lineno"> 342 </span>-- @
|
|
<span class="lineno"> 343 </span>-- `latexCfg` `libertine` "libertine"
|
|
<span class="lineno"> 344 </span>-- @
|
|
<span class="lineno"> 345 </span>--
|
|
<span class="lineno"> 346 </span>-- <<docs/gifs/doc_libertine.gif>>
|
|
<span class="lineno"> 347 </span>libertine :: TexConfig
|
|
<span class="lineno"> 348 </span><span class="decl"><span class="nottickedoff">libertine =</span>
|
|
<span class="lineno"> 349 </span><span class="spaces"> </span><span class="nottickedoff">TexConfig</span>
|
|
<span class="lineno"> 350 </span><span class="spaces"> </span><span class="nottickedoff">{ texConfigEngine = LaTeX,</span>
|
|
<span class="lineno"> 351 </span><span class="spaces"> </span><span class="nottickedoff">texConfigHeaders = ["\\usepackage{libertine}"],</span>
|
|
<span class="lineno"> 352 </span><span class="spaces"> </span><span class="nottickedoff">texConfigPostScript = []</span>
|
|
<span class="lineno"> 353 </span><span class="spaces"> </span><span class="nottickedoff">}</span></span>
|
|
<span class="lineno"> 354 </span>
|
|
<span class="lineno"> 355 </span>-- |
|
|
<span class="lineno"> 356 </span>-- @
|
|
<span class="lineno"> 357 </span>-- `latexCfg` `biolinum` "biolinum"
|
|
<span class="lineno"> 358 </span>-- @
|
|
<span class="lineno"> 359 </span>--
|
|
<span class="lineno"> 360 </span>-- <<docs/gifs/doc_biolinum.gif>>
|
|
<span class="lineno"> 361 </span>biolinum :: TexConfig
|
|
<span class="lineno"> 362 </span><span class="decl"><span class="nottickedoff">biolinum =</span>
|
|
<span class="lineno"> 363 </span><span class="spaces"> </span><span class="nottickedoff">TexConfig</span>
|
|
<span class="lineno"> 364 </span><span class="spaces"> </span><span class="nottickedoff">{ texConfigEngine = LaTeX,</span>
|
|
<span class="lineno"> 365 </span><span class="spaces"> </span><span class="nottickedoff">texConfigHeaders =</span>
|
|
<span class="lineno"> 366 </span><span class="spaces"> </span><span class="nottickedoff">["\\usepackage{libertine}"</span>
|
|
<span class="lineno"> 367 </span><span class="spaces"> </span><span class="nottickedoff">,"\\renewcommand{\\familydefault}{\\sfdefault}"],</span>
|
|
<span class="lineno"> 368 </span><span class="spaces"> </span><span class="nottickedoff">texConfigPostScript = []</span>
|
|
<span class="lineno"> 369 </span><span class="spaces"> </span><span class="nottickedoff">}</span></span>
|
|
<span class="lineno"> 370 </span>
|
|
<span class="lineno"> 371 </span>-- |
|
|
<span class="lineno"> 372 </span>-- @
|
|
<span class="lineno"> 373 </span>-- `latexCfg` `droidSerif` "droidSerif"
|
|
<span class="lineno"> 374 </span>-- @
|
|
<span class="lineno"> 375 </span>--
|
|
<span class="lineno"> 376 </span>-- <<docs/gifs/doc_droidSerif.gif>>
|
|
<span class="lineno"> 377 </span>droidSerif :: TexConfig
|
|
<span class="lineno"> 378 </span><span class="decl"><span class="nottickedoff">droidSerif =</span>
|
|
<span class="lineno"> 379 </span><span class="spaces"> </span><span class="nottickedoff">TexConfig</span>
|
|
<span class="lineno"> 380 </span><span class="spaces"> </span><span class="nottickedoff">{ texConfigEngine = LaTeX,</span>
|
|
<span class="lineno"> 381 </span><span class="spaces"> </span><span class="nottickedoff">texConfigHeaders =</span>
|
|
<span class="lineno"> 382 </span><span class="spaces"> </span><span class="nottickedoff">["\\usepackage[default]{droidserif}"</span>
|
|
<span class="lineno"> 383 </span><span class="spaces"> </span><span class="nottickedoff">,"\\let\\varepsilon\\epsilon"],</span>
|
|
<span class="lineno"> 384 </span><span class="spaces"> </span><span class="nottickedoff">texConfigPostScript = []</span>
|
|
<span class="lineno"> 385 </span><span class="spaces"> </span><span class="nottickedoff">}</span></span>
|
|
<span class="lineno"> 386 </span>
|
|
<span class="lineno"> 387 </span>-- |
|
|
<span class="lineno"> 388 </span>-- @
|
|
<span class="lineno"> 389 </span>-- `latexCfg` `droidSans` "droidSans"
|
|
<span class="lineno"> 390 </span>-- @
|
|
<span class="lineno"> 391 </span>--
|
|
<span class="lineno"> 392 </span>-- <<docs/gifs/doc_droidSans.gif>>
|
|
<span class="lineno"> 393 </span>droidSans :: TexConfig
|
|
<span class="lineno"> 394 </span><span class="decl"><span class="nottickedoff">droidSans =</span>
|
|
<span class="lineno"> 395 </span><span class="spaces"> </span><span class="nottickedoff">TexConfig</span>
|
|
<span class="lineno"> 396 </span><span class="spaces"> </span><span class="nottickedoff">{ texConfigEngine = LaTeX,</span>
|
|
<span class="lineno"> 397 </span><span class="spaces"> </span><span class="nottickedoff">texConfigHeaders =</span>
|
|
<span class="lineno"> 398 </span><span class="spaces"> </span><span class="nottickedoff">["\\usepackage[default]{droidsans}"</span>
|
|
<span class="lineno"> 399 </span><span class="spaces"> </span><span class="nottickedoff">,"\\let\\varepsilon\\epsilon"],</span>
|
|
<span class="lineno"> 400 </span><span class="spaces"> </span><span class="nottickedoff">texConfigPostScript = []</span>
|
|
<span class="lineno"> 401 </span><span class="spaces"> </span><span class="nottickedoff">}</span></span>
|
|
|
|
</pre>
|
|
</body>
|
|
</html>
|