LaTeX Рендеринг фигур | Aspose.TeX для .NET
Иногда вам может потребоваться извлечь некоторый контент из файла LaTeX в виде отдельно визуализируемого фрагмента или “фигуры” без какой-либо связи с макетом страницы. Это может быть, например, иллюстрация к вашей публикации в Интернете. Вы можете сделать это с помощью нашего API. Что касается целевых форматов, то здесь есть два варианта — PNG и SVG. Как и в случае с функцией рендеринга математических формул LaTeX. Также стоит отметить, что рендеринг фигур LaTeX является обобщением рендеринга математических формул LaTeX.
Как преобразовать фигуру LaTeX в PNG
Справочный раздел API, связанный с этой темой, находится здесь. Как и в случае с рендерингом формул, мы начнем с примера. Вот:
1// Create rendering options setting the image resolution to 150 dpi.
2PngFigureRendererOptions options = new PngFigureRendererOptions();
3options.Resolution = 150;
4// Specify the preamble.
5options.Preamble = "\\usepackage{pict2e}";
6// Specify the scaling factor 300%.
7options.Scale = 3000;
8// Specify the background color.
9options.BackgroundColor = System.Drawing.Color.White;
10// Specify the output stream for the log file.
11options.LogStream = new System.IO.MemoryStream();
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.
16using (System.IO.Stream stream = System.IO.File.Open(
17 System.IO.Path.Combine(RunExamples.OutputDirectory, "text-and-formula.png"), System.IO.FileMode.Create))
18{
19 // Run rendering.
20 System.Drawing.SizeF size = new PngFigureRenderer().Render(@"\setlength{\unitlength}{0.8cm}
21\begin{picture}(6,5)
22\thicklines
23\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$}
24\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}$}
25\end{picture}", stream, options);
26
27 // Show other results.
28 System.Console.Out.WriteLine(options.ErrorReport);
29 System.Console.Out.WriteLine();
30 System.Console.Out.WriteLine("Size: " + size); // Dimensions of the resulting image.
31}
Прежде всего, мы создаем экземпляр Параметры фигуры LaTeX. Мы делаем это здесь, одновременно указывая разрешение выходного изображения.
Далее уточняем преамбулу. Для рендеринга фигур LaTeX нет преамбулы по умолчанию, поэтому, если вы, например, собираетесь визуализировать некоторую графику, построенную с использованием пакета LaTeX pict2e
, вам необходимо указать ее в преамбуле:
1\usepackage{pict2e}
Затем мы указываем рендереру масштабировать результат на 300%.
Следующая опция определяет цвет фона. В отличие от рендеринга математических формул, мы не указываем цвет переднего плана, поскольку предполагаем, что цвета полностью находятся под контролем кода LaTeX. Собственно, как и цвет фона, так что это просто опция для удобства.
Следующая строка примера не имеет особого смысла. Это просто демонстрирует, что вы можете направить вывод журнала в какой-то поток.
И последняя опция «ShowTerminal» позволяет вам переключать запись вывода терминала на консоль.
Метод, который фактически выполняет рендеринг, — это FigureRenderer.Render(). Возвращает размер фигуры в пунктах.
Поток, в который должно быть записано изображение, принимается методом в качестве второго аргумента. Далее мы создаем поток.
И, наконец, мы вызываем сам метод «FigureRenderer.Render()», передавая параметры в качестве третьего аргумента. Код LaTeX рисунка передается в качестве первого аргумента.
В последних строках примера выводятся два артефакта отрисовки фигуры — размер фигуры и краткий отчет об ошибке (в случае возникновения ошибок).
Вот результат рендеринга.
Это наиболее общий вариант использования функции рендеринга фигур LaTeX.
Как преобразовать фигуру LaTeX в SVG
Примерно таким же образом мы можем визуализировать фигуру LaTeX в формате SVG.
1// Create rendering options.
2FigureRendererOptions options = new SvgFigureRendererOptions();
3// Specify the preamble.
4options.Preamble = "\\usepackage{pict2e}";
5// Specify the scaling factor 300%.
6options.Scale = 3000;
7// Specify the background color.
8options.BackgroundColor = System.Drawing.Color.White;
9// Specify the output stream for the log file.
10options.LogStream = new System.IO.MemoryStream();
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.
15using (System.IO.Stream stream = System.IO.File.Open(
16 System.IO.Path.Combine(RunExamples.OutputDirectory, "text-and-formula.svg"), System.IO.FileMode.Create))
17{
18 // Run rendering.
19 System.Drawing.SizeF size = new SvgFigureRenderer().Render(@"\setlength{\unitlength}{0.8cm}
20\begin{picture}(6,5)
21\thicklines
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$}
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}$}
24\end{picture}", stream, options);
25
26 // Show other results.
27 System.Console.Out.WriteLine(options.ErrorReport);
28 System.Console.Out.WriteLine();
29 System.Console.Out.WriteLine("Size: " + size); // Dimensions of the resulting image.
30}
Отличия заключаются в следующем:
- Мы используем класс SvgFigureRendererOptions вместо PngFigureRendererOptions.
- Разрешение не указываем.
- Мы используем класс SvgFigureRenderer вместо PngFigureRenderer.
Вот результат: