La renderización de batch LaTeX a PNG es un requisito común para la documentación web, las bases de conocimientos y las aplicaciones matemáticas pesadas. Aspose.TEX para .NET proporciona una API sencilla para convertir .tex fuentes en imágenes raster con control sobre directorios de salida y resolución.Este artículo muestra un convertidor de archivo único mínimo y un robusto pipeline de batch que puede caer en cualquier aplicación .NET.

Prerequisitos

  • .NET 6 o más tarde
  • NuGet paquete: Aspose.TeX
  • Fuentes de LaTeX que compilan bajo el motor de Object LaTEX utilizado por Aspose.Tex

Aspose.TeX expuesto TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX), ImageDevice, y PngSaveOptions Producción de PNG.

Conversión mínima: un archivo LaTeX a PNG

Este ejemplo convierte hello-world.ltx (o .tex) a PNG en una carpeta de salida. el dispositivo escribe los archivos de imagen directamente.

// File: Program.cs
// NuGet: Aspose.TeX

using System;
using System.IO;
using Aspose.TeX;

class Program
{
    static void Main()
    {
        var inputFile  = Path.GetFullPath("hello-world.tex"); // or .ltx
        var outputDir  = Path.GetFullPath("out-png");
        Directory.CreateDirectory(outputDir);

        // 1) Create conversion options for Object LaTeX
        TeXOptions options = TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX);

        // 2) Choose where to write output files
        options.OutputWorkingDirectory = new OutputFileSystemDirectory(outputDir);

        // 3) Save as PNG (you can set resolution if required)
        var png = new PngSaveOptions
        {
            // Resolution = 300 // uncomment to render at 300 DPI
        };
        options.SaveOptions = png;

        // 4) Run the job. ImageDevice writes PNG files into the output directory.
        var device = new ImageDevice();
        new TeXJob(inputFile, device, options).Run();

        Console.WriteLine("PNG written to: " + outputDir);
    }
}

Esto sigue el patrón documentado: crear TeXOptionsEl set OutputWorkingDirectoryEl set PngSaveOptionsDespués de correr a TeXJob Con un ImageDevice.

Conversión de batch: todo .tex Archivos en una carpeta

La versión de batch escanea un directorio de entrada y converte cada uno de ellos. .tex También muestra cómo controlar dónde se leen las dependencias y los gráficos incluidos.

// File: BatchLatexToPng.cs
// NuGet: Aspose.TeX

using System;
using System.IO;
using Aspose.TeX;

public static class BatchLatexToPng
{
    public static int Run(string inputDir, string outputDir, int? dpi = null)
    {
        if (!Directory.Exists(inputDir))
        {
            Console.Error.WriteLine("Input directory not found: " + inputDir);
            return 1;
        }
        Directory.CreateDirectory(outputDir);

        // Configure conversion options once and reuse
        var options = TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX);

        // Where to read auxiliary inputs (e.g., included images)
        options.InputWorkingDirectory = new InputFileSystemDirectory(inputDir);

        // Where to read extra required packages (if you supply them)
        // options.RequiredInputDirectory = new InputFileSystemDirectory(Path.Combine(inputDir, "texmf"));

        // Where to write PNG, log, aux, etc.
        options.OutputWorkingDirectory = new OutputFileSystemDirectory(outputDir);

        // PNG save options (set DPI if needed)
        var png = new PngSaveOptions();
        if (dpi.HasValue) png.Resolution = dpi.Value;
        options.SaveOptions = png;

        int ok = 0, err = 0;
        var device = new ImageDevice(); // will write images to OutputWorkingDirectory

        foreach (var texPath in Directory.GetFiles(inputDir, "*.tex", SearchOption.AllDirectories))
        {
            try
            {
                // Optional: set a job name so output files have predictable names
                options.JobName = Path.GetFileNameWithoutExtension(texPath);

                new TeXJob(texPath, device, options).Run();
                Console.WriteLine("OK  " + Path.GetRelativePath(inputDir, texPath));
                ok++;
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERR " + Path.GetRelativePath(inputDir, texPath) + " | " + ex.Message);
                err++;
            }
        }

        Console.WriteLine($"Done. Success: {ok}, Failed: {err}");
        return err == 0 ? 0 : 2;
    }
}

Puntos clave para los trabajos de batch:

  • Uso InputWorkingDirectory de los activos incluidos como \includegraphics{img.png}.
  • Uso RequiredInputDirectory si tiene que proporcionar paquetes adicionales de LaTeX fuera del conjunto integrado.
  • Sitio JobName para influir en los filenames de producción por documento.

Capturar imágenes en memoria en lugar de escribir archivos

Si prefiere transmitir los bytes PNG por sí mismo, deja que el dispositivo los buffer desactivando los escritos de archivo directo.

using System;
using System.IO;
using Aspose.TeX;

static void ConvertToStreams(string inputFile, string outputDir)
{
    Directory.CreateDirectory(outputDir);

    var options = TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX);
    var png     = new PngSaveOptions { DeviceWritesImages = false };
    options.SaveOptions = png;

    var device = new ImageDevice();
    new TeXJob(inputFile, device, options).Run();

    for (int i = 0; i < device.Result.Length; i++)
    {
        var pageBytes = device.Result[i];
        var outPath   = Path.Combine(outputDir, $"page-{i + 1}.png");
        File.WriteAllBytes(outPath, pageBytes);
    }
}

Esto refleja la documentada “moda alternativa” para escribir los archivos PNG de salida principal.

Problemas y consejos

  • Resolución: aumento PngSaveOptions.Resolution para las fórmulas más agudas en las capturas de pantalla de la retina o los activos impresos.
  • Dependencias: colocar paquetes y entradas personalizados en los directorios especificados por RequiredInputDirectory y InputWorkingDirectory.
    • Nombre *: Sitio options.JobName para los nombres de archivos de salida previsibles en batch runs.
  • Logging: el motor escribe una transcripción .log a la guía de salida, que es útil para desbloquear los paquetes desaparecidos y los errores de LaTeX.

Cuando elegir otros formatos

PNG es ideal para la publicación web y la incorporación de UI. Si necesitas salida vector para zoom infinito o texto pequeño a escala, vaya a SVG utilizando SvgSaveOptions Y un SvgDevice, o en PDF para documentos pagados. el flujo de conversión permanece el mismo.

Con estos patrones, puede automatizar LaTeX a PNG a escala en .NET mientras mantiene el control completo sobre la resolución, los directorios y el manejo de archivos.

More in this category