module Text.LaTeX ( -- * How to use HaTeX -- ** Introduction -- $guide1 -- ** LaTeX file structure -- $guide2 -- ** A simple example -- $guide3 -- ** Enriching your text -- $guide4 -- ** Performing IO actions -- $guide5 -- * HaTeX related functions hatex , hatexVersion -- * Exporting to /.tex/ , export -- * Re-exports , module Text.LaTeX.Result , module Text.LaTeX.Monad , module Text.LaTeX.Define , module Text.LaTeX.Arguments , module Text.LaTeX.Packages , module Text.LaTeX.Commands , module Text.LaTeX.IO , module Text.LaTeX.Macro ) where import Text.LaTeX.Monad import Text.LaTeX.Commands import Text.LaTeX.Arguments import Text.LaTeX.Define import Text.LaTeX.Packages import Text.LaTeX.IO import Text.LaTeX.Result import Text.LaTeX.Macro -- import System.FilePath (takeExtension) -- | HaTeX nice word. hatex :: LaTeX hatex = makebox [] [] $ do "H" raisebox (ex (-0.55)) [] [] $ makebox [0.5 >> width] [] "A" tex -- | Your HaTeX version. hatexVersion :: LaTeX hatexVersion = do textbf "1" ; ".0.0" -- | Export the 'Result' of a 'LaTeX' sequence in a /.tex/ file. export :: LaTeX -- ^ 'LaTeX' to export. -> FilePath -- ^ Path of export. -> IO () export x fp = do y <- nlx x let z = fromResult y if takeExtension fp == ".tex" then writeFile fp z else writeFile (fp ++ ".tex") z ----------------------------------------------------------------------------------------------------------- -- Introduction {- $guide1 If you know how to use LaTeX, you will easily understand how to use HaTeX. Otherwise, you will need to read well the documentation. A first step may be to know the LaTeX file structure. -} -- LaTeX file structure {- $guide2 A LaTeX file has two parts: - A header where you define general settings (document class, page style, use of extern packages, ...) of your document. - The document's content. -} -- A simple example {- $guide3 We're going to write an example, the best for understanding. * Function 'documentclass' is used for determining if our document is an 'article', a 'book', a 'report', etc. * Function 'author' is used for specify document's authory. * Function 'title' for document's title. Then, with this three functions, we will define a header in the 'LaTeX' monad. 'LaTeX' is a writer monad that concatenates the text generated by the programmer. Usually, the text is generated simply writing it, or by functions. > example = do documentclass [] article > author "Daniel Diaz" > title "Example" The first argument of 'documentclass' is used for change certain settings of the class. For example, you can set the document's main font size to 12pt, writing: > documentclass [pt 12] article Or set paper size to A4: > documentclass [pt 12,a4paper] article Now, I will write a content: > hello = "Hello, world!" To insert the content into the document, we have the function 'document'. Completing our first example: > example = do documentclass [] article > author "Daniel Diaz" > title "Example" > document hello At first glance, it seems that 'author', 'title' or 'document' receive a @String@ as argument. Really, they require a 'LaTeX' argument. 'LaTeX' is the type that represents texts in HaTeX. So, I recommend to use /Overloaded Strings/ (See ). -} -- Enriching your text {- $guide4 There are numerous functions to enrich your document. One feature is change your font format with the functions shown here: "Text.LaTeX.Commands#Fonts". For example, in: > texttt "Hello!" 'texttt' sets as monospaced font his content. Or composing: > texttt $ textbf "Hello!" 'textbf' sets as bold font the monospaced font of @\"Hello!\"@. If you only want @\"ll\"@ with bold format: > texttt $ do "He" > textbf "ll" > "o!" Applying the function to only part of the text, we achieve modify just that part. -} {- $guide5 To includes an 'IO' computation in 'LaTeX' monad, use 'iolx'. > gtime = do t <- iolx getClockTime > ... Some 'IO' computations are predefined in "Text.LaTeX.IO". -}