Interface de saisie d'Aspose.TeX | .NET

Veuillez vous référer à Aspose.TeX for .NET Référence API pour les définitions formelles de l’implémentation des E/S.

Le concept du répertoire d’entrée

Étant donné que les primitives d’E/S du langage TeX ne peuvent traiter que les noms de fichiers, Aspose.TeX pour .NET définit un répertoire comme un mappage entre les noms et des lots de données. Les masses de données sont censées être des fichiers, des flux, des tableaux ou quoi que ce soit d’autre. L’API nous permet de spécifier séparément les répertoires de travail d’entrée et de sortie. Il fournit l’interface générale IInputWorkingDirectory, que l’utilisateur peut implémenter pour ses propres besoins. Il fournit également ses propres implémentations, qui seront discutées ci-dessous. L’interface définit la méthode GetFile(), qui renvoie le flux de données et détermine le nom complet du fichier, tout en prenant un nom, hypothétiquement différent, comme premier argument, qui, en fait, est la clé de mappage. .

Obtenir une entrée de fichier à partir du système de fichiers du disque

Voici comment nous procéderions :

1// Getting file input from the disk file system
2
3// Create conversion options instance.
4TeXOptions options = TeXOptions.ConsoleAppOptions(TeXConfig.ObjectTeX());
5// ...
6// Specify a file system working directory for the input.
7options.InputWorkingDirectory = new InputFileSystemDirectory(DataDir);

Ce cas d’utilisation est assez simple, il n’est donc plus nécessaire de s’y concentrer.

Obtenir une entrée de fichier à partir d’une archive ZIP

Nous pouvons également mettre les fichiers d’entrée dans une archive ZIP et la considérer comme un répertoire d’entrée. Dans ce cas, il faut procéder comme suit :

 1// Getting file input from a ZIP archive
 2
 3// Open the stream for the ZIP archive that will serve as the input working directory.
 4using (Stream inZipStream = File.Open(Path.Combine(DataDir, "zip-in.zip"), FileMode.Open))
 5{
 6    // Create conversion options instance.
 7    TeXOptions options = TeXOptions.ConsoleAppOptions(TeXConfig.ObjectTeX());
 8    // ...
 9    // Specify a ZIP archive working directory for the input. You can also specify a path inside the archive.
10    options.InputWorkingDirectory = new InputZipDirectory(inZipStream, "in");

Tout d’abord, nous créons le flux contenant le fichier ZIP. Ensuite, après avoir créé les options de conversion, nous définissons l’option InputWorkingDirectory comme étant une instance de la classe InputZipDirectory. Le deuxième argument du constructeur est le chemin de base à l’intérieur de l’archive. Si nous voulons que l’archive entière soit un répertoire d’entrée, nous devons transmettre la chaîne vide.

Rechercher les fichiers d’entrée uniquement dans les répertoires de travail

Par défaut, lorsque le moteur TeX a besoin d’un fichier d’entrée portant un nom relatif, il le recherche d’abord dans le répertoire courant du processus et dans le répertoire du fichier d’entrée principal. Ce n’est qu’ensuite qu’il le recherche dans InputWorkingDirectory, RequiredInputDirectory et OutputWorkingDirectory. C’est pratique pour les applications console simples, mais cela signifie aussi que le résultat peut dépendre de l’endroit où le processus a été lancé et des fichiers qui s’y trouvent par hasard. Si nous voulons que l’entrée provienne strictement des répertoires que nous avons indiqués, nous devons définir l’option SearchCurrentDirectory sur false :

 1// Looking for input files only in the specified working directories
 2
 3// Create conversion options instance.
 4TeXOptions options = TeXOptions.ConsoleAppOptions(TeXConfig.ObjectTeX());
 5// ...
 6// Specify a file system working directory for the input.
 7options.InputWorkingDirectory = new InputFileSystemDirectory(DataDir);
 8// By default, input files with relative names are first looked for in the process's current directory
 9// and in the directory of the main input file. Disable this to look only in the working directories.
10options.SearchCurrentDirectory = false;

Les fichiers aux noms absolus sont ouverts directement, quelle que soit cette option. La même option existe aussi pour le rendu des formules et des figures et pour la réparation LaTeX.

Le concept du terminal d’entrée

Il est maintenant temps de se rappeler qu’il y a aussi l’entrée du terminal. Quant à celui-ci, Aspose.TeX pour .NET définit l’interface générale IInputTerminal ayant une seule propriété qui renvoie une instance d’implémentation de TextReader. Les implémentations fournies sont discutées ci-dessous.

Obtenir l’entrée du terminal depuis la console

Pour ce faire, nous devons définir l’option TerminalIn pour qu’elle soit une instance de la classe InputConsoleTerminal.

1// Getting terminal input from the console
2
3// Create conversion options instance.
4TeXOptions options = TeXOptions.ConsoleAppOptions(TeXConfig.ObjectTeX());
5// ...
6// Specify the console as the input terminal.
7options.TerminalIn = new InputConsoleTerminal(); // Default. Arbitrary assignment.

Mais, à vrai dire, il s’agit de la valeur par défaut de l’option, il n’est donc pas vraiment nécessaire de la spécifier. De ce fait, et tant qu’il n’y a pas d’autres implémentations, cette section sert uniquement à des fins de démonstration.

Théoriquement, si nous disposons d’un fichier (ou script) TeX interactif avec un comportement prévisible, nous souhaiterons peut-être implémenter une version du terminal d’entrée qui contiendrait un script complémentaire pour répondre aux requêtes du moteur TeX. Essayez-vous quand vous avez le temps !