diff options
author | John MacFarlane <jgm@berkeley.edu> | 2017-04-24 23:39:14 +0200 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2017-04-24 23:39:14 +0200 |
commit | d17f0dab841fdda322853c175563792bde50fca2 (patch) | |
tree | eff817c8b8b98b472dba1e5b2a15658347d2531c /src | |
parent | 624e5b2f9283a5b18ceeb178f9ad4e7fa2520e7e (diff) | |
download | pandoc-d17f0dab841fdda322853c175563792bde50fca2.tar.gz |
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.hs | 16 |
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 |