diff --git a/HaTeX.cabal b/HaTeX.cabal
--- a/HaTeX.cabal
+++ b/HaTeX.cabal
@@ -1,5 +1,5 @@
 Name: HaTeX
-Version: 3.19.0.0
+Version: 3.20.0.0
 Author: Daniel Díaz
 Category: LaTeX
 Build-type: Simple
@@ -63,7 +63,7 @@
                , bytestring >= 0.9.2.1 && < 0.11
                , text >= 0.11.2.3 && < 2
                , transformers >= 0.2.2 && < 0.6
-               , containers >= 0.4.2.1 && < 0.6
+               , containers >= 0.4.2.1 && < 0.7
                , hashable >= 1.2 && < 1.3
                , matrix
                  -- Testing
@@ -82,6 +82,7 @@
       Text.LaTeX.Base
         Text.LaTeX.Base.Class
         Text.LaTeX.Base.Commands
+        Text.LaTeX.Base.Math
         Text.LaTeX.Base.Parser
         Text.LaTeX.Base.Pretty
         Text.LaTeX.Base.Render
diff --git a/Text/LaTeX/Base/Class.hs b/Text/LaTeX/Base/Class.hs
--- a/Text/LaTeX/Base/Class.hs
+++ b/Text/LaTeX/Base/Class.hs
@@ -27,6 +27,7 @@
  , commS
  , braces
  , squareBraces
+ , raw
  ) where
 
 import Text.LaTeX.Base.Syntax
@@ -34,6 +35,7 @@
 #if !MIN_VERSION_base(4,8,0)
 import Data.Monoid
 #endif
+import Data.Text (Text)
 
 -- | This is the class of 'LaTeX' code generators. It has 'Monoid' and 'IsString' as
 --   superclasses.
@@ -114,3 +116,13 @@
 
 squareBraces :: LaTeXC l => l -> l
 squareBraces = liftL $ \l -> TeXRaw "[" <> l <> TeXRaw "]" 
+
+-- | Insert a raw piece of 'Text'.
+-- This functions doesn't escape @LaTeX@ reserved characters,
+-- it insert the text just as it is received.
+--
+-- /Warning:/ This function is /unsafe/, in the sense that it does
+-- not check that the input text is a valid LaTeX /block/.
+-- Make sure any braces, commands or environments are properly closed.
+raw :: LaTeXC l => Text -> l
+raw = fromLaTeX . TeXRaw
diff --git a/Text/LaTeX/Base/Commands.hs b/Text/LaTeX/Base/Commands.hs
--- a/Text/LaTeX/Base/Commands.hs
+++ b/Text/LaTeX/Base/Commands.hs
@@ -117,6 +117,7 @@
  , vspace
  , vspace_
  , addvspace
+ , quad, qquad
  , hfill
  , vfill
  , dotfill
@@ -218,6 +219,8 @@
  , hyphenation
  , hyp
  , qts
+   -- * Maths commands
+ , module Text.LaTeX.Base.Math
    -- * External files
  , input
  , include
@@ -232,29 +235,13 @@
 import Text.LaTeX.Base.Render
 import Text.LaTeX.Base.Types
 import Text.LaTeX.Base.Texy
+import Text.LaTeX.Base.Math
 import Data.Version
 import Data.List (find, intercalate,intersperse)
 import Data.Matrix (Matrix,nrows,ncols,(!))
 --
 import Paths_HaTeX
 
--- | Insert a raw piece of 'Text'.
--- This functions doesn't escape @LaTeX@ reserved characters,
--- it insert the text just as it is received.
---
--- /Warning:/ This function is /unsafe/, in the sense that it does
--- not check that the input text is a valid LaTeX /block/.
--- Make sure any braces, commands or environments are properly closed.
-raw :: LaTeXC l => Text -> l
-raw = fromLaTeX . TeXRaw
-
--- | Calling 'between' @c l1 l2@ puts @c@ between @l1@ and @l2@ and
---   appends them.
---
--- > between c l1 l2 = l1 <> c <> l2
-between :: Monoid m => m -> m -> m -> m
-between c l1 l2 = l1 <> c <> l2
-
 -- | Create a comment.
 comment :: LaTeXC l => Text -> l
 comment = fromLaTeX . TeXComment
@@ -784,6 +771,15 @@
 
 hspace_ :: LaTeXC l => Measure -> l
 hspace_ m = fromLaTeX $ TeXComm "hspace*" [FixArg $ rendertex m]
+
+-- | Space equal to the current font size (= 18 mu). \(a\quad b\)
+quad :: LaTeXC l => l
+quad = comm0 "quad"
+
+-- | Twice of @\quad@ (= 36 mu).  \(a\qquad b\)
+qquad :: LaTeXC l => l
+qquad = comm0 "qquad"
+
 
 stretch :: LaTeXC l => Double -> l
 stretch n = fromLaTeX $ TeXComm "stretch" [FixArg $ rendertex n]
