LaTeX 図のレンダリング | Aspose.TeX for Java
LaTeX ファイルからコンテンツ(図形、文章、プロット等)を別々にレンダリングされたパーツ、つまり 「図」 として抽出したい場合があります。たとえば、インターネット上で公開する出版物のイラストの場合です。弊社の API がこのタスクを支援します。利用できる出力形式は PNG と SVG の 2 種類です。LaTeX 数式のレンダリングと同様です。また、LaTeX 図のレンダリングは LaTeX 数式のレンダリング の一般化であることに留意してください。
LaTeX 図を 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 図のレンダリングにはデフォルトの前文がありません。そのため、たとえば pict2e パッケージを使用したグラフを描画したい場合は、前文に以下のように記述する必要があります。
1\usepackage{pict2e}その後、レンダラに出力を 300% に拡大するよう指示します。 また、setMargin(5) で図の周囲に 5 ポイントの余白を設定します。PNG の例では 150 DPI を使用します。
次のオプションは背景色を定義します。数式レンダリングとは異なり、前景色は指定しません。なぜなら、色はすべて LaTeX のコードで制御されていると想定しているからです。背景色も同様に LaTeX が管理するため、これは便利なオプションにすぎません。
この例では setLogStream() を使い、レンダリングのログを ByteArrayOutputStream に書き込みます。ログと画像の出力ストリームはレンダリング後に自動的に閉じられます。
showTerminal() はコンソールへのターミナル出力を制御します。例では false に設定しています。表示するには true に設定してください。
FigureRenderer.render() は PngFigureRenderer または SvgFigureRenderer のインスタンスで呼び出し、図の寸法をポイント単位の Size2D として返します。
メソッドの第 2 引数には画像の出力ストリームを渡します。この例では try-with-resources ブロックで開き、レンダリング後に閉じます。
最後にレンダラーのインスタンスで render() を呼び出します。第 1 引数は LaTeX 図、第 2 引数は画像の出力ストリーム、第 3 引数はレンダリングオプションです。
例の最後の行では、図のサイズとエラーレポート(エラーがある場合)という二つの情報を出力しています。
以下がレンダリング結果です。

これは LaTeX 図のレンダリング 機能の最も一般的な使用例です。
LaTeX 図を SVG にレンダリングする方法
ほぼ同様の手順で、LaTeX 図を 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}相違点は次のとおりです。
- SvgFigureRendererOptions クラスを、 PngFigureRendererOptions の代わりに使用します。
- 解像度を指定しません。
- SvgFigureRenderer クラスを、 PngFigureRenderer の代わりに使用します。
結果は以下の通りです。