Rendu de figures LaTeX | Java

Il peut arriver que vous souhaitiez extraire du contenu (un dessin, une écriture, un tracé, etc.) d’un fichier LaTeX sous la forme d’un élément rendu séparément, ou d’une “figure”, quelle que soit sa place sur la page du document de sortie. . Une illustration pour votre publication sur Internet, par exemple, est le cas. Notre API peut vous aider dans cette tâche. Il existe deux formats cibles disponibles : PNG et SVG. Tout comme dans le rendu des formules mathématiques LaTeX. Nous devons également noter que le rendu de figures LaTeX est une généralisation du rendu de formules mathématiques LaTeX.

Comment rendre une figure LaTeX en PNG

Et comme pour le rendu de formule, nous commencerons par un exemple. C’est ici:

Définissez outputFile comme un java.nio.file.Path dans un dossier existant, par exemple Paths.get(outputDirectory, "text-and-formula.png") pour PNG ou Paths.get(outputDirectory, "text-and-formula.svg") pour SVG. Importez les classes de moteur de rendu, d’options et Size2D d’Aspose.TeX utilisées, ainsi que java.awt.Color, java.io.ByteArrayOutputStream, java.io.OutputStream, java.nio.file.Files, java.nio.file.Path, java.nio.file.Paths. La méthode appelante doit gérer ou déclarer les exceptions. Appliquez une licence selon le guide des licences pour éviter les restrictions d’évaluation.

 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}

Tout d’abord, nous créons une instance options de rendu. Nous le faisons ici en spécifiant la résolution de l’image de sortie.

Ensuite, nous précisons le préambule. Il n’y a pas de préambule par défaut pour le rendu des figures LaTeX, donc si vous souhaitez, par exemple, restituer certains graphiques tracés à l’aide du package LaTeX pict2e, vous devez le spécifier dans le préambule :

1\usepackage{pict2e}

Ensuite, nous demandons au moteur de rendu de mettre à l’échelle la sortie de 300 %. Les exemples définissent aussi une marge de 5 points avec setMargin(5) autour de la figure. L’exemple PNG utilise 150 DPI.

L’option suivante définit la couleur d’arrière-plan. Contrairement au rendu de formules mathématiques, nous ne spécifions pas de couleur de premier plan puisque nous supposons que les couleurs sont entièrement sous le contrôle du code LaTeX. En fait, la couleur d’arrière-plan l’est également, ce n’est donc qu’une option pratique.

L’exemple dirige les journaux de rendu vers un ByteArrayOutputStream avec setLogStream(). Les flux du journal et de l’image sont fermés automatiquement après le rendu.

showTerminal() contrôle la sortie du terminal sur la console. Les exemples utilisent false ; définissez true pour l’afficher.

FigureRenderer.render() est appelé sur une instance de PngFigureRenderer ou SvgFigureRenderer et renvoie les dimensions de la figure en points sous forme de Size2D.

La méthode accepte le flux de sortie de l’image comme deuxième argument. L’exemple l’ouvre dans un bloc try-with-resources, qui le ferme après le rendu.

Enfin, nous appelons render() sur l’instance du moteur de rendu : la figure LaTeX est le premier argument, le flux de l’image le deuxième et les options de rendu le troisième.

Les dernières lignes de l’exemple impriment deux artefacts de rendu de figure : la taille de la figure et le bref rapport d’erreur (en cas d’erreurs).

Voici le résultat du rendu.

Rendu de la figure LaTeX en PNG

Il s’agit du cas d’utilisation le plus général de la fonctionnalité Rendu de figures LaTeX.

Comment rendre une figure LaTeX en SVG

De la même manière, nous pouvons restituer une figure LaTeX au format 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}

Les différences sont :

Voici le résultat :

Rendu de figures LaTeX en SVG