Full LaTeX parser in Java

故事扮演 提交于 2020-04-09 22:12:16

问题


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?


回答1:


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.




回答2:


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)



来源:https://stackoverflow.com/questions/13777558/full-latex-parser-in-java

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!