Rendering di figura in LaTeX | Java

Può succedere che tu voglia estrarre alcuni contenuti (un disegno, una scrittura, una trama, ecc.) Da un file LaTeX come pezzo reso separatamente o una *figura * *, indipendentemente dal suo posto su una pagina del documento di output. È così un illustrazione per la tua pubblicazione su Internet, ad esempio. La nostra API può aiutarti con l’attività. Esistono due formati target disponibili: PNG e SVG. Proprio come nel rendering della formula matematica in LaTeX. Dobbiamo anche notare che il rendering di figura in LaTeX è una generalizzazione del rendering di formula matematica in LaTeX.

Come rendere una figura in LaTeX a png

E come per il rendering della formula, inizieremo con un esempio. Ecco qui:

Impostare outputFile su un java.nio.file.Path in una cartella esistente, ad esempio Paths.get(outputDirectory, "text-and-formula.png") per PNG o Paths.get(outputDirectory, "text-and-formula.svg") per SVG. Importare le classi Aspose.TeX del renderer, delle opzioni e Size2D utilizzate, oltre a java.awt.Color, java.io.ByteArrayOutputStream, java.io.OutputStream, java.nio.file.Files, java.nio.file.Path, java.nio.file.Paths. Il metodo chiamante deve gestire o dichiarare le eccezioni. Applicare una licenza secondo la guida alle licenze per evitare le limitazioni della versione di valutazione.

 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}

Prima di tutto, creiamo un’istanza di rendering options. Lo facciamo qui insieme a specificare la risoluzione dell’immagine di output.

Successivamente, specifichiamo il preambolo. Non esiste un preambolo predefinito per il rendering delle figure in LaTeX, quindi se si desidera, ad esempio, per rendere una grafica tracciata utilizzando il pacchetto Pict2e Latex, è necessario specificarlo nel preambolo:

1\usepackage{pict2e}

Quindi istruiamo il rendering di ridimensionare l’output del 300%. Gli esempi impostano anche un margine di 5 punti con setMargin(5) intorno alla figura. L’esempio PNG utilizza 150 DPI.

L’opzione successiva definisce il colore di sfondo. A differenza del rendering della formula matematica, non specifichiamo un colore in primo piano poiché supponiamo che i colori siano interamente sotto il controllo del codice LaTeX. In effetti, così è il colore di sfondo, quindi questa è solo un’opzione di convenienza.

L’esempio indirizza i log di rendering a un ByteArrayOutputStream con setLogStream(). I flussi del log e dell’immagine vengono chiusi automaticamente dopo il rendering.

showTerminal() controlla l’output del terminale sulla console. Gli esempi utilizzano false; impostare true per visualizzarlo.

FigureRenderer.render() viene chiamato su un’istanza di PngFigureRenderer o SvgFigureRenderer e restituisce le dimensioni della figura in punti come Size2D.

Il metodo accetta il flusso di output dell’immagine come secondo argomento. L’esempio lo apre in un blocco try-with-resources, che lo chiude dopo il rendering.

Infine, chiamiamo render() sull’istanza del renderer: la figura LaTeX è il primo argomento, il flusso dell’immagine il secondo e le opzioni di rendering il terzo.

Le ultime righe dell’esempio stampano due artefatti del rendering della figura: la dimensione della figura e il breve rapporto di errore (nel caso in cui vi siano errori).

Ecco il risultato del rendering.

Figura in LaTeX rendering a png

Questo è il caso d’uso più generale per la funzione Latex Figure.

Come rendere una figura in LaTeX a SVG

Allo stesso modo, possiamo rendere una figura in 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}

Le differenze sono:

Ecco il risultato:

Figura in LaTeX Rendering a SVG