Autres formats de sortie de conversion TeX | Java
Il est très peu probable que vous souhaitiez actuellement convertir un fichier TeX écrit dans un autre format que LaTeX. Mais cela est possible si vous étudiez le langage TeX et/ou ses composants internes pour une raison quelconque. Quoi qu’il en soit, Aspose.TeX for Java vous permet de convertir des fichiers écrits au format Plain TeX. Il vous permet également de créer des formats personnalisés et de composer des documents conçus dans ces formats.
Nous commencerons par créer un format personnalisé.
Création d’un format personnalisé
Rappelons que le fichier de format est un dump binaire de l’état interne du moteur TeX.
Définissez inputDirectory sur un dossier contenant customtex.tex et ses dépendances, et outputDirectory sur un dossier de sortie existant. Le fichier source du format doit se terminer par \dump ; cet exemple y crée customtex.fmt. Importez les classes Aspose.TeX utilisées dans les exemples et, pour la composition, com.aspose.tex.rendering.XpsDevice, java.io.ByteArrayInputStream et java.nio.charset.StandardCharsets. La méthode appelante doit gérer ou déclarer les exceptions. Appliquez une licence conformément au
guide des licences pour éviter les restrictions d’évaluation.
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}Comme vous pouvez le voir, le code est similaire au code de conversion d’un fichier TeX. Mais il existe quelques différences.
Tout d’abord, nous utilisons ici la configuration du travail TeXConfig.objectIniTeX() . Il s’agit d’une configuration spéciale qui laisse l’état du moteur « vierge », c’est-à-dire que les paramètres internes ont leurs valeurs par défaut et que l’ensemble des séquences de contrôle coïncide avec l’ensemble des primitives. Dans notre exemple, l’ensemble des primitives est étendu dans le sens mentionné ici.
Ensuite, nous configurons les répertoires de travail d’entrée et de sortie comme d’habitude. Le répertoire de travail d’entrée doit contenir le fichier source du format principal et toutes ses dépendances.
Et la deuxième différence clé réside dans la manière dont nous gérons le travail. Cette fois, nous utilisons la méthode statique createFormat() qui, avec les options, prend le nom du fichier source principal, qui doit être le même que le nom du format.
Composition d’un fichier TeX dans votre format personnalisé
Maintenant que nous avons notre propre format TeX, nous souhaitons composer un fichier TeX écrit dans ce format. Voici le code :
Définissez formatDirectory sur le dossier contenant le fichier customtex.fmt créé précédemment, et outputDirectory sur un dossier de sortie existant. L’exemple compose un flux de texte autonome dans typeset-with-custom-format.xps, sans nécessiter de répertoire de travail d’entrée. Définissez-en un si l’entrée principale possède des dépendances, telles que des images.
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}Évidemment, nous devons préciser le format d’une manière ou d’une autre. Tout d’abord, nous devons créer une instance de la classe FormatProvider . Ensuite, dans le constructeur d’options, nous utilisons la configuration TeXConfig.objectTeX(FormatProvider), qui prend notre fournisseur de format comme argument et charge le format au-dessus de l’état “vierge” du moteur.
Les deux exemples s’exécutent sans interaction et capturent la sortie du terminal en mémoire. Après le travail, l’exemple de composition ferme le flux d’entrée, libère le périphérique XPS et ferme le répertoire de travail et le fournisseur de format. Ces fonctionnalités sont présentées plus haut dans ce guide.
Composition d’un fichier TeX au format Plain TeX
Si nous utilisons TeXConfig.objectTeX() sans fournisseur de format, le moteur chargera le format par défaut, qui est
Object TeX dans son quatrième sens. Ainsi, si vous disposez d’un fichier TeX écrit au format Plain TeX, vous pouvez ainsi le convertir dans n’importe quel format cible pris en charge.