LaTeX reader: fix siunitx unit commands...

...they should only be recognized in siunitx contexts.

For example, `\l` outside of an siunitx context should be l-slash,
not l (for liter)!

Closes #4842.
This commit is contained in:
John MacFarlane 2018-08-17 15:22:47 -07:00
parent 723b60b42e
commit 1b66865763
2 changed files with 188 additions and 174 deletions

View file

@ -735,7 +735,7 @@ dosiunitx = do
skipopts
value <- tok
valueprefix <- option "" $ bracketed tok
unit <- inlineCommand' <|> tok
unit <- grouped (mconcat <$> many1 siUnit) <|> siUnit <|> tok
let emptyOr160 "" = ""
emptyOr160 _ = "\160"
return . mconcat $ [valueprefix,
@ -744,11 +744,187 @@ dosiunitx = do
emptyOr160 unit,
unit]
-- siunitx's \square command
dosquare :: PandocMonad m => LP m Inlines
dosquare = do
unit <- inlineCommand' <|> tok
return . mconcat $ [unit, "\178"]
siUnit :: PandocMonad m => LP m Inlines
siUnit = do
Tok _ (CtrlSeq name) cmd <- anyControlSeq
if name == "square"
then do
unit <- grouped (mconcat <$> many1 siUnit) <|> siUnit <|> tok
return . mconcat $ [unit, "\178"]
else
case M.lookup name siUnitMap of
Just il -> return il
Nothing -> mzero
siUnitMap :: M.Map Text Inlines
siUnitMap = M.fromList
[ ("fg", str "fg")
, ("pg", str "pg")
, ("ng", str "ng")
, ("ug", str "μg")
, ("mg", str "mg")
, ("g", str "g")
, ("kg", str "kg")
, ("amu", str "u")
, ("pm", str "pm")
, ("nm", str "nm")
, ("um", str "μm")
, ("mm", str "mm")
, ("cm", str "cm")
, ("dm", str "dm")
, ("m", str "m")
, ("km", str "km")
, ("as", str "as")
, ("fs", str "fs")
, ("ps", str "ps")
, ("ns", str "ns")
, ("us", str "μs")
, ("ms", str "ms")
, ("s", str "s")
, ("fmol", str "fmol")
, ("pmol", str "pmol")
, ("nmol", str "nmol")
, ("umol", str "μmol")
, ("mmol", str "mmol")
, ("mol", str "mol")
, ("kmol", str "kmol")
, ("pA", str "pA")
, ("nA", str "nA")
, ("uA", str "μA")
, ("mA", str "mA")
, ("A", str "A")
, ("kA", str "kA")
, ("ul", str "μl")
, ("ml", str "ml")
, ("l", str "l")
, ("hl", str "hl")
, ("uL", str "μL")
, ("mL", str "mL")
, ("L", str "L")
, ("hL", str "hL")
, ("mHz", str "mHz")
, ("Hz", str "Hz")
, ("kHz", str "kHz")
, ("MHz", str "MHz")
, ("GHz", str "GHz")
, ("THz", str "THz")
, ("mN", str "mN")
, ("N", str "N")
, ("kN", str "kN")
, ("MN", str "MN")
, ("Pa", str "Pa")
, ("kPa", str "kPa")
, ("MPa", str "MPa")
, ("GPa", str "GPa")
, ("mohm", str "")
, ("kohm", str "")
, ("Mohm", str "")
, ("pV", str "pV")
, ("nV", str "nV")
, ("uV", str "μV")
, ("mV", str "mV")
, ("V", str "V")
, ("kV", str "kV")
, ("W", str "W")
, ("uW", str "μW")
, ("mW", str "mW")
, ("kW", str "kW")
, ("MW", str "MW")
, ("GW", str "GW")
, ("J", str "J")
, ("uJ", str "μJ")
, ("mJ", str "mJ")
, ("kJ", str "kJ")
, ("eV", str "eV")
, ("meV", str "meV")
, ("keV", str "keV")
, ("MeV", str "MeV")
, ("GeV", str "GeV")
, ("TeV", str "TeV")
, ("kWh", str "kWh")
, ("F", str "F")
, ("fF", str "fF")
, ("pF", str "pF")
, ("K", str "K")
, ("dB", str "dB")
, ("angstrom", str "Å")
, ("arcmin", str "")
, ("arcminute", str "")
, ("arcsecond", str "")
, ("astronomicalunit", str "ua")
, ("atomicmassunit", str "u")
, ("atto", str "a")
, ("bar", str "bar")
, ("barn", str "b")
, ("becquerel", str "Bq")
, ("bel", str "B")
, ("candela", str "cd")
, ("celsius", str "°C")
, ("centi", str "c")
, ("coulomb", str "C")
, ("dalton", str "Da")
, ("day", str "d")
, ("deca", str "d")
, ("deci", str "d")
, ("decibel", str "db")
, ("degreeCelsius",str "°C")
, ("degree", str "°")
, ("deka", str "d")
, ("electronvolt", str "eV")
, ("exa", str "E")
, ("farad", str "F")
, ("femto", str "f")
, ("giga", str "G")
, ("gram", str "g")
, ("hectare", str "ha")
, ("hecto", str "h")
, ("henry", str "H")
, ("hertz", str "Hz")
, ("hour", str "h")
, ("joule", str "J")
, ("katal", str "kat")
, ("kelvin", str "K")
, ("kilo", str "k")
, ("kilogram", str "kg")
, ("knot", str "kn")
, ("liter", str "L")
, ("litre", str "l")
, ("lumen", str "lm")
, ("lux", str "lx")
, ("mega", str "M")
, ("meter", str "m")
, ("metre", str "m")
, ("milli", str "m")
, ("minute", str "min")
, ("mmHg", str "mmHg")
, ("mole", str "mol")
, ("nano", str "n")
, ("nauticalmile", str "M")
, ("neper", str "Np")
, ("newton", str "N")
, ("ohm", str "Ω")
, ("Pa", str "Pa")
, ("pascal", str "Pa")
, ("percent", str "%")
, ("per", str "/")
, ("peta", str "P")
, ("pico", str "p")
, ("radian", str "rad")
, ("second", str "s")
, ("siemens", str "S")
, ("sievert", str "Sv")
, ("steradian", str "sr")
, ("tera", str "T")
, ("tesla", str "T")
, ("tonne", str "t")
, ("volt", str "V")
, ("watt", str "W")
, ("weber", str "Wb")
, ("yocto", str "y")
, ("yotta", str "Y")
, ("zepto", str "z")
, ("zetta", str "Z")
]
lit :: String -> LP m Inlines
lit = pure . str
@ -1594,174 +1770,6 @@ inlineCommands = M.union inlineLanguageCommands $ M.fromList
, ("acsp", doAcronymPlural "abbrv")
-- siuntix
, ("SI", dosiunitx)
-- units of siuntix
, ("fg", lit "fg")
, ("pg", lit "pg")
, ("ng", lit "ng")
, ("ug", lit "μg")
, ("mg", lit "mg")
, ("g", lit "g")
, ("kg", lit "kg")
, ("amu", lit "u")
, ("pm", lit "pm")
, ("nm", lit "nm")
, ("um", lit "μm")
, ("mm", lit "mm")
, ("cm", lit "cm")
, ("dm", lit "dm")
, ("m", lit "m")
, ("km", lit "km")
, ("as", lit "as")
, ("fs", lit "fs")
, ("ps", lit "ps")
, ("ns", lit "ns")
, ("us", lit "μs")
, ("ms", lit "ms")
, ("s", lit "s")
, ("fmol", lit "fmol")
, ("pmol", lit "pmol")
, ("nmol", lit "nmol")
, ("umol", lit "μmol")
, ("mmol", lit "mmol")
, ("mol", lit "mol")
, ("kmol", lit "kmol")
, ("pA", lit "pA")
, ("nA", lit "nA")
, ("uA", lit "μA")
, ("mA", lit "mA")
, ("A", lit "A")
, ("kA", lit "kA")
, ("ul", lit "μl")
, ("ml", lit "ml")
, ("l", lit "l")
, ("hl", lit "hl")
, ("uL", lit "μL")
, ("mL", lit "mL")
, ("L", lit "L")
, ("hL", lit "hL")
, ("mHz", lit "mHz")
, ("Hz", lit "Hz")
, ("kHz", lit "kHz")
, ("MHz", lit "MHz")
, ("GHz", lit "GHz")
, ("THz", lit "THz")
, ("mN", lit "mN")
, ("N", lit "N")
, ("kN", lit "kN")
, ("MN", lit "MN")
, ("Pa", lit "Pa")
, ("kPa", lit "kPa")
, ("MPa", lit "MPa")
, ("GPa", lit "GPa")
, ("mohm", lit "")
, ("kohm", lit "")
, ("Mohm", lit "")
, ("pV", lit "pV")
, ("nV", lit "nV")
, ("uV", lit "μV")
, ("mV", lit "mV")
, ("V", lit "V")
, ("kV", lit "kV")
, ("W", lit "W")
, ("uW", lit "μW")
, ("mW", lit "mW")
, ("kW", lit "kW")
, ("MW", lit "MW")
, ("GW", lit "GW")
, ("J", lit "J")
, ("uJ", lit "μJ")
, ("mJ", lit "mJ")
, ("kJ", lit "kJ")
, ("eV", lit "eV")
, ("meV", lit "meV")
, ("keV", lit "keV")
, ("MeV", lit "MeV")
, ("GeV", lit "GeV")
, ("TeV", lit "TeV")
, ("kWh", lit "kWh")
, ("F", lit "F")
, ("fF", lit "fF")
, ("pF", lit "pF")
, ("K", lit "K")
, ("dB", lit "dB")
, ("angstrom", lit "Å")
, ("arcmin", lit "")
, ("arcminute", lit "")
, ("arcsecond", lit "")
, ("astronomicalunit", lit "ua")
, ("atomicmassunit", lit "u")
, ("atto", lit "a")
, ("bar", lit "bar")
, ("barn", lit "b")
, ("becquerel", lit "Bq")
, ("bel", lit "B")
, ("candela", lit "cd")
, ("celsius", lit "°C")
, ("centi", lit "c")
, ("coulomb", lit "C")
, ("dalton", lit "Da")
, ("day", lit "d")
, ("deca", lit "d")
, ("deci", lit "d")
, ("decibel", lit "db")
, ("degreeCelsius",lit "°C")
, ("degree", lit "°")
, ("deka", lit "d")
, ("electronvolt", lit "eV")
, ("exa", lit "E")
, ("farad", lit "F")
, ("femto", lit "f")
, ("giga", lit "G")
, ("gram", lit "g")
, ("hectare", lit "ha")
, ("hecto", lit "h")
, ("henry", lit "H")
, ("hertz", lit "Hz")
, ("hour", lit "h")
, ("joule", lit "J")
, ("katal", lit "kat")
, ("kelvin", lit "K")
, ("kilo", lit "k")
, ("kilogram", lit "kg")
, ("knot", lit "kn")
, ("liter", lit "L")
, ("litre", lit "l")
, ("lumen", lit "lm")
, ("lux", lit "lx")
, ("mega", lit "M")
, ("meter", lit "m")
, ("metre", lit "m")
, ("milli", lit "m")
, ("minute", lit "min")
, ("mmHg", lit "mmHg")
, ("mole", lit "mol")
, ("nano", lit "n")
, ("nauticalmile", lit "M")
, ("neper", lit "Np")
, ("newton", lit "N")
, ("ohm", lit "Ω")
, ("Pa", lit "Pa")
, ("pascal", lit "Pa")
, ("percent", lit "%")
, ("per", lit "/")
, ("peta", lit "P")
, ("pico", lit "p")
, ("radian", lit "rad")
, ("second", lit "s")
, ("siemens", lit "S")
, ("sievert", lit "Sv")
, ("square", dosquare)
, ("steradian", lit "sr")
, ("tera", lit "T")
, ("tesla", lit "T")
, ("tonne", lit "t")
, ("volt", lit "V")
, ("watt", lit "W")
, ("weber", lit "Wb")
, ("yocto", lit "y")
, ("yotta", lit "Y")
, ("zepto", lit "z")
, ("zetta", lit "Z")
-- hyphenat
, ("bshyp", lit "\\\173")
, ("fshyp", lit "/\173")

6
test/command/4842.md Normal file
View file

@ -0,0 +1,6 @@
```
pandoc -f latex -t native
\l
^D
[Para [Str "\322"]]
```