LaTeX-Figurenrendering | Aspose.TeX für Java

Es kann vorkommen, dass Sie Inhalte (eine Zeichnung, eine Schrift, einen Plot usw.) aus einer LaTeX-Datei als separat gerendertes Stück oder als „Figur“ extrahieren möchten, unabhängig von ihrer Position auf einer Ausgabedokumentseite . Eine Illustration für Ihre Veröffentlichung im Internet ist beispielsweise der Fall. Unsere API kann Ihnen bei dieser Aufgabe helfen. Es stehen zwei Zielformate zur Verfügung: PNG und SVG. Genau wie beim Rendern mathematischer Formeln in LaTeX. Wir müssen auch beachten, dass LaTeX-Figuren-Rendering eine Verallgemeinerung von LaTeX-Mathe-Formel-Rendering ist.

So rendern Sie eine LaTeX-Figur in PNG

Und wie bei der Formeldarstellung beginnen wir mit einem Beispiel. Hier ist es:

Setzen Sie outputFile auf einen java.nio.file.Path in einem vorhandenen Ordner, beispielsweise Paths.get(outputDirectory, "text-and-formula.png") für PNG oder Paths.get(outputDirectory, "text-and-formula.svg") für SVG. Importieren Sie die verwendeten Aspose.TeX-Renderer-, Options- und Size2D-Klassen sowie java.awt.Color, java.io.ByteArrayOutputStream, java.io.OutputStream, java.nio.file.Files, java.nio.file.Path, java.nio.file.Paths. Die aufrufende Methode muss Ausnahmen behandeln oder deklarieren. Wenden Sie gemäß der Lizenzierungsanleitung eine Lizenz an, um Evaluierungseinschränkungen zu vermeiden.

 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}

Zunächst erstellen wir eine rendering options-Instanz. Wir tun dies hier zusammen mit der Angabe der Ausgabebildauflösung.

Als nächstes spezifizieren wir die Präambel. Es gibt keine Standard-Präambel für die Darstellung von LaTeX-Figuren. Wenn Sie also beispielsweise einige Grafiken rendern möchten, die mit dem LaTeX-Paket „pict2e“ geplottet wurden, müssen Sie dies in der Präambel angeben:

1\usepackage{pict2e}

Dann weisen wir den Renderer an, die Ausgabe um 300 % zu skalieren. Die Beispiele setzen außerdem mit setMargin(5) einen Rand von 5 Punkten um die Figur. Das PNG-Beispiel verwendet 150 DPI.

Die nächste Option definiert die Hintergrundfarbe. Anders als beim Rendern mathematischer Formeln geben wir keine Vordergrundfarbe an, da wir davon ausgehen, dass die Farben vollständig vom LaTeX-Code gesteuert werden. Tatsächlich gilt dies auch für die Hintergrundfarbe, es handelt sich also lediglich um eine praktische Option.

Das Beispiel leitet Rendering-Protokolle mit setLogStream() an einen ByteArrayOutputStream weiter. Protokoll- und Bildausgabestream werden nach dem Rendern automatisch geschlossen.

showTerminal() steuert die Terminalausgabe in der Konsole. Die Beispiele verwenden false; setzen Sie true, um die Ausgabe anzuzeigen.

FigureRenderer.render() wird auf einer PngFigureRenderer- oder SvgFigureRenderer-Instanz aufgerufen und gibt die Figurgröße in Punkten als Size2D zurück.

Die Methode akzeptiert den Bildausgabestream als zweites Argument. Das Beispiel öffnet ihn in einem try-with-resources-Block, der ihn nach dem Rendern schließt.

Schließlich rufen wir render() auf der Renderer-Instanz auf: Die LaTeX-Figur ist das erste Argument, der Bildausgabestream das zweite und die Rendering-Optionen das dritte.

Die letzten Zeilen des Beispiels geben zwei Artefakte der Figurendarstellung aus – die Größe der Figur und den kurzen Fehlerbericht (falls Fehler vorliegen).

Hier ist das Ergebnis des Renderns.

LaTeX-Figuren-Rendering in PNG

Dies ist der allgemeinste Anwendungsfall für die Funktion LaTeX-Figurenrendering.

So rendern Sie eine LaTeX-Figur in SVG

Auf die gleiche Weise können wir eine LaTeX-Figur in das SVG-Format rendern.

 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}

Die Unterschiede sind:

Hier ist das Ergebnis:

LaTeX-Figuren-Rendering in SVG