module Text.LaTeX.Define ( -- * Defining Commands comm0_ , comm0 , comm1 , comm2 , comm3 , comm4 , comm5 , comm6 , comm7 , comm8 , comm9 , comm10 , comm11 , comm12 -- * Defining Environments , env , env2 , env3 ) where import Control.Monad.Writer import Data.List (intersperse) import Data.String.Combinators (braces,comma,brackets) import Text.LaTeX.Monad import Text.LaTeX.Result listOpts :: [LaTeX] -> LaTeX listOpts [] = "" listOpts xs = brackets . sequence_ . intersperse comma $ xs -- comm0_ :: LaTeX -> LaTeX comm0_ = mappend "\\" comm0 :: LaTeX -> LaTeX comm0 n = do comm0_ n braces "" comm1 :: LaTeX -> LaTeX -> LaTeX comm1 n x = do comm0_ n braces x comm2 :: LaTeX -> LaTeX -> [LaTeX] -> LaTeX comm2 n x opts = do comm1 n x listOpts opts comm3 :: LaTeX -> [LaTeX] -> LaTeX comm3 n opts = do comm0_ n listOpts opts comm4 :: LaTeX -> [LaTeX] -> LaTeX -> LaTeX comm4 n opts x = do comm3 n opts braces x comm5 :: LaTeX -> LaTeX -> LaTeX -> LaTeX comm5 n x y = do comm1 n x braces y comm6 :: LaTeX -> LaTeX -> [LaTeX] -> LaTeX -> LaTeX comm6 n x opts y = do comm2 n x opts braces y comm7 :: LaTeX -> LaTeX -> [LaTeX] -> LaTeX -> LaTeX -> LaTeX comm7 n x opts y z = do comm6 n x opts y braces z comm8 :: LaTeX -> LaTeX -> LaTeX comm8 n x = braces $ do comm0 n x comm9 :: LaTeX -> [LaTeX] -> LaTeX -> LaTeX -> LaTeX comm9 n opts x y = do comm4 n opts x braces y comm10 :: LaTeX -> [LaTeX] -> [LaTeX] -> LaTeX -> LaTeX comm10 n opts1 opts2 x = do comm3 n opts1 listOpts opts2 braces x comm11 :: LaTeX -> LaTeX -> [LaTeX] -> [LaTeX] -> LaTeX -> LaTeX comm11 n x opts1 opts2 y = do comm2 n x opts1 listOpts opts2 braces y comm12 :: LaTeX -> LaTeX -> LaTeX -> LaTeX -> LaTeX comm12 n x y z = do comm5 n x y braces z env :: LaTeX -> LaTeX -> LaTeX env t x = do comm1 "begin" t x comm1 "end" t env2 :: LaTeX -> [LaTeX] -> LaTeX -> LaTeX env2 t opts x = do comm2 "begin" t opts x comm1 "end" t env3 :: LaTeX -> [LaTeX] -> LaTeX -> LaTeX -> LaTeX env3 t opts x y = do comm6 "begin" t opts x y comm1 "end" t