{-# LANGUAGE OverloadedStrings #-}
module Text.LaTeX.Packages.AMSThm
(
amsthm
, newtheorem
, theorem
, proof
, qed
, qedhere
, TheoremStyle (..)
, theoremstyle
) where
import Text.LaTeX.Base.Syntax
import Text.LaTeX.Base.Class
import Text.LaTeX.Base.Render
import Text.LaTeX.Base.Types
amsthm :: PackageName
amsthm :: PackageName
amsthm = PackageName
"amsthm"
newtheorem :: LaTeXC l => String -> l -> l
newtheorem :: forall l. LaTeXC l => PackageName -> l -> l
newtheorem PackageName
str = (LaTeX -> LaTeX) -> l -> l
forall l. LaTeXC l => (LaTeX -> LaTeX) -> l -> l
liftL ((LaTeX -> LaTeX) -> l -> l) -> (LaTeX -> LaTeX) -> l -> l
forall a b. (a -> b) -> a -> b
$ \LaTeX
l -> PackageName -> [TeXArg] -> LaTeX
TeXComm PackageName
"newtheorem" [ LaTeX -> TeXArg
FixArg (LaTeX -> TeXArg) -> LaTeX -> TeXArg
forall a b. (a -> b) -> a -> b
$ PackageName -> LaTeX
forall a. IsString a => PackageName -> a
fromString PackageName
str , LaTeX -> TeXArg
FixArg LaTeX
l ]
theorem :: LaTeXC l => String -> l -> l
theorem :: forall l. LaTeXC l => PackageName -> l -> l
theorem PackageName
str = (LaTeX -> LaTeX) -> l -> l
forall l. LaTeXC l => (LaTeX -> LaTeX) -> l -> l
liftL ((LaTeX -> LaTeX) -> l -> l) -> (LaTeX -> LaTeX) -> l -> l
forall a b. (a -> b) -> a -> b
$ PackageName -> [TeXArg] -> LaTeX -> LaTeX
TeXEnv PackageName
str []
proof :: LaTeXC l => Maybe l -> l -> l
proof :: forall l. LaTeXC l => Maybe l -> l -> l
proof Maybe l
Nothing = (LaTeX -> LaTeX) -> l -> l
forall l. LaTeXC l => (LaTeX -> LaTeX) -> l -> l
liftL ((LaTeX -> LaTeX) -> l -> l) -> (LaTeX -> LaTeX) -> l -> l
forall a b. (a -> b) -> a -> b
$ PackageName -> [TeXArg] -> LaTeX -> LaTeX
TeXEnv PackageName
"proof" []
proof (Just l
n) = (LaTeX -> LaTeX -> LaTeX) -> l -> l -> l
forall l. LaTeXC l => (LaTeX -> LaTeX -> LaTeX) -> l -> l -> l
liftL2 (\LaTeX
m -> PackageName -> [TeXArg] -> LaTeX -> LaTeX
TeXEnv PackageName
"proof" [LaTeX -> TeXArg
OptArg LaTeX
m]) l
n
qed :: LaTeXC l => l
qed :: forall l. LaTeXC l => l
qed = PackageName -> l
forall l. LaTeXC l => PackageName -> l
comm0 PackageName
"qed"
qedhere :: LaTeXC l => l
qedhere :: forall l. LaTeXC l => l
qedhere = PackageName -> l
forall l. LaTeXC l => PackageName -> l
comm0 PackageName
"qedhere"
data TheoremStyle =
Plain
| Definition
|
| CustomThmStyle String
deriving Int -> TheoremStyle -> ShowS
[TheoremStyle] -> ShowS
TheoremStyle -> PackageName
(Int -> TheoremStyle -> ShowS)
-> (TheoremStyle -> PackageName)
-> ([TheoremStyle] -> ShowS)
-> Show TheoremStyle
forall a.
(Int -> a -> ShowS)
-> (a -> PackageName) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TheoremStyle -> ShowS
showsPrec :: Int -> TheoremStyle -> ShowS
$cshow :: TheoremStyle -> PackageName
show :: TheoremStyle -> PackageName
$cshowList :: [TheoremStyle] -> ShowS
showList :: [TheoremStyle] -> ShowS
Show
instance Render TheoremStyle where
render :: TheoremStyle -> Text
render TheoremStyle
Plain = Text
"plain"
render TheoremStyle
Definition = Text
"definition"
render TheoremStyle
Remark = Text
"remark"
render (CustomThmStyle PackageName
str) = PackageName -> Text
forall a. IsString a => PackageName -> a
fromString PackageName
str
theoremstyle :: LaTeXC l => TheoremStyle -> l
theoremstyle :: forall l. LaTeXC l => TheoremStyle -> l
theoremstyle TheoremStyle
thmsty = LaTeX -> l
forall l. LaTeXC l => LaTeX -> l
fromLaTeX (LaTeX -> l) -> LaTeX -> l
forall a b. (a -> b) -> a -> b
$ PackageName -> [TeXArg] -> LaTeX
TeXComm PackageName
"theoremstyle" [ LaTeX -> TeXArg
FixArg (LaTeX -> TeXArg) -> LaTeX -> TeXArg
forall a b. (a -> b) -> a -> b
$ Text -> LaTeX
TeXRaw (Text -> LaTeX) -> Text -> LaTeX
forall a b. (a -> b) -> a -> b
$ TheoremStyle -> Text
forall a. Render a => a -> Text
render TheoremStyle
thmsty ]