ラテックスファイルの修理| Java用のAspose.TeX
ラテックスファイルを確認して修復する方法
テキストファイルがLaTexファイルであるかどうかがわからず、それをタイプセットにしたい場合は、JavaのAspose.TeX APIが提供するチェックと修復のラテックス機能を利用できます。以下の例では、Java ExampleプロジェクトのAspose.TeXからサンプルファイル「Invalid-Latex.tex」を確認して修復します。
そもそも、サンプルファイルはTex構文を使用しているように見えるが、LaTexに必要な構造がないことに注意することが重要です。ご存知かもしれませんが、ラテックスファイルには、\ DocumentClassコマンドから始まる前文と、特に\ begin {document}と\ end {document}の間にドキュメント環境に囲まれたボディを含める必要があります。
次に、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();
通常のTexジョブと同様に、実行しようとしているプロセスのオプションを保持するオブジェクトを作成することから始めます。これらのオプションのほとんどは、通常のTEXジョブのオプションと同じです。実際、 setInputWorkingDirectory()メソッドを呼び出して、入力ファイルを読み取るスペースを指定します。ただし、この例では、ファイルシステムのメイン入力ファイルへのフルパスを提供し、メイン入力ファイルにカスタムファイルを含めることはないため、ここでは使用しません。次に、 SetOutputWorkingDirectory()メソッドを呼び出して、出力ファイルの書き込みスペースを指定します。呼び出された場合、 setRequiredInputDirectory()メソッドにより、オプションは、Aspose.TeXライブラリに埋め込まれていないラテックスパッケージを保存できるスペースを指します。最後に、 setguesspackagecallback()メソッドについては後で説明します。
オプションが割り当てられたら、プロセスの実行を進めることができます。
それで、チェックと修復のプロセスはどのようなものですか? APIが入力ファイルでdocumentClass
の発生を検索することから始まります。発見されていない場合、APIは、documentClass {article}
をファイルの開始時に挿入する必要があると想定しています。この情報は、修理レポートファイル(.log)に記録されます。
次に、プロセスが最初から調整された入力ファイルのスキャンを開始します。 LaTex形式を装備したTEXエンジンは、ある時点で、「{document}」が既にあるべきである場合にまだ見つかっていないことを示すエラーを投げることができます。このようにして、「{document}」を挿入する必要がある位置が定義され、レポートに反映されます。
ファイルをさらにスキャンしている間、エンジンは未定義のコマンドや環境に遭遇する可能性があります。そのような場合、APIは、最も一般的なコマンドと環境のいくつかについて、
これらのパッケージが含まれるまで定義されていないコマンドと環境を定義するものを埋め込んだ(5)(5)(5)(5)(5)で仮定することができます。ただし、
iguesspackagecallbackインターフェイスを実装するクラスによって、そのような仮定を外部から行うことができます。このようなクラスを開発したら、setguesspackagecallback()
メソッドを呼び出すことにより、そのインスタンスをプロセスに渡す必要があります。
fancehdr
パッケージに\ head
コマンドを単純にマップする基本的な例があります。
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}
サンプルファイルに関しては、エンジンは最初に\ Chapter
コマンドに遭遇します。これは、「記事」ドキュメントクラスで定義されていないが、Book
ドキュメントクラスで定義されています。 APIはドキュメントクラスを調整して、修復されたファイルの最終バージョンが \ documentclass {book}
で始まるようになります。次に、エンジンは前述の\ lhead
コマンドを見つけ、 \ usepackage {fancyhdr}
をプリアンブルに挿入する必要があると判断します。ファイルの後半で発生する\ href
および \ increctgraphics
コマンドは、修理業者に\ usepackage {hyperRef}
および\ usepackage {graphics}
を挿入します。これらの決定は、APIの内部マッピングに基づいて行われます。前と同様に、これらのすべての修理はレポートファイルに記録されています。
最後に、ラテックス文書の適切な結論が欠落しているため、エンジンは異常に終了します。その結果、修理業者は\end{document}
をファイルの最後に追加し、レポートにこの情報を含めます。
元のファイルの固定バージョンを作成した後、修理業者は最終検証のためにTEXジョブを実行します。この例では、この実行は重要なエラーを検出しないため、固定バージョンを予想どおりに多かれ少なかれタイプセットすることができます。
これが完全なレポートです:
1元のファイルを修復しています...
2--------------------------------------------------------------------------------
3 \documentclass が元のファイル内に見つかりません。先頭に挿入しました。
4 \begin{document} が元のファイル内に見つかりません。3 行目の 0 番目に挿入しました。
5 3 行目の 0 番目にあるコマンド \chapter は未定義です。プリアンブルで \usepackage{package_name} を使用することを検討してください。
6 ここで 'package_name' は、このコマンドを定義するパッケージの名前です。
7 5 行目の 0 番目にあるコマンド \lhead は未定義です。\usepackage{fancyhdr} がプリアンブルに挿入されています。
8 'fancyhdr' パッケージがこのコマンドを定義していると思われるためです。
9 8 行目の 0 番目にあるコマンド \href は未定義です。\usepackage{hyperref} がプリアンブルに挿入されています。
10 'hyperref' パッケージがコマンドを定義していると思われるため。
1117行目の位置 0 にあるコマンド \href は未定義です。\usepackage{hyperref} がプリアンブルに挿入されています。
12 'hyperref' パッケージがコマンドを定義していると思われるため。
1320行目の位置 0 にあるコマンド \href は未定義です。\usepackage{hyperref} がプリアンブルに挿入されています。
14 'hyperref' パッケージがコマンドを定義していると思われるため。
1527行目の位置 0 にあるコマンド \href は未定義です。\usepackage{hyperref} がプリアンブルに挿入されています。
16 'hyperref' パッケージがコマンドを定義していると思われるため。
1732行目の位置 0 にあるコマンド \href は未定義です。\usepackage{hyperref} がプリアンブルに挿入されています。
18 'hyperref' パッケージがコマンドを定義していると思われるため。
1954 行目、位置 2 のコマンド \includegraphics は未定義です。\usepackage{graphicx} がプリアンブルに挿入されています。
20 'graphicx' パッケージがコマンドを定義していると思われるため。
2167 行目、位置 0 のコマンド \href は未定義です。\usepackage{hyperref} がプリアンブルに挿入されています。
22 'hyperref' パッケージがコマンドを定義していると思われるため。
2395 行目、位置 57 のコマンド \href は未定義です。\usepackage{hyperref} がプリアンブルに挿入されています。
24 'hyperref' パッケージがコマンドを定義していると思われるため。
2596 行目、位置 0 のコマンド \href は未定義です。\usepackage{hyperref} がプリアンブルに挿入されています。
26 'hyperref' パッケージがコマンドを定義しているはずなので。
2798行目、100番目のコマンド \href は未定義です。\usepackage{hyperref} がプリアンブルに挿入されています。
28 'hyperref' パッケージがコマンドを定義しているはずなので。
29\end{document} が元のファイルにありません。末尾に挿入されています。
30
31修復されたファイルを確認しています...
32--------------------------------------------------------------------------------
33修正されたファイルには重大なエラーはありません。
**無料 ** ai latex Repairer **Webアプリもチェックしてください。これは、[.NET APIのAspose.TeX]内に実装された機能に基づいて構築され、「Iguesspackagecalback」インターフェースのより高度な実装を伴います。