diff --git a/Text/LaTeX/Base/Math.hs b/Text/LaTeX/Base/Math.hs
new file mode 100644
--- /dev/null
+++ b/Text/LaTeX/Base/Math.hs
@@ -0,0 +1,1069 @@
+
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE CPP               #-}
+
+-- | This module contains the maths-specific part of "Text.LaTeX.Base.Commands",
+--  i.e. of the commands that are available in LaTeX out of the box without
+--  any imports.
+-- 
+-- Note however that most maths-related documents use the
+--  <https://ctan.org/pkg/amsmath?lang=en amsmath package>, which not only adds
+--  some more environments but also improves on rendering details such as symbol
+--  spacing.
+--  So even if you only need the vanilla-LaTeX commands that this module provides, 
+--  consider importing "Text.LaTeX.Packages.AMSMath" instead; it re-exports the
+--  entire "Text.LaTeX.Base.Math" module.
+module Text.LaTeX.Base.Math
+ ( -- * Math Environments
+   math, mathDisplay
+ , equation , equation_
+   -- ** Referencing
+ , nonumber
+   -- * Symbols and utilities
+   -- | The unicode approximations do, of course, not reliably represent how
+   --   LaTeX renders these symbols.
+   
+   -- ** Brackets / delimiters
+ , autoParens
+ , autoSquareBrackets, autoBraces, autoAngleBrackets
+ , autoBrackets
+ 
+ , langle , rangle
+ , lfloor , rfloor
+ , lceil , rceil 
+ , dblPipe
+   -- ** Superscript and subscript
+ , (^:) , (!:), (!^)
+   -- ** Function symbols
+   -- | Some symbols are preceded with /t/ to be distinguished from
+   --   predefined Haskell entities (like 'sin' and 'cos').
+ , tsin , arcsin
+ , tcos , arccos
+ , ttan , arctan
+ , cot , arccot
+ , tsinh , tcosh , ttanh , coth
+ , sec , csc
+ , texp
+ , tlog , ln
+ , tsqrt
+   -- ** Custom function symbols
+ , operatorname
+   -- ** Summation \/ integration \/ differentiation \/ relations
+ , tsum , sumFromTo
+ , prod , prodFromTo
+ , coprod, coprodFromTo
+ , integral , integralFromTo
+ , partial, totald, partialOf, totaldOf
+ , bigcup, bigcupFromTo
+ , bigcap, bigcapFromTo 
+   -- ** Operator symbols
+   -- *** Arithmetic
+ , (+-), (-+)
+ , cdot , times , div_
+ , frac
+ , (*:) , star
+ , circ , bullet
+   -- *** Comparison
+ , (=:) , (/=:)
+ , (<:) , (<=:)
+ , (>:) , (>=:)
+ , ll , gg
+ , equiv
+ , propto
+ , parallel
+ , perp
+   -- *** Sets
+ , in_ , ni , notin
+ , subset , supset
+ , cap , cup
+ , setminus
+   -- *** Misc operators
+ , vee , wedge
+ , oplus , ominus , otimes
+ , oslash , odot
+   -- *** Accents
+ , hat, tilde, bar, vec, widehat, widetilde
+ , dot
+ , overline
+ 
+   -- ** Greek alphabet
+   -- | Functions of greek alphabet symbols.
+   --
+   --   Uppercase versions are suffixed with @u@.
+   --   Variants are prefixed with @var@.
+   --   The function 'pi_' is ended by an underscore symbol to
+   --   distinguish it from the 'pi' Prelude function.
+ , alpha    , beta       , gamma
+ , gammau   , delta      , deltau
+ , epsilon  , varepsilon , zeta
+ , eta      , theta      , vartheta , thetau
+ , iota     , kappa      , lambda
+ , lambdau  , mu         , nu
+ , xi       , xiu        , pi_
+ , varpi    , piu        , rho
+ , varrho   , sigma      , varsigma
+ , sigmau   , tau        , upsilon
+ , upsilonu , phi        , varphi
+ , phiu     , chi        , psi
+ , psiu     , omega      , omegau
+   -- ** Arrows
+ , uparrow, downarrow
+ , uparrow2, downarrow2
+ , updownarrow, updownarrow2
+ , leftarrow, rightarrow
+ , leftrightarrow, leftrightarrow2
+ , leftarrow2, rightarrow2
+ , longleftarrow, longrightarrow
+ , longleftarrow2, longrightarrow2
+ , longleftrightarrow, longleftrightarrow2
+ , nwarrow, nearrow
+ , swarrow, searrow
+ , to, mapsto, longmapsto
+ , hookleftarrow, hookrightarrow
+ , leftharpoonup, rightharpoonup
+ , leftharpoondown, rightharpoondown
+   -- ** Other symbols
+ , pm , mp
+ , implies
+ , forall , exists
+ , dagger, ddagger
+ , infty
+ , imath, jmath
+ , bot
+   -- * Fonts
+ , mathdefault
+ , mathbf
+ , mathrm
+ , mathcal
+ , mathsf
+ , mathtt
+ , mathit
+ ) where
+
+import Text.LaTeX.Base.Syntax
+import Text.LaTeX.Base.Class
+import Text.LaTeX.Base.Writer
+import Text.LaTeX.Base.Render
+
+
+-- | Inline mathematical expressions.
+math :: LaTeXC l => l -> l
+math = liftL $ TeXMath Dollar
+
+-- | Displayed mathematical expressions, i.e. in a seperate line / block.
+mathDisplay :: LaTeXC l => l -> l
+mathDisplay = liftL $ TeXMath Square
+
+-------------------------------------------------------
+------- Numeric instances for LaTeX and LaTeXT --------
+-------------------------------------------------------
+
+----------- LaTeX instances
+
+-- | The 'signum' method uses a custom 'operatorname' and will not be automatically translated by babel.
+--   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
+instance Num LaTeX where
+ (+) = between "+"
+ (-) = between "-"
+ (*) = (<>)
+ negate = (TeXEmpty -)
+ fromInteger = rendertex
+ abs = autoBrackets "|" "|"
+ signum = (operatorname "sgn" <>)
+
+-- | Division uses the LaTeX 'frac' command.
+--   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
+instance Fractional LaTeX where
+ (/) = frac
+ fromRational = rendertex . (fromRational :: Rational -> Double)
+
+-- | The 'asinh', 'atanh' and 'acosh' methods use custom 'operatorname's and will not be automatically translated by babel.
+--   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
+instance Floating LaTeX where
+ pi = pi_
+ exp = (texp <>)
+ sqrt = tsqrt Nothing
+ log = (tlog <>)
+ (**) = (^:)
+ logBase b x = (commS "log" !: b) <> x
+ sin = (tsin <>)
+ tan = (ttan <>)
+ cos = (tcos <>)
+ asin = (arcsin <>)
+ atan = (arctan <>)
+ acos = (arccos <>)
+ sinh = (tsinh <>)
+ tanh = (ttanh <>)
+ cosh = (tcosh <>)
+ asinh = (operatorname "arsinh" <>)
+ atanh = (operatorname "artanh" <>)
+ acosh = (operatorname "arcosh" <>)
+
+----------- LaTeXT instances
+
+#if !MIN_VERSION_base(4,5,0)
+
+-- | Warning: this instance only exists for the 'Num' instance.
+--   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
+instance Eq (LaTeXT m a) where
+ _ == _ = error "Cannot use \"(==)\" Eq method with a LaTeXT value."
+
+-- | Warning: this instance only exists for the 'Num' instance.
+--   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
+instance Show (LaTeXT m a) where
+ show _ = error "Cannot use \"show\" Show method with a LaTeXT value."
+
+#endif
+
+-- | Careful! Method 'signum' is undefined. Don't use it!
+--   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
+instance (Monad m, a ~ ()) => Num (LaTeXT m a) where
+ (+) = liftOp (+)
+ (-) = liftOp (-)
+ (*) = (>>)
+ negate = liftFun negate
+ fromInteger = fromLaTeX . fromInteger
+ abs = liftFun abs
+ signum = liftFun signum
+
+-- | Division uses the LaTeX 'frac' command.
+--   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
+instance (Monad m, a ~ ()) => Fractional (LaTeXT m a) where
+ (/) = liftOp (/)
+ fromRational = fromLaTeX . fromRational
+
+-- | Undefined methods: 'asinh', 'atanh' and 'acosh'.
+--   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
+instance (Monad m, a ~ ()) => Floating (LaTeXT m a) where
+ pi = pi_
+ exp = liftFun exp
+ sqrt = liftFun sqrt
+ log = liftFun log
+ (**) = liftOp (**)
+ logBase = liftOp logBase
+ sin = liftFun sin
+ tan = liftFun tan
+ cos = liftFun cos
+ asin = liftFun asin
+ atan = liftFun atan
+ acos = liftFun acos
+ sinh = liftFun sinh
+ tanh = liftFun tanh
+ cosh = liftFun cosh
+ asinh = liftFun asinh
+ atanh = liftFun atanh
+ acosh = liftFun acosh
+
+-- | Prevent an equation from being numbered, where the environment would by default do that.
+nonumber :: LaTeXC l => l
+nonumber = comm0 "nonumber"
+
+-- | A numbered mathematical equation (or otherwise math expression).
+equation :: LaTeXC l => l -> l
+equation = liftL $ TeXEnv "equation" []
+
+-- | The unnumbered variant of 'equation'.
+equation_ :: LaTeXC l => l -> l
+equation_ = liftL $ TeXEnv "equation*" []
+
+-------------------------------------
+------- Symbols and utilities -------
+
+-- | Surround a LaTeX math expression by parentheses whose height
+-- automatically matches the expression's. Translates to @\\left(...\\right)@.
+autoParens :: LaTeXC l => l -> l
+autoParens x = commS "left(" <> x <> commS "right)"
+
+-- | Like 'autoParens', but with square brackets. Equivalent to @'autoBrackets'\"[\"\"]\"@.
+autoSquareBrackets :: LaTeXC l => l -> l
+autoSquareBrackets x = commS "left[" <> x <> commS "right]"
+
+-- | Like 'autoParens', but with curly brackets.
+autoBraces :: LaTeXC l => l -> l
+autoBraces x = commS "left"<>"{" <> x <> commS "right"<>"}"
+
+-- | Like 'autoParens', but with angle brackets \(\langle\) ... \(\rangle\). Equivalent to @'autoBrackets' 'langle' 'rangle'@.
+autoAngleBrackets :: LaTeXC l => l -> l
+autoAngleBrackets x = commS "left"<>langle <> x <> commS "right"<>rangle
+
+-- | Use custom LaTeX expressions as auto-scaled delimiters to surround math.
+-- Suitable delimiters include \(|\ldots|\) (absolute value), \(\|\ldots\|\) (norm,
+-- 'dblPipe'), \(\lfloor\ldots\rfloor\) (round-off Gauss brackets, 'lfloor' / 'rfloor') etc..
+autoBrackets :: LaTeXC l => LaTeX -> LaTeX -> l -> l
+autoBrackets lBrack rBrack x
+  = commS "left" <> fromLaTeX lBrack <> x <> commS "right" <> fromLaTeX rBrack
+
+-- | Left angle bracket, \(\langle\).
+langle :: LaTeXC l => l
+langle = comm0 "langle"
+
+-- | Right angle bracket, \(\rangle\).
+rangle :: LaTeXC l => l
+rangle = comm0 "rangle"
+
+-- | Left floor, \(\lfloor\).
+lfloor :: LaTeXC l => l
+lfloor = comm0 "lfloor"
+
+-- | Right floor, \(\rfloor\).
+rfloor :: LaTeXC l => l
+rfloor = comm0 "rfloor"
+
+-- | Left ceiling, \(\lceil\).
+lceil :: LaTeXC l => l
+lceil = comm0 "lceil"
+
+-- | Right ceiling, \(\rceil\).
+rceil :: LaTeXC l => l
+rceil = comm0 "rceil"
+
+-- | Double vertical line, used as delimiter for norms \(\| \ldots \|\).
+dblPipe :: LaTeXC l => l
+dblPipe = comm0 "|"
+
+-- | Superscript.
+(^:) :: LaTeXC l => l -> l -> l
+x ^: y = braces x <> raw "^"  <> braces y
+
+-- | Subscript.
+(!:) :: LaTeXC l => l -> l -> l
+x !: y = braces x <> raw "_" <> braces y
+
+-- | Sub- and superscript, both stacked.
+(!^) :: LaTeXC l => l -> (l,l) -> l
+x !^ (y,z) = braces x <> raw "_" <> braces y <> raw "^" <> braces z
+
+---- Function symbols
+
+-- | Sine function symbol.
+tsin :: LaTeXC l => l
+tsin = comm0 "sin"
+
+-- | Arcsine function symbol.
+arcsin :: LaTeXC l => l
+arcsin = comm0 "arcsin"
+
+-- | Cosine function symbol.
+tcos :: LaTeXC l => l
+tcos = comm0 "cos"
+
+-- | Arccosine function symbol.
+arccos :: LaTeXC l => l
+arccos = comm0 "arccos"
+
+-- | Tangent function symbol.
+ttan :: LaTeXC l => l
+ttan = comm0 "tan"
+
+-- | Arctangent function symbol.
+arctan :: LaTeXC l => l
+arctan = comm0 "arctan"
+
+-- | Cotangent function symbol.
+cot :: LaTeXC l => l
+cot = comm0 "cot"
+
+-- | Arccotangent function symbol.
+arccot :: LaTeXC l => l
+arccot = comm0 "arccot"
+
+-- | Hyperbolic sine function symbol.
+tsinh :: LaTeXC l => l
+tsinh = comm0 "sinh"
+
+-- | Hyperbolic cosine function symbol.
+tcosh :: LaTeXC l => l
+tcosh = comm0 "cosh"
+
+-- | Hyperbolic tangent function symbol.
+ttanh :: LaTeXC l => l
+ttanh = comm0 "tanh"
+
+-- | Hyperbolic cotangent function symbol.
+coth :: LaTeXC l => l
+coth = comm0 "coth"
+
+-- | Secant function symbol.
+sec :: LaTeXC l => l
+sec = comm0 "sec"
+
+-- | Cosecant function symbol.
+csc :: LaTeXC l => l
+csc = comm0 "csc"
+
+-- | Exponential function symbol.
+texp :: LaTeXC l => l
+texp = comm0 "exp"
+
+-- | Logarithm function symbol.
+tlog :: LaTeXC l => l
+tlog = comm0 "log"
+
+-- | Natural logarithm symbol.
+ln :: LaTeXC l => l
+ln = comm0 "ln"
+
+-- | Root notation. Use @tsqrt (Just n) x@ for the @n@th root of @x@.
+--   When 'Nothing' is supplied, the function will output a square root.
+tsqrt :: LaTeXC l => Maybe l -> l -> l
+tsqrt Nothing  = liftL $ \x -> TeXComm "sqrt" [FixArg x]
+tsqrt (Just n) = liftL2 (\m x -> TeXComm "sqrt" [OptArg m, FixArg x]) n
+
+---- Custom Function Symbols
+-- | Defines a new function symbol.
+-- Note that function symbols defined in this way will not be automatically translated by babel.
+operatorname :: LaTeXC l => l -> l
+operatorname = comm1 "operatorname"
+
+---- Sum/Integral symbols
+
+-- | Sigma sumation symbol \(\sum\). Use 'sumFromTo' instead if you want to
+--   specify the limits of the sum.
+tsum :: LaTeXC l => l
+tsum = comm0 "sum"
+
+-- | Sigma sumation symbol with limits, like \[\sum_0^n\].
+sumFromTo :: LaTeXC l
+          => l -- ^ Expression below the sigma.
+          -> l -- ^ Expression above the sigma.
+          -> l
+sumFromTo x y = commS "sum" <> raw"_" <> braces x <> raw"^" <> braces y
+
+-- | Pi product symbol \(\prod\). Use 'prodFromTo' if you want to specify the
+--   limits of the product.
+prod :: LaTeXC l => l
+prod = comm0 "prod"
+
+-- | Pi product symbol with limits, like \[\prod_0^n\].
+prodFromTo :: LaTeXC l
+           => l -- ^ Expression below the pi.
+           -> l -- ^ Expression above the pi.
+           -> l
+prodFromTo x y = commS "prod" <> raw"_" <> braces x <> raw"^" <> braces y
+
+-- | Coproduct symbol \(\coprod\). Use 'coprodFromTo' if you want to specify the
+--   limits of the coproduct.
+coprod :: LaTeXC l => l
+coprod = comm0 "coprod"
+
+-- | Coproduct symbol with limits, like \[\coprod_0^n\].
+coprodFromTo :: LaTeXC l
+           => l -- ^ Expression below.
+           -> l -- ^ Expression above.
+           -> l
+coprodFromTo x y = commS "coprod" <> raw"_" <> braces x <> raw"^" <> braces y
+
+-- | Big union symbol \(\bigcup\). Use 'bigcupFromTo' if you want to specify the
+--   limits of the union.
+bigcup :: LaTeXC l => l
+bigcup = comm0 "bigcup"
+
+-- | Big union symbol with limits, like \[\bigcup_0^n\].
+bigcupFromTo :: LaTeXC l
+           => l -- ^ Expression below.
+           -> l -- ^ Expression above.
+           -> l
+bigcupFromTo x y = commS "bigcup" <> raw"_" <> braces x <> raw"^" <> braces y
+
+-- | Big intersection symbol \(\bigcap\). Use 'bigcapFromTo' if you want to specify the
+--   limits of the intersection.
+bigcap :: LaTeXC l => l
+bigcap = comm0 "bigcap"
+
+-- | Big intersection symbol with limits, like \[\bigcap_0^n\].
+bigcapFromTo :: LaTeXC l
+           => l -- ^ Expression below.
+           -> l -- ^ Expression above.
+           -> l
+bigcapFromTo x y = commS "bigcap" <> raw"_" <> braces x <> raw"^" <> braces y
+
+
+-- | Integral symbol. Use 'integralFromTo' if you want to specify
+--   the limits of the integral.
+integral :: LaTeXC l => l
+integral = comm0 "int"
+
+-- | Integral symbol with limits of integration. \(\int\limits_{-1}^1\)
+integralFromTo :: LaTeXC l
+               => l -- ^ Lower limit of integration.
+               -> l -- ^ Upper limit of integration.
+               -> l
+integralFromTo x y = commS "int" <> commS "limits" <> raw"_" <> braces x <> raw"^" <> braces y
+
+-- | Partial-differentiation symbol \(\partial\)
+partial :: LaTeXC l => l
+partial = comm0 "partial"
+
+-- | Total-differentiation (or integration-variable) symbol d (non-italic!)
+--   To be used as @frac (totald) (totald<>"x")@ → \(\frac{\mathrm{d}}{\mathrm{d}x}\).
+totald :: LaTeXC l => l
+totald = mathrm "d"
+
+-- | Partial-differentiation of variable, e.g.
+--   @frac (partialOf h) (partialOf t)@ → \(\frac{\partial h}{\partial t}\).
+partialOf :: LaTeXC l => l -> l
+partialOf v = comm0 "partial" <> v
+
+-- | Total-differentiation of variable, or integration over variable.
+--   To be used as
+-- 
+-- @
+-- integralFromTo 0 infty $ totaldOf "x" <> "f(x)"
+-- @
+-- 
+--   \[\int\limits_0^\infty\mathrm{d}x f(x),\] or
+--   @frac (totaldOf"f") (totaldOf"x")@ → \(\frac{\mathrm{d}f}{\mathrm{d}x}\).
+totaldOf :: LaTeXC l => l -> l
+totaldOf v = mathrm "d" <> v
+
+---- Operator symbols
+
+-- | Negative form of an operator.
+notop :: LaTeXC l =>
+         (l -> l -> l)
+      ->  l -> l -> l
+notop op =
+ \l1 l2 ->
+   (l1 <> commS "not") `op` l2
+
+infixl 6 +-, -+
+
+-- | Plus-or-minus operator \(\pm\). Also available as symbol 'pm'.
+(+-) :: LaTeXC l => l -> l -> l
+(+-)  = between $ comm0 "pm"
+
+-- | Minus-or-plus operator \(\mp\). Also available as symbol 'mp'.
+(-+) :: LaTeXC l => l -> l -> l
+(-+)  = between $ comm0 "mp"
+
+-- | Centered-dot operator \(\cdot\).
+cdot :: LaTeXC l => l -> l -> l
+cdot  = between $ comm0 "cdot"
+
+-- | \"x-cross\" multiplication operator \(\times\).
+times :: LaTeXC l => l -> l -> l
+times = between $ comm0 "times"
+
+-- | Division operator \(\div\).
+div_ :: LaTeXC l => l -> l -> l
+div_  = between $ comm0 "div"
+
+-- | Fraction operator, like @frac 1 2@ → \(\frac12\).
+frac :: LaTeXC l => l -> l -> l
+frac = liftL2 $ \p q -> TeXComm "frac" [FixArg p, FixArg q]
+
+infixl 7 *:
+
+-- | Asterisk operator \(\ast\).
+--
+-- > infixl 7 *:
+(*:) :: LaTeXC l => l -> l -> l
+(*:) = between $ comm0 "ast"
+
+-- | Star operator \(\star\).
+star :: LaTeXC l => l -> l -> l
+star  = between $ comm0 "star"
+
+-- | Ring operator \(\circ\).
+circ :: LaTeXC l => l -> l -> l
+circ  = between $ comm0 "circ"
+
+-- | Bullet operator \(\bullet\).
+bullet :: LaTeXC l => l -> l -> l
+bullet  = between $ comm0 "bullet"
+
+infixr 4 =: , /=:
+
+-- | Simple equals sign \(=\).
+--
+-- > infixr 4 =:
+(=:) :: LaTeXC l => l -> l -> l
+(=:)  = between "="
+
+-- | Not equal \(\neq\).
+--
+-- > infixr 4 /=:
+(/=:) :: LaTeXC l => l -> l -> l
+(/=:) = notop (=:)
+
+-- | Greater \(>\).
+(>:) :: LaTeXC l => l -> l -> l
+(>:) = between ">"
+
+-- | Greater or equal \(\geq\).
+(>=:) :: LaTeXC l => l -> l -> l
+(>=:) = between $ comm0 "geq"
+
+-- | Lesser \(<\).
+(<:) :: LaTeXC l => l -> l -> l
+(<:) = between "<"
+
+-- | Lesser or equal \(\leq\).
+(<=:) :: LaTeXC l => l -> l -> l
+(<=:) = between $ comm0 "leq"
+
+-- | Much less \(\ll\).
+ll :: LaTeXC l => l -> l -> l
+ll = between $ comm0 "ll"
+
+-- | Much greater \(\gg\).
+gg :: LaTeXC l => l -> l -> l
+gg = between $ comm0 "gg"
+
+-- | Proportional-to \(\propto\).
+propto :: LaTeXC l => l -> l -> l
+propto  = between $ comm0 "propto"
+
+-- | Perpendicular \(\perp\). This is the infix version of 'bot'.
+perp :: LaTeXC l => l -> l -> l
+perp = between $ comm0 "perp"
+
+-- | Parallel \(\parallel\).
+parallel :: LaTeXC l => l -> l -> l
+parallel = between $ comm0 "parallel"
+
+-- | Identical \/ defined-as \/ equivalent \(\equiv\).
+equiv :: LaTeXC l => l -> l -> l
+equiv  = between $ comm0 "equiv"
+
+-- | Element-of \(\in\).
+in_ :: LaTeXC l => l -> l -> l
+in_ = between $ comm0 "in"
+
+-- | Mirrored element-of \(\ni\).
+ni :: LaTeXC l => l -> l -> l
+ni  = between $ comm0 "ni"
+
+-- | Not element of \(\notin\).
+notin :: LaTeXC l => l -> l -> l
+notin = between $ comm0 "notin"
+
+-- | Subset-of \(\subset\).
+subset :: LaTeXC l => l -> l -> l
+subset  = between $ comm0 "subset"
+
+-- | Superset-of \(supset\).
+supset :: LaTeXC l => l -> l -> l
+supset  = between $ comm0 "supset"
+
+-- | Set intersection \(\cap\).
+cap :: LaTeXC l => l -> l -> l
+cap  = between $ comm0 "cap"
+
+-- | Set union \(\cup\).
+cup :: LaTeXC l => l -> l -> l
+cup  = between $ comm0 "cup"
+
+-- | Set minus \(\setminus\).
+setminus :: LaTeXC l => l -> l -> l
+setminus  = between $ comm0 "setminus"
+
+-- | Angle pointing downwards \(\vee\).
+vee :: LaTeXC l => l -> l -> l
+vee  = between $ comm0 "vee"
+
+-- | Angle pointing upwards \(\wedge\).
+wedge :: LaTeXC l => l -> l -> l
+wedge  = between $ comm0 "wedge"
+
+-- | Circled plus operator \(\oplus\).
+oplus :: LaTeXC l => l -> l -> l
+oplus  = between $ comm0 "oplus"
+
+-- | Circled minus operator \(\ominus\).
+ominus :: LaTeXC l => l -> l -> l
+ominus  = between $ comm0 "ominus"
+
+-- | Circled multiplication cross \(\otimes\).
+otimes :: LaTeXC l => l -> l -> l
+otimes  = between $ comm0 "otimes"
+
+-- | Circled slash \(\oslash\).
+oslash :: LaTeXC l => l -> l -> l
+oslash  = between $ comm0 "oslash"
+
+-- | Circled dot operator \(\odot\).
+odot :: LaTeXC l => l -> l -> l
+odot  = between $ comm0 "odot"
+
+--- Accemts
+{-
+ , hat, tilde, bar, vec, widehat, widetilde
+ , dot, ddot, dddot
+ , overline, underline
+ -}
+
+-- | Add a hat accent above a symbol, like \(\hat{x}\).
+hat :: LaTeXC l => l -> l
+hat = comm1 "hat"
+
+-- | Add a tilde accent above a symbol, like \(\tilde{y}\).
+tilde :: LaTeXC l => l -> l
+tilde = comm1 "tilde"
+
+-- | Add a bar accent above a symbol, like \(\bar{z}\).
+bar :: LaTeXC l => l -> l
+bar = comm1 "bar"
+
+-- | Add a vector arrow accent above a symbol, like \(\vec{v}\).
+vec :: LaTeXC l => l -> l
+vec = comm1 "vec"
+
+-- | Add a wide hat accent above a symbol, like \(\widehat{w}\).
+widehat :: LaTeXC l => l -> l
+widehat = comm1 "widehat"
+
+-- | Add a wide tilde accent above a symbol, like \(\widetilde{u}\).
+widetilde :: LaTeXC l => l -> l
+widetilde = comm1 "widetilde"
+
+-- | Add a dot accent above a symbol, as used to denote a derivative,
+--   like \(\dot{x}\).
+dot :: LaTeXC l => l -> l
+dot = comm1 "dot"
+
+-- | Add a wide line accent above a symbol, like \(\overline{abc}\).
+overline :: LaTeXC l => l -> l
+overline = comm1 "overline"
+
+---- Greek alphabet
+
+-- | \(\alpha\) symbol.
+alpha :: LaTeXC l => l
+alpha = comm0 "alpha"
+
+-- | \(\beta\) symbol.
+beta :: LaTeXC l => l
+beta = comm0 "beta"
+
+-- | \(\gamma\) symbol.
+gamma :: LaTeXC l => l
+gamma = comm0 "gamma"
+
+-- | \(\Gamma\) symbol.
+gammau :: LaTeXC l => l
+gammau = comm0 "Gamma"
+
+-- | \(\delta\) symbol.
+delta :: LaTeXC l => l
+delta = comm0 "delta"
+
+-- | \(\Delta\) symbol.
+deltau :: LaTeXC l => l
+deltau = comm0 "Delta"
+
+-- | \(\epsilon\) symbol.
+epsilon :: LaTeXC l => l
+epsilon = comm0 "epsilon"
+
+-- | \(\varepsilon\) symbol.
+varepsilon :: LaTeXC l => l
+varepsilon = comm0 "varepsilon"
+
+-- | \(\zeta\) symbol.
+zeta :: LaTeXC l => l
+zeta = comm0 "zeta"
+
+-- | \(\eta\) symbol.
+eta :: LaTeXC l => l
+eta = comm0 "eta"
+
+-- | \(\theta\) symbol.
+theta :: LaTeXC l => l
+theta = comm0 "theta"
+
+-- | \(\vartheta\) symbol.
+vartheta :: LaTeXC l => l
+vartheta = comm0 "vartheta"
+
+-- | \(\Theta\) symbol.
+thetau :: LaTeXC l => l
+thetau = comm0 "Theta"
+
+-- | \(\iota\) symbol.
+iota :: LaTeXC l => l
+iota = comm0 "iota"
+
+-- | \(\kappa\) symbol.
+kappa :: LaTeXC l => l
+kappa = comm0 "kappa"
+
+-- | \(\lambda\) symbol.
+lambda :: LaTeXC l => l
+lambda = comm0 "lambda"
+
+-- | \(\Lambda\) symbol.
+lambdau :: LaTeXC l => l
+lambdau = comm0 "Lambda"
+
+-- | \(\mu\) symbol.
+mu :: LaTeXC l => l
+mu = comm0 "mu"
+
+-- | \(\nu\) symbol.
+nu :: LaTeXC l => l
+nu = comm0 "nu"
+
+-- | \(\xi\) symbol.
+xi :: LaTeXC l => l
+xi = comm0 "xi"
+
+-- | \(\Xi\) symbol.
+xiu :: LaTeXC l => l
+xiu = comm0 "Xi"
+
+-- | \(\pi\) symbol.
+pi_ :: LaTeXC l => l
+pi_ = comm0 "pi"
+
+-- | \(\varpi\) symbol.
+varpi :: LaTeXC l => l
+varpi = comm0 "varpi"
+
+-- | \(\Pi\) symbol.
+piu :: LaTeXC l => l
+piu = comm0 "Pi"
+
+-- | \(\rho\) symbol.
+rho :: LaTeXC l => l
+rho = comm0 "rho"
+
+-- | \(\varrho\) symbol.
+varrho :: LaTeXC l => l
+varrho = comm0 "varrho"
+
+-- | \(\sigma\) symbol.
+sigma :: LaTeXC l => l
+sigma = comm0 "sigma"
+
+-- | \(\varsigma\) symbol.
+varsigma :: LaTeXC l => l
+varsigma = comm0 "varsigma"
+
+-- | \(\Sigma\) symbol.
+sigmau :: LaTeXC l => l
+sigmau = comm0 "Sigma"
+
+-- | \(\tau\) symbol.
+tau :: LaTeXC l => l
+tau = comm0 "tau"
+
+-- | \(\upsilon\) symbol.
+upsilon :: LaTeXC l => l
+upsilon = comm0 "upsilon"
+
+-- | \(\Upsilon\) symbol.
+upsilonu :: LaTeXC l => l
+upsilonu = comm0 "Upsilon"
+
+-- | \(\phi\) symbol.
+phi :: LaTeXC l => l
+phi = comm0 "phi"
+
+-- | \(\varphi\) symbol.
+varphi :: LaTeXC l => l
+varphi = comm0 "varphi"
+
+-- | \(\Phi\) symbol.
+phiu :: LaTeXC l => l
+phiu = comm0 "Phi"
+
+-- | \(\chi\) symbol.
+chi :: LaTeXC l => l
+chi = comm0 "chi"
+
+-- | \(\psi\) symbol.
+psi :: LaTeXC l => l
+psi = comm0 "psi"
+
+-- | \(\Psi\) symbol.
+psiu :: LaTeXC l => l
+psiu = comm0 "Psi"
+
+-- | \(\omega\) symbol.
+omega :: LaTeXC l => l
+omega = comm0 "omega"
+
+-- | \(\Omega\) symbol.
+omegau :: LaTeXC l => l
+omegau = comm0 "Omega"
+
+---- Other symbols
+
+-- | Plus-or-minus symbol \(\pm\). Also available as infix '+-'.
+pm :: LaTeXC l => l
+pm  = comm0 "pm"
+
+-- | Minus-or-plus symbol \(\mp\).
+mp :: LaTeXC l => l
+mp  = comm0 "mp"
+
+-- | A right-arrow, \(\to\).
+to :: LaTeXC l => l
+to = comm0 "to"
+
+-- | A right-arrow for function definitions, \(\mapsto\).
+mapsto :: LaTeXC l => l
+mapsto = comm0 "mapsto"
+
+-- | An implication arrow, \(\implies\).
+implies :: LaTeXC l => l
+implies = comm0 "implies"
+
+-- | /For all/ symbol, \(\forall\).
+forall :: LaTeXC l => l
+forall = comm0 "forall"
+
+-- | /Exists/ symbol, \(\exists\).
+exists :: LaTeXC l => l
+exists = comm0 "exists"
+
+-- | Dagger symbol, \(\dagger\).
+dagger :: LaTeXC l => l
+dagger = comm0 "dagger"
+
+-- | Double dagger symbol, \(\ddagger\).
+ddagger :: LaTeXC l => l
+ddagger = comm0 "ddagger"
+
+-- | Infinity symbol, \(\infty\).
+infty :: LaTeXC l => l
+infty = comm0 "infty"
+
+-- | Dotless letter i, \(\imath\).
+imath :: LaTeXC l => l
+imath = comm0 "imath"
+
+-- | Dotless letter j, \(\jmath\).
+jmath :: LaTeXC l => l
+jmath = comm0 "jmath"
+
+-- | Bottom symbol, \(\bot\). For the infix version see 'perp'.
+bot :: LaTeXC l => l
+bot = comm0 "bot"
+
+
+
+------------------------------------
+------------- Arrows ---------------
+-- | \(\uparrow\) symbol
+uparrow :: LaTeXC l => l
+uparrow = comm0 "uparrow"
+-- | \(\downarrow\) symbol
+downarrow :: LaTeXC l => l
+downarrow = comm0 "downarrow"
+-- | \(\Uparrow\) symbol
+uparrow2 :: LaTeXC l => l
+uparrow2 = comm0 "Uparrow"
+-- | \(\Downarrow\) symbol
+downarrow2 :: LaTeXC l => l
+downarrow2 = comm0 "Downarrow"
+-- | \(\updownarrow\) symbol
+updownarrow :: LaTeXC l => l
+updownarrow = comm0 "updownarrow"
+-- | \(\Updownarrow\) symbol
+updownarrow2 :: LaTeXC l => l
+updownarrow2 = comm0 "Updownarrow"
+-- | \(\leftarrow\) symbol
+leftarrow :: LaTeXC l => l
+leftarrow = comm0 "leftarrow"
+-- | \(\rightarrow\) symbol
+rightarrow :: LaTeXC l => l
+rightarrow = comm0 "rightarrow"
+-- | \(\leftrightarrow\) symbol
+leftrightarrow :: LaTeXC l => l
+leftrightarrow = comm0 "leftrightarrow"
+-- | \(\Leftrightarrow\) symbol
+leftrightarrow2 :: LaTeXC l => l
+leftrightarrow2 = comm0 "Leftrightarrow"
+-- | \(\Leftarrow\) symbol
+leftarrow2 :: LaTeXC l => l
+leftarrow2 = comm0 "Leftarrow"
+-- | \(\Rightarrow\) symbol
+rightarrow2 :: LaTeXC l => l
+rightarrow2 = comm0 "Rightarrow"
+-- | \(\longleftarrow\) symbol
+longleftarrow :: LaTeXC l => l
+longleftarrow = comm0 "longleftarrow"
+-- | \(\longrightarrow\) symbol
+longrightarrow :: LaTeXC l => l
+longrightarrow = comm0 "longrightarrow"
+-- | \(\Longleftarrow\) symbol
+longleftarrow2 :: LaTeXC l => l
+longleftarrow2 = comm0 "Longleftarrow"
+-- | \(\Longrightarrow\) symbol
+longrightarrow2 :: LaTeXC l => l
+longrightarrow2 = comm0 "Longrightarrow"
+-- | \(\longleftrightarrow\) symbol
+longleftrightarrow :: LaTeXC l => l
+longleftrightarrow = comm0 "longleftrightarrow"
+-- | \(\Longleftrightarrow\) symbol
+longleftrightarrow2 :: LaTeXC l => l
+longleftrightarrow2 = comm0 "Longleftrightarrow"
+-- | \(\nwarrow\) symbol
+nwarrow :: LaTeXC l => l
+nwarrow = comm0 "nwarrow"
+-- | \(\nearrow\) symbol
+nearrow :: LaTeXC l => l
+nearrow = comm0 "nearrow"
+-- | \(\swarrow\) symbol
+swarrow :: LaTeXC l => l
+swarrow = comm0 "swarrow"
+-- | \(\searrow\) symbol
+searrow :: LaTeXC l => l
+searrow = comm0 "searrow"
+-- | \(\longmapsto\) symbol
+longmapsto :: LaTeXC l => l
+longmapsto = comm0 "longmapsto"
+-- | \(\hookleftarrow\) symbol
+hookleftarrow :: LaTeXC l => l
+hookleftarrow = comm0 "hookleftarrow"
+-- | \(\hookrightarrow\) symbol
+hookrightarrow :: LaTeXC l => l
+hookrightarrow = comm0 "hookrightarrow"
+-- | \(\leftharpoonup\) symbol
+leftharpoonup :: LaTeXC l => l
+leftharpoonup = comm0 "leftharpoonup"
+-- | \(\rightharpoonup\) symbol
+rightharpoonup :: LaTeXC l => l
+rightharpoonup = comm0 "rightharpoonup"
+-- | \(\leftharpoondown\) symbol
+leftharpoondown :: LaTeXC l => l
+leftharpoondown = comm0 "leftharpoondown"
+-- | \(\rightharpoondown\) symbol
+rightharpoondown :: LaTeXC l => l
+rightharpoondown = comm0 "rightharpoondown"
+
+-------------------------------------
+------------ Math Fonts -------------
+
+-- | Default math symbol font.
+mathdefault :: LaTeXC l => l -> l
+mathdefault = comm1 "mathdefault"
+
+-- | Bold face, like \(\mathbf{Abc}\).
+mathbf :: LaTeXC l => l -> l
+mathbf = comm1 "mathbf"
+
+-- | Roman, i.e. not-italic math, \(\mathrm{deF}\)
+mathrm :: LaTeXC l => l -> l
+mathrm = comm1 "mathrm"
+
+-- | Calligraphic math symbols. Only works (reliably) with uppercase letters, like \(\mathcal{LMN}\).
+mathcal :: LaTeXC l => l -> l
+mathcal = comm1 "mathcal"
+
+-- | Sans-serif math, \(\mathsf{xyz}\).
+mathsf :: LaTeXC l => l -> l
+mathsf = comm1 "mathsf"
+
+-- | Typewriter font, \(\mathtt{ijk}\).
+mathtt :: LaTeXC l => l -> l
+mathtt = comm1 "mathtt"
+
+-- | Italic math. Uses the same glyphs as 'mathdefault', but with spacings
+--   intended for multi-character symbols rather than juxtaposition of single-character symbols.
+mathit :: LaTeXC l => l -> l
+mathit = comm1 "mathit"
+
+
diff --git a/Text/LaTeX/Base/Parser.hs b/Text/LaTeX/Base/Parser.hs
--- a/Text/LaTeX/Base/Parser.hs
+++ b/Text/LaTeX/Base/Parser.hs
@@ -246,6 +246,9 @@
     '\\' -> lbreak
     _    -> commS [x]
 
