git.iko.soy/typeable/pandoc
on master help sign in
LaTeX reader: support parenthesized uncertainties in siunitx.
a03160fJohn MacFarlane
src/Text/Pandoc/Readers/LaTeX/SIunitx.hs+14−2
@@ -70,10 +70,22 @@ parseNumPart =
70 parseX <|>
70 parseX <|>
71 parseSpace
71 parseSpace
72 where
72 where
73− parseDecimalNum =
73+ parseDecimalNum = do
74− str . T.pack <$> many1 (satisfy (\c -> isDigit c || c == '.'))
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
75 parseComma = str "." <$ char ','
85 parseComma = str "." <$ char ','
76 parsePlusMinus = str "\xa0\xb1\xa0" <$ try (string "+-")
86 parsePlusMinus = str "\xa0\xb1\xa0" <$ try (string "+-")
87+ parseParens =
88+ char '(' *> many1 (satisfy (\c -> isDigit c || c == '.')) <* char ')'
77 parseI = str "i" <$ char 'i'
89 parseI = str "i" <$ char 'i'
78 parseX = str "\xa0\xd7\xa0" <$ char 'x'
90 parseX = str "\xa0\xd7\xa0" <$ char 'x'
79 parseExp = (\n -> str ("\xa0\xd7\xa0" <> "10") <> superscript n)
91 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+```