Altri formati di output di conversione Tex | Java

È altamente improbabile che tu voglia attualmente convertire un file Tex scritto in qualsiasi altro formato rispetto a LaTex. Ma questo è possibile se stai studiando la lingua Tex e/o gli interni per qualche motivo. Ad ogni modo, Aspose.TeX per java ti consente di convertire i file scritti in semplice formato tex. Inoltre, consente di creare formati personalizzati e documenti di composizione progettati in questi formati.

Inizieremo con la creazione di un formato personalizzato.

Creazione di un formato personalizzato

Ricordiamo che il file di formato è una dump binaria dello stato interno del motore Tex.

Impostare inputDirectory su una cartella contenente customtex.tex e le sue dipendenze e outputDirectory su una cartella di output esistente. Il sorgente del formato deve terminare con \dump; l’esempio crea qui customtex.fmt. Importare le classi Aspose.TeX utilizzate negli esempi e, per la composizione, com.aspose.tex.rendering.XpsDevice, java.io.ByteArrayInputStream e java.nio.charset.StandardCharsets. Il metodo chiamante deve gestire o dichiarare le eccezioni. Applicare una licenza come descritto nella guida alle licenze per evitare le limitazioni della versione di valutazione.

 1// Create a custom TeX format from customtex.tex, which ends with \dump.
 2// inputDirectory contains customtex.tex; outputDirectory is an existing output folder.
 3TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectIniTeX());
 4InputFileSystemDirectory input = new InputFileSystemDirectory(inputDirectory);
 5OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 6options.setInputWorkingDirectory(input);
 7options.setOutputWorkingDirectory(output);
 8options.setInteraction(Interaction.NonstopMode);
 9options.setTerminalOut(new OutputMemoryTerminal());
10try {
11    TeXJob.createFormat("customtex", options);
12} finally {
13    output.close();
14    input.close();
15}

Come puoi vedere, il codice è simile al codice per la conversione di un file Tex. Ma ci sono alcune differenze.

Innanzitutto, qui utilizziamo la configurazione del lavoro TexConfig.ObjectInitex() . Questa è una configurazione speciale che lascia lo stato del motore “vergine”, ovvero i parametri interni hanno i loro valori predefiniti e l’insieme di sequenze di controllo coincide con l’insieme di primitive. Nel nostro esempio, l’insieme di primitive è esteso nel senso menzionato qui.

Successivamente, impostiamo le directory di lavoro input e output come al solito. La directory di lavoro input deve contenere il file di origine del formato principale e tutte le sue dipendenze.

E la seconda differenza chiave è il modo in cui gestiamo il lavoro. Questa volta utilizziamo il metodo statico createFormat() , che insieme alle opzioni prende il nome del file di origine principale, che deve essere uguale al nome del formato.

Compromettere un file tex nel tuo formato personalizzato

Ora che abbiamo il nostro formato tex, vogliamo scrivere un file Tex scritto in questo formato. Ecco il codice:

Impostare formatDirectory sulla cartella contenente il file customtex.fmt creato in precedenza e outputDirectory su una cartella di output esistente. L’esempio compone un flusso di testo autonomo in typeset-with-custom-format.xps, quindi non richiede una directory di lavoro di input. Impostarla se l’input principale ha dipendenze, come immagini.

 1// Typeset text using the previously created customtex.fmt format.
 2// formatDirectory contains customtex.fmt; outputDirectory is an existing output folder.
 3InputFileSystemDirectory formatInput = new InputFileSystemDirectory(formatDirectory);
 4FormatProvider formatProvider = new FormatProvider(formatInput, "customtex");
 5OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 6XpsDevice device = new XpsDevice();
 7TeXJobResult result;
 8try {
 9    TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX(formatProvider));
10    options.setJobName("typeset-with-custom-format");
11    options.setOutputWorkingDirectory(output);
12    options.setInteraction(Interaction.NonstopMode);
13    options.setTerminalOut(new OutputMemoryTerminal());
14    // No input working directory is needed for this self-contained stream.
15    try (ByteArrayInputStream text = new ByteArrayInputStream(
16            "Congratulations! You have successfully typeset this text with your own TeX format!\\end"
17                    .getBytes(StandardCharsets.US_ASCII))) {
18        result = new TeXJob(text, device, options).run();
19    }
20} finally {
21    device.dispose();
22    output.close();
23    formatProvider.close();
24    formatInput.close();
25}

Ovviamente, dobbiamo in qualche modo specificare il formato. Prima di tutto, dobbiamo creare un’istanza della classe FormatProvider . Quindi, nel costruttore di opzioni, utilizziamo la configurazione TeXConfig.objectTeX(FormatProvider), che prende il nostro fornitore di formato come argomento e carica il formato in cima allo stato “vergine” del motore.

Entrambi gli esempi vengono eseguiti senza interazione e acquisiscono l’output del terminale in memoria. Dopo il lavoro, l’esempio di composizione chiude il flusso di input, rilascia il dispositivo XPS e chiude la directory di lavoro e il provider del formato. Queste funzionalità sono illustrate in precedenza in questa guida.

Testa di un file tex in un formato Tex semplice

Se utilizziamo TeXConfig.objectTeX() senza un provider di formato, il motore caricherà il formato predefinito, che è Object Tex nel suo quarto senso. Pertanto, se hai un file Tex scritto in un semplice formato Tex, in questo modo puoi convertirlo in qualsiasi formato target supportato.