From fbce05fa6f1dcad093b11812f05e19017090f9b0 Mon Sep 17 00:00:00 2001 From: Xie Ruifeng Date: Wed, 15 Jul 2020 14:09:36 +0800 Subject: [PATCH] LaTeX: add xelatexWithHeaders (#110) * LaTeX: add xelatexWithHeaders * LaTeX: add ctex[WithHeaders], xelatex[WithHeaders] changed * Export ctex in Reanimate, update doc_xelatex to use ctex * xelatex and ctex examples * LaTeX: Remove xelatex example --- examples/{doc_xelatex.hs => doc_ctex.hs} | 2 +- src/Reanimate.hs | 1 + src/Reanimate/LaTeX.hs | 47 ++++++++++++------------ 3 files changed, 26 insertions(+), 24 deletions(-) rename examples/{doc_xelatex.hs => doc_ctex.hs} (94%) mode change 100755 => 100644 diff --git a/examples/doc_xelatex.hs b/examples/doc_ctex.hs old mode 100755 new mode 100644 similarity index 94% rename from examples/doc_xelatex.hs rename to examples/doc_ctex.hs index 7e32661..c65a260 --- a/examples/doc_xelatex.hs +++ b/examples/doc_ctex.hs @@ -9,4 +9,4 @@ import Reanimate.Builtin.Documentation main :: IO () main = reanimate $ docEnv $ animate $ const $ withStrokeWidth 0 . withFillOpacity 1 . scale 4 . center $ - xelatex "中文" + ctex "中文" diff --git a/src/Reanimate.hs b/src/Reanimate.hs index f25cd2f..bb5498f 100644 --- a/src/Reanimate.hs +++ b/src/Reanimate.hs @@ -157,6 +157,7 @@ module Reanimate latex, latexAlign, xelatex, + ctex, -- * External 3D renderers povray, povray', diff --git a/src/Reanimate/LaTeX.hs b/src/Reanimate/LaTeX.hs index 84808bb..ee83ffb 100644 --- a/src/Reanimate/LaTeX.hs +++ b/src/Reanimate/LaTeX.hs @@ -5,6 +5,9 @@ module Reanimate.LaTeX , latexWithHeaders , latexChunks , xelatex + , xelatexWithHeaders + , ctex + , ctexWithHeaders , latexAlign ) where @@ -35,23 +38,17 @@ import System.IO.Unsafe ( unsafePerformIO ) -- -- <> latex :: T.Text -> Tree -latex tex | pNoExternals = mkText tex -latex tex = - (unsafePerformIO . (cacheMem . cacheDiskSvg) (latexToSVG "dvi" exec args)) - script - where - exec = "latex" - args = [] - script = mkTexScript exec args [] tex +latex = latexWithHeaders [] latexWithHeaders :: [T.Text] -> T.Text -> Tree -latexWithHeaders _headers tex | pNoExternals = mkText tex -latexWithHeaders headers tex = - (unsafePerformIO . (cacheMem . cacheDiskSvg) (latexToSVG "dvi" exec args)) +latexWithHeaders = someTexWithHeaders "latex" "dvi" [] + +someTexWithHeaders :: String -> String -> [String] -> [T.Text] -> T.Text -> Tree +someTexWithHeaders _exec _dvi _args _headers tex | pNoExternals = mkText tex +someTexWithHeaders exec dvi args headers tex = + (unsafePerformIO . (cacheMem . cacheDiskSvg) (latexToSVG dvi exec args)) script where - exec = "latex" - args = [] script = mkTexScript exec args headers tex latexChunks :: [T.Text] -> [Tree] @@ -67,22 +64,26 @@ latexChunks chunks = worker (svgGlyphs $ latex $ T.concat chunks) -- | Invoke xelatex and import the result as an SVG object. SVG objects are -- cached to improve performance. Xelatex has support for non-western scripts. +xelatex :: Text -> Tree +xelatex = xelatexWithHeaders [] + +xelatexWithHeaders :: [T.Text] -> T.Text -> Tree +xelatexWithHeaders = someTexWithHeaders "xelatex" "xdv" ["-no-pdf"] + +-- | Invoke xelatex with "\usepackage[UTF8]{ctex}" and import the result as an +-- SVG object. SVG objects are cached to improve performance. Xelatex has +-- support for non-western scripts. -- -- Example: -- -- > xelatex "中文" -- -- <> -xelatex :: Text -> Tree -xelatex tex | pNoExternals = mkText tex -xelatex tex = - (unsafePerformIO . (cacheMem . cacheDiskSvg) (latexToSVG "xdv" exec args)) - script - where - exec = "xelatex" - args = ["-no-pdf"] - headers = ["\\usepackage[UTF8]{ctex}"] - script = mkTexScript exec args headers tex +ctex :: T.Text -> Tree +ctex = ctexWithHeaders [] + +ctexWithHeaders :: [T.Text] -> T.Text -> Tree +ctexWithHeaders headers = xelatexWithHeaders ("\\usepackage[UTF8]{ctex}" : headers) -- | Invoke latex and import the result as an SVG object. SVG objects are -- cached to improve performance. This wraps the TeX code in an 'align*'