HaTeX-3.10.0.0: Text/LaTeX/Packages/Geometry.hs
{-# LANGUAGE OverloadedStrings #-}
-- | The geometry package provides an easy interface to page dimensions.
--
-- CTAN page for geometry: <http://www.ctan.org/pkg/geometry>.
module Text.LaTeX.Packages.Geometry (
-- * Geometry package
geometry
, importGeometry
-- * Geometry options
, GeometryOption (..)
, applyGeometry
) where
import Text.LaTeX
import Text.LaTeX.Base.Syntax
import Text.LaTeX.Base.Class
-- | Geometry package. Use it to import it like this:
--
-- > usepackage [] geometry
--
-- In most cases, it is recommended to use 'importGeometry' instead.
geometry :: PackageName
geometry = "geometry"
-- | Options of the geometry package.
data GeometryOption =
GHeight Measure
| GWidth Measure
| GPaper PaperType
| GCentered
| GPaperHeight Measure
| GPaperWidth Measure
| GLandscape Bool
deriving Show
renderOption :: Render a => Text -> a -> Text
renderOption t x = t <> "=" <> render x
instance Render GeometryOption where
render (GHeight m) = renderOption "height" m
render (GWidth m) = renderOption "width" m
render (GPaper p) = render (Paper p)
render GCentered = "centered"
render (GPaperHeight m) = renderOption "paperheight" m
render (GPaperWidth m) = renderOption "paperwidth" m
render (GLandscape b) = renderOption "landscape" b
-- | Apply the given geometry options to the document.
applyGeometry :: LaTeXC l => [GeometryOption] -> l
applyGeometry opts = fromLaTeX $ TeXComm "geometry" [FixArg $ raw $ renderCommas opts]
-- | Import the geometry package with additional options.
importGeometry :: LaTeXC l => [GeometryOption] -> l
importGeometry opts = usepackage (fmap rendertex opts) geometry