aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Text/Pandoc/Readers/LaTeX.hs24
-rw-r--r--test/command/3587.md59
2 files changed, 83 insertions, 0 deletions
diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs
index 1c6954279..af00813b6 100644
--- a/src/Text/Pandoc/Readers/LaTeX.hs
+++ b/src/Text/Pandoc/Readers/LaTeX.hs
@@ -259,6 +259,29 @@ dosiunitx = do
emptyOr160 unit,
unit]
+-- converts e.g. \SIRange{100}{200}{\ms} to "100 ms--200 ms"
+doSIRange :: PandocMonad m => LP m Inlines
+doSIRange = do
+ skipopts
+ startvalue <- tok
+ startvalueprefix <- option "" $ bracketed tok
+ stopvalue <- tok
+ stopvalueprefix <- option "" $ bracketed tok
+ unit <- grouped (mconcat <$> many1 siUnit) <|> siUnit <|> tok
+ let emptyOr160 "" = ""
+ emptyOr160 _ = "\160"
+ return . mconcat $ [startvalueprefix,
+ emptyOr160 startvalueprefix,
+ startvalue,
+ emptyOr160 unit,
+ unit,
+ "\8211", -- An en-dash
+ stopvalueprefix,
+ emptyOr160 stopvalueprefix,
+ stopvalue,
+ emptyOr160 unit,
+ unit]
+
siUnit :: PandocMonad m => LP m Inlines
siUnit = do
Tok _ (CtrlSeq name) _ <- anyControlSeq
@@ -1075,6 +1098,7 @@ inlineCommands = M.union inlineLanguageCommands $ M.fromList
, ("acsp", doAcronymPlural "abbrv")
-- siuntix
, ("SI", dosiunitx)
+ , ("SIRange", doSIRange)
-- hyphenat
, ("bshyp", lit "\\\173")
, ("fshyp", lit "/\173")
diff --git a/test/command/3587.md b/test/command/3587.md
index 414593b39..a8c3a576c 100644
--- a/test/command/3587.md
+++ b/test/command/3587.md
@@ -55,3 +55,62 @@
[Para [Str "18.2\160\176C"]]
```
+# SIRange tests
+
+## Integer range with simple common units
+
+```
+% pandoc -f latex -t native
+\SIRange{10}{20}{\gram}
+^D
+[Para [Str "10\160g\8211\&20\160g"]]
+```
+```
+% pandoc -f latex -t native
+\SIRange{35}{9}{\milli\meter}
+^D
+[Para [Str "35\160mm\8211\&9\160mm"]]
+```
+```
+% pandoc -f latex -t native
+\SIRange{4}{97367265}{\celsius}
+^D
+[Para [Str "4\160\176C\8211\&97367265\160\176C"]]
+```
+
+## Decimal range with simple units
+
+```
+% pandoc -f latex -t native
+\SIRange{4.5}{97367265.5}{\celsius}
+^D
+[Para [Str "4.5\160\176C\8211\&97367265.5\160\176C"]]
+```
+
+## Squared units
+
+```
+% pandoc -f latex -t native
+\SIRange{10}{20}{\square\meter}
+^D
+[Para [Str "10\160m\178\8211\&20\160m\178"]]
+```
+
+## Ignore round precision
+
+`round-precision` option appears to be ignored by `\SI` as of 7c6dbd37e, so
+`\SIRange` will ignore it as well.
+
+```
+% pandoc -f latex -t native
+\SIRange[round-precision=2]{10}{20}{\gram}
+^D
+[Para [Str "10\160g\8211\&20\160g"]]
+```
+```
+% pandoc -f latex -t native
+\SIRange[round-precision=2]{10.0}{20.25}{\gram}
+^D
+[Para [Str "10.0\160g\8211\&20.25\160g"]]
+```
+