summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2017-04-24 23:39:14 +0200
committerJohn MacFarlane <jgm@berkeley.edu>2017-04-24 23:39:14 +0200
commitd17f0dab841fdda322853c175563792bde50fca2 (patch)
treeeff817c8b8b98b472dba1e5b2a15658347d2531c /src
parent624e5b2f9283a5b18ceeb178f9ad4e7fa2520e7e (diff)
LaTeX reader: better support for subfigure package.
A figure with two subfigures turns into two pandoc figures; the subcaptions are used and the main caption ignored, unless there are no subcaptions. Closes #3577.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Readers/LaTeX.hs16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs
index f3c94dacb..3e5fae8fb 100644
--- a/src/Text/Pandoc/Readers/LaTeX.hs
+++ b/src/Text/Pandoc/Readers/LaTeX.hs
@@ -39,7 +39,7 @@ import Control.Applicative (many, optional, (<|>))
import Control.Monad
import Control.Monad.Except (throwError)
import Data.Char (chr, isAlphaNum, isLetter, ord)
-import Data.List (intercalate)
+import Data.List (intercalate, isPrefixOf)
import qualified Data.Map as M
import Data.Maybe (fromMaybe, maybeToList)
import Safe (minimumDef)
@@ -1111,10 +1111,11 @@ rawLaTeXInline = do
addImageCaption :: PandocMonad m => Blocks -> LP m Blocks
addImageCaption = walkM go
- where go (Image attr alt (src,tit)) = do
+ where go (Image attr alt (src,tit))
+ | not ("fig:" `isPrefixOf` tit) = do
mbcapt <- stateCaption <$> getState
return $ case mbcapt of
- Just ils -> Image attr (toList ils) (src, "fig:")
+ Just ils -> Image attr (toList ils) (src, "fig:" ++ tit)
Nothing -> Image attr alt (src,tit)
go x = return x
@@ -1134,8 +1135,8 @@ environments = M.fromList
, ("letter", env "letter" letterContents)
, ("minipage", env "minipage" $
skipopts *> spaces' *> optional braced *> spaces' *> blocks)
- , ("figure", env "figure" $
- resetCaption *> skipopts *> blocks >>= addImageCaption)
+ , ("figure", env "figure" $ skipopts *> figure)
+ , ("subfigure", env "subfigure" $ skipopts *> tok *> figure)
, ("center", env "center" blocks)
, ("longtable", env "longtable" $
resetCaption *> simpTable False >>= addTableCaption)
@@ -1187,6 +1188,11 @@ environments = M.fromList
, ("alignat*", mathEnv para (Just "aligned") "alignat*")
]
+figure :: PandocMonad m => LP m Blocks
+figure = try $ do
+ resetCaption
+ blocks >>= addImageCaption
+
letterContents :: PandocMonad m => LP m Blocks
letterContents = do
bs <- blocks