summaryrefslogtreecommitdiff
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
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.
-rw-r--r--src/Text/Pandoc/Readers/LaTeX.hs16
-rw-r--r--test/command/3577.md35
2 files changed, 46 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
diff --git a/test/command/3577.md b/test/command/3577.md
new file mode 100644
index 000000000..bfeb86eaa
--- /dev/null
+++ b/test/command/3577.md
@@ -0,0 +1,35 @@
+```
+% pandoc -f latex -t html5
+\begin{figure}[ht]
+ \begin{subfigure}{0.45\textwidth}
+ \centering
+ \includegraphics{img1.jpg}
+ \caption{Caption 1}
+ \end{subfigure}
+
+ \begin{subfigure}{0.45\textwidth}
+ \centering
+ \includegraphics{img2.jpg}
+ \caption{Caption 2}
+ \end{subfigure}
+ \caption{Subfigure with Subfloat}
+\end{figure}
+^D
+<figure>
+<img src="img1.jpg" alt="Caption 1" /><figcaption>Caption 1</figcaption>
+</figure>
+<figure>
+<img src="img2.jpg" alt="Caption 2" /><figcaption>Caption 2</figcaption>
+</figure>
+```
+```
+% pandoc -f latex -t html5
+\begin{figure}[ht]
+ \includegraphics{img1.jpg}
+ \caption{Caption 3}
+\end{figure}
+^D
+<figure>
+<img src="img1.jpg" alt="Caption 3" /><figcaption>Caption 3</figcaption>
+</figure>
+```