git.iko.soy/typeable/pandoc
on master help sign in
Implement first optional argument for `\newtheorem`.

This allows groups of theorem environments to be put in the same numbering sequence.

commitcdaaaa3f63a18ffdeec87973915d0e68cd1945a8 authorJohn MacFarlane <jgm@berkeley.edu> dateWed 22 Jul 2020, 23:30 (6 years ago) parentf014d71
1 file changed+30−23
src/Text/Pandoc/Readers/LaTeX.hs+30−23
src/Text/Pandoc/Readers/LaTeX.hs+30−23
@@ -1861,9 +1861,12 @@ newtheorem :: PandocMonad m => LP m Blocks
18611861newtheorem = do
18621862 number <- option True (False <$ symbol '*' <* sp)
18631863 name <- untokenize <$> braced
1864− series <- option Nothing $ Just <$> rawopt
1864+ sp
1865+ series <- option Nothing $ Just . untokenize <$> bracketedToks
1866+ sp
18651867 showName <- untokenize <$> braced
1866− syncTo <- option Nothing $ Just <$> rawopt
1868+ sp
1869+ syncTo <- option Nothing $ Just . untokenize <$> bracketedToks
18671870 let spec = TheoremSpec { theoremName = showName
18681871 , theoremSeries = series
18691872 , theoremSyncTo = syncTo
@@ -1919,27 +1922,31 @@ lookupTheoremEnvironment name = do
19191922 mblabel <- option Nothing $ Just . untokenize <$>
19201923 try (spaces >> controlSeq "label" >> spaces >> braced)
19211924 bs <- env name blocks
1922− number <- if theoremNumber tspec
1923− then do
1924− num <- getNextNumber
1925− (fromMaybe (DottedNum [0]) .
1926− fmap theoremLastNum .
1927− M.lookup name . sTheoremMap)
1928− updateState $ \s ->
1929− s{ sTheoremMap =
1930− M.insert name
1931− tspec{ theoremLastNum = num }
1932− (sTheoremMap s)
1933− }
1934− case mblabel of
1935− Just ident ->
1936− updateState $ \s ->
1937− s{ sLabels = M.insert ident
1938− [Str (theoremName tspec), Str "\160",
1939− Str (renderDottedNum num)] (sLabels s) }
1940− Nothing -> return ()
1941− return $ space <> B.text (renderDottedNum num)
1942− else return mempty
1925+ number <-
1926+ if theoremNumber tspec
1927+ then do
1928+ let name' = fromMaybe name $ theoremSeries tspec
1929+ num <- getNextNumber
1930+ (fromMaybe (DottedNum [0]) .
1931+ fmap theoremLastNum .
1932+ M.lookup name' . sTheoremMap)
1933+ updateState $ \s ->
1934+ s{ sTheoremMap =
1935+ M.adjust
1936+ (\spec -> spec{ theoremLastNum = num })
1937+ name'
1938+ (sTheoremMap s)
1939+ }
1940+
1941+ case mblabel of
1942+ Just ident ->
1943+ updateState $ \s ->
1944+ s{ sLabels = M.insert ident
1945+ [Str (theoremName tspec), Str "\160",
1946+ Str (renderDottedNum num)] (sLabels s) }
1947+ Nothing -> return ()
1948+ return $ space <> B.text (renderDottedNum num)
1949+ else return mempty
19431950 let title = B.strong (B.text (theoremName tspec) <> number)
19441951 <> optTitle <> space
19451952 return $ divWith ("", [name], []) $ addTitle title $