Reparo de arquivo de LaTeX | Aspose.TeX para .NET

Como verificar e reparar um arquivo de LaTeX

Se você possui um arquivo de texto que acha que é um arquivo de LaTeX e deseja que ele seja digitado, mas não tem certeza se é realmente um arquivo de LaTeX (talvez você seja novo no mundo do LaTex), pode tentar usar o recurso de verificação e reparo de LaTeX fornecido pela API Aspose.TeX para .NET. No exemplo a seguir, verificaremos e repararemos um arquivo de amostra, inválido-latex.tex, do projeto Aspose.TeX for .Net Exemplo.

Primeiro de tudo, vale a pena mencionar que, embora o arquivo de amostra pareça usar a sintaxe Tex, ele não possui a estrutura exigida pelo LATEX. Como você deve saber, um arquivo de LaTeX deve ter um preâmbulo que começa com o comando \documentclass e um corpo dentro do ambientedocument ', ou seja, entre\begin {document}e\end {document}`.

Agora vamos olhar para o exemplo de código C#.

 1// Create repair options.
 2LaTeXRepairerOptions options = new LaTeXRepairerOptions();
 3// Specify a file system working directory for the output.
 4options.OutputWorkingDirectory = new OutputFileSystemDirectory(RunExamples.OutputDirectory);
 5// Specify a file system working directory for the required input.
 6// The directory containing packages may be located anywhere.
 7options.RequiredInputDirectory = new InputFileSystemDirectory(Path.Combine(RunExamples.InputDirectory, "packages"));
 8// Specify the callback class to externally guess packages required for undefined commands or environments.
 9options.GuessPackageCallback = new PackageGuesser();
10// Run the repair process.
11new Features.LaTeXRepairer(Path.Combine(RunExamples.InputDirectory, "invalid-latex.tex"), options).Run();

Assim como em um trabalho de TEX regular, primeiro criamos um objeto que contém as opções do processo que estamos prestes a executar. A maioria deles é a mesma que as opções de um trabalho regular de Tex. De fato, o inputworkingDirectory é o espaço do qual os arquivos de entrada devem ser lidos. Não o usamos aqui porque fornecemos o caminho completo para o arquivo de entrada principal no sistema de arquivos, e nenhum arquivo personalizado deve ser incluído no arquivo de entrada principal. Em seguida, outputworkingDirectory é o espaço onde os arquivos de saída devem ser gravados. RequeriringInputDirectory, se atribuído, aponta para o espaço onde você pode armazenar pacotes de LaTeX que não estão incorporados na biblioteca Aspose.TeX. A propriedade adivinhepackageCallback será discutida posteriormente.

Depois de atribuir as opções, simplesmente executamos o processo!

Então, como é o processo de verificação e reparo? Em primeiro lugar, a API pesquisa o arquivo de entrada para uma ocorrência \documentclass. Se falhar, pressupõe que \documentclass {artigo} deve ser inserido no início do arquivo. Esse fato é refletido no arquivo de relatório de reparo (.log).

Em seguida, ele começa a digitalizar o arquivo de entrada ajustado desde o início. O mecanismo TEX carregado com o formato do LATEX pode causar um erro em algum momento, sinalizando que nenhum \ Begin {Document} foi encontrado até agora, embora já deva ter ocorrido. Assim, a posição na qual \begin {document} deve ser inserida é definida e refletida no relatório.

À medida que o motor verifica o arquivo, ele pode encontrar comandos ou ambientes indefinidos. A API pode fazer suposições em pacotes necessários incorporados (aqueles que definem os comandos e ambientes que não são definidos até que esses pacotes estejam incluídos) para alguns dos comandos e ambientes mais comuns. No entanto, existe uma maneira de fazer essas suposições externamente, implementando a interface iguesspackageCallback. Uma instância dessa classe deve ser atribuída à opção adivinhepackageCallback.

Aqui está um exemplo muito simples que apenas mapeia o comando \head para o pacote FancyHdr:

 1public class PackageGuesser : IGuessPackageCallback
 2{
 3    private Dictionary<string, string> _map = new Dictionary<string, string>();
 4
 5    public PackageGuesser()
 6    {
 7        _map.Add("lhead", "fancyhdr"); // Defines the mapping between the \lhead command and the fancyhdr package.
 8    }
 9
10    public string GuessPackage(string commandName, bool isEnvironment)
11    {
12        string packageName;
13        if (!isEnvironment)
14        {
15            _map.TryGetValue(commandName, out packageName);
16            return packageName ?? ""; // It's better to return an empty string to avoid consequent calls for the same command name.
17        }
18
19        // Some code for environments
20        // ...
21
22        return "";
23    }
24}

