@@ -57,6 +57,7 @@ import Text.Pandoc.Readers.LaTeX.Types (ExpansionPoint (..), Macro (..),
5757import Text.Pandoc.Readers.LaTeX.Parsing
5858import Text.Pandoc.Readers.LaTeX.Lang (polyglossiaLangToBCP47,
5959 babelLangToBCP47)
60+import Text.Pandoc.Readers.LaTeX.SIunitx
6061import Text.Pandoc.Shared
6162import qualified Text.Pandoc.Translations as Translations
6263import Text.Pandoc.Walk
@@ -244,227 +245,6 @@ doxspace =
244245 startsWithLetter _ = False
245246
246247
247−-- converts e.g. \SI{1}[\$]{} to "$ 1" or \SI{1}{\euro} to "1 €"
248−dosiunitx :: PandocMonad m => LP m Inlines
249−dosiunitx = do
250− skipopts
251− value <- tok
252− valueprefix <- option "" $ bracketed tok
253− unit <- grouped (mconcat <$> many1 siUnit) <|> siUnit <|> tok
254− let emptyOr160 "" = ""
255− emptyOr160 _ = "\160"
256− return . mconcat $ [valueprefix,
257− emptyOr160 valueprefix,
258− value,
259− emptyOr160 unit,
260− unit]
261−
262−-- converts e.g. \SIrange{100}{200}{\ms} to "100 ms--200 ms"
263−doSIrange :: PandocMonad m => LP m Inlines
264−doSIrange = do
265− skipopts
266− startvalue <- tok
267− startvalueprefix <- option "" $ bracketed tok
268− stopvalue <- tok
269− stopvalueprefix <- option "" $ bracketed tok
270− unit <- grouped (mconcat <$> many1 siUnit) <|> siUnit <|> tok
271− let emptyOr160 "" = ""
272− emptyOr160 _ = "\160"
273− return . mconcat $ [startvalueprefix,
274− emptyOr160 startvalueprefix,
275− startvalue,
276− emptyOr160 unit,
277− unit,
278− "\8211", -- An en-dash
279− stopvalueprefix,
280− emptyOr160 stopvalueprefix,
281− stopvalue,
282− emptyOr160 unit,
283− unit]
284−
285−siUnit :: PandocMonad m => LP m Inlines
286−siUnit = do
287− Tok _ (CtrlSeq name) _ <- anyControlSeq
288− if name == "square"
289− then do
290− unit <- grouped (mconcat <$> many1 siUnit) <|> siUnit <|> tok
291− return . mconcat $ [unit, "\178"]
292− else
293− case M.lookup name siUnitMap of
294− Just il -> return il
295− Nothing -> mzero
296−
297−siUnitMap :: M.Map Text Inlines
298−siUnitMap = M.fromList
299− [ ("fg", str "fg")
300− , ("pg", str "pg")
301− , ("ng", str "ng")
302− , ("ug", str "μg")
303− , ("mg", str "mg")
304− , ("g", str "g")
305− , ("kg", str "kg")
306− , ("amu", str "u")
307− , ("pm", str "pm")
308− , ("nm", str "nm")
309− , ("um", str "μm")
310− , ("mm", str "mm")
311− , ("cm", str "cm")
312− , ("dm", str "dm")
313− , ("m", str "m")
314− , ("km", str "km")
315− , ("as", str "as")
316− , ("fs", str "fs")
317− , ("ps", str "ps")
318− , ("ns", str "ns")
319− , ("us", str "μs")
320− , ("ms", str "ms")
321− , ("s", str "s")
322− , ("fmol", str "fmol")
323− , ("pmol", str "pmol")
324− , ("nmol", str "nmol")
325− , ("umol", str "μmol")
326− , ("mmol", str "mmol")
327− , ("mol", str "mol")
328− , ("kmol", str "kmol")
329− , ("pA", str "pA")
330− , ("nA", str "nA")
331− , ("uA", str "μA")
332− , ("mA", str "mA")
333− , ("A", str "A")
334− , ("kA", str "kA")
335− , ("ul", str "μl")
336− , ("ml", str "ml")
337− , ("l", str "l")
338− , ("hl", str "hl")
339− , ("uL", str "μL")
340− , ("mL", str "mL")
341− , ("L", str "L")
342− , ("hL", str "hL")
343− , ("mHz", str "mHz")
344− , ("Hz", str "Hz")
345− , ("kHz", str "kHz")
346− , ("MHz", str "MHz")
347− , ("GHz", str "GHz")
348− , ("THz", str "THz")
349− , ("mN", str "mN")
350− , ("N", str "N")
351− , ("kN", str "kN")
352− , ("MN", str "MN")
353− , ("Pa", str "Pa")
354− , ("kPa", str "kPa")
355− , ("MPa", str "MPa")
356− , ("GPa", str "GPa")
357− , ("mohm", str "mΩ")
358− , ("kohm", str "kΩ")
359− , ("Mohm", str "MΩ")
360− , ("pV", str "pV")
361− , ("nV", str "nV")
362− , ("uV", str "μV")
363− , ("mV", str "mV")
364− , ("V", str "V")
365− , ("kV", str "kV")
366− , ("W", str "W")
367− , ("uW", str "μW")
368− , ("mW", str "mW")
369− , ("kW", str "kW")
370− , ("MW", str "MW")
371− , ("GW", str "GW")
372− , ("J", str "J")
373− , ("uJ", str "μJ")
374− , ("mJ", str "mJ")
375− , ("kJ", str "kJ")
376− , ("eV", str "eV")
377− , ("meV", str "meV")
378− , ("keV", str "keV")
379− , ("MeV", str "MeV")
380− , ("GeV", str "GeV")
381− , ("TeV", str "TeV")
382− , ("kWh", str "kWh")
383− , ("F", str "F")
384− , ("fF", str "fF")
385− , ("pF", str "pF")
386− , ("K", str "K")
387− , ("dB", str "dB")
388− , ("angstrom", str "Å")
389− , ("arcmin", str "′")
390− , ("arcminute", str "′")
391− , ("arcsecond", str "″")
392− , ("astronomicalunit", str "ua")
393− , ("atomicmassunit", str "u")
394− , ("atto", str "a")
395− , ("bar", str "bar")
396− , ("barn", str "b")
397− , ("becquerel", str "Bq")
398− , ("bel", str "B")
399− , ("candela", str "cd")
400− , ("celsius", str "°C")
401− , ("centi", str "c")
402− , ("coulomb", str "C")
403− , ("dalton", str "Da")
404− , ("day", str "d")
405− , ("deca", str "d")
406− , ("deci", str "d")
407− , ("decibel", str "db")
408− , ("degreeCelsius",str "°C")
409− , ("degree", str "°")
410− , ("deka", str "d")
411− , ("electronvolt", str "eV")
412− , ("exa", str "E")
413− , ("farad", str "F")
414− , ("femto", str "f")
415− , ("giga", str "G")
416− , ("gram", str "g")
417− , ("hectare", str "ha")
418− , ("hecto", str "h")
419− , ("henry", str "H")
420− , ("hertz", str "Hz")
421− , ("hour", str "h")
422− , ("joule", str "J")
423− , ("katal", str "kat")
424− , ("kelvin", str "K")
425− , ("kilo", str "k")
426− , ("kilogram", str "kg")
427− , ("knot", str "kn")
428− , ("liter", str "L")
429− , ("litre", str "l")
430− , ("lumen", str "lm")
431− , ("lux", str "lx")
432− , ("mega", str "M")
433− , ("meter", str "m")
434− , ("metre", str "m")
435− , ("micro", str "μ")
436− , ("milli", str "m")
437− , ("minute", str "min")
438− , ("mmHg", str "mmHg")
439− , ("mole", str "mol")
440− , ("nano", str "n")
441− , ("nauticalmile", str "M")
442− , ("neper", str "Np")
443− , ("newton", str "N")
444− , ("ohm", str "Ω")
445− , ("Pa", str "Pa")
446− , ("pascal", str "Pa")
447− , ("percent", str "%")
448− , ("per", str "/")
449− , ("peta", str "P")
450− , ("pico", str "p")
451− , ("radian", str "rad")
452− , ("second", str "s")
453− , ("siemens", str "S")
454− , ("sievert", str "Sv")
455− , ("steradian", str "sr")
456− , ("tera", str "T")
457− , ("tesla", str "T")
458− , ("tonne", str "t")
459− , ("volt", str "V")
460− , ("watt", str "W")
461− , ("weber", str "Wb")
462− , ("yocto", str "y")
463− , ("yotta", str "Y")
464− , ("zepto", str "z")
465− , ("zetta", str "Z")
466− ]
467−
468248lit :: Text -> LP m Inlines
469249lit = pure . str
470250
@@ -1097,8 +877,8 @@ inlineCommands = M.union inlineLanguageCommands $ M.fromList
1097877 , ("acfp", doAcronymPlural "full")
1098878 , ("acsp", doAcronymPlural "abbrv")
1099879 -- siuntix
1100− , ("SI", dosiunitx)
1101− , ("SIrange", doSIrange)
880+ , ("SI", dosiunitx tok)
881+ , ("SIrange", doSIrange tok)
1102882 -- hyphenat
1103883 , ("bshyp", lit "\\\173")
1104884 , ("fshyp", lit "/\173")