Page 1 of 1

Docx equation color

PostPosted: Mon Oct 09, 2023 11:01 pm
by SoAruyy
Hello, i need to set color to math equations using docx4j. I am receiving latex equation converting it to MathML using SnuggleTex and after that converting MathML to OMML with MML2OMML.XSL file. Here is example of my code:
Code: Select all
public P convert(String formula, WordprocessingMLPackage wordprocessingMLPackage) {
        P paragraph = new P();

        formula = Jsoup.parse(formula).text();
        formula = formula.replace("checkmark", "lor").replaceAll("\\\\\\\\\\[[0-9.]+em\\]&", "");

        if (formula.equals("\\(\\)")) {
            return DocxToolkit.getP(" ");
        }
        if (!formula.isEmpty() && formula.charAt(0) != '\\') {
            return DocxToolkit.getP(formula);
        }
        if (formula.contains("\\underset") || formula.contains("\\phantom")) {
            paragraph.getContent().add(convertToImage(formula, wordprocessingMLPackage));
            return paragraph;
        }

        SnuggleEngine snuggleTeX = new SnuggleEngine();
        SnuggleSession session = snuggleTeX.createSession();

        SnuggleInput input = new SnuggleInput(formula);
        try {
            session.parseInput(input);
        } catch (IOException e) {
            log.error("Unable to convert latex formula: {}", formula);
        }

        String mathMLString = session.buildXMLString();
        String officeMathMLString = convertMathMLToOMML(mathMLString).replace("</m:t>", " </m:t>");

        JAXBElement<CTOMath> ctoMathParaJAXBElement;
        try {
            ctoMathParaJAXBElement =
                    (JAXBElement<CTOMath>) XmlUtils.unmarshalString(officeMathMLString);
        } catch (JAXBException e) {
            log.error("Unable to insert formula", e);
            return null;
        }

        paragraph.getContent().add(ctoMathParaJAXBElement);

        return paragraph;
    }

Re: Docx equation color

PostPosted: Thu Oct 12, 2023 8:45 am
by jason
In your resulting oMath, set w:rPr/w:color, for example:

Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
      <m:oMathPara>
        <m:oMath>
          <m:r>
            <w:rPr>
              <w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/>
              <w:color w:val="FF0000"/>
            </w:rPr>
            <m:t>A=π</m:t>
          </m:r>
          <m:sSup>
            <m:sSupPr>
              <m:ctrlPr>
                <w:rPr>
                  <w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/>
                  <w:color w:val="FF0000"/>
                </w:rPr>
              </m:ctrlPr>
            </m:sSupPr>
            <m:e>
              <m:r>
                <w:rPr>
                  <w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/>
                  <w:color w:val="FF0000"/>
                </w:rPr>
                <m:t>r</m:t>
              </m:r>
            </m:e>
            <m:sup>
              <m:r>
                <w:rPr>
                  <w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/>
                  <w:color w:val="FF0000"/>
                </w:rPr>
                <m:t>2</m:t>
              </m:r>
            </m:sup>
          </m:sSup>
        </m:oMath>
      </m:oMathPara>
 
Parsed in 0.003 seconds, using GeSHi 1.0.8.4


See https://github.com/plutext/docx4j/blob/ ... anish.java for clues about how to do that.