-- | This package provides extensive control of page headers and footers. -- -- CTAN page for fancyhdr: . module Text.LaTeX.Packages.Fancyhdr ( -- * fancyhdr package fancyhdr -- * Simple interface , HdrSettings (..) , defaultHdrSettings , applyHdrSettings -- * Raw interface , fancy , lhead, chead, rhead , lfoot, cfoot, rfoot , renewheadrulewidth , renewfootrulewidth ) where import Text.LaTeX.Base.Syntax import Text.LaTeX.Base.Class import Text.LaTeX.Base.Types import Text.LaTeX.Base.Commands import Text.LaTeX.Base.Texy -- | The fancyhdr package. -- Please, consider to use 'applyHdrSettings' -- instead of importing the package manually. -- If you really want to do it manually, use -- the functions from the /raw interface/ -- exposed below. fancyhdr :: PackageName fancyhdr = "fancyhdr" -- Header and footer settings -- | Header and footer settings of a LaTeX document. -- Use 'applyHdrSettings' to apply these settings -- in your document. A default value is provided -- by 'defaultHdrSettings', which you can modify -- using record syntax. -- -- > mySettings :: HdrSettings -- > mySettings = defaultHdrSettings -- > { centerHeader = "Amazing header" -- > , headRuleWidth = Pt 2 -- > } -- data HdrSettings = HdrSettings { leftHeader :: LaTeX , centerHeader :: LaTeX , rightHeader :: LaTeX , leftFooter :: LaTeX , centerFooter :: LaTeX , rightFooter :: LaTeX , headRuleWidth :: Measure , footRuleWidth :: Measure } deriving (Eq,Show) -- | Default header and footer settings. -- -- It leaves everything empty but the -- 'centerFooter' field, which is filled -- with 'thePage'. -- -- Also, it sets to 0.4 points -- the 'headRuleWidth' field. defaultHdrSettings :: HdrSettings defaultHdrSettings = HdrSettings { leftHeader = mempty , centerHeader = mempty , rightHeader = mempty , leftFooter = mempty , centerFooter = thePage , rightFooter = mempty , headRuleWidth = Pt 0.4 , footRuleWidth = Pt 0 } -- | Apply custom header and footer settings to a -- LaTeX document. It takes care of package importing -- and page style settings, so using this function -- is enough to get the settings applied. -- Do /not/ import the 'fancyhdr' package again. -- To be used in the /preamble/. applyHdrSettings :: LaTeXC l => HdrSettings -> l applyHdrSettings hs = usepackage [] fancyhdr <> pagestyle fancy <> fromLaTeX (lhead $ leftHeader hs) <> fromLaTeX (chead $ centerHeader hs) <> fromLaTeX (rhead $ rightHeader hs) <> fromLaTeX (lfoot $ leftFooter hs) <> fromLaTeX (cfoot $ centerFooter hs) <> fromLaTeX (rfoot $ rightFooter hs) <> renewheadrulewidth (headRuleWidth hs) <> renewfootrulewidth (footRuleWidth hs) -- Raw interface -- | Page style of the 'fancyhdr' package. fancy :: PageStyle fancy = "fancy" -- | Set the left header. lhead :: LaTeXC l => l -> l lhead = comm1 "lhead" -- | Set the center header. chead :: LaTeXC l => l -> l chead = comm1 "chead" -- | Set the right header. rhead :: LaTeXC l => l -> l rhead = comm1 "rhead" -- | Set the left footer. lfoot :: LaTeXC l => l -> l lfoot = comm1 "lfoot" -- | Set the center footer. cfoot :: LaTeXC l => l -> l cfoot = comm1 "cfoot" -- | Set the right footer. rfoot :: LaTeXC l => l -> l rfoot = comm1 "rfoot" -- | Set the @headrulewidth@ attribute. renewheadrulewidth :: LaTeXC l => Measure -> l renewheadrulewidth m = fromLaTeX $ TeXComm "renewcommand" [ FixArg $ TeXCommS "headrulewidth" , FixArg $ texy m ] -- | Set the @footrulewidth@ attribute. renewfootrulewidth :: LaTeXC l => Measure -> l renewfootrulewidth m = fromLaTeX $ TeXComm "renewcommand" [ FixArg $ TeXCommS "footrulewidth" , FixArg $ texy m ]