aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Text/Pandoc/Readers/LaTeX.hs21
-rw-r--r--test/command/5711.md13
2 files changed, 31 insertions, 3 deletions
diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs
index 25fd1198f..4e006fa8a 100644
--- a/src/Text/Pandoc/Readers/LaTeX.hs
+++ b/src/Text/Pandoc/Readers/LaTeX.hs
@@ -1749,10 +1749,21 @@ closing = do
_ -> mempty
return $ para (trimInlines contents) <> sigs
+parbox :: PandocMonad m => LP m Blocks
+parbox = try $ do
+ skipopts
+ braced -- size
+ oldInTableCell <- sInTableCell <$> getState
+ -- see #5711
+ updateState $ \st -> st{ sInTableCell = False }
+ res <- grouped blocks
+ updateState $ \st -> st{ sInTableCell = oldInTableCell }
+ return res
+
blockCommands :: PandocMonad m => M.Map Text (LP m Blocks)
blockCommands = M.fromList
[ ("par", mempty <$ skipopts)
- , ("parbox", skipopts >> braced >> grouped blocks)
+ , ("parbox", parbox)
, ("title", mempty <$ (skipopts *>
(grouped inline >>= addMeta "title")
<|> (grouped block >>= addMeta "title")))
@@ -2269,9 +2280,13 @@ parseTableRow envname prefsufs = do
-- add prefixes and suffixes in token stream:
let celltoks (pref, suff) = do
prefpos <- getPosition
- contents <- many (notFollowedBy
+ contents <- mconcat <$>
+ many ( snd <$> withRaw (controlSeq "parbox" >> parbox) -- #5711
+ <|>
+ (do notFollowedBy
(() <$ amp <|> () <$ lbreak <|> end_ envname)
- >> anyTok)
+ count 1 anyTok) )
+
suffpos <- getPosition
option [] (count 1 amp)
return $ map (setpos prefpos) pref ++ contents ++ map (setpos suffpos) suff
diff --git a/test/command/5711.md b/test/command/5711.md
new file mode 100644
index 000000000..0d443c656
--- /dev/null
+++ b/test/command/5711.md
@@ -0,0 +1,13 @@
+```
+% pandoc -t native -f latex
+\documentclass{article}
+\begin{document}
+\begin{tabular}{c}
+\parbox{2cm}{d\\e}
+\end{tabular}
+\end{document}
+^D
+[Table [] [AlignCenter] [0.0]
+ [[]]
+ [[[Plain [Str "d",LineBreak,Str "e"]]]]]
+```