Quanto ao arquivo de amostra, o mecanismo encontra primeiro o comando \ Capítulo, que não está definido na classe de documentosartigo, mas é definido na classe de documentos book. A API ajusta a classe Document para que a versão final do arquivo fixo seja iniciado com \documentclass {Book}. Em seguida, o motor encontra o comando \lhead mencionado acima e decide que\usepackage {FancyHdr} deve ser inserido no preâmbulo. Os comandos \href e \incluemGraphics que ocorrem mais tarde para fazer o reparador inserir \usepackage {hyperref} e \usepackage {gráficos} no preâmbulo, respectivamente. Essas decisões são baseadas nos mapeamentos internos da API. Novamente, todas essas correções são registradas no arquivo de relatório.

Finalmente, o motor termina anormalmente, pois falta o final normal de um documento de LaTeX. Isso faz com que o reparador anexe \end {document}até o final do arquivo e reflita esse fato no relatório.

Depois que a versão fixa do arquivo original é construída, o reparador executa o trabalho Tex nele para a verificação final. Em nosso exemplo, essa execução não encontra erros críticos; portanto, a versão fixa pode ser digita mais ou menos conforme o esperado.

Aqui está o relatório completo:

 1A tentar reparar o ficheiro original...
 2--------------------------------------------------------------------------------
 3\documentclass está em falta no ficheiro original. Inserido no início.
 4\begin{document} está em falta no ficheiro original. Inserido na linha 3, pos. 0.
 5O comando \chapter na linha 3, pos. 0, é indefinido. Considere utilizar \usepackage{nome_do_pacote} no preâmbulo,
 6em que 'nome_do_pacote' é o nome do pacote que define este comando.
 7O comando \lhead na linha 5, pos. 0, é indefinido. \usepackage{fancyhdr} é inserido no preâmbulo
 8uma vez que o pacote 'fancyhdr' supostamente define o comando.
 9O comando \href na linha 8, pos. 0, é indefinido. \usepackage{hyperref} é inserido no preâmbulo
10uma vez que o pacote 'hyperref' supostamente define o comando.
11O comando \href na linha 17, pos. 0, é indefinido. \usepackage{hyperref} é inserido no preâmbulo
12uma vez que o pacote 'hyperref' supostamente define o comando.
13O comando \href na linha 20, pos. 0, é indefinido. \usepackage{hyperref} é inserido no preâmbulo
14uma vez que o pacote 'hyperref' supostamente define o comando.
15O comando \href da linha 27, pos. 0, é indefinido. \usepackage{hyperref} é inserido no preâmbulo
16uma vez que o pacote 'hyperref' supostamente define o comando.
17O comando \href na linha 32, pos. 0, é indefinido. \usepackage{hyperref} é inserido no preâmbulo
18uma vez que o pacote 'hyperref' supostamente define o comando.
19O comando \includegraphics na linha 54, pos. 2, é indefinido. \usepackage{graphicx} é inserido no preâmbulo
20uma vez que o pacote 'graphicx' supostamente define o comando.
21O comando \href da linha 67, pos. 0, é indefinido. \usepackage{hyperref} é inserido no preâmbulo
22uma vez que o pacote 'hyperref' supostamente define o comando.
23O comando \href na linha 95, pos. 57, é indefinido. \usepackage{hyperref} é inserido no preâmbulo
24uma vez que o pacote 'hyperref' supostamente define o comando.
25O comando \href na linha 96, pos. 0, é indefinido. \usepackage{hyperref} é inserido no preâmbulo
26uma vez que o pacote 'hyperref' supostamente define o comando.
27O comando \href na linha 98, pos. 100, é indefinido. \usepackage{hyperref} é inserido no preâmbulo
28uma vez que o pacote 'hyperref' supostamente define o comando.
29\end{document} está em falta no ficheiro original. Inserido no final.
30
31A verificar o ficheiro reparado...
32--------------------------------------------------------------------------------
33Não existem erros críticos no ficheiro corrigido.

Você também pode conferir nosso aplicativo Web GRATUITO ** AI LATEX **, que é construído com base no recurso implementado no Aspose.TeX para .NET API e envolve uma implementação mais avançada da interface iguesspackagecallback.

Have any questions about Aspose.TeX?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.