-- | The @relsize@ package is used to set the font size relative to the
-- current size.
--
--  CTAN page for relsize: <http://ctan.org/pkg/relsize>.
module Text.LaTeX.Packages.Relsize
 ( -- * Relsize package
   prelsize
   -- * Commands
 , relsize
 , larger, smaller
 , relscale
 , textlarger, textsmaller, textscale
 ) where

import Text.LaTeX.Base.Class
import Text.LaTeX.Base.Render (rendertex)
import Text.LaTeX.Base.Syntax
import Text.LaTeX.Base.Types

-- | The 'prelsize' package.
-- Example:
--
-- > usepackage [] prelsize
prelsize :: ClassName
prelsize :: ClassName
prelsize = ClassName
"relsize"

-- Commands

-- | Change font size by 'i' steps. A step is a number of '\magsteps' to
-- change size; from this are defined commands '\larger', '\smaller',
-- '\textlarger', etc.
relsize :: LaTeXC l => Int -> l
relsize :: forall l. LaTeXC l => Int -> l
relsize Int
i = forall l. LaTeXC l => LaTeX -> l
fromLaTeX forall a b. (a -> b) -> a -> b
$ ClassName -> [TeXArg] -> LaTeX
TeXComm ClassName
"relsize" [LaTeX -> TeXArg
FixArg forall a b. (a -> b) -> a -> b
$ forall a l. (Render a, LaTeXC l) => a -> l
rendertex Int
i]

-- | Increase font size by (optional) 'i' steps (default 1).
larger :: LaTeXC l => Maybe Int -> l
larger :: forall l. LaTeXC l => Maybe Int -> l
larger Maybe Int
Nothing = forall l. LaTeXC l => ClassName -> l
comm0 ClassName
"larger"
larger (Just Int
i) = forall l. LaTeXC l => LaTeX -> l
fromLaTeX forall a b. (a -> b) -> a -> b
$ ClassName -> [TeXArg] -> LaTeX
TeXComm ClassName
"larger" [LaTeX -> TeXArg
OptArg forall a b. (a -> b) -> a -> b
$ forall a l. (Render a, LaTeXC l) => a -> l
rendertex Int
i]

-- | Reduce font size by 'i' steps (default 1).
smaller :: LaTeXC l => Maybe Int -> l
smaller :: forall l. LaTeXC l => Maybe Int -> l
smaller Maybe Int
Nothing = forall l. LaTeXC l => ClassName -> l
comm0 ClassName
"smaller"
smaller (Just Int
i) = forall l. LaTeXC l => LaTeX -> l
fromLaTeX forall a b. (a -> b) -> a -> b
$ ClassName -> [TeXArg] -> LaTeX
TeXComm ClassName
"smaller" [LaTeX -> TeXArg
OptArg forall a b. (a -> b) -> a -> b
$ forall a l. (Render a, LaTeXC l) => a -> l
rendertex Int
i]

-- | Change font size by scale factor 'f'.
relscale :: LaTeXC l => Float -> l
relscale :: forall l. LaTeXC l => Float -> l
relscale Float
f = forall l. LaTeXC l => LaTeX -> l
fromLaTeX forall a b. (a -> b) -> a -> b
$ ClassName -> [TeXArg] -> LaTeX
TeXComm ClassName
"relscale" [LaTeX -> TeXArg
FixArg forall a b. (a -> b) -> a -> b
$ forall a l. (Render a, LaTeXC l) => a -> l
rendertex Float
f]

-- | Text size enlarged by (optional) 'i' steps.
textlarger :: LaTeXC l => Maybe Int -> l -> l
textlarger :: forall l. LaTeXC l => Maybe Int -> l -> l
textlarger Maybe Int
Nothing = forall l. LaTeXC l => ClassName -> l -> l
comm1 ClassName
"textlarger"
textlarger (Just Int
i) = forall l. LaTeXC l => (LaTeX -> LaTeX) -> l -> l
liftL forall a b. (a -> b) -> a -> b
$ \LaTeX
l -> ClassName -> [TeXArg] -> LaTeX
TeXComm ClassName
"textlarger" [LaTeX -> TeXArg
OptArg forall a b. (a -> b) -> a -> b
$ forall a l. (Render a, LaTeXC l) => a -> l
rendertex Int
i, LaTeX -> TeXArg
FixArg LaTeX
l]

-- | Text size reduced by (optional) 'i' steps.
textsmaller :: LaTeXC l => Maybe Int -> l -> l
textsmaller :: forall l. LaTeXC l => Maybe Int -> l -> l
textsmaller Maybe Int
Nothing = forall l. LaTeXC l => ClassName -> l -> l
comm1 ClassName
"textsmaller"
textsmaller (Just Int
i) = forall l. LaTeXC l => (LaTeX -> LaTeX) -> l -> l
liftL forall a b. (a -> b) -> a -> b
$ \LaTeX
l -> ClassName -> [TeXArg] -> LaTeX
TeXComm ClassName
"textsmaller" [LaTeX -> TeXArg
OptArg forall a b. (a -> b) -> a -> b
$ forall a l. (Render a, LaTeXC l) => a -> l
rendertex Int
i, LaTeX -> TeXArg
FixArg LaTeX
l]

-- | Text size scaled by factor 'f'.
textscale :: LaTeXC l => Float -> l -> l
textscale :: forall l. LaTeXC l => Float -> l -> l
textscale Float
f = forall l. LaTeXC l => (LaTeX -> LaTeX) -> l -> l
liftL forall a b. (a -> b) -> a -> b
$ \LaTeX
l -> ClassName -> [TeXArg] -> LaTeX
TeXComm ClassName
"textscale" [LaTeX -> TeXArg
FixArg forall a b. (a -> b) -> a -> b
$ forall a l. (Render a, LaTeXC l) => a -> l
rendertex Float
f, LaTeX -> TeXArg
FixArg LaTeX
l]