+isSpecial :: Char -> Bool
+isSpecial = (`elem` specials)
+
 ------------------------------------------------------------------------
 -- Line break
 ------------------------------------------------------------------------
@@ -331,15 +334,11 @@
 -- Helpers
 ------------------------------------------------------------------------
 
-isSpecial :: Char -> Bool
-isSpecial = (`elem` specials)
-
 endCmd :: Char -> Bool
 endCmd c = notLowercaseAlph && notUppercaseAlph
  where c' = fromEnum c
        notLowercaseAlph = c' < fromEnum 'a' || c' > fromEnum 'z'
        notUppercaseAlph = c' < fromEnum 'A' || c' > fromEnum 'Z'
-
 
 specials :: String
 specials = "'(),.-\"!^$&#{}%~|/:;=[]\\` "
diff --git a/Text/LaTeX/Base/Syntax.hs b/Text/LaTeX/Base/Syntax.hs
--- a/Text/LaTeX/Base/Syntax.hs
+++ b/Text/LaTeX/Base/Syntax.hs
@@ -10,7 +10,7 @@
  , MathType (..)
  , LaTeX (..)
  , TeXArg (..)
- , (<>)
+ , (<>), between
    -- * Escaping reserved characters
  , protectString
  , protectText
@@ -117,6 +117,13 @@
 
 instance Semigroup.Semigroup LaTeX where
   (<>) = mappend
