Reparo de arquivo de LaTeX | Aspose.TeX para java

Como verificar e reparar um arquivo de LaTeX

Se você não tiver certeza se um arquivo de texto é um arquivo de LaTeX e deseja que ele seja digitado, pode utilizar o recurso de verificação e reparo do LaTeX oferecido pela API Aspose.TeX para Java. No exemplo abaixo, verificaremos e repararemos um arquivo de amostra, inválido-latex.tex, do projeto Aspose.TeX for java.

Para começar, é importante observar que o arquivo de amostra parece empregar a sintaxe Tex, mas carece da estrutura exigida pelo LaTeX. Como você deve saber, um arquivo de LaTeX deve incluir um preâmbulo que começa com o comando \ documentClass, bem como um corpo envolto no ambiente do documento, especificamente entre \ begin {document} e \ end {document}.

Agora vamos olhar para a amostra de código Java.

 1// Create repair options.
 2LaTeXRepairerOptions options = new LaTeXRepairerOptions();
 3// Specify a file system working directory for the output.
 4options.setOutputWorkingDirectory(new OutputFileSystemDirectory(Utils.getOutputDirectory()));
 5// Specify a file system working directory for the required input.
 6// The directory containing packages may be located anywhere.
 7options.setRequiredInputDirectory(new InputFileSystemDirectory(Utils.getInputDirectory() + "packages"));
 8// Specify the callback class to externally guess packages required for undefined commands or environments.
 9options.setGuessPackageCallback(new PackageGuesser());
10        
11// Run the repair process.
12new LaTeXRepairer(Utils.getInputDirectory() + "invalid-latex.tex", options).run();

Semelhante a um trabalho de TEX regular, começamos criando um objeto que mantém as opções para o processo que estamos prestes a executar. A maioria dessas opções é a mesma que as de um emprego de Tex regular. De fato, chamando o método setInputWorkingDirectory (), especificamos o espaço do qual os arquivos de entrada devem ser lidos. No entanto, neste exemplo, 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, chamamos o método setOutputWorkingDirectory () para especificar o espaço onde os arquivos de saída devem ser gravados. Se chamado, o método setRequiredInputDirectory () faz as opções apontam para o espaço onde você pode armazenar pacotes de LaTeX que não estão incorporados na biblioteca Aspose.TeX. Finalmente, o método setGuessPackageCallback () será discutido posteriormente.

Depois que as opções forem atribuídas, podemos prosseguir com a execução do processo.

Então, como é o processo de verificação e reparo? Começa com a pesquisa de API por uma ocorrência \documentclass no arquivo de entrada. Se não for encontrado, a API assume que \documentclass {Article} deve ser inserida no início do arquivo. Esta informação é registrada no arquivo de relatório de reparo (.log).

Em seguida, o processo começa a digitalizar o arquivo de entrada ajustado desde o início. O mecanismo TEX equipado com o formato do LATEX pode, em algum momento, lançar um erro indicando que \ Begin {Document}ainda não foi encontrado quando deveria já ter. Dessa forma, a posição na qual \begin {document} deve ser inserida é definida e refletida no relatório.

Ao digitalizar ainda mais o arquivo, o mecanismo pode encontrar comandos ou ambientes indefinidos. Nesses casos, 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, é possível fazer essas suposições externamente por uma classe que implementa a interface iguesspackageCallback. Depois de desenvolver essa classe, uma instância deve ser passada para o processo chamando o método setGuessPackageCallback ().

Aqui está um exemplo básico que simplesmente mapeia o comando \head para o pacote FancyHdr:

 1// The callback class to externally guess packages required for undefined commands or environments.
 2public static class PackageGuesser implements IGuessPackageCallback
 3{
 4    private Map<String, String> _map = new HashMap<String, String>();
 5
 6    public PackageGuesser()
 7    {
 8        _map.put("lhead", "fancyhdr"); // Defines the mapping between the \lhead command and the fancyhdr package.
 9    }
10
11    public String guessPackage(String commandName, boolean isEnvironment)
12    {
13        if (!isEnvironment)
14        {
15            String packageName = _map.get(commandName);
16            return packageName != null ? 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 ficheiro de exemplo, o mecanismo encontra primeiro o comando \chapter, que não está definido na classe de documento article, mas sim na classe de documento book. A API ajusta a classe de documento para que a versão final do ficheiro reparado comece por \documentclass{book}. De seguida, o motor encontra o comando \lhead mencionado anteriormente e determina que \usepackage{fancyhdr} deve ser introduzido no preâmbulo. Os comandos \href e \includegraphics, que ocorrem posteriormente no ficheiro, fazem com que o Reparador introduza \usepackage{hyperref} e \usepackage{graphics} no preâmbulo, respetivamente. Estas decisões são tomadas com base nos mapeamentos internos da API. Como antes, todos estes reparos são registados no ficheiro de relatório.

Finalmente, o motor termina anormalmente porque a conclusão adequada de um documento de LaTeX está faltando. Como resultado, o reparador anexa \end {document}ao final do arquivo e inclui essas informações no relatório.

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

Aqui está o relatório completo:

2,545 / 5,000

 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.