@@ -340,6 +340,7 @@ blockCommands = M.fromList $
340 , ("closing", skipopts *> closing)
340 , ("closing", skipopts *> closing)
342 , ("hrule", pure horizontalRule)
342 , ("hrule", pure horizontalRule)
343+ , ("strut", pure mempty)
343 , ("rule", skipopts *> tok *> tok *> pure horizontalRule)
344 , ("rule", skipopts *> tok *> tok *> pure horizontalRule)
344 , ("item", skipopts *> looseItem)
345 , ("item", skipopts *> looseItem)
345 , ("documentclass", skipopts *> braced *> preamble)
346 , ("documentclass", skipopts *> braced *> preamble)
@@ -1085,7 +1086,7 @@ environments = M.fromList
1085 , ("abstract", mempty <$ (env "abstract" blocks >>= addMeta "abstract"))
1086 , ("abstract", mempty <$ (env "abstract" blocks >>= addMeta "abstract"))
1086 , ("letter", env "letter" letterContents)
1087 , ("letter", env "letter" letterContents)
1087 , ("minipage", env "minipage" $
1088 , ("minipage", env "minipage" $
1088− skipopts *> optional tok *> blocks)
1089+ skipopts *> spaces' *> optional braced *> spaces' *> blocks)
1089 , ("figure", env "figure" $
1090 , ("figure", env "figure" $
1090 resetCaption *> skipopts *> blocks >>= addImageCaption)
1091 resetCaption *> skipopts *> blocks >>= addImageCaption)
1091 , ("center", env "center" blocks)
1092 , ("center", env "center" blocks)
@@ -1370,7 +1371,9 @@ hline = try $ do
1370 -- booktabs rules:
1371 -- booktabs rules:
1371 controlSeq "toprule" <|>
1372 controlSeq "toprule" <|>
1372 controlSeq "bottomrule" <|>
1373 controlSeq "bottomrule" <|>
1373− controlSeq "midrule"
1374+ controlSeq "midrule" <|>
1375+ controlSeq "endhead" <|>
1376+ controlSeq "endfirsthead"
1375 optional $ bracketed (many1 (satisfy (/=']')))
1378 optional $ bracketed (many1 (satisfy (/=']')))
1376 return ()
1379 return ()
@@ -1381,13 +1384,17 @@ lbreak = () <$ try (spaces' *>
1381 spaces')
1384 spaces')
1383amp :: LP ()
1386amp :: LP ()
1384−amp = () <$ try (spaces' *> char '&')
1387+amp = () <$ try (spaces' *> char '&' <* spaces')
1386parseTableRow :: Int -- ^ number of columns
1389parseTableRow :: Int -- ^ number of columns
1387 -> LP [Blocks]
1390 -> LP [Blocks]
1388parseTableRow cols = try $ do
1391parseTableRow cols = try $ do
1389 let tableCellInline = notFollowedBy (amp <|> lbreak) >> inline
1392 let tableCellInline = notFollowedBy (amp <|> lbreak) >> inline
1393+ let minipage = try $ controlSeq "begin" *> string "{minipage}" *>
1395+ (skipopts *> spaces' *> optional braced *> spaces' *> blocks)
1396+ let tableCell = minipage <|>
1390− let tableCell = (plain . trimInlines . mconcat) <$> many tableCellInline
1397+ ((plain . trimInlines . mconcat) <$> many tableCellInline)
1391 cells' <- sepBy1 tableCell amp
1398 cells' <- sepBy1 tableCell amp
1392 let numcells = length cells'
1399 let numcells = length cells'
1393 guard $ numcells <= cols && numcells >= 1
1400 guard $ numcells <= cols && numcells >= 1
@@ -1410,7 +1417,9 @@ simpTable hasWidthParameter = try $ do
1410 optional lbreak
1417 optional lbreak
1412 skipMany hline
1419 skipMany hline
1413 header' <- option [] $ try (parseTableRow cols <* lbreak <* many1 hline)
1421 header' <- option [] $ try (parseTableRow cols <* lbreak <* many1 hline)
1414 rows <- sepEndBy (parseTableRow cols) (lbreak <* optional (skipMany hline))
1423 rows <- sepEndBy (parseTableRow cols) (lbreak <* optional (skipMany hline))
1416 optional $ controlSeq "caption" *> skipopts *> setCaption
1425 optional $ controlSeq "caption" *> skipopts *> setCaption