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:
1// Create rendering options setting the image resolution to 150 dpi.
2PngFigureRendererOptions options = new PngFigureRendererOptions();
3options.setResolution(150);
4// Specify the preamble.
5options.setPreamble("\\usepackage{pict2e}");
6// Specify the scaling factor 300%.
7options.setScale(3000);
8// Specify the background color.
9options.setBackgroundColor(Color.WHITE);
10// Specify the output stream for the log file.
11options.setLogStream(new ByteArrayOutputStream());
12// Specify whether to show the terminal output on the console or not.
13options.showTerminal(true);
14
15// Create the output stream for the figure image.
16final OutputStream stream = new FileOutputStream(Utils.getOutputDirectory() + "text-and-formula.png");
17try {
18 // Run rendering.
19 com.aspose.tex.Size2D size = new PngFigureRenderer().render("\\setlength{\\unitlength}{0.8cm}\r\n" +
20 "\\begin{picture}(6,5)\r\n" +
21 "\\thicklines\r\n" +
22 "\\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" +
23 "\\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" +
24 "\\end{picture}", stream, options);
25
26 // Show other results.
27 System.out.println(options.getErrorReport());
28 System.out.println();
29 System.out.println("Size: " + size.getWidth() + "x" + size.getHeight()); // Dimensions of the resulting image.
30} finally {
31 if (stream != null)
32 stream.close();
33}
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%.
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.
La riga successiva dell’esempio non ha molto senso. Dimostra solo che è possibile indirizzare l’output del registro su un flusso.
E l’ultima opzione showterminal
consente di attivare la scrittura dell’output del terminale sulla console.
Il metodo che esegue effettivamente il rendering è FigureRender.Render(). Restituisce le dimensioni della figura in punti.
Il flusso in cui l’immagine deve essere scritta è accettato dal metodo come secondo argomento. Creiamo il flusso dopo.
E infine, chiamiamo il metodo figurerender.render()
, passando le opzioni come terzo argomento. Il codice in LaTeX della figura viene approvato come primo argomento.
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.
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// Create rendering options.
2SvgFigureRendererOptions options = new SvgFigureRendererOptions();
3// Specify the preamble.
4options.setPreamble("\\usepackage{pict2e}");
5// Specify the scaling factor 300%.
6options.setScale(3000);
7// Specify the background color.
8options.setBackgroundColor(Color.WHITE);
9// Specify the output stream for the log file.
10options.setLogStream(new ByteArrayOutputStream());
11// Specify whether to show the terminal output on the console or not.
12options.showTerminal(true);
13
14// Create the output stream for the figure image.
15final OutputStream stream = new FileOutputStream(Utils.getOutputDirectory() + "text-and-formula.svg");
16try {
17 // Run rendering.
18 com.aspose.tex.Size2D size = new SvgFigureRenderer().render("\\setlength{\\unitlength}{0.8cm}\r\n" +
19 "\\begin{picture}(6,5)\r\n" +
20 "\\thicklines\r\n" +
21 "\\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" +
22 "\\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" +
23 "\\end{picture}", stream, options);
24
25 // Show other results.
26 System.out.println(options.getErrorReport());
27 System.out.println();
28 System.out.println("Size: " + size.getWidth() + "x" + size.getHeight()); // Dimensions of the resulting image.
29} finally {
30 if (stream != null)
31 stream.close();
32}
Le differenze sono:
- Usiamo la classe SVGFigureRenderEroptions anziché PNGFURESTERERIPTIONS.
- Non specifichiamo la risoluzione.
- Usiamo la classe svgfigurerender anziché pngfigurerender.
Ecco il risultato: