packages feed

texmath 0.12.3.2 → 0.12.3.3

raw patch · 20 files changed

+321/−80 lines, 20 files

Files

changelog view
@@ -1,3 +1,26 @@+texmath (0.12.3.3)++  * OMML writer: use nary only for operators supported by LibreOffice+    (Albert Krewinkel).  LibreOffice (and possibly Word, too) can handle+    only a small set of operators in an `nary` element.++  * TeX writer: use `\xleftarrow`, `\xrightarrow` where sensible+    (Albert Krewinkel).  The commands are generated for expressions over `←`+    or `→`. Besides being more idiomatic, this change also prevents the+    generation of invalid LaTeX, as `\leftarrow` and `\rightarrow` are not+    math operators and hence may not be followed by `\limit`.+    Both commands are part of amsmath.sty.++  * TeX reader:++    + Improve angled-bracket support (Albert Krewinkel).+      The amsmath package allows `\left<` and `\right>` as alternatives to+      `\left\langle` and `\right\rangle`, respectively.+    + Ignore stared version of `\tag` (Albert Krewinkel).+    + Support \dots{c,b,m,i,o} from amsmath (#179).+    + Change symbol returned for \dots{b,i,m} from `…` to `⋯`+      (Albert Krewinkel).+ texmath (0.12.3.2)    * OMML writer: remove m:nor element in math operators (#178).
src/Text/TeXMath/Readers/TeX.hs view
@@ -32,7 +32,7 @@ import qualified Data.Map as M import qualified Data.Text as T import Data.Text (Text)-import Data.Maybe (mapMaybe, catMaybes)+import Data.Maybe (catMaybes, fromJust, mapMaybe) import Data.Semigroup ((<>)) import Text.Parsec hiding (label) import Text.Parsec.Error@@ -43,7 +43,6 @@ import qualified Text.TeXMath.Shared as S import Text.TeXMath.Readers.TeX.Macros (applyMacros, parseMacroDefinitions) import Text.TeXMath.Unicode.ToTeX (getSymbolType)-import Data.Maybe (fromJust) import Text.TeXMath.Unicode.ToUnicode (toUnicode) import Text.TeXMath.Shared (getSpaceChars) import Data.Generics (everywhere, mkT)@@ -151,7 +150,7 @@ label = ctrlseq "label" *> braces (skipMany (noneOf "}"))  tag :: TP ()-tag = ctrlseq "tag" *> braces (skipMany (noneOf "}"))+tag = ctrlseq "tag" *> optional (char '*') *> braces (skipMany (noneOf "}"))  unGrouped :: Exp -> [Exp] unGrouped (EGrouped xs) = xs@@ -191,6 +190,7 @@     , scaled c     , negated c     , siunitx c+    , arrow c     , tSymbol c     ] <|> unexpected ("control sequence " <> T.unpack c) @@ -356,7 +356,12 @@ fence :: String -> TP Text fence cmd = do   symbol cmd-  enc <- basicEnclosure <|> (try (symbol ".") >> return (ESymbol Open ""))+  let nullDelim = try (ESymbol Open "" <$ symbol ".")+      angleDelim = try $ choice+        [ ESymbol Open "\x27E8" <$ symbol "<"+        , ESymbol Close "\x27E9" <$ symbol ">"+        ]+  enc <- basicEnclosure <|> nullDelim <|> angleDelim   case enc of        ESymbol Open x  -> return x        ESymbol Close x -> return x@@ -1144,6 +1149,11 @@   , ("\\oint",ESymbol Op "\8750")   , ("\\prime",ESymbol Ord "\8242")   , ("\\dots",ESymbol Ord "\8230")+  , ("\\dotsc",ESymbol Ord "\8230")+  , ("\\dotso",ESymbol Ord "\8230")+  , ("\\dotsb",ESymbol Ord "\8943")+  , ("\\dotsi",ESymbol Ord "\8943")+  , ("\\dotsm",ESymbol Ord "\8943")   , ("\\ldots",ESymbol Ord "\8230")   , ("\\hdots",ESymbol Ord "\8230")   , ("\\cdots",ESymbol Ord "\8943")@@ -4488,4 +4498,16 @@     return $ [ESymbol Rel "\xa0\xd7\xa0", ESuper (ENumber "10") n ]   parseSpace = mempty <$ skipMany1 (char ' ') +arrow :: Text -> TP Exp+arrow c = case c of+  "\\xleftarrow"   -> underoverarrow "\x2190"+  "\\xrightarrow"  -> underoverarrow "\x2192"+  _                -> mzero+ where+  underoverarrow s = do+    munder <- optionMaybe inbrackets+    over <- texToken+    return $ case munder of+      Nothing    -> EOver False (ESymbol Op s) over+      Just under -> EUnderover False (ESymbol Op s) under over 
src/Text/TeXMath/Writers/OMML.hs view
@@ -286,8 +286,21 @@ isBarChar c = c == '\x203E' || c == '\x00AF' ||               c == '\x0304' || c == '\x0333' +-- | Checks whether an expression marks the start of an nary operator+-- expression. These are different integrals, sums, products, and+-- coproducts. isNary :: Exp -> Bool-isNary (ESymbol Op _) = True+isNary (ESymbol Op s) = case s of+  "\x222b" -> True  -- integral+  "\x222c" -> True  -- double integral+  "\x222d" -> True  -- triple integral+  "\x222e" -> True  -- line integral+  "\x222f" -> True  -- double line integral+  "\x2230" -> True  -- triple line integral+  "\x220f" -> True  -- product+  "\x2210" -> True  -- coproduct+  "\x2211" -> True  -- sum+  _        -> False isNary _ = False  -- Kept as String for Text.XML.Light
src/Text/TeXMath/Writers/TeX.hs view
@@ -208,24 +208,38 @@   tellGroup (writeExp e1)   tell [Token '^']   tellGroup (writeExp e2)-writeExp (EOver convertible b e1) =-  writeScript Over convertible b e1+writeExp (EOver convertible b e1) = do+  env <- asks mathEnv+  case xarrow b of+    Just arrowCtrlSeq | "amsmath" `elem` env -> do+      tell [arrowCtrlSeq]+      tellGroup (writeExp e1)+    _ -> writeScript Over convertible b e1 writeExp (EUnder convertible b e1) =   writeScript Under convertible b e1 writeExp (EUnderover convertible b e1@(ESymbol Accent _) e2) =  writeExp (EUnder convertible (EOver False b e2) e1) writeExp (EUnderover convertible b e1 e2@(ESymbol Accent _)) =  writeExp (EOver convertible (EUnder False b e1) e2)-writeExp (EUnderover convertible b e1 e2)-  | isOperator b = do-      (if isFancy b then tellGroup else id) $-        (if convertible then local setConvertible else id) $ writeExp b-      unless convertible $ tell [ControlSeq "\\limits"]-      tell [Token '_']-      tellGroup (checkSubstack e1)-      tell [Token '^']-      tellGroup (checkSubstack e2)-  | otherwise = writeExp (EUnder convertible (EOver convertible b e2) e1)+writeExp (EUnderover convertible b e1 e2) = do+  env <- asks mathEnv+  case xarrow b of+    Just arrowCtrlSeq | "amsmath" `elem` env -> do+      tell [arrowCtrlSeq]+      tell [Token '[']+      tellGroup $ writeExp e1+      tell [Token ']']+      tellGroup (writeExp e2)+    Nothing+      | isOperator b -> do+          (if isFancy b then tellGroup else id) $+            (if convertible then local setConvertible else id) $ writeExp b+          unless convertible $ tell [ControlSeq "\\limits"]+          tell [Token '_']+          tellGroup (checkSubstack e1)+          tell [Token '^']+          tellGroup (checkSubstack e2)+    _ -> writeExp (EUnder convertible (EOver convertible b e2) e1) writeExp (ESqrt e) = do     tell [ControlSeq "\\sqrt"]     tellGroup (writeExp e)@@ -396,6 +410,11 @@                                     Grouped [ControlSeq "\\textit",                                       Grouped [ControlSeq "\\textsf", x]]]         _  -> [ControlSeq "\\text", x]++xarrow :: Exp -> Maybe TeX+xarrow (ESymbol Op "\x2190") = Just $ ControlSeq "\\xleftarrow"+xarrow (ESymbol Op "\x2192") = Just $ ControlSeq "\\xrightarrow"+xarrow _ = Nothing  -- Commands which can be used with \left and \right delimiters :: Math [[TeX]]
+ tests/readers/tex/cospan.native view
@@ -0,0 +1,1 @@+[EIdentifier "B",EUnderover False (ESymbol Op "\8594") (EIdentifier "f") (EGrouped []),EIdentifier "A",EUnderover False (ESymbol Op "\8592") (EIdentifier "f") (EGrouped []),EIdentifier "C"]
+ tests/readers/tex/span.native view
@@ -0,0 +1,1 @@+[EIdentifier "Y",EOver False (ESymbol Op "\8592") (EIdentifier "f"),EIdentifier "X",EOver False (ESymbol Op "\8594") (EIdentifier "g"),EIdentifier "Z"]
+ tests/src/cospan.tex view
@@ -0,0 +1,2 @@+B \xrightarrow[f]{} A \xleftarrow[f]{} C+
tests/src/schwinger_dyson.tex view
@@ -1,1 +1,1 @@-   \left\langle\psi\left|\mathcal{T}\left\{\frac{\delta}{\delta\phi}F[\phi]\right\}\right|\psi\right\rangle = -\mathrm{i}\left\langle\psi\left|\mathcal{T}\left\{F[\phi]\frac{\delta}{\delta\phi}S[\phi]\right\}\right|\psi\right\rangle+   \left\langle\psi\left|\mathcal{T}\left\{\frac{\delta}{\delta\phi}F[\phi]\right\}\right|\psi\right\rangle = -\mathrm{i}\left<\psi\left|\mathcal{T}\left\{F[\phi]\frac{\delta}{\delta\phi}S[\phi]\right\}\right|\psi\right>
+ tests/src/span.tex view
@@ -0,0 +1,2 @@+Y \xleftarrow{f} X \xrightarrow{g} Z+
+ tests/writers/cospan.eqn view
@@ -0,0 +1,1 @@+B -> from f to {} A <- from f to {} C
+ tests/writers/cospan.mml view
@@ -0,0 +1,18 @@+<?xml version='1.0' ?>+<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">+  <mrow>+    <mi>B</mi>+    <munderover>+      <mo>→</mo>+      <mi>f</mi>+      <mrow />+    </munderover>+    <mi>A</mi>+    <munderover>+      <mo>←</mo>+      <mi>f</mi>+      <mrow />+    </munderover>+    <mi>C</mi>+  </mrow>+</math>
+ tests/writers/cospan.omml view
@@ -0,0 +1,65 @@+<?xml version='1.0' ?>+<m:oMathPara>+  <m:oMathParaPr>+    <m:jc m:val="center" />+  </m:oMathParaPr>+  <m:oMath>+    <m:r>+      <m:t>B</m:t>+    </m:r>+    <m:limLow>+      <m:e>+        <m:limUpp>+          <m:e>+            <m:r>+              <m:rPr>+                <m:sty m:val="p" />+              </m:rPr>+              <m:t>→</m:t>+            </m:r>+          </m:e>+          <m:lim>+            <m:r>+              <m:t>&#8203;</m:t>+            </m:r>+          </m:lim>+        </m:limUpp>+      </m:e>+      <m:lim>+        <m:r>+          <m:t>f</m:t>+        </m:r>+      </m:lim>+    </m:limLow>+    <m:r>+      <m:t>A</m:t>+    </m:r>+    <m:limLow>+      <m:e>+        <m:limUpp>+          <m:e>+            <m:r>+              <m:rPr>+                <m:sty m:val="p" />+              </m:rPr>+              <m:t>←</m:t>+            </m:r>+          </m:e>+          <m:lim>+            <m:r>+              <m:t>&#8203;</m:t>+            </m:r>+          </m:lim>+        </m:limUpp>+      </m:e>+      <m:lim>+        <m:r>+          <m:t>f</m:t>+        </m:r>+      </m:lim>+    </m:limLow>+    <m:r>+      <m:t>C</m:t>+    </m:r>+  </m:oMath>+</m:oMathPara>
+ tests/writers/cospan.tex view
@@ -0,0 +1,1 @@+B\xrightarrow[{f}]{}A\xleftarrow[{f}]{}C
tests/writers/deMorgans_law.omml view
@@ -136,14 +136,25 @@       </m:rPr>       <m:t>=</m:t>     </m:r>-    <m:nary>-      <m:naryPr>-        <m:chr m:val="⋂" />-        <m:limLoc m:val="undOvr" />-        <m:subHide m:val="0" />-        <m:supHide m:val="0" />-      </m:naryPr>-      <m:sub>+    <m:limLow>+      <m:e>+        <m:limUpp>+          <m:e>+            <m:r>+              <m:rPr>+                <m:sty m:val="p" />+              </m:rPr>+              <m:t>⋂</m:t>+            </m:r>+          </m:e>+          <m:lim>+            <m:r>+              <m:t>n</m:t>+            </m:r>+          </m:lim>+        </m:limUpp>+      </m:e>+      <m:lim>         <m:r>           <m:t>i</m:t>         </m:r>@@ -156,33 +167,26 @@         <m:r>           <m:t>1</m:t>         </m:r>-      </m:sub>-      <m:sup>-        <m:r>-          <m:t>n</m:t>-        </m:r>-      </m:sup>+      </m:lim>+    </m:limLow>+    <m:bar>+      <m:barPr>+        <m:pos m:val="top" />+      </m:barPr>       <m:e>-        <m:bar>-          <m:barPr>-            <m:pos m:val="top" />-          </m:barPr>+        <m:sSub>           <m:e>-            <m:sSub>-              <m:e>-                <m:r>-                  <m:t>A</m:t>-                </m:r>-              </m:e>-              <m:sub>-                <m:r>-                  <m:t>i</m:t>-                </m:r>-              </m:sub>-            </m:sSub>+            <m:r>+              <m:t>A</m:t>+            </m:r>           </m:e>-        </m:bar>+          <m:sub>+            <m:r>+              <m:t>i</m:t>+            </m:r>+          </m:sub>+        </m:sSub>       </m:e>-    </m:nary>+    </m:bar>   </m:oMath> </m:oMathPara>
tests/writers/largeopPos3.omml view
@@ -4,14 +4,25 @@     <m:jc m:val="center" />   </m:oMathParaPr>   <m:oMath>-    <m:nary>-      <m:naryPr>-        <m:chr m:val="⋂" />-        <m:limLoc m:val="undOvr" />-        <m:subHide m:val="0" />-        <m:supHide m:val="0" />-      </m:naryPr>-      <m:sub>+    <m:limLow>+      <m:e>+        <m:limUpp>+          <m:e>+            <m:r>+              <m:rPr>+                <m:sty m:val="p" />+              </m:rPr>+              <m:t>⋂</m:t>+            </m:r>+          </m:e>+          <m:lim>+            <m:r>+              <m:t>∞</m:t>+            </m:r>+          </m:lim>+        </m:limUpp>+      </m:e>+      <m:lim>         <m:r>           <m:t>i</m:t>         </m:r>@@ -24,26 +35,19 @@         <m:r>           <m:t>0</m:t>         </m:r>-      </m:sub>-      <m:sup>-        <m:r>-          <m:t>∞</m:t>-        </m:r>-      </m:sup>-      <m:e>-        <m:r>-          <m:t>A</m:t>-        </m:r>-        <m:r>-          <m:rPr>-            <m:sty m:val="p" />-          </m:rPr>-          <m:t>∩</m:t>-        </m:r>-        <m:r>-          <m:t>B</m:t>-        </m:r>-      </m:e>-    </m:nary>+      </m:lim>+    </m:limLow>+    <m:r>+      <m:t>A</m:t>+    </m:r>+    <m:r>+      <m:rPr>+        <m:sty m:val="p" />+      </m:rPr>+      <m:t>∩</m:t>+    </m:r>+    <m:r>+      <m:t>B</m:t>+    </m:r>   </m:oMath> </m:oMathPara>
+ tests/writers/span.eqn view
@@ -0,0 +1,1 @@+Y <- to f X -> to g Z
+ tests/writers/span.mml view
@@ -0,0 +1,16 @@+<?xml version='1.0' ?>+<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">+  <mrow>+    <mi>Y</mi>+    <mover>+      <mo>←</mo>+      <mi>f</mi>+    </mover>+    <mi>X</mi>+    <mover>+      <mo>→</mo>+      <mi>g</mi>+    </mover>+    <mi>Z</mi>+  </mrow>+</math>
+ tests/writers/span.omml view
@@ -0,0 +1,47 @@+<?xml version='1.0' ?>+<m:oMathPara>+  <m:oMathParaPr>+    <m:jc m:val="center" />+  </m:oMathParaPr>+  <m:oMath>+    <m:r>+      <m:t>Y</m:t>+    </m:r>+    <m:limUpp>+      <m:e>+        <m:r>+          <m:rPr>+            <m:sty m:val="p" />+          </m:rPr>+          <m:t>←</m:t>+        </m:r>+      </m:e>+      <m:lim>+        <m:r>+          <m:t>f</m:t>+        </m:r>+      </m:lim>+    </m:limUpp>+    <m:r>+      <m:t>X</m:t>+    </m:r>+    <m:limUpp>+      <m:e>+        <m:r>+          <m:rPr>+            <m:sty m:val="p" />+          </m:rPr>+          <m:t>→</m:t>+        </m:r>+      </m:e>+      <m:lim>+        <m:r>+          <m:t>g</m:t>+        </m:r>+      </m:lim>+    </m:limUpp>+    <m:r>+      <m:t>Z</m:t>+    </m:r>+  </m:oMath>+</m:oMathPara>
+ tests/writers/span.tex view
@@ -0,0 +1,1 @@+Y\xleftarrow{f}X\xrightarrow{g}Z
texmath.cabal view
@@ -1,5 +1,5 @@ Name:                texmath-Version:             0.12.3.2+Version:             0.12.3.3 Cabal-Version:       >= 1.10 Build-type:          Simple Synopsis:            Conversion between formats used to represent mathematics.