diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,11 @@
 
 # Changelog by versions
 
+## From 3.17.3.1 to 3.18.0.0
+
+* New bibtex module (leftaroundabout).
+* New function squareBraces (NorfairKing).
+
 ## From 3.17.1.0 to 3.17.2.0
 
 * Semigroup instance for LaTeX.
diff --git a/Examples/biblatex.hs b/Examples/biblatex.hs
new file mode 100644
--- /dev/null
+++ b/Examples/biblatex.hs
@@ -0,0 +1,48 @@
+
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PackageImports #-}
+
+import Text.LaTeX
+import Text.LaTeX.Packages.BibLaTeX
+import Text.LaTeX.Packages.Inputenc
+import qualified "bibtex" Text.BibTeX.Entry as BibTeX
+import qualified "bibtex" Text.BibTeX.Format as BibTeX
+import System.IO (writeFile)
+import System.Process (callProcess)
+
+main :: IO ()
+main = do
+  execLaTeXT bibLaTeXExample >>= renderFile "biblatex.tex"
+  writeFile bibFile . unlines $ BibTeX.entry <$> exampleBibliography
+  mapM_ (`callProcess`["biblatex"]) ["pdflatex", "biber", "pdflatex"]
+
+bibFile = "biblatex-example.bib"
+
+bibLaTeXExample :: Monad m => LaTeXT_ m
+bibLaTeXExample = thePreamble >> document theBody
+
+thePreamble :: Monad m => LaTeXT_ m
+thePreamble = do
+ documentclass [] article
+ usepackage [utf8] inputenc
+ usepackage ["backend=biber"] biblatex
+ addbibresource bibFile
+ author "Justus Sageműller"
+ title "BibLaTeX example using HaTeX"
+
+theBody :: Monad m => LaTeXT_ m
+theBody = do
+ "Bib"<>latex<>cite "bibLaTeX-manual"
+ " is a package for creating references to literature listed in a Bib"<>tex<>" file"
+ " (extension "<>verb".bib"<>")."
+ printbibliography
+
+exampleBibliography :: [BibTeX.T]
+exampleBibliography =
+ [ BibTeX.Cons
+    "manual"
+    "bibLaTeX-manual"
+    [ ("author", "P Lehman and P Kime and A Boruvka and J Wright")
+    , ("title", "The biblatex Package. Programmable Bibliographies and Citations.")
+    , ("URL", "http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf") ]
+ ]
diff --git a/HaTeX.cabal b/HaTeX.cabal
--- a/HaTeX.cabal
+++ b/HaTeX.cabal
@@ -1,5 +1,5 @@
 Name: HaTeX
-Version: 3.17.3.1
+Version: 3.18.0.0
 Author: Daniel Díaz
 Category: LaTeX
 Build-type: Simple
@@ -74,6 +74,8 @@
                , wl-pprint-extras >= 3.5
   if impl(ghc < 7.6)
     build-depends: ghc-prim
+  if impl(ghc < 8.0)
+    build-depends: semigroups
   Exposed-modules:
     Text.LaTeX
       -- Base (Core of the library)
@@ -95,6 +97,7 @@
         Text.LaTeX.Packages.AMSThm
         Text.LaTeX.Packages.Babel
         Text.LaTeX.Packages.Beamer
