lambdatex-0.1.0.0: src/Text/LaTeX/LambdaTeX/Reference.hs
{-# LANGUAGE OverloadedStrings #-}
module Text.LaTeX.LambdaTeX.Reference where
import Text.LaTeX.Base.Class
import Text.LaTeX.Base.Syntax
import qualified Text.LaTeX.Base.Commands as H (label, pageref,
ref)
import Text.LaTeX.LambdaTeX.Reference.Internal
import Text.LaTeX.LambdaTeX.Reference.Types
import Text.LaTeX.LambdaTeX.Types
-- * Internal references
-- An internal references point is defined by a label
-- It is then referenced with @ref label@
--
-- ΛTeX automatically ensures that those references are always internally consistent
-- BUT you have to make sure that you use these functions instead of the regular ones.
-- ** Labels
-- | Label a part
label :: Monad m => Text -> ΛTeXT m ()
label l = do
fromLaTeX $ H.label $ TeXRaw l
addLabelMade l
-- | The safe version of LaTeX's @ref@
ref :: Monad m => Text -> ΛTeXT m ()
ref l = do
fromLaTeX $ H.ref $ TeXRaw l
addLabelNeeded l
-- | The safe version of LaTeX's @pageref@
pageref :: Monad m => Text -> ΛTeXT m ()
pageref l = do
fromLaTeX $ H.pageref $ TeXRaw l
addLabelNeeded l
-- * External references
-- ** Defining references
-- TODO(kerckhove) Check for duplicate fields?
-- | Define an external reference.
-- Use 'cite' or 'nocite' to use this in your document.
makeReference :: ReferenceType -> Text -> [(Text, Text)] -> Reference
makeReference = Reference
-- ** Using references
-- | Refer to an external reference.
cite :: Monad m => Reference -> ΛTeXT m ()
cite ref = do
fromLaTeX $ comm1 "cite" $ TeXRaw $ referenceName ref
addReference ref
-- | Put an external reference in your list of references without using it.
nocite :: Monad m => Reference -> ΛTeXT m ()
nocite ref = do
fromLaTeX $ comm1 "nocite" $ TeXRaw $ referenceName ref
addReference ref
-- ** Reference Types
--
-- See [The Wiki article on which fields each of them requires](https://en.wikibooks.org/wiki/LaTeX/Bibliography_Management)
--
-- TODO(kerckhove) Generate these!
unpublished :: ReferenceType
unpublished = "unpublished"
lectureSlides :: ReferenceType
lectureSlides = "unpublished"
online :: ReferenceType
online = "online"
article :: ReferenceType
article = "article"