git.iko.soy/typeable/pandoc
on master help sign in
LaTeX reader: support ams proof environment.
commit65865b31867efcdf28c51526797fc1b8ec7685a6 authorJohn MacFarlane <jgm@berkeley.edu> dateWed 22 Jul 2020, 14:23 (6 years ago) parent7faa9d9
2 files changed+37
src/Text/Pandoc/Readers/LaTeX.hs+27 src/Text/Pandoc/Readers/LaTeX/Parsing.hs+10
src/Text/Pandoc/Readers/LaTeX.hs+27
@@ -35,6 +35,7 @@ import Data.List (intercalate)
3535import qualified Data.Map as M
3636import Data.Maybe (fromMaybe, maybeToList)
3737import qualified Data.Set as Set
38+import qualified Data.Sequence as Seq
3839import Data.Text (Text)
3940import qualified Data.Text as T
4041import System.FilePath (addExtension, replaceExtension, takeExtension)
@@ -1845,6 +1846,8 @@ environments = M.fromList
18451846 , ("tikzcd", rawVerbEnv "tikzcd")
18461847 , ("lilypond", rawVerbEnv "lilypond")
18471848 , ("ly", rawVerbEnv "ly")
1849+ -- amsthm
1850+ , ("proof", amsProof)
18481851 -- etoolbox
18491852 , ("ifstrequal", ifstrequal)
18501853 , ("newtoggle", braced >>= newToggle)
@@ -1853,6 +1856,30 @@ environments = M.fromList
18531856 , ("iftoggle", try $ ifToggle >> block)
18541857 ]
18551858
1859+amsProof :: PandocMonad m => LP m Blocks
1860+amsProof = do
1861+ title <- option (B.text "Proof") opt
1862+ bs <- env "proof" blocks
1863+ return $
1864+ B.divWith ("", ["proof"], []) $
1865+ addQed $ addTitle (B.emph (title <> ".")) $ bs
1866+
1867+addTitle :: Inlines -> Blocks -> Blocks
1868+addTitle ils bs =
1869+ case B.toList bs of
1870+ (Para xs : rest)
1871+ -> B.fromList (Para (B.toList ils ++ (Space : xs)) : rest)
1872+ _ -> B.para ils <> bs
1873+
1874+addQed :: Blocks -> Blocks
1875+addQed bs =
1876+ case Seq.viewr (B.unMany bs) of
1877+ s Seq.:> Para ils
1878+ -> B.Many (s Seq.|> Para (ils ++ B.toList qedSign))
1879+ _ -> bs <> B.para qedSign
1880+ where
1881+ qedSign = B.spanWith ("",["qed"],[]) "\x220E"
1882+
18561883environment :: PandocMonad m => LP m Blocks
18571884environment = try $ do
18581885 controlSeq "begin"
src/Text/Pandoc/Readers/LaTeX/Parsing.hs+10
@@ -18,6 +18,7 @@ module Text.Pandoc.Readers.LaTeX.Parsing
1818 ( DottedNum(..)
1919 , renderDottedNum
2020 , incrementDottedNum
21+ , TheoremSpec(..)
2122 , LaTeXState(..)
2223 , defaultLaTeXState
2324 , LP
@@ -114,6 +115,13 @@ incrementDottedNum level (DottedNum ns) = DottedNum $
114115 (x:xs) -> reverse (x+1 : xs)
115116 [] -> [] -- shouldn't happen
116117
118+data TheoremSpec =
119+ TheoremSpec
120+ { theoremName :: Text
121+ , theoremSeries :: Maybe Text
122+ , theoremLastNum :: DottedNum }
123+ deriving (Show)
124+
117125data LaTeXState = LaTeXState{ sOptions :: ReaderOptions
118126 , sMeta :: Meta
119127 , sQuoteContext :: QuoteContext
@@ -128,6 +136,7 @@ data LaTeXState = LaTeXState{ sOptions :: ReaderOptions
128136 , sLastHeaderNum :: DottedNum
129137 , sLastFigureNum :: DottedNum
130138 , sLastTableNum :: DottedNum
139+ , sTheoremMap :: M.Map Text TheoremSpec
131140 , sLastLabel :: Maybe Text
132141 , sLabels :: M.Map Text [Inline]
133142 , sHasChapters :: Bool
@@ -151,6 +160,7 @@ defaultLaTeXState = LaTeXState{ sOptions = def
151160 , sLastHeaderNum = DottedNum []
152161 , sLastFigureNum = DottedNum []
153162 , sLastTableNum = DottedNum []
163+ , sTheoremMap = M.empty
154164 , sLastLabel = Nothing
155165 , sLabels = M.empty
156166 , sHasChapters = False