+
+-- | Calling 'between' @c l1 l2@ puts @c@ between @l1@ and @l2@ and
+--   appends them.
+--
+-- > between c l1 l2 = l1 <> c <> l2
+between :: Monoid m => m -> m -> m -> m
+between c l1 l2 = l1 <> c <> l2
 
 -- | Method 'fromString' escapes LaTeX reserved characters using 'protectString'.
 instance IsString LaTeX where
diff --git a/Text/LaTeX/Packages/AMSFonts.hs b/Text/LaTeX/Packages/AMSFonts.hs
--- a/Text/LaTeX/Packages/AMSFonts.hs
+++ b/Text/LaTeX/Packages/AMSFonts.hs
@@ -6,7 +6,7 @@
    -- * Fonts
  , mathbb, mathfrak
    -- * Number sets
- , naturals, integers, rationals, reals
+ , naturals, integers, rationals, reals, quaternions
    -- ** Complex numbers
  , complexes, trealPart, timagPart
    ) where
@@ -25,7 +25,7 @@
 --
 
 -- | This font is useful for representing sets like
---   R (real numbers) or Z (integers). For instance:
+--   \(\mathbb{R}\) (real numbers) or \(\mathbb{Z}\) (integers). For instance:
 --
 -- > "The set of real numbers are represented by " <> mathbb "R" <> "."
 --