+        Text.LaTeX.Packages.BibLaTeX
         Text.LaTeX.Packages.Color
         Text.LaTeX.Packages.Fancyhdr
         Text.LaTeX.Packages.Fontenc
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
@@ -1,4 +1,3 @@
-
 {-# LANGUAGE CPP #-}
 {-# OPTIONS_GHC -fno-warn-name-shadowing #-}
 
@@ -27,6 +26,7 @@
  , comm3
  , commS
  , braces
+ , squareBraces
  ) where
 
 import Text.LaTeX.Base.Syntax
@@ -111,3 +111,6 @@
 --
 braces :: LaTeXC l => l -> l
 braces = liftL TeXBraces
+
+squareBraces :: LaTeXC l => l -> l
+squareBraces = liftL $ \l -> TeXRaw "[" <> l <> 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
@@ -169,6 +169,7 @@
  , description
  , minipage
  , figure
+ , table
    -- ** Page numbering
  , pagenumbering
  , arabic
@@ -391,13 +392,27 @@
 minipage Nothing  = liftL2 $ \ts -> TeXEnv "minipage" [ FixArg ts ]
 minipage (Just p) = liftL2 $ \ts -> TeXEnv "minipage" [ OptArg $ rendertex p , FixArg ts ]
 
--- | Figure environment.
+-- | Figure environment. Use this for floating "Text.LaTeX.Packages.Graphicx"
+--   content out of the text block and giving it a 'caption'. The figure can be
+--   referred to with 'ref' from elsewhere in the document.
 figure :: LaTeXC l =>
-          Maybe Pos -- ^ Optional position
-       -> l         -- ^ Figure content
+          Maybe Pos -- ^ Optional position.
+       -> l         -- ^ Figure content (should usually contain
+                    --   'Text.LaTeX.Packages.Graphicx.includegraphics',
+                    --   'caption' and 'label').
        -> l
 figure Nothing  = liftL $ TeXEnv "figure" []
 figure (Just p) = liftL $ TeXEnv "figure" [ OptArg $ TeXRaw $ render p ]
+
+-- | Table environment. Use this for floating a 'tabular' out of the text block and
+--   giving it a 'caption'. The table can be referred to with 'ref'.
+table :: LaTeXC l =>
+          Maybe Pos -- ^ Optional position.
+       -> l         -- ^ Table content (assemble with 'tabular'/'matrixTabular',
+                    --   'caption' and 'label').
+       -> l
+table Nothing  = liftL $ TeXEnv "table" []
+table (Just p) = liftL $ TeXEnv "table" [ OptArg $ TeXRaw $ render p ]
 
 -- | Abstract section.
 abstract :: LaTeXC l => l -> l
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
@@ -29,9 +29,7 @@
 import Data.Text (Text,pack)
 import qualified Data.Text
 import Data.Monoid
-#if MIN_VERSION_base(4,9,0)
 import qualified Data.Semigroup as Semigroup
-#endif
 import Data.String
 import Control.Applicative
 import Control.Monad (replicateM)
@@ -117,10 +115,8 @@
 (<>) = mappend
 #endif
 
-#if MIN_VERSION_base(4,9,0)
 instance Semigroup.Semigroup LaTeX where
   (<>) = mappend
-#endif
 
 -- | Method 'fromString' escapes LaTeX reserved characters using 'protectString'.
 instance IsString LaTeX where
diff --git a/Text/LaTeX/Base/Writer.hs b/Text/LaTeX/Base/Writer.hs
--- a/Text/LaTeX/Base/Writer.hs
+++ b/Text/LaTeX/Base/Writer.hs
@@ -60,8 +60,9 @@
 import Data.String
 #if !MIN_VERSION_base(4,8,0)
 import Data.Monoid
-import Control.Applicative
 #endif
+import Control.Applicative
+import qualified Data.Semigroup as Semigroup
 -- transformers
 import Control.Monad.Trans.Writer
 import Control.Monad.IO.Class
@@ -219,3 +220,6 @@
 instance (Monad m, Monoid a) => Monoid (LaTeXT m a) where
  mempty = return mempty
  mappend = liftM2 mappend
+
+instance (Applicative m, Semigroup.Semigroup a) => Semigroup.Semigroup (LaTeXT m a) where
+  (<>) = liftA2 (Semigroup.<>)
diff --git a/Text/LaTeX/Packages/BibLaTeX.hs b/Text/LaTeX/Packages/BibLaTeX.hs
new file mode 100644
--- /dev/null
+++ b/Text/LaTeX/Packages/BibLaTeX.hs
@@ -0,0 +1,31 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | <https://ctan.org/tex-archive/macros/latex/contrib/biblatex BibLaTeX>
+--   is a reference-citation package using @.bib@ files (BibTeX) but no extra style-files.
+--
+module Text.LaTeX.Packages.BibLaTeX
+ ( biblatex
+ , addbibresource
+ , cite
+ , printbibliography
+ ) where
+
+import Text.LaTeX.Base.Syntax
+import Text.LaTeX.Base.Class
+import Text.LaTeX.Base.Render
+import Text.LaTeX.Base.Types
+import Text.LaTeX.Base.Commands (cite)
+
+-- | BibLaTeX package. Use it to import it like this:
+--
+-- > usepackage [] biblatex
+biblatex :: PackageName
+biblatex = "biblatex"
+
+-- | Use a bibliography file as resource for reference information.
+addbibresource :: LaTeXC l => FilePath -> l
+addbibresource fp = fromLaTeX $ TeXComm "addbibresource" [FixArg $ TeXRaw $ fromString fp]
+
+printbibliography :: LaTeXC l => l
+printbibliography = comm0 "printbibliography"
+
diff --git a/license b/license
--- a/license
+++ b/license
@@ -1,4 +1,4 @@
-Copyright (c)2013, Daniel Díaz
+Copyright (c)2018, Daniel Díaz
 
 All rights reserved.
 
