git.iko.soy/typeable/pandoc
on master help sign in
LaTeX reader: support parenthesized uncertainties in siunitx.
commita03160fb0d9c9790e23f6c75368bfa39281b76a8 authorJohn MacFarlane <jgm@berkeley.edu> dateThu 10 Sep 2020, 13:07 (6 years ago) parent9423b4b
2 files changed+26−2
src/Text/Pandoc/Readers/LaTeX/SIunitx.hs+14−2 test/command/6620.md+12
src/Text/Pandoc/Readers/LaTeX/SIunitx.hs+14−2
@@ -70,10 +70,22 @@ parseNumPart =
7070 parseX <|>
7171 parseSpace
7272 where
73− parseDecimalNum =
74− str . T.pack <$> many1 (satisfy (\c -> isDigit c || c == '.'))
73+ parseDecimalNum = do
74+ basenum <- T.pack <$> many1 (satisfy (\c -> isDigit c || c == '.'))
75+ uncertainty <- option mempty $ T.pack <$> parseParens
76+ if T.null uncertainty
77+ then return $ str basenum
78+ else return $ str $ basenum <> "\xa0\xb1\xa0" <>
79+ case T.break (=='.') basenum of
80+ (_,ys)
81+ | T.length ys <= 1 -> uncertainty
82+ | otherwise -> "0." <>
83+ T.replicate (T.length ys - 1 - T.length uncertainty) "0"
84+ <> uncertainty
7585 parseComma = str "." <$ char ','
7686 parsePlusMinus = str "\xa0\xb1\xa0" <$ try (string "+-")
87+ parseParens =
88+ char '(' *> many1 (satisfy (\c -> isDigit c || c == '.')) <* char ')'
7789 parseI = str "i" <$ char 'i'
7890 parseX = str "\xa0\xd7\xa0" <$ char 'x'
7991 parseExp = (\n -> str ("\xa0\xd7\xa0" <> "10") <> superscript n)
test/command/6620.mdnew file+12
@@ -0,0 +1,12 @@
1+```
2+% pandoc -f latex
3+\SI{23(2)}{\m}
4+
5+\SI{125(12)}{\m}
6+
7+\SI{0.135(21)}{\m}
8+^D
9+<p>23 ± 2 m</p>
10+<p>125 ± 12 m</p>
11+<p>0.135 ± 0.021 m</p>
12+```