diff --git a/MANUAL.txt b/MANUAL.txt
index 42e6393a0..42a2b7a3d 100644
--- a/MANUAL.txt
+++ b/MANUAL.txt
@@ -1905,6 +1905,11 @@ on the output format, and include the following:
 
     Similarly, `outputfile` can be `-` if output goes to the terminal.
 
+    If you need absolute paths, use e.g. `$curdir$/$sourcefile$`.
+
+`curdir`
+:   working directory from which pandoc is run.
+
 `toc`
 :   non-null value if `--toc/--table-of-contents` was specified
 
diff --git a/src/Text/Pandoc/App/OutputSettings.hs b/src/Text/Pandoc/App/OutputSettings.hs
index babec8745..343287a4b 100644
--- a/src/Text/Pandoc/App/OutputSettings.hs
+++ b/src/Text/Pandoc/App/OutputSettings.hs
@@ -28,6 +28,7 @@ import Data.List (find, isPrefixOf, isSuffixOf)
 import Data.Maybe (fromMaybe)
 import Skylighting (defaultSyntaxMap)
 import Skylighting.Parser (addSyntaxDefinition, parseSyntaxDefinition)
+import System.Directory (getCurrentDirectory)
 import System.Exit (exitSuccess)
 import System.FilePath
 import System.IO (stdout)
@@ -113,6 +114,8 @@ optToOutputSettings opts = do
         s <- UTF8.toString . fst <$> fetchItem fp
         return $ (varname, s) : vars
 
+  curdir <- liftIO getCurrentDirectory
+
   variables <-
     withList (addStringAsVariable "sourcefile")
              (reverse $ optInputFiles opts)
@@ -140,6 +143,8 @@ optToOutputSettings opts = do
     maybe return (addStringAsVariable "epub-cover-image")
                  (optEpubCoverImage opts)
     >>=
+    addStringAsVariable "curdir" curdir
+    >>=
     (\vars ->  if format == "dzslides"
                   then do
                       dztempl <- UTF8.toString <$> readDataFile