@@ -37,6 +37,7 @@ import Text.ParserCombinators.Parsec hiding ((<|>), space, many, optional)
3737import Text.Pandoc.Definition
3838import Text.Pandoc.Shared
3939import Text.Pandoc.Parsing
40+import qualified Text.Pandoc.UTF8 as UTF8
4041import Data.Char ( chr, ord )
4142import Control.Monad
4243import Text.Pandoc.Builder
@@ -44,6 +45,7 @@ import Data.Char (isLetter)
4445import Control.Applicative
4546import Data.Monoid
4647import System.FilePath (replaceExtension)
48+import Data.List (intercalate)
4749import qualified Data.Map as M
4850
4951-- | Parse LaTeX from string and return 'Pandoc' document.
@@ -536,23 +538,26 @@ handleIncludes :: String -> IO String
536538handleIncludes [] = return []
537539handleIncludes ('\\':xs) =
538540 case runParser include defaultParserState "input" ('\\':xs) of
539− Right (f, rest) -> do ys <- catch (readFile f) (\_ -> return "")
540− (ys ++) `fmap` handleIncludes rest
541+ Right (fs, rest) -> do let getfile f = catch (UTF8.readFile f)
542+ (\_ -> return "")
543+ yss <- mapM getfile fs
544+ (intercalate "\n" yss ++) `fmap`
545+ handleIncludes rest
541546 _ -> case runParser verbatimEnv defaultParserState "input" ('\\':xs) of
542547 Right (r, rest) -> (r ++) `fmap` handleIncludes rest
543548 _ -> ('\\':) `fmap` handleIncludes xs
544549handleIncludes (x:xs) = (x:) `fmap` handleIncludes xs
545550
546−include :: LP (FilePath, String)
551+include :: LP ([FilePath], String)
547552include = do
548553 name <- controlSeq "include" <|> controlSeq "usepackage"
549554 optional opt
550− f <- braced
555+ fs <- (splitBy (==',')) <$> braced
551556 rest <- getInput
552− let f' = if name == "include"
553− then replaceExtension f ".tex"
554− else replaceExtension f ".sty"
555− return (f', rest)
557+ let fs' = if name == "include"
558+ then map (flip replaceExtension ".tex") fs
559+ else map (flip replaceExtension ".sty") fs
560+ return (fs', rest)
556561
557562verbatimEnv :: LP (String, String)
558563verbatimEnv = do