LaTeX 图形渲染 | Aspose.TeX for Java

有时您可能想要从 LaTeX 文件中提取某些内容(绘图、文字、图表等),作为单独渲染的片段,即*“figure”*,而不考虑它在输出文档页面上的位置。例如,为了在互联网上发布的插图。我们的 API 可以帮助您完成此任务。提供两种目标格式——PNG 和 SVG。就像 LaTeX 数学公式渲染一样。我们还需指出,LaTeX figure rendering 是 LaTeX math formula rendering 的推广。

如何将 LaTeX figure 渲染为 PNG

正如公式渲染一样,我们将从一个示例开始。示例如下:

将 outputFile 设置为现有文件夹中的 java.nio.file.Path,例如 PNG 使用 Paths.get(outputDirectory, "text-and-formula.png"),SVG 使用 Paths.get(outputDirectory, "text-and-formula.svg")。导入使用的 Aspose.TeX 渲染器、选项和 Size2D 类,以及 java.awt.Color, java.io.ByteArrayOutputStream, java.io.OutputStream, java.nio.file.Files, java.nio.file.Path, java.nio.file.Paths。调用方法必须处理或声明异常。请按照 许可指南应用许可证,以避免评估版限制。

 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}

首先,我们创建一个 渲染选项 实例。在这里同时指定输出图像的分辨率。

接下来,我们指定前导代码(preamble)。LaTeX figure rendering 没有默认的前导代码,因此如果您想渲染使用 pict2e LaTeX 包绘制的图形,需要在前导代码中声明它:

1\usepackage{pict2e}

然后,我们指示渲染器将输出按 300% 缩放。 示例还通过 setMargin(5) 在图形周围设置 5 点的边距。PNG 示例使用 150 DPI。

下一个选项定义背景颜色。与数学公式渲染不同,我们不指定前景色,因为我们假设颜色完全由 LaTeX 代码控制。事实上,背景色也是如此,这只是一个便利选项。

示例通过 setLogStream() 将渲染日志写入 ByteArrayOutputStream。日志和图像输出流在渲染后自动关闭。

showTerminal() 控制是否将终端输出写入控制台。示例设置为 false;设置为 true 即可显示输出。

FigureRenderer.render() 在 PngFigureRenderer 或 SvgFigureRenderer 实例上调用,并以 Size2D 返回以点为单位的图形尺寸。

方法的第二个参数是图像输出流。示例在 try-with-resources 块中打开它,并在渲染后关闭。

最后在渲染器实例上调用 render():第一个参数是 LaTeX 图形,第二个参数是图像输出流,第三个参数是渲染选项。

示例的最后几行打印了图形渲染的两个结果——图形大小以及简要的错误报告(如果有错误)。

以下是渲染结果。

LaTeX 图形渲染为 PNG

这是 LaTeX figure rendering 功能的最通用用例。

如何将 LaTeX figure 渲染为 SVG

以类似的方式,我们可以将 LaTeX figure 渲染为 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}

区别如下:

以下是结果:

LaTeX 图形渲染为 SVG