Representación de figuras LaTeX | Aspose.TeX para Java

Puede suceder que desee extraer algún contenido (un dibujo, un escrito, una trama, etc.) de un archivo LaTeX como una pieza renderizada por separado, o una “figura”, independientemente de su lugar en la página del documento de salida. . Este es el caso, por ejemplo, de una ilustración para su publicación en Internet. Nuestra API puede ayudarle con la tarea. Hay dos formatos de destino disponibles: PNG y SVG. Al igual que en la representación de fórmulas matemáticas de LaTeX. También debemos tener en cuenta que la representación de figuras LaTeX es una generalización de la representación de fórmulas matemáticas LaTeX.

Cómo renderizar una figura de LaTeX a PNG

Y al igual que con la representación de fórmulas, comenzaremos con un ejemplo. Aquí lo tienes:

Establezca outputFile en un java.nio.file.Path dentro de una carpeta existente, por ejemplo Paths.get(outputDirectory, "text-and-formula.png") para PNG o Paths.get(outputDirectory, "text-and-formula.svg") para SVG. Importe las clases de renderizador, opciones y Size2D de Aspose.TeX utilizadas, además de java.awt.Color, java.io.ByteArrayOutputStream, java.io.OutputStream, java.nio.file.Files, java.nio.file.Path, java.nio.file.Paths. El método que realiza la llamada debe capturar o declarar las excepciones. Aplique una licencia según la guía de licencias para evitar las restricciones de evaluación.

 1// Render a LaTeX figure to PNG.
 2// outputFile is a java.nio.file.Path in an existing output folder.
 3PngFigureRendererOptions options = new PngFigureRendererOptions();
 4options.setResolution(150);
 5options.setPreamble("\\usepackage{pict2e}");
 6options.setScale(3000); // 300%.
 7options.setMargin(5); // Leave space around the figure.
 8options.setBackgroundColor(Color.WHITE);
 9options.showTerminal(false);
10
11Size2D size;
12try (ByteArrayOutputStream log = new ByteArrayOutputStream();
13        OutputStream stream = Files.newOutputStream(outputFile)) {
14    options.setLogStream(log);
15    size = new PngFigureRenderer().render("\\setlength{\\unitlength}{0.8cm}\r\n" +
16            "\\begin{picture}(6,5)\r\n" +
17            "\\thicklines\r\n" +
18            "\\put(1,0.5){\\line(2,1){3}} \\put(4,2){\\line(-2,1){2}} \\put(2,3){\\line(-2,-5){1}} \\put(0.7,0.3){$A$} \\put(4.05,1.9){$B$} \\put(1.7,2.95){$C$}\r\n" +
19            "\\put(3.1,2.5){$a$} \\put(1.3,1.7){$b$} \\put(2.5,1.05){$c$} \\put(0.3,4){$F=\\sqrt{s(s-a)(s-b)(s-c)}$} \\put(3.5,0.4){$\\displaystyle s:=\\frac{a+b+c}{2}$}\r\n" +
20            "\\end{picture}", stream, options);
21    System.out.println(options.getErrorReport());
22    System.out.println("Size: " + size.getWidth() + "x" + size.getHeight());
23}

En primer lugar, creamos una instancia de opciones de renderizado. Lo hacemos aquí junto con la especificación de la resolución de la imagen de salida.

A continuación, especificamos el preámbulo. No hay un preámbulo predeterminado para la representación de figuras en LaTeX, por lo que si desea, por ejemplo, representar algunos gráficos trazados usando el paquete LaTeX pict2e, debe especificarlo en el preámbulo:

1\usepackage{pict2e}

Luego le indicamos al renderizador que escale la salida en un 300%. Los ejemplos también establecen un margen de 5 puntos con setMargin(5) alrededor de la figura. El ejemplo PNG utiliza 150 DPI.

La siguiente opción define el color de fondo. A diferencia de la representación de fórmulas matemáticas, no especificamos un color de primer plano ya que asumimos que los colores están completamente bajo el control del código LaTeX. De hecho, también lo es el color de fondo, por lo que esta es solo una opción conveniente.

El ejemplo dirige los registros de renderización a un ByteArrayOutputStream mediante setLogStream(). Los flujos del registro y de la imagen se cierran automáticamente después de renderizar.

showTerminal() controla la salida del terminal en la consola. Los ejemplos utilizan false; establezca true para mostrarla.

FigureRenderer.render() se llama en una instancia de PngFigureRenderer o SvgFigureRenderer y devuelve las dimensiones de la figura en puntos como un Size2D.

El método acepta el flujo de salida de la imagen como segundo argumento. El ejemplo lo abre en un bloque try-with-resources, que lo cierra después de renderizar.

Finalmente, llamamos a render() en la instancia del renderizador: la figura LaTeX es el primer argumento, el flujo de la imagen el segundo y las opciones de renderización el tercero.

Las últimas líneas del ejemplo imprimen dos artefactos de la representación de la figura: el tamaño de la figura y el breve informe de errores (en caso de que haya errores).

Aquí está el resultado del renderizado.

Representación de figuras LaTeX a PNG

Este es el caso de uso más general para la función Representación de figuras LaTeX.

Cómo renderizar una figura de LaTeX a SVG

De la misma manera, podemos renderizar una figura de LaTeX al formato SVG.

 1// Render a LaTeX figure to SVG.
 2// outputFile is a java.nio.file.Path in an existing output folder.
 3SvgFigureRendererOptions options = new SvgFigureRendererOptions();
 4options.setPreamble("\\usepackage{pict2e}");
 5options.setScale(3000); // 300%.
 6options.setMargin(5); // Leave space around the figure.
 7options.setBackgroundColor(Color.WHITE);
 8options.showTerminal(false);
 9
10Size2D size;
11try (ByteArrayOutputStream log = new ByteArrayOutputStream();
12        OutputStream stream = Files.newOutputStream(outputFile)) {
13    options.setLogStream(log);
14    size = new SvgFigureRenderer().render("\\setlength{\\unitlength}{0.8cm}\r\n" +
15            "\\begin{picture}(6,5)\r\n" +
16            "\\thicklines\r\n" +
17            "\\put(1,0.5){\\line(2,1){3}} \\put(4,2){\\line(-2,1){2}} \\put(2,3){\\line(-2,-5){1}} \\put(0.7,0.3){$A$} \\put(4.05,1.9){$B$} \\put(1.7,2.95){$C$}\r\n" +
18            "\\put(3.1,2.5){$a$} \\put(1.3,1.7){$b$} \\put(2.5,1.05){$c$} \\put(0.3,4){$F=\\sqrt{s(s-a)(s-b)(s-c)}$} \\put(3.5,0.4){$\\displaystyle s:=\\frac{a+b+c}{2}$}\r\n" +
19            "\\end{picture}", stream, options);
20    System.out.println(options.getErrorReport());
21    System.out.println("Size: " + size.getWidth() + "x" + size.getHeight());
22}

Las diferencias son:

Aquí está el resultado:

Representación de figuras LaTeX a SVG