@@ -37,29 +37,38 @@
 mathbb :: LaTeXC l => l -> l
 mathbb = comm1 "mathbb"
 
--- | Fraktur font.
+-- | Fraktur font, like \(\mathfrak{abcXYZ}\).
 mathfrak :: LaTeXC l => l -> l
 mathfrak = comm1 "mathfrak"
 
--- | Number sets
-
+-- | \(\mathbb{N}\)
 naturals :: LaTeXC l => l
 naturals = mathbb "N"
 
+-- | \(\mathbb{Z}\)
 integers :: LaTeXC l => l
 integers = mathbb "Z"
 
+-- | \(\mathbb{Q}\)
 rationals :: LaTeXC l => l
 rationals = mathbb "Q"
 
+-- | \(\mathbb{R}\)
 reals :: LaTeXC l => l
 reals = mathbb "R"
 
+-- | \(\mathbb{C}\)
 complexes :: LaTeXC l => l
 complexes = mathbb "C"
 
+-- | \(\mathbb{H}\)
+quaternions :: LaTeXC l => l
+quaternions = mathbb "H"
+
+-- | \(\Re\)
 trealPart :: LaTeXC l => l -> l
 trealPart z = comm0 "Re" <> z
 
+-- | \(\Im\)
 timagPart :: LaTeXC l => l -> l
 timagPart z = comm0 "Im" <> z
diff --git a/Text/LaTeX/Packages/AMSMath.hs b/Text/LaTeX/Packages/AMSMath.hs
--- a/Text/LaTeX/Packages/AMSMath.hs
+++ b/Text/LaTeX/Packages/AMSMath.hs
@@ -6,7 +6,13 @@
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 #endif
 
--- | \AMSMath\ support. Also numeric instances ('Num', 'Fractional' and 'Floating') for 'LaTeX' and 'LaTeXT'.
+-- | <https://ctan.org/pkg/amsmath?lang=en amsmath> is a de-facto standard
+--  package for maths in LaTeX. It is used in most scientific documents
+--  and also available by default in MathJax.
+-- 
+-- Note that many of the maths commands this module exports are actually defined
+--  in LaTeX itself, and do not really require the @amsmath@ package.
+--  See the "Text.LaTeX.Base.Math" module for this minimal command-set.
 module Text.LaTeX.Packages.AMSMath
  ( -- * AMSMath package
    amsmath
@@ -46,11 +52,14 @@
  , tsqrt
    -- ** Custom function symbols
  , operatorname
-   -- ** Summation \/ integration \/ differentiation
+   -- ** Summation \/ integration \/ differentiation \/ relations
  , tsum , sumFromTo
  , prod , prodFromTo
+ , coprod, coprodFromTo
  , integral , integralFromTo
  , partial, totald, partialOf, totaldOf
+ , bigcup, bigcupFromTo
+ , bigcap, bigcapFromTo 
    -- ** Operator symbols
    -- *** Arithmetic
  , (+-), (-+)
@@ -143,131 +152,12 @@
 amsmath :: PackageName
 amsmath = "amsmath"
 
--- | Inline mathematical expressions.
-math :: LaTeXC l => l -> l
-math = liftL $ TeXMath Dollar
 
--- | Displayed mathematical expressions, i.e. in a seperate line / block.
-mathDisplay :: LaTeXC l => l -> l
-mathDisplay = liftL $ TeXMath Square
-
--------------------------------------------------------
-------- Numeric instances for LaTeX and LaTeXT --------
--------------------------------------------------------
-
------------ LaTeX instances
-
--- | The 'signum' method uses a custom 'operatorname' and will not be automatically translated by babel.
---   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
-instance Num LaTeX where
- (+) = between "+"
- (-) = between "-"
- (*) = (<>)
- negate = (TeXEmpty -)
- fromInteger = rendertex
- abs = autoBrackets "|" "|"
- signum = (operatorname "sgn" <>)
-
--- | Division uses the LaTeX 'frac' command.
---   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
-instance Fractional LaTeX where
- (/) = frac
- fromRational = rendertex . (fromRational :: Rational -> Double)
-
--- | The 'asinh', 'atanh' and 'acosh' methods use custom 'operatorname's and will not be automatically translated by babel.
---   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
-instance Floating LaTeX where
- pi = pi_
- exp = (texp <>)
- sqrt = tsqrt Nothing
- log = (tlog <>)
- (**) = (^:)
- logBase b x = (commS "log" !: b) <> x
- sin = (tsin <>)
- tan = (ttan <>)
- cos = (tcos <>)
- asin = (arcsin <>)
- atan = (arctan <>)
- acos = (arccos <>)
- sinh = (tsinh <>)
- tanh = (ttanh <>)
- cosh = (tcosh <>)
- asinh = (operatorname "arsinh" <>)
- atanh = (operatorname "artanh" <>)
- acosh = (operatorname "arcosh" <>)
-
------------ LaTeXT instances
-
-#if !MIN_VERSION_base(4,5,0)
-
--- | Warning: this instance only exists for the 'Num' instance.
---   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
-instance Eq (LaTeXT m a) where
- _ == _ = error "Cannot use \"(==)\" Eq method with a LaTeXT value."
-
--- | Warning: this instance only exists for the 'Num' instance.
---   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
-instance Show (LaTeXT m a) where
- show _ = error "Cannot use \"show\" Show method with a LaTeXT value."
-
-#endif
-
--- | Careful! Method 'signum' is undefined. Don't use it!
---   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
-instance (Monad m, a ~ ()) => Num (LaTeXT m a) where
- (+) = liftOp (+)
- (-) = liftOp (-)
- (*) = (>>)
- negate = liftFun negate
- fromInteger = fromLaTeX . fromInteger
- abs = liftFun abs
- signum = liftFun signum
-
--- | Division uses the LaTeX 'frac' command.
---   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
-instance (Monad m, a ~ ()) => Fractional (LaTeXT m a) where
- (/) = liftOp (/)
- fromRational = fromLaTeX . fromRational
-
--- | Undefined methods: 'asinh', 'atanh' and 'acosh'.
---   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
-instance (Monad m, a ~ ()) => Floating (LaTeXT m a) where
- pi = pi_
- exp = liftFun exp
- sqrt = liftFun sqrt
- log = liftFun log
- (**) = liftOp (**)
- logBase = liftOp logBase
- sin = liftFun sin
- tan = liftFun tan
- cos = liftFun cos
- asin = liftFun asin
- atan = liftFun atan
- acos = liftFun acos
- sinh = liftFun sinh
- tanh = liftFun tanh
- cosh = liftFun cosh
- asinh = liftFun asinh
- atanh = liftFun atanh
- acosh = liftFun acosh
-
 -- | A reference to a numbered equation. Use with a 'label' defined in the
 -- scope of the equation refered to.
 eqref :: LaTeXC l => l -> l
 eqref = liftL $ \l -> TeXComm "eqref" [FixArg . TeXRaw $ render l]
 
--- | Prevent an equation from being numbered, where the environment would by default do that.
-nonumber :: LaTeXC l => l
-nonumber = comm0 "nonumber"
-
--- | A numbered mathematical equation (or otherwise math expression).
-equation :: LaTeXC l => l -> l
-equation = liftL $ TeXEnv "equation" []
-
--- | The unnumbered variant of 'equation'.
-equation_ :: LaTeXC l => l -> l
-equation_ = liftL $ TeXEnv "equation*" []
-
 -- | An array of aligned equations. Use '&' to specify the points that should
 -- horizontally match. Each equation is numbered, unless prevented by 'nonumber'.
 align :: LaTeXC l => [l] -> l
@@ -284,681 +174,31 @@
 -------------------------------------
 ------- Symbols and utilities -------
 
--- | Surround a LaTeX math expression by parentheses whose height
--- automatically matches the expression's. Translates to @\\left(...\\right)@.
-autoParens :: LaTeXC l => l -> l
-autoParens x = commS "left(" <> x <> commS "right)"
 
--- | Like 'autoParens', but with square brackets. Equivalent to @'autoBrackets'\"[\"\"]\"@.
-autoSquareBrackets :: LaTeXC l => l -> l
-autoSquareBrackets x = commS "left[" <> x <> commS "right]"
-
--- | Like 'autoParens', but with curly brackets.
-autoBraces :: LaTeXC l => l -> l
-autoBraces x = commS "left"<>"{" <> x <> commS "right"<>"}"
-
--- | Like 'autoParens', but with angle brackets 〈 ... 〉. Equivalent to @'autoBrackets' 'langle' 'rangle'@.
-autoAngleBrackets :: LaTeXC l => l -> l
-autoAngleBrackets x = commS "left"<>langle <> x <> commS "right"<>rangle
-
--- | Use custom LaTeX expressions as auto-scaled delimiters to surround math.
--- Suitable delimiters include |...| (absolute value), ‖...‖ (norm,
--- 'dblPipe'), ⌊...⌋ (round-off Gauss brackets, 'lfloor' / 'rfloor') etc..
-autoBrackets :: LaTeXC l => LaTeX -> LaTeX -> l -> l
-autoBrackets lBrack rBrack x
-  = commS "left" <> fromLaTeX lBrack <> x <> commS "right" <> fromLaTeX rBrack
-
--- | Left angle bracket, 〈.
-langle :: LaTeXC l => l
-langle = comm0 "langle"
-
--- | Right angle bracket, 〉.
-rangle :: LaTeXC l => l
-rangle = comm0 "rangle"
-
--- | Left floor, ⌊.
-lfloor :: LaTeXC l => l
-lfloor = comm0 "lfloor"
-
--- | Right floor, ⌋.
-rfloor :: LaTeXC l => l
-rfloor = comm0 "rfloor"
-
--- | Left ceiling, ⌈.
-lceil :: LaTeXC l => l
-lceil = comm0 "lceil"
-
--- | Right ceiling, ⌉.
-rceil :: LaTeXC l => l
-rceil = comm0 "rceil"
-
--- | Double vertical line, used as delimiter for norms (‖ ... ‖).
-dblPipe :: LaTeXC l => l
-dblPipe = comm0 "|"
-
--- | Superscript.
-(^:) :: LaTeXC l => l -> l -> l
-x ^: y = braces x <> raw "^"  <> braces y
-
--- | Subscript.
-(!:) :: LaTeXC l => l -> l -> l
-x !: y = braces x <> raw "_" <> braces y
-
--- | Sub- and superscript, both stacked.
-(!^) :: LaTeXC l => l -> (l,l) -> l
-x !^ (y,z) = braces x <> raw "_" <> braces y <> raw "^" <> braces z
-
----- Function symbols
-
--- | Sine function symbol.
-tsin :: LaTeXC l => l
-tsin = comm0 "sin"
-
--- | Arcsine function symbol.
-arcsin :: LaTeXC l => l
-arcsin = comm0 "arcsin"
-
--- | Cosine function symbol.
-tcos :: LaTeXC l => l
-tcos = comm0 "cos"
-
--- | Arccosine function symbol.
-arccos :: LaTeXC l => l
-arccos = comm0 "arccos"
-
--- | Tangent function symbol.
-ttan :: LaTeXC l => l
-ttan = comm0 "tan"
-
--- | Arctangent function symbol.
-arctan :: LaTeXC l => l
-arctan = comm0 "arctan"
-
--- | Cotangent function symbol.
-cot :: LaTeXC l => l
-cot = comm0 "cot"
-
--- | Arccotangent function symbol.
-arccot :: LaTeXC l => l
-arccot = comm0 "arccot"
-
--- | Hyperbolic sine function symbol.
-tsinh :: LaTeXC l => l
-tsinh = comm0 "sinh"
-
--- | Hyperbolic cosine function symbol.
-tcosh :: LaTeXC l => l
-tcosh = comm0 "cosh"
-
--- | Hyperbolic tangent function symbol.
-ttanh :: LaTeXC l => l
-ttanh = comm0 "tanh"
-
--- | Hyperbolic cotangent function symbol.
-coth :: LaTeXC l => l
-coth = comm0 "coth"
-
--- | Secant function symbol.
-sec :: LaTeXC l => l
-sec = comm0 "sec"
-
--- | Cosecant function symbol.
-csc :: LaTeXC l => l
-csc = comm0 "csc"
-
--- | Exponential function symbol.
-texp :: LaTeXC l => l
-texp = comm0 "exp"
-
--- | Logarithm function symbol.
-tlog :: LaTeXC l => l
-tlog = comm0 "log"
-
--- | Natural logarithm symbol.
-ln :: LaTeXC l => l
-ln = comm0 "ln"
-
--- | Root notation. Use @tsqrt (Just n) x@ for the @n@th root of @x@.
---   When 'Nothing' is supplied, the function will output a square root.
-tsqrt :: LaTeXC l => Maybe l -> l -> l
-tsqrt Nothing  = liftL $ \x -> TeXComm "sqrt" [FixArg x]
-tsqrt (Just n) = liftL2 (\m x -> TeXComm "sqrt" [OptArg m, FixArg x]) n
-
----- Custom Function Symbols
--- | Defines a new function symbol.
--- Note that function symbols defined in this way will not be automatically translated by babel.
-operatorname :: LaTeXC l => l -> l
-operatorname = comm1 "operatorname"
-
----- Sum/Integral symbols
-
--- | Sigma sumation symbol. Use 'sumFromTo' instead if you want to
---   specify the limits of the sum.
-tsum :: LaTeXC l => l
-tsum = comm0 "sum"
-
--- | Sigma sumation symbol with limits.
-sumFromTo :: LaTeXC l
-          => l -- ^ Expression below the sigma.
-          -> l -- ^ Expression above the sigma.
-          -> l
-sumFromTo x y = commS "sum" <> raw"_" <> braces x <> raw"^" <> braces y
-
--- | Pi product symbol. Use 'prodFromTo' if you want to specify the
---   limits of the product.
-prod :: LaTeXC l => l
-prod = comm0 "prod"
-
--- | Pi product symbol with limits.
-prodFromTo :: LaTeXC l
-           => l -- ^ Expression below the pi.
-           -> l -- ^ Expression above the pi.
-           -> l
-prodFromTo x y = commS "prod" <> raw"_" <> braces x <> raw"^" <> braces y
-
--- | Integral symbol. Use 'integralFromTo' if you want to specify
---   the limits of the integral.
-integral :: LaTeXC l => l
-integral = comm0 "int"
-
--- | Integral symbol with limits of integration.
-integralFromTo :: LaTeXC l
-               => l -- ^ Lower limit of integration.
-               -> l -- ^ Upper limit of integration.
-               -> l
-integralFromTo x y = commS "int" <> commS "limits" <> raw"_" <> braces x <> raw"^" <> braces y
-
--- | Partial-differentiation symbol ∂
-partial :: LaTeXC l => l
-partial = comm0 "partial"
-
--- | Total-differentiation (or integration-variable) symbol d (non-italic!)
-totald :: LaTeXC l => l
-totald = mathrm "d"
-
--- | Partial-differentiation of variable, e.g. /∂x/.
-partialOf :: LaTeXC l => l -> l
-partialOf v = comm0 "partial" <> v
-
--- | Total-differentiation of variable, or integration over variable, e.g. d/x/.
-totaldOf :: LaTeXC l => l -> l
-totaldOf v = mathrm "d" <> v
-
----- Operator symbols
-
--- | Negative form of an operator.
-notop :: LaTeXC l =>
-         (l -> l -> l)
-      ->  l -> l -> l
-notop op =
- \l1 l2 ->
-   (l1 <> commS "not") `op` l2
-
-infixl 6 +-, -+
-
--- | Plus-or-minus operator (±). Also available as symbol 'pm'.
-(+-) :: LaTeXC l => l -> l -> l
-(+-)  = between $ comm0 "pm"
-
--- | Minus-or-plus operator (∓). Also available as symbol 'mp'.
-(-+) :: LaTeXC l => l -> l -> l
-(-+)  = between $ comm0 "mp"
-
--- | Centered-dot operator (⋅).
-cdot :: LaTeXC l => l -> l -> l
-cdot  = between $ comm0 "cdot"
-
--- | \"x-cross\" multiplication operator (×).
-times :: LaTeXC l => l -> l -> l
-times = between $ comm0 "times"
-
--- | Division operator.
-div_ :: LaTeXC l => l -> l -> l
-div_  = between $ comm0 "div"
-
--- | Fraction operator.
-frac :: LaTeXC l => l -> l -> l
-frac = liftL2 $ \p q -> TeXComm "frac" [FixArg p, FixArg q]
-
 -- | Like 'frac' but smaller (uses subscript size for the numerator and denominator.
 tfrac :: LaTeXC l => l -> l -> l
 tfrac = liftL2 $ \p q -> TeXComm "tfrac" [FixArg p, FixArg q]
 
-infixl 7 *:
 
--- | Asterisk operator (*).
---
--- > infixl 7 *:
-(*:) :: LaTeXC l => l -> l -> l
-(*:) = between $ comm0 "ast"
-
--- | Star operator (★).
-star :: LaTeXC l => l -> l -> l
-star  = between $ comm0 "star"
-
--- | Ring operator (∘).
-circ :: LaTeXC l => l -> l -> l
-circ  = between $ comm0 "circ"
-
--- | Bullet operator (∙).
-bullet :: LaTeXC l => l -> l -> l
-bullet  = between $ comm0 "bullet"
-
-infixr 4 =: , /=:
-
--- | Equal.
---
--- > infixr 4 =:
-(=:) :: LaTeXC l => l -> l -> l
-(=:)  = between "="
-
--- | Not equal (≠).
---
--- > infixr 4 /=:
-(/=:) :: LaTeXC l => l -> l -> l
-(/=:) = notop (=:)
-
--- | Greater.
-(>:) :: LaTeXC l => l -> l -> l
-(>:) = between ">"
-
--- | Greater or equal (≥).
-(>=:) :: LaTeXC l => l -> l -> l
-(>=:) = between $ comm0 "geq"
-
--- | Lesser.
-(<:) :: LaTeXC l => l -> l -> l
-(<:) = between "<"
-
--- | Lesser or equal (≤).
-(<=:) :: LaTeXC l => l -> l -> l
-(<=:) = between $ comm0 "leq"
-
--- | Much less (≪).
-ll :: LaTeXC l => l -> l -> l
-ll = between $ comm0 "ll"
-
--- | Much greater (≫).
-gg :: LaTeXC l => l -> l -> l
-gg = between $ comm0 "gg"
-
--- | Proportional-to (∝).
-propto :: LaTeXC l => l -> l -> l
-propto  = between $ comm0 "propto"
-
--- | Perpendicular (⟂). This is the infix version of 'bot'.
-perp :: LaTeXC l => l -> l -> l
-perp = between $ comm0 "perp"
-
--- | Parallel (‖).
-parallel :: LaTeXC l => l -> l -> l
-parallel = between $ comm0 "parallel"
-
--- | Identical \/ defined-as \/ equivalent (≡).
-equiv :: LaTeXC l => l -> l -> l
-equiv  = between $ comm0 "equiv"
-
--- | Element-of (∈).
-in_ :: LaTeXC l => l -> l -> l
-in_ = between $ comm0 "in"
-
--- | Mirrored element-of (∋).
-ni :: LaTeXC l => l -> l -> l
-ni  = between $ comm0 "ni"
-
--- | Not element of (∉).
-notin :: LaTeXC l => l -> l -> l
-notin = between $ comm0 "notin"
-
--- | Subset-of (⊂).
-subset :: LaTeXC l => l -> l -> l
-subset  = between $ comm0 "subset"
-
--- | Superset-of (⊃).
-supset :: LaTeXC l => l -> l -> l
-supset  = between $ comm0 "supset"
-
--- | Set intersection (∩).
-cap :: LaTeXC l => l -> l -> l
-cap  = between $ comm0 "cap"
-
--- | Set union (∪).
-cup :: LaTeXC l => l -> l -> l
-cup  = between $ comm0 "cup"
-
--- | Set minus (∖).
-setminus :: LaTeXC l => l -> l -> l
-setminus  = between $ comm0 "setminus"
-
--- | Angle pointing downwards (∨).
-vee :: LaTeXC l => l -> l -> l
-vee  = between $ comm0 "vee"
-
--- | Angle pointing upwards (∧).
-wedge :: LaTeXC l => l -> l -> l
-wedge  = between $ comm0 "wedge"
-
--- | Circled plus operator (⊕).
-oplus :: LaTeXC l => l -> l -> l
-oplus  = between $ comm0 "oplus"
-
--- | Circled minus operator (⊖).
-ominus :: LaTeXC l => l -> l -> l
-ominus  = between $ comm0 "ominus"
-
--- | Circled multiplication cross (⊗).
-otimes :: LaTeXC l => l -> l -> l
-otimes  = between $ comm0 "otimes"
-
--- | Circled slash (⊘).
-oslash :: LaTeXC l => l -> l -> l
-oslash  = between $ comm0 "oslash"
-
--- | Circled dot operator (⊙).
-odot :: LaTeXC l => l -> l -> l
-odot  = between $ comm0 "odot"
-
---- Accemts
-{-
- , hat, tilde, bar, vec, widehat, widetilde
- , dot, ddot, dddot
- , overline, underline
- -}
-
--- | Add a hat accent above a symbol. 
-hat :: LaTeXC l => l -> l
-hat = comm1 "hat"
-
--- | Add a tilde accent above a symbol.
-tilde :: LaTeXC l => l -> l
-tilde = comm1 "tilde"
-
--- | Add a bar accent above a symbol.
-bar :: LaTeXC l => l -> l
-bar = comm1 "bar"
-
--- | Add a vector arrow accent above a symbol.
-vec :: LaTeXC l => l -> l
-vec = comm1 "vec"
-
--- | Add a wide hat accent above a symbol.
-widehat :: LaTeXC l => l -> l
-widehat = comm1 "widehat"
-
--- | Add a wide tilde accent above a symbol.
-widetilde :: LaTeXC l => l -> l
-widetilde = comm1 "widetilde"
-
--- | Add a dot accent above a symbol, as used to denote a derivative.
-dot :: LaTeXC l => l -> l
-dot = comm1 "dot"
-
--- | Add a dot accent above a symbol, as used to denote a second derivative.
+-- | Add a dot accent above a symbol, as used to denote a second derivative,
+--   like \(\ddot{y}\)
 ddot :: LaTeXC l => l -> l
 ddot = comm1 "ddot"
 
--- | Add a triple dot accent above a symbol, as used to denote a third derivative.
+-- | Add a triple dot accent above a symbol, as used to denote a third derivative,
+--   like \(\dddot{z}\)
 dddot :: LaTeXC l => l -> l
 dddot = comm1 "dddot"
 
--- | Add a wide line accent above a symbol.
-overline :: LaTeXC l => l -> l
-overline = comm1 "overline"
 
----- Greek alphabet
 
--- | /α/ symbol.
-alpha :: LaTeXC l => l
-alpha = comm0 "alpha"
 
--- | /β/ symbol.
-beta :: LaTeXC l => l
-beta = comm0 "beta"
-
--- | /γ/ symbol.
-gamma :: LaTeXC l => l
-gamma = comm0 "gamma"
-
--- | Γ symbol.
-gammau :: LaTeXC l => l
-gammau = comm0 "Gamma"
-
--- | /δ/ symbol.
-delta :: LaTeXC l => l
-delta = comm0 "delta"
-
--- | Δ symbol.
-deltau :: LaTeXC l => l
-deltau = comm0 "Delta"
-
--- | /ϵ/ symbol.
-epsilon :: LaTeXC l => l
-epsilon = comm0 "epsilon"
-
--- | /ε/ symbol.
-varepsilon :: LaTeXC l => l
-varepsilon = comm0 "varepsilon"
-
--- | /ζ/ symbol.
-zeta :: LaTeXC l => l
-zeta = comm0 "zeta"
-
--- | /η/ symbol.
-eta :: LaTeXC l => l
-eta = comm0 "eta"
-
--- | /θ/ symbol.
-theta :: LaTeXC l => l
-theta = comm0 "theta"
-
--- | /ϑ/ symbol.
-vartheta :: LaTeXC l => l
-vartheta = comm0 "vartheta"
-
--- | Θ symbol.
-thetau :: LaTeXC l => l
-thetau = comm0 "Theta"
-
--- | /ι/ symbol.
-iota :: LaTeXC l => l
-iota = comm0 "iota"
-
--- | /κ/ symbol.
-kappa :: LaTeXC l => l
-kappa = comm0 "kappa"
-
--- | /λ/ symbol.
-lambda :: LaTeXC l => l
-lambda = comm0 "lambda"
-
--- | Λ symbol.
-lambdau :: LaTeXC l => l
-lambdau = comm0 "Lambda"
-
--- | /μ/ symbol.
-mu :: LaTeXC l => l
-mu = comm0 "mu"
-
--- | /ν/ symbol.
-nu :: LaTeXC l => l
-nu = comm0 "nu"
-
--- | /ξ/ symbol.
-xi :: LaTeXC l => l
-xi = comm0 "xi"
-
--- | Ξ symbol.
-xiu :: LaTeXC l => l
-xiu = comm0 "Xi"
-
--- | /π/ symbol.
-pi_ :: LaTeXC l => l
-pi_ = comm0 "pi"
-
--- | /ϖ/ symbol.
-varpi :: LaTeXC l => l
-varpi = comm0 "varpi"
-
--- | Π symbol.
-piu :: LaTeXC l => l
-piu = comm0 "Pi"
-
--- | /ρ/ symbol.
-rho :: LaTeXC l => l
-rho = comm0 "rho"
-
--- | /ϱ/ symbol.
-varrho :: LaTeXC l => l
-varrho = comm0 "varrho"
-
--- | /σ/ symbol.
-sigma :: LaTeXC l => l
-sigma = comm0 "sigma"
-
--- | /ς/ symbol.
-varsigma :: LaTeXC l => l
-varsigma = comm0 "varsigma"
-
--- | Σ symbol.
-sigmau :: LaTeXC l => l
-sigmau = comm0 "Sigma"
-
--- | /τ/ symbol.
-tau :: LaTeXC l => l
-tau = comm0 "tau"
-
--- | /υ/ symbol.
-upsilon :: LaTeXC l => l
-upsilon = comm0 "upsilon"
-
--- | Υ symbol.
-upsilonu :: LaTeXC l => l
-upsilonu = comm0 "Upsilon"
-
--- | /ϕ/ symbol.
-phi :: LaTeXC l => l
-phi = comm0 "phi"
-
--- | /φ/ symbol.
-varphi :: LaTeXC l => l
-varphi = comm0 "varphi"
-
--- | Φ symbol.
-phiu :: LaTeXC l => l
-phiu = comm0 "Phi"
-
--- | /χ/ symbol.
-chi :: LaTeXC l => l
-chi = comm0 "chi"
-
--- | /ψ/ symbol.
-psi :: LaTeXC l => l
-psi = comm0 "psi"
-
--- | Ψ symbol.
-psiu :: LaTeXC l => l
-psiu = comm0 "Psi"
-
--- | /ω/ symbol.
-omega :: LaTeXC l => l
-omega = comm0 "omega"
-
--- | Ω symbol.
-omegau :: LaTeXC l => l
-omegau = comm0 "Omega"
-
----- Other symbols
-
--- | Plus-or-minus symbol (±). Also available as infix '+-'.
-pm :: LaTeXC l => l
-pm  = comm0 "pm"
-
--- | Minus-or-plus symbol (∓).
-mp :: LaTeXC l => l
-mp  = comm0 "mp"
-
--- | A right-arrow, →.
-to :: LaTeXC l => l
-to = comm0 "to"
-
--- | A right-arrow for function definitions, ↦.
-mapsto :: LaTeXC l => l
-mapsto = comm0 "mapsto"
-
--- | An implication arrow, =⇒.
-implies :: LaTeXC l => l
-implies = comm0 "implies"
-
--- | /For all/ symbol, ∀.
-forall :: LaTeXC l => l
-forall = comm0 "forall"
-
--- | /Exists/ symbol, ∃.
-exists :: LaTeXC l => l
-exists = comm0 "exists"
-
--- | Dagger symbol, †.
-dagger :: LaTeXC l => l
-dagger = comm0 "dagger"
-
--- | Double dagger symbol, ‡.
-ddagger :: LaTeXC l => l
-ddagger = comm0 "ddagger"
-
--- | Infinity symbol.
-infty :: LaTeXC l => l
-infty = comm0 "infty"
-
--- | Dotless letter i. Strictly speaking this is not a part of the AMSMath package, but it is defined here for convenience.
-imath :: LaTeXC l => l
-imath = comm0 "imath"
-
--- | Dotless letter j. Strictly speaking this is not a part of the AMSMath package, but it is defined here for convenience.
-jmath :: LaTeXC l => l
-jmath = comm0 "jmath"
-
--- | Bottom symbol ⟂. For the infix version see 'perp'.
-bot :: LaTeXC l => l
-bot = comm0 "bot"
-
--------------------------------------
------------- Math Fonts -------------
-
--- | Default math symbol font.
-mathdefault :: LaTeXC l => l -> l
-mathdefault = comm1 "mathdefault"
-
--- | Bold face.
-mathbf :: LaTeXC l => l -> l
-mathbf = comm1 "mathbf"
-
--- | Roman, i.e. not-italic math.
-mathrm :: LaTeXC l => l -> l
-mathrm = comm1 "mathrm"
-
 -- | Escape from math mode, into a normal-text box.
 --   Unlike 'mathrm', this won't squash spaces, i.e. you can write actual sentences.
 --   You can embed 'math' again within such a box.
 text :: LaTeXC l => l -> l
 text = comm1 "text"
 
--- | Calligraphic math symbols.
-mathcal :: LaTeXC l => l -> l
-mathcal = comm1 "mathcal"
-
--- | Sans-serif math.
-mathsf :: LaTeXC l => l -> l
-mathsf = comm1 "mathsf"
-
--- | Typewriter font.
-mathtt :: LaTeXC l => l -> l
-mathtt = comm1 "mathtt"
-
--- | Italic math. Uses the same glyphs as 'mathdefault', but with spacings
---   intended for multi-character symbols rather than juxtaposition of single-character symbols.
-mathit :: LaTeXC l => l -> l
-mathit = comm1 "mathit"
-
 -------------------------------------
 ------------- Matrices --------------
 
@@ -978,7 +218,7 @@
 --   Optional argument sets the alignment of the cells. Default (providing 'Nothing') 
 --   is centered.
 --
--- > ( M )
+-- \[ \begin{pmatrix} 0 & 1 \\ 2 & 3 \end{pmatrix} \]
 --
 pmatrix :: (Texy a, LaTeXC l) => Maybe HPos -> Matrix a -> l
 pmatrix = toMatrix "pmatrix"
@@ -987,7 +227,7 @@
 --   Optional argument sets the alignment of the cells. Default (providing 'Nothing') 
 --   is centered.
 --
--- > [ M ]
+-- \[ \begin{bmatrix} 0 & 1 \\ 2 & 3 \end{bmatrix} \]
 --
 bmatrix :: (Texy a, LaTeXC l) => Maybe HPos -> Matrix a -> l
 bmatrix = toMatrix "bmatrix"
@@ -996,7 +236,7 @@
 --   Optional argument sets the alignment of the cells. Default (providing 'Nothing') 
 --   is centered.
 --
--- > { M }
+-- \[ \begin{Bmatrix} 0 & 1 \\ 2 & 3 \end{Bmatrix} \]
 --
 b2matrix :: (Texy a, LaTeXC l) => Maybe HPos -> Matrix a -> l
 b2matrix = toMatrix "Bmatrix"
@@ -1005,7 +245,7 @@
 --   Optional argument sets the alignment of the cells. Default (providing 'Nothing') 
 --   is centered.
 --
--- > | M |
+-- \[ \begin{vmatrix} 0 & 1 \\ 2 & 3 \end{vmatrix} \]
 --
 vmatrix :: (Texy a, LaTeXC l) => Maybe HPos -> Matrix a -> l
 vmatrix = toMatrix "vmatrix"
@@ -1014,7 +254,7 @@
 --   Optional argument sets the alignment of the cells. Default (providing 'Nothing') 
 --   is centered.
 --
--- > || M ||
+-- \[ \begin{Vmatrix} 0 & 1 \\ 2 & 3 \end{Vmatrix} \]
 --
 v2matrix :: (Texy a, LaTeXC l) => Maybe HPos -> Matrix a -> l
 v2matrix = toMatrix "Vmatrix"
@@ -1053,30 +293,22 @@
 -------------------------------------
 ----------- Math Spacing-------------
 
--- | \quad space equal to the current font size (= 18 mu)
-quad :: LaTeXC l => l
-quad = comm0 "quad"
-
--- | \qquad twice of \quad (= 36 mu) 
-qquad :: LaTeXC l => l
-qquad = comm0 "qquad"
-
--- | \, space equal to 3/18 of \quad (= 3 mu)
+-- | @\,@ space equal to 3/18 of \quad (= 3 mu). \(a\,b\)
 thinspace :: LaTeXC l => l
 thinspace = comm0 ","
 
--- | \: space equal to 4/18 of \quad (= 4 mu)
+-- | @\:@ space equal to 4/18 of \quad (= 4 mu). \(a\:b\)
 medspace :: LaTeXC l => l
 medspace = comm0 ":"
 
--- | \: space equal to 5/18 of \quad (= 5 mu)
+-- | @\:@ space equal to 5/18 of \quad (= 5 mu). \(a\;b\)
 thickspace :: LaTeXC l => l
 thickspace = comm0 ";"
 
--- | \! space equal to -3/18 of \quad (= -3 mu)
+-- | @\!@ space equal to -3/18 of \quad (= -3 mu). \(a\!b\)
 negspace :: LaTeXC l => l
 negspace = comm0 "!"
 
--- | \ (space after backslash) equivalent of space in normal text
+-- | @\ @ (space after backslash) equivalent of space in normal text. \(a\ b\)
 space :: LaTeXC l => l
 space = comm0 " "
diff --git a/Text/LaTeX/Packages/AMSSymb.hs b/Text/LaTeX/Packages/AMSSymb.hs
--- a/Text/LaTeX/Packages/AMSSymb.hs
+++ b/Text/LaTeX/Packages/AMSSymb.hs
@@ -3,10 +3,35 @@
 module Text.LaTeX.Packages.AMSSymb
  ( -- * AMSSymb package
    amssymb
-   -- * Fonts
- , checkmark
-   ) where
 
+   -- * Arrows
+  , vartriangleleft, vartriangleright 
+  , leftleftarrows, rightrightarrows
+  , rightleftarrows, leftrightarrows
+  , upuparrows, downdownarrows
+  , leftarrowtail, rightarrowtail
+  , curvearrowleft, curvearrowright
+  , twoheadleftarrow, twoheadrightarrow
+  , rightleftharpoons
+  , lsh2, rsh2
+  , leftarrow3, rightarrow3
+  , rightsquigarrow, leftrightsquigarrow
+  , looparrowleft, looparrowright
+  , circlearrowleft, circlearrowright
+  , upharpoonleft, upharpoonright
+  , downharpoonleft, downharpoonright
+  , nleftarrow, nrightarrow
+  , nleftarrow2, nrightarrow2
+  , nleftrightarrow, nleftrightarrow2
+
+   -- * Other
+  , lll, ggg
+  , gtrdot, lessdot
+  , square, blacksquare  
+  , lozenge, blacklozenge
+  , checkmark, nexists
+ ) where
+
 import Text.LaTeX.Base.Class
 import Text.LaTeX.Base.Types
 
@@ -19,7 +44,162 @@
 
 --
 
--- | /✔/ symbol.
+-- | \(\vartriangleleft\) symbol.
+vartriangleleft :: LaTeXC l => l
+vartriangleleft = comm0 "vartriangleleft"
+
+-- | \(\vartriangleleft\) symbol.
+vartriangleright :: LaTeXC l => l
+vartriangleright = comm0 "vartriangleright"
+
+-- | \(\leftleftarrows\) symbol - double left arrows.
+leftleftarrows :: LaTeXC l => l
+leftleftarrows = comm0 "leftleftarrows"
+
+-- | \(\rightrightarrows\) symbol - double right arrows
+rightrightarrows :: LaTeXC l => l
+rightrightarrows = comm0 "rightrightarrows"
+
+-- | \(\rightleftarrows\) symbol - right arrow atop a left arrow
+rightleftarrows :: LaTeXC l => l
+rightleftarrows = comm0 "rightleftarrows"
+
+-- | \(\leftrightarrows\) symbol - left arrow atop a right arrow.
+leftrightarrows :: LaTeXC l => l
+leftrightarrows = comm0 "leftrightarrows"
+
+-- | \(\upuparrows\) symbol - double upward arrows.
+upuparrows :: LaTeXC l => l
+upuparrows = comm0 "upuparrows"
+
+-- | \(\downdownarrows\) symbol - double downward arrows.
+downdownarrows :: LaTeXC l => l
+downdownarrows = comm0 "downdownarrows"
+
+-- | \(\lll\) symbol - triple less than.
+lll :: LaTeXC l => l
+lll = comm0 "lll"
+
+-- | \(\ggg\) symbol - triple greater than.
+ggg :: LaTeXC l => l
+ggg = comm0 "ggg"
+
+-- | \(\leftarrowtail\) symbol - leftwards "mapsto"
+leftarrowtail :: LaTeXC l => l
+leftarrowtail = comm0 "leftarrowtail"
+
+-- | \(\rightarrowtail\) symbol - rightwards "mapsto"
+rightarrowtail :: LaTeXC l => l
+rightarrowtail = comm0 "rightarrowtail"
+
+-- | \(\curvearrowleft\) symbol - leftwards curved arrow
+curvearrowleft :: LaTeXC l => l
+curvearrowleft = comm0 "curvearrowleft"
+
+-- | \(\curvearrowright\) symbol - rightwards curved arrow
+curvearrowright :: LaTeXC l => l
+curvearrowright = comm0 "curvearrowright"
+
+-- | \(\twoheadleftarrow\) symbol - double head left arrow
+twoheadleftarrow :: LaTeXC l => l
+twoheadleftarrow = comm0 "twoheadleftarrow"
+
+-- | \(\twoheadrightarrow\) symbol - double head right arrow
+twoheadrightarrow :: LaTeXC l => l
+twoheadrightarrow = comm0 "twoheadleftarrow"
+
+-- | \(\checkmark\) symbol.
 checkmark :: LaTeXC l => l
 checkmark = comm0 "checkmark"
 
+-- | \(\lozenge\) symbol - narrow diamond
+lozenge :: LaTeXC l => l
+lozenge = comm0 "lozenge"
+
+-- | \(\blacklozenge\) symbol - filled narrow diamond
+blacklozenge :: LaTeXC l => l
+blacklozenge = comm0 "blacklozenge"
+
+-- | \(\nexists\) symbol - does not exist
+nexists :: LaTeXC l => l
+nexists = comm0 "nexists"
+
+-- | \(\lessdot\) symbol - less than with inner dot
+lessdot :: LaTeXC l => l
+lessdot = comm0 "lessdot"
+
+-- | \(\gtrdot\) symbol - greater than with inner dot
+gtrdot :: LaTeXC l => l
+gtrdot = comm0 "gtrdot"
+
+-- | \(\square\) symbol - square, often used to denote the end of a proof
+square :: LaTeXC l => l
+square = comm0 "square"
+
+-- | \(\blacksquare\) symbol - a filled square
+blacksquare :: LaTeXC l => l
+blacksquare = comm0 "blacksquare"
+
+-- | \(\rightleftharpoons\) symbol
+rightleftharpoons :: LaTeXC l => l
+rightleftharpoons = comm0 "rightleftharpoons"
+-- | \(\Lsh\) symbol
+lsh2 :: LaTeXC l => l
+lsh2 = comm0 "Lsh"
+-- | \(\Rsh\) symbol
+rsh2 :: LaTeXC l => l
+rsh2 = comm0 "Rsh"
+-- | \(\Lleftarrow\) symbol
+leftarrow3 :: LaTeXC l => l
+leftarrow3 = comm0 "Lleftarrow"
+-- | \(\Rrightarrow\) symbol
+rightarrow3 :: LaTeXC l => l
+rightarrow3 = comm0 "Rrightarrow"
+-- | \(\rightsquigarrow\) symbol
+rightsquigarrow :: LaTeXC l => l
+rightsquigarrow = comm0 "rightsquigarrow"
+-- | \(\leftrightsquigarrow\) symbol
+leftrightsquigarrow :: LaTeXC l => l
+leftrightsquigarrow = comm0 "leftrightsquigarrow"
+-- | \(\looparrowleft\) symbol
+looparrowleft :: LaTeXC l => l
+looparrowleft = comm0 "looparrowleft"
+-- | \(\looparrowright\) symbol
+looparrowright :: LaTeXC l => l
+looparrowright = comm0 "looparrowright"
+-- | \(\circlearrowleft\) symbol
+circlearrowleft :: LaTeXC l => l
+circlearrowleft = comm0 "circlearrowleft"
+-- | \(\circlearrowright\) symbol
+circlearrowright :: LaTeXC l => l
+circlearrowright = comm0 "circlearrowright"
+-- | \(\upharpoonleft\) symbol
+upharpoonleft :: LaTeXC l => l
+upharpoonleft = comm0 "upharpoonleft"
+-- | \(\upharpoonright\) symbol
+upharpoonright :: LaTeXC l => l
+upharpoonright = comm0 "upharpoonright"
+-- | \(\downharpoonleft\) symbol
+downharpoonleft :: LaTeXC l => l
+downharpoonleft = comm0 "downharpoonleft"
+-- | \(\downharpoonright\) symbol
+downharpoonright :: LaTeXC l => l
+downharpoonright = comm0 "downharpoonright"
+-- | \(\nleftarrow\) symbol
+nleftarrow :: LaTeXC l => l
+nleftarrow = comm0 "nleftarrow"
+-- | \(\nrightarrow\) symbol
+nrightarrow :: LaTeXC l => l
+nrightarrow = comm0 "nrightarrow"
+-- | \(\nLeftarrow\) symbol
+nleftarrow2 :: LaTeXC l => l
+nleftarrow2 = comm0 "nLeftarrow"
+-- | \(\nRightarrow\) symbol
+nrightarrow2 :: LaTeXC l => l
+nrightarrow2 = comm0 "nRightarrow"
+-- | \(\nleftrightarrow\) symbol
+nleftrightarrow :: LaTeXC l => l
+nleftrightarrow = comm0 "nleftrightarrow"
+-- | \(\nLeftrightarrow\) symbol
+nleftrightarrow2 :: LaTeXC l => l
+nleftrightarrow2 = comm0 "nLeftrightarrow"
diff --git a/Text/LaTeX/Packages/Babel.hs b/Text/LaTeX/Packages/Babel.hs
--- a/Text/LaTeX/Packages/Babel.hs
+++ b/Text/LaTeX/Packages/Babel.hs
@@ -77,7 +77,7 @@
 --  If you are using more than one language, consider to use
 --  'uselanguageconf'.
 uselanguage :: LaTeXC l => Language -> l
-uselanguage ln = usepackage [texy ln] babel
+uselanguage lang = usepackage [texy lang] babel
 
 -- | Language configuration. You may use one with 'uselanguageconf'.
 data LangConf = LangConf { mainLang :: Language , otherLangs :: [Language] }
@@ -99,14 +99,15 @@
 
 -- | Switch to a given 'Language'.
 selectlanguage :: LaTeXC l => Language -> l
-selectlanguage ln = fromLaTeX $ TeXComm "selectlanguage" [FixArg $ texy ln]
+selectlanguage lang = fromLaTeX $ TeXComm "selectlanguage" [FixArg $ texy lang]
 
 -- | Use a 'Language' locally.
 otherlanguage :: LaTeXC l => Language -> l -> l
-otherlanguage ln = liftL $ TeXEnv "otherlanguage" [FixArg $ texy ln]
+otherlanguage lang = liftL $ TeXEnv "otherlanguage" [FixArg $ texy lang]
 
 -- | The function 'foreignlanguage' takes two arguments; the second argument is a
 --   phrase to be typeset according to the rules of the language named in its first
 --   argument.
 foreignlanguage :: LaTeXC l => Language -> l -> l
-foreignlanguage ln = liftL $ \l -> TeXComm "foreignlanguage" [OptArg $ texy ln, FixArg l]
+foreignlanguage lang = liftL
+          $ \l -> TeXComm "foreignlanguage" [OptArg $ texy lang, FixArg l]
diff --git a/Text/LaTeX/Packages/Hyperref.hs b/Text/LaTeX/Packages/Hyperref.hs
--- a/Text/LaTeX/Packages/Hyperref.hs
+++ b/Text/LaTeX/Packages/Hyperref.hs
@@ -31,7 +31,6 @@
 
 import Text.LaTeX.Base.Syntax
 import Text.LaTeX.Base.Class
-import Text.LaTeX.Base.Commands
 import Text.LaTeX.Base.Render
 import Text.LaTeX.Base.Types
 import Data.Text (pack)
diff --git a/Text/LaTeX/Packages/QRCode.hs b/Text/LaTeX/Packages/QRCode.hs
--- a/Text/LaTeX/Packages/QRCode.hs
+++ b/Text/LaTeX/Packages/QRCode.hs
@@ -14,7 +14,6 @@
  , final
    ) where
 
-import Text.LaTeX.Base (raw)
 import Text.LaTeX.Base.Syntax
 import Text.LaTeX.Base.Class
 import Text.LaTeX.Base.Render
