Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Full LaTeX parser in Java [closed]

Tags:

java

latex

tex

I've written small Java application to create printable flashcards for my Maths revision.

At the moment, I'm using JLaTeXMath to generate the images for each side from LaTeX.

The only problem is, that JLaTeXMath seems to be limited to LaTeX formula. I want to use the same program to create flashcards for other subjects such as Biology, where the questions and answers will be text based (rather than equation based) and LaTeX formula's aren't suitable for this.

Are there any Java libraries that can parse LaTeX? Or is there a better way of doing this?

like image 709
Todd Davies Avatar asked Dec 08 '12 12:12

Todd Davies


2 Answers

LaTeX is a full programming language. Parsing it means executing the program.

While it seems to be simple in many of the common cases - \section etc. - it is by far not trivial. In fact, it should be turing complete. And some parts will even have a more or less different syntax. Take TIKZ for example - an excellent graph drawing library for LaTeX. It's syntax is somewhat like latex, but other parts are more that of modern programming languages. And a lot is like stylesheets.

However, you might be able to get away with supporting just part of the latex syntax. Have a look at what Texlipse does. It's in Java.

like image 156
Has QUIT--Anony-Mousse Avatar answered Oct 03 '22 18:10

Has QUIT--Anony-Mousse


I would use JLaTeXMath:

"JLaTeXMath is the best Java library to display LaTeX code."


import org.scilab.forge.jlatexmath.TeXConstants;
import org.scilab.forge.jlatexmath.TeXFormula;

public class Example5 {

    public static void main(String[] args) {

        String latex = "\\begin{array}{|c|l|||r|c|}";
        latex += "\\hline";
        latex += "\\text{Matrix}&\\multicolumn{2}{|c|}{\\text{Multicolumns}}&\\text{Font sizes commands}\\cr";
        latex += "\\hline";
        latex += "\\begin{pmatrix}\\alpha_{11}&\\cdots&\\alpha_{1n}\\cr\\hdotsfor{3}\\cr\\alpha_{n1}&\\cdots&\\alpha_{nn}\\end{pmatrix}&\\Large \\text{Large Right}&\\small \\text{small Left}&\\tiny \\text{tiny Tiny}\\cr";
        latex += "\\hline";
        latex += "\\multicolumn{4}{|c|}{\\Huge \\text{Huge Multicolumns}}\\cr";
        latex += "\\hline";
        latex += "\\end{array}";

        TeXFormula formula = new TeXFormula(latex);
        formula.createPNG(TeXConstants.STYLE_DISPLAY, 20, "target/Example5.png", Color.white, Color.black);
    }
}

Source for TeXFormula: https://github.com/opencollab/jlatexmath/blob/7995ce52b2699c9a3a8428a94c1f3762cdcb0284/jlatexmath/src/main/java/org/scilab/forge/jlatexmath/TeXFormula.java#L244

Other solutions

  • SnuggleTeX - seems to have a good parser, too. See the calling at https://sourceforge.net/p/snuggletex/code/HEAD/tree/trunk/snuggletex-core/src/main/java/uk/ac/ed/ph/snuggletex/samples/MinimalExample.java.
  • JavaTex: https://sourceforge.net/projects/javatex/files/javatex/V0.2/. Seems to be a complete LaTeX engine.
  • JavaTeX from CTAN - from 1998, but might still perform well.

(partially based on https://tex.stackexchange.com/q/41609/9075)

like image 31
koppor Avatar answered Oct 03 '22 19:10

koppor