ラテックス埋め込みグラフィックス|ラテックスコードにグラフィックを含めます
画像を含める別の方法
一部のTEX/LATEXシステムは、LaTexファイル自体に関して外部から保存されていないが、LaTexファイルに直接含まれる画像を含めることを可能にします。ただし、Tex/LaTexファイルは単純なテキストファイルであるため、バイナリデータを含めることができないため、テキスト形式のバイナリデータを表す方法が必要です。言い換えれば、バイナリデータはいくつかのテキスト表現にエンコードする必要があります。問題は、TEXエンジンがそのようなエンコードされた画像を直接解釈できないことです。実際、画像を含む「graphicx」パッケージの古き良き「includgraphics」コマンドを使用して実現されます。ただし、このコマンドは外部画像ファイルのみを扱うことができます。はい、外部画像ファイル(別の仲介ファイルとともに)は、LaTexファイルの外側で引き続き作成されます。重要なポイントは、ラテックスファイルだけを配布するだけでいいということです。
さて、どういうわけかエンコードされた画像をLaTexファイルに配置したとしましょう。しかし、どのようにして画像をデコードするのでしょうか?残念ながら、LaTexファイルから読み取り、外部画像ファイルに書き込むことでファイルをデコードすることはできません。エンコードされた画像を表すテキスト文字列は、最初に外部テキストファイルに書き込まれ、次に画像ファイルを作成するためにデコードできます。
今では、次の手順を概説して、目的の結果を得ることができます。
- 画像をエンコードします。
- 画像データを表すテキスト文字列をLaTexファイルに挿入します。
- 画像データを表すテキスト文字列を外部ファイルに出力します。
- ステップ3から外部ファイルをデコードします。
- デコードされた画像を含めます。
最初の2つのステップは、LaTexファイルの著者によって完了します。もちろん、TEXエンジンが残りの手順を管理します。もちろん、正しく指示されています。
最初から始めましょう。画像をエンコードして、文字列の文字列を取得するにはどうすればよいですか?これを行う方法の1つ(そしておそらく最も人気のある)はbase64です。
Base64を使用してバイナリデータをエンコードします
base64は、バイナリデータを64の一意の文字のセットに制限された一連の印刷可能な文字に変換するバイナリ間エンコードスキームのグループです。より具体的には、ソースバイナリデータは一度に6ビットで撮影され、6ビットのこのグループは64の一意の文字の1つにマッピングされます。すべてのバイナリ間エンコードスキームと同様に、base64は、テキストコンテンツのみを確実にサポートするチャネルにバイナリ形式で保存されているデータを運ぶように設計されています。
この短い説明から、base64が必要なものであることがわかります。画像ファイルをbase64にエンコードするには、コマンドラインユーティリティ(OSで利用可能な場合)、ほぼすべてのプログラミング言語の標準またはサードパーティの機能、または base64.guruなどのオンラインツールを使用できます。
エンコードされた画像をラテックスファイルに配置します
エンコードの結果として取得する文字列は、次のように、ラテックスファイルの前文における標準のLATEX filecontents
環境に配置する必要があります。
1\documentclass{article}
2\begin{filecontents*}[overwrite]{sample-image.64}
3iVBORw0KGgoAAAANSUhEUgAAAPgAAABdCAYAAAH/B5vAAAAAGXRFWHRTb2Z0d2FyZQBBZ......
4\end{filecontents*}
5\begin{document}
6...
7\end{document}
ここにあります。ステップ2が達成されます。ラテックスファイル内に画像があります!しかし、このファイルの版画をLaTexで実行するとどうなりますか?
ラテックスプロセッサは、環境内の文字列を「Sample-Image.64」という名前の外部ファイルに書き込みます。 「上書き」オプションが使用されているため、ファイルは既に存在する場合に上書きされます(たとえば、以前の実行によって生成された場合)。そして、それがステップ3を達成するものです!
base64文字列のデコード
私たちの計画のステップ4は、TEX実装の違いが発生する場所です。 base64文字列のデコードは、 \ write18
機能として知られるより一般的なものによって行われます。
\ write18
古典的なTexエンジンでは、 \ write <number>(<token list>)
は、トークンのリストを書き込む原始です *。使用すると、この原始の後に整数が続きます。この数値が負の場合、トークンはトランスクリプト(log)ファイルに書き込まれます。数値が「15」より大きい場合、トークンは端末に書き込まれます。数値が範囲 0..15
にある場合、トークンは、\ openout
プリミティブの前の発生によって名前が指定されているファイルに書き込まれます。 \ openout <4-Bit integer> = <ファイル名>
プリミティブマップファイル名を番号にマップします。
新しいTEX実装(PDF TEXなど)は、 \ write18
を使用できます。この場合、OSシェルで実行されるコマンドラインとして<token list>
を解釈します。この機能は明らかに潜在的なバックドアであるため、Tex関連のドキュメントやインターネットで言及されるたびに、謎のタッチを感じるかもしれません。このため、PDF TEX/LATEX実行可能ファイルには、この機能のアクセシビリティを管理するコマンドオプションがあります。
一般に、3つのレベルにはアクセシビリティがあります。無効化、制限により有効になり、完全に有効になっています。
asops.texでは、shellmode
と呼ばれるTexジョブオプションがありますが、適切な値は2つしかありません。 noshellescape
値は、機能が無効になっていることを意味します。 2番目の値は、実行する必要があるコマンドが「実行可能可能」クラスの拡張機能としてユーザーが実装する必要があることを示しています。ここでは、このような実装の詳細については掘り下げませんが、 base64
コマンドエミュレーションは既にAsoppes.texで実装されていることを言及します。デフォルトでは、そのプロトタイプインスタンスは、Texoptions
クラスインスタンスの「executables」コレクションプロパティで見つけることができます。
Base64エンコードデータのデコード
Base64エンコードされたデータであると思われるファイルの内容をデコードするには、通常、次のコマンドラインを使用します。
1base64 -d FILE1 > FILE2
ここで、file1は「エンコードされた」ファイルであり、 > file2
は出力をファイル file2
にリダイレクトする必要があることを意味します。
したがって、ラテックスファイルの本文で、次の行を追加する必要があります。
1\immediate\write18{base64 -d sample-image.64 > sample-image.png}
\immediate
プレフィックスは、TeX スキャナが基本コマンドに遭遇するとすぐに\write
操作が実行されるようにするために必要です。そうでない場合は、ページ出力時に処理されます。
今すぐファイルの版画を実行すると、画像ファイル「sample-image.png」が作成されていることがわかります。さあ、視聴者で開いてチェックしてください!
デコードされた画像を含む
記事の冒頭で説明したように、デコードされた画像を含めるために、よく知られているLaTexコマンド「\ includegraphics」を使用します。
1\includegraphics[options]{sample-image.png}
したがって、完全な(ほぼ)ラテックスファイルは次のように見える場合があります。
1\documentclass{article}
2\begin{filecontents*}[overwrite]{sample-image.64}
3iVBORw0KGgoAAAANSUhEUgAAAPgAAABdCAYAAAH/B5vAAAAAGXRFWHRTb2Z0d2FyZQBBZ......
4\end{filecontents*}
5\begin{document}
6 \write18{base64 -d sample-image.64 > sample-image.png}
7 \includegraphics[options]{sample-image.png}
8\end{document}
そして、Aspose.TeX APIを使用したC#コードは、shellmode
オプションを指定することを除き、他の記事のコードに似ています。
1TeXOptions options = TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX);
2// Specify a file system working directory for the output.
3options.OutputWorkingDirectory = new OutputFileSystemDirectory(RunExamples.OutputDirectory);
4// Initialize the options for saving in PDF format.
5options.SaveOptions = new PdfSaveOptions();
6// Enable the shell command execution.
7options.ShellMode = ShellMode.ShellRestricted;
8// Run LaTeX to PDF conversion.
9new TeXJob(Path.Combine(RunExamples.InputDirectory, "embedded-base64-image.tex"), new PdfDevice(), options).Run();
そして今、私たちはステップ5を完了しました。真に完全な例については、 プロジェクトの例を調べてください。
.NET APIのasops.texに基づいて構築された無料変換 Webアプリをチェックアウトすることもできます。