技術的背景Latex は文書作成、特に記事作成には欠かせないツールであり、必須のテキスト組版ツールです。ただし、LaTeX 環境の展開は、特に異なるプラットフォームでの操作がまったく異なり、エラーが頻繁に報告されるため、特にユーザーフレンドリーな操作ではありません。エラーの問題を一つずつ解決することもできますが、これには多くのエネルギーと時間が必要になるため、多くの人は Overleaf で直接 LaTeX を作成することを選択します。しかし、実際にはOverleafにも欠点があります。たとえば、無料版の帯域幅と速度は比較的制限されており、特に国内ネットワークではアクセス速度が非常に遅くなります。したがって、ここでは、すべての主要プラットフォームと非常に互換性のある、よりユーザーフレンドリーなソリューション、つまり、docker を使用して LaTeX 環境を展開する方法を紹介します。 Dockerの基本操作主要プラットフォームの公式ソースはすべて Docker コンテナを提供しているはずなので、ここでは詳細には触れません。著者は以前、Docker を使用して MindSpore 開発環境を展開する方法についてブログを書いています。興味のある読者は、拡張機能の記事として読むことができます。 まず、Manjaro Linux プラットフォームで Docker を起動します (他のプラットフォームでは、 [dechin-root tex]# systemctl dockerを起動します 上記の手順は、ルートアカウントでのみ開始できることに注意してください。非ルートアカウントで操作することを選択した場合、Docker コンテナはサポートされませんが、singularity などの同様のコンテナ ソリューションを選択できます。関連コンテンツについては、こちらのブログを参照してください。サービスを開始した後、通常の状況では、docker のステータスがアクティブまたは実行状態であることがわかります。 [dechin-root tex]# systemctl status docker ● docker.service - Docker アプリケーション コンテナ エンジン ロード済み: ロード済み (/usr/lib/systemd/system/docker.service; 無効; ベンダープリセット: 無効> アクティブ: 2021-03-28 18:50:47 CST 日曜日からアクティブ (実行中)、7 秒前 トリガー: ● docker.socket ドキュメント: https://docs.docker.com メイン PID: 25366 (dockerd) タスク: 123 (制限: 47875) メモリ: 219.1M Cグループ: /system.slice/docker.service ├─25366 /usr/bin/dockerd -H fd:// └─25378 containerd --config /var/run/docker/containerd/containerd.toml --log-l> コンテナイメージをプルするまず、dockerhub の公式 Web サイトにアクセスして、必要なコンテナ イメージがあるかどうかを検索します。たとえば、検索結果は次のようになります。 ここには多くのオプションがあることがわかります。通常は、最も高い星を持つコンテナ イメージを直接選択してダウンロードして使用できます。 [dechin-root tex]# docker pull fbenz/pdflatex デフォルトタグの使用: 最新 最新: fbenz/pdflatex から取得 f22ccc0b8772: すでに存在します 3cf8fb62ba5f: すでに存在します e80c964ece6a: すでに存在します 9aa2583757a3: プル完了 2c3d7890d583: プル完了 ダイジェスト: sha256:6ecca11b1a203faed5c0a2ace2a13aac100dd19d7a4e0db0474283bcded3c041 ステータス: fbenz/pdflatex:latest の新しいイメージをダウンロードしました docker.io/fbenz/pdflatex:最新 ダウンロードにはしばらく時間がかかります。ダウンロードが完了すると、ダウンロードしたイメージ ファイルがローカル イメージ リポジトリに保存されます。 [dechin-root tex]# docker イメージ リポジトリ タグ イメージ ID 作成 サイズ fbenz/pdflatex 最新 8e7742722956 3か月前 24GB このコンテナ イメージ内の pdflatex 関数が正常かどうかをテストできます。 [dechin-root tex]# docker run -it fbenz/pdflatex pdflatex --help 使用法: pdftex [オプション]... [TEXNAME[.tex]] [コマンド] または: pdftex [OPTION]... \FIRST-LINE または: pdftex [OPTION]... &FMT ARGS TEXNAME に対して pdfTeX を実行し、通常は TEXNAME.pdf を作成します。 残りのコマンドは、TEXNAME が読み取られた後、pdfTeX 入力として処理されます。 TEXNAMEの最初の行が%&FMTで、FMTが既存の.fmtファイルである場合、 それ以外の場合は「NAME.fmt」を使用します。NAMEはプログラム呼び出し名です。 最も一般的には「pdftex」です。 あるいは、最初の非オプション引数がバックスラッシュで始まる場合、 オプション以外の引数をすべて pdfTeX 入力の行として解釈します。 あるいは、最初の非オプション引数が&で始まる場合、 次の単語は、他のすべてを上書きして、FMTとして読み取られます。 残りの引数は上記のように処理されます。 引数またはオプションが指定されていない場合は、入力を求めます。 -draftmode ドラフトモードをオンにします (出力 PDF は生成されません) -enc \mubyteなどのencTeX拡張機能を有効にする -etex e-TeX拡張機能を有効にする [-no]-file-line-error ファイル:行:エラー形式のメッセージを無効/有効にする -fmt=FMTNAME プログラム名または%&行の代わりにFMTNAMEを使用します -halt-on-error 最初のエラーで処理を停止します -iniはpdfinitexで、ダンプ形式用です。これは暗黙的に プログラム名が「pdfinitex」の場合はtrue -interaction=STRING インタラクションモードを設定します (STRING=batchmode/nonstopmode/ スクロールモード/エラーストップモード) -ipcは通常のDVI出力と同様にソケットに出力します 出力ファイル -ipc-start を -ipc として起動し、もう一方の端でもサーバーを起動します。 -jobname=STRINGはジョブ名をSTRINGに設定します -kpathsea-debug=NUMBER パス検索デバッグフラグを以下に従って設定します NUMBERのビット [-no]-mktex=FMT mktexFMT 生成を無効/有効にする (FMT=tex/tfm/pk) -mltex \charsubdefなどのMLTeX拡張機能を有効にする -output-comment=STRING DVIファイルのコメントに日付の代わりにSTRINGを使用する (PDFには影響しません) -output-directory=DIR 既存のDIRをファイルを書き込むディレクトリとして使用します -output-format=FORMAT ジョブ出力に FORMAT を使用します。FORMAT は `dvi' または `pdf' です。 [-no]-parse-first-line 入力ファイルの最初の行の解析を無効/有効にする -progname=STRING プログラム名(およびfmt)をSTRINGに設定します -recorder ファイル名レコーダーを有効にする [-no]-shell-escape 無効/有効 \write18{シェルコマンド} -shell-restricted 制限付き \write18 を有効にする -src-specials ソーススペシャルをDVIファイルに挿入します -src-specials=WHERE ソーススペシャルを特定の場所に挿入 DVIファイル。WHEREはカンマ区切りの値です リスト: cr display hbox math par parend vbox -synctex=NUMBER プレビューア用のSyncTeXデータを生成する NUMBER のビット (詳細は「man synctex」を参照) -translate-file=TCXNAME TCXファイルTCXNAMEを使用します -8bit はデフォルトですべての文字を印刷可能にします -help このヘルプを表示して終了する -version バージョン情報を出力して終了する pdfTeX ホームページ: <http://pdftex.org> バグレポートは [email protected] まで電子メールで送信してください。 TeXファイルをコンパイルする上の章で docker ベースの pdflatex 環境の展開を完了したら、環境をテストするための簡単な tex ファイルの作成を開始できます。 こんにちは世界まず、PDF ドキュメントに「 [dechin@dechin-manjaro tex]$ cat hello_world.tex \documentclass{記事} \begin{ドキュメント} こんにちは世界! \end{ドキュメント} 使い方は難しくありません。まず、Docker コンテナを実行し、ローカル パスをバインドする必要があることに注意して、コンテナ内の対応するディレクトリを入力します。 [dechin-root tex]# docker run -it -v /home/dechin/projects/2021-python/tex/:/home/fbenz/pdflatex ルート@d7ed2229a244:/#ll 合計 72 drwxr-xr-x 1 ルート ルート 4096 3月28日 11:07 ./ drwxr-xr-x 1 ルート ルート 4096 3月28日 11:07 ../ -rwxr-xr-x 1 root root 0 3月28日 11:07 .dockerenv* drwxr-xr-x 2 ルート ルート 4096 11月19日 13:09 bin/ drwxr-xr-x 2 ルート ルート 4096 2018年4月24日 ブート/ drwxr-xr-x 5 ルート ルート 360 3月28日 11:07 dev/ drwxr-xr-x 1 ルート ルート 4096 3月28日 11:07 etc/ drwxr-xr-x 2 1000 1000 4096 3月28日 04:43 ホーム/ drwxr-xr-x 1 ルート ルート 4096 2017年5月23日 lib/ drwxr-xr-x 2 ルート ルート 4096 11月19日 13:09 lib64/ drwxr-xr-x 2 ルート ルート 4096 11月19日 13:07 media/ drwxr-xr-x 2 ルート ルート 4096 11月19日 13:07 mnt/ drwxr-xr-x 2 ルート ルート 4096 11月19日 13:07 opt/ dr-xr-xr-x 323 ルート ルート 0 3月28日 11:07 proc/ drwx------ 2 ルート ルート 4096 11月19日 13:09 ルート/ drwxr-xr-x 1 ルート ルート 4096 11月25日 22:25 実行/ drwxr-xr-x 1 ルート ルート 4096 11月25日 22:25 sbin/ drwxr-xr-x 2 ルート ルート 4096 11月19日 13:07 srv/ dr-xr-xr-x 13 ルート ルート 0 3月28日 11:07 sys/ drwxrwxrwt 1 ルート ルート 4096 11月 28日 18:34 tmp/ drwxr-xr-x 1 ルート ルート 4096 11月19日 13:07 usr/ drwxr-xr-x 1 ルート ルート 4096 11月19日 13:09 var/ root@d7ed2229a244:/# cd ホーム/ ルート@d7ed2229a244:/home#ll 合計 12 drwxr-xr-x 2 1000 1000 4096 3月28日 04:43 ./ drwxr-xr-x 1 ルート ルート 4096 3月28日 11:07 ../ -rw-r--r-- 1 1000 1000 69 3月28日 04:43 hello_world.tex この tex ファイルはコンテナ内のディレクトリにも表示されており、パス バインディングが正常に実行されたことがわかります。実行手順は非常に簡単で、docker コンテナ内で root@d7ed2229a244:/home# pdflatex hello_world.tex これは pdfTeX、バージョン 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (プリロードされた形式 = pdflatex) です。 制限付き\write18が有効になりました。 拡張モードに入る (./hello_world.tex LaTeX2e <2017-04-15> Babel <3.18> と 84 言語のハイフネーション パターンが読み込まれました。 (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls ドキュメントクラス: article 2014/09/29 v1.4h 標準 LaTeX ドキュメントクラス (/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo)) ファイル hello_world.aux がありません。 [1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./hello_world.aux) ) sr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb> hello_world.pdf に書き込まれた出力 (1 ページ、11916 バイト)。 hello_world.log に書き込まれたトランスクリプト。 ルート@d7ed2229a244:/home#ll 合計 32 drwxr-xr-x 2 1000 1000 4096 3月28日 11:08 ./ drwxr-xr-x 1 ルート ルート 4096 3月28日 11:07 ../ -rw-r--r-- 1 ルート ルート 8 3月 28 11:08 hello_world.aux -rw-r--r-- 1 ルート ルート 2408 3月28日 11:08 hello_world.log -rw-r--r-- 1 ルート ルート 11916 3月28日 11:08 hello_world.pdf -rw-r--r-- 1 1000 1000 69 3月28日 04:43 hello_world.tex root@d7ed2229a244:/home# chmod -R 777 . ルート@d7ed2229a244:/home#ll 合計 32 drwxrwxrwx 2 1000 1000 4096 3月28日 11:08 ./ drwxr-xr-x 1 ルート ルート 4096 3月28日 11:07 ../ -rwxrwxrwx 1 ルート ルート 8 3月 28 11:08 hello_world.aux* -rwxrwxrwx 1 ルート ルート 2408 3月28日 11:08 hello_world.log* -rwxrwxrwx 1 ルート ルート 11916 3月28日 11:08 hello_world.pdf* -rwxrwxrwx 1 1000 1000 69 3月28日 04:43 hello_world.tex* 実行が完了すると、ディレクトリ内に新しく生成されたファイルがいくつか表示されます。権限が root によって PDF ファイルが正常に生成されたことがわかります。 テスト式上記の hello world の例は比較的単純です。最もよく使用される数式に問題があるかどうかをテストしてみましょう。 [dechin@dechin-manjaro tex]$ cat 方程式_test.tex \documentclass{記事} \begin{ドキュメント} こんにちは世界! \begin{方程式} e^{iHt}\left|\psi\right> \end{方程式} \end{ドキュメント} 前のセクションと同様に、関連する命令を実行するためにコンテナーに入り、最終的に以下に示すように PDF ファイルを取得する必要があります。 数式表示も正常であることがわかります。 量子回路図最後に、より難しいテストを行います。以前、ProjectQ を使用して Latex 形式で量子回路図を生成する方法についてブログを書きました。この方法では、次のような tex ファイルが生成されました。 [dechin@dechin-manjaro 量子回路]$ cat 回路.tex \documentclass{スタンドアロン} \usepackage[margin=1in]{ジオメトリ} \usepackage[hang,small,bf]{キャプション} tikzパッケージ \usepackage{ブラケット} \usetikzlibrary{背景、影、ぼかし、フィット、装飾、パス置換、図形} \begin{ドキュメント} \begin{tikzpicture}[スケール=0.8、形状を変換] \tikzstyle{basicshadow}=[blur shadow={shadow blur steps=8, shadow xshift=0.7pt, shadow yshift=-0.7pt, shadow scale=1.02}]\tikzstyle{basic}=[draw,fill=white,basicshadow] \tikzstyle{operator}=[基本、最小サイズ=1.5em] \tikzstyle{phase}=[塗りつぶし=黒、形状=円、最小サイズ=0.1cm、内側の間隔=0pt、外側の間隔=0pt、描画=黒] \tikzstyle{none}=[内側の間隔=0pt、外側の間隔=-.5pt、最小の高さ=0.5cm+1pt] \tikzstyle{measure}=[演算子、内側の間隔=0pt、最小の高さ=0.5cm、最小の幅=0.75cm] \tikzstyle{xstyle}=[circle,basic,minimum height=0.35cm,minimum width=0.35cm,inner sep=-1pt,very thin] \tikzset{ shadowed/.style={preaction={transform canvas={shift={(0.5pt,-0.5pt)}}, draw=gray, opacity=0.4}}, } \tikzstyle{swapstyle}=[内側の間隔=-1pt、外側の間隔=-1pt、最小幅=0pt] \tikzstyle{edgestyle}=[非常に薄い] \node[none] (line0_gate0) (0.1,-0) {$\Ket{0}$} において; \node[none] (line0_gate1) (0.5,-0) で {}; \node[なし、最小高さ=0.5cm、外側間隔=0] (line0_gate2) (0.75,-0) {}; \node[none] (line0_gate3) (1.0,-0) で {}; \draw[operator,edgestyle,outer sep=0.5cm] ([yshift=0.25cm]line0_gate1) 長方形 ([yshift=-0.25cm]line0_gate3) ノード[pos=.5] {H}; \draw (line0_gate0) エッジ[エッジスタイル] (line0_gate1); \node[none] (line1_gate0) (0.1,-1) {$\Ket{0}$} において; \node[none] (line1_gate1) (0.5,-1) で {}; \node[なし、最小高さ=0.5cm、外側間隔=0] (line1_gate2) (0.75,-1) {}; \node[none] (line1_gate3) (1.0,-1) で {}; \draw[operator,edgestyle,outer sep=0.5cm] ([yshift=0.25cm]line1_gate1) 長方形 ([yshift=-0.25cm]line1_gate3) ノード[pos=.5] {H}; \draw (line1_gate0) エッジ[エッジスタイル] (line1_gate1); \node[none] (line2_gate0) の (0.1,-2) {$\Ket{0}$}; \node[none] (line2_gate1) (0.5,-2) で {}; \node[なし、最小高さ=0.5cm、外側間隔=0] (line2_gate2) (0.75,-2) {}; \node[none] (line2_gate3) (1.0,-2) で {}; \draw[operator,edgestyle,outer sep=0.5cm] ([yshift=0.25cm]line2_gate1) 長方形 ([yshift=-0.25cm]line2_gate3) ノード[pos=.5] {H}; \draw (line2_gate0) エッジ[エッジスタイル] (line2_gate1); \node[xstyle] (line1_gate4) (1.40000000000000001,-1) の位置 {}; \draw[エッジスタイル] (line1_gate4.north)--(line1_gate4.south); \draw[エッジスタイル] (line1_gate4.west)--(line1_gate4.east); \node[phase] (line2_gate4) の (1.40000000000000001,-2) にあります {}; \draw (line2_gate4) エッジ[エッジスタイル] (line1_gate4); \draw (line1_gate3) エッジ[エッジスタイル] (line1_gate4); \draw (line2_gate3) エッジ[エッジスタイル] (line2_gate4); \node[xstyle] (line0_gate4) (1.95000000000000002,-0) で {}; \draw[エッジスタイル] (line0_gate4.north)--(line0_gate4.south); \draw[エッジスタイル] (line0_gate4.west)--(line0_gate4.east); \node[phase] (line1_gate5) の (1.95000000000000002,-1) にあります {}; \draw (line1_gate5) エッジ[エッジスタイル] (line0_gate4); \draw (line0_gate3) エッジ[エッジスタイル] (line0_gate4); \draw (line1_gate4) エッジ[エッジスタイル] (line1_gate5); \node[measure,edgestyle] (line0_gate5) の (2.60000000000000005,-0) にあります {}; \draw[edgestyle] ([yshift=-0.18cm,xshift=0.07500000000000001cm]line0_gate5.west) から [out=60,in=180] ([yshift=0.035cm]line0_gate5.center) から [out=0, in=120] ([yshift=-0.18cm,xshift=-0.07500000000000001cm]line0_gate5.east); \draw[edgestyle] ([yshift=-0.18cm]line0_gate5.center) から ([yshift=-0.07500000000000001cm,xshift=-0.18cm]line0_gate5.north east); \draw (line0_gate4) エッジ[エッジスタイル] (line0_gate5); \node[measure,edgestyle] (line1_gate6) の (2.60000000000000005,-1) の位置 {}; \draw[edgestyle] ([yshift=-0.18cm,xshift=0.07500000000000001cm]line1_gate6.west) から [out=60,in=180] ([yshift=0.035cm]line1_gate6.center) から [out=0, in=120] ([yshift=-0.18cm,xshift=-0.07500000000000001cm]line1_gate6.east); \draw[edgestyle] ([yshift=-0.18cm]line1_gate6.center) から ([yshift=-0.07500000000000001cm,xshift=-0.18cm]line1_gate6.north east); \draw (line1_gate5) エッジ[エッジスタイル] (line1_gate6); \node[measure,edgestyle] (line2_gate5) の (2.05000000000000003,-2) の位置 {}; \draw[edgestyle] ([yshift=-0.18cm,xshift=0.07500000000000001cm]line2_gate5.west) から [out=60,in=180] ([yshift=0.035cm]line2_gate5.center) から [out=0, in=120] ([yshift=-0.18cm,xshift=-0.07500000000000001cm]line2_gate5.east); \draw[edgestyle] ([yshift=-0.18cm]line2_gate5.center) から ([yshift=-0.07500000000000001cm,xshift=-0.18cm]line2_gate5.north east); \draw (line2_gate4) エッジ[エッジスタイル] (line2_gate5); \end{tikzpicture} \end{ドキュメント} このファイルは構造が複雑なだけでなく、周囲の多くの tex ファイルに依存しています。以前は、この tex ファイルのコンパイルを他のプラットフォーム (Win10) でテストする場合、多くの依存ファイルを手動でダウンロードし、同じフォルダーに置いてから実行して正常に使用する必要がありました。ここで直接実行すると、次の PDF ファイルも生成できることがわかります。 これは、環境に多くの必要なツールが含まれていることを示しています。これらのツールは、Overleaf 環境に似ているはずで、非常にユーザーフレンドリーで軽量な方法で tex ファイルをローカルでコンパイルできます。 まとめ非常に使いやすく、簡単に展開できる環境をローカルに構築するために、pdflatex を直接インストールするソリューションとオンラインの overleaf ソリューションを放棄することを選択しました。これらのソリューションにはそれぞれ長所と短所がありますが、全体的には、個人的な使用の場合、Docker イメージを使用して tex コンパイル環境をローカルに直接展開するのが最も便利でユーザーフレンドリーです。 著作権に関する通知 この記事の元のリンクは https://www.cnblogs.com/dechinphy/p/pdflatex.html です。 参考リンク: https://www.cnblogs.com/dechinphy/p/circuit.html docker で pdflatex 環境を構成する方法と手順に関するこの記事はこれで終わりです。docker で pdflatex 環境を構成する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Javascript DOM、ノード、要素取得の紹介
>>: ウェブページのカラーマッチング例分析: 緑色のカラーマッチングウェブページ分析
動的な列を実現するための Angularjs ループ オブジェクト プロパティ利点: オブジェクトを...
序文: 最近の医療モバイル プロジェクトに基づいて、Vue はさまざまな画面のさまざまな画面サイズに...
この記事では、ウェブ計算機のマインスイーパゲームを実装するためのJavaScriptの具体的なコード...
目次折りたたむ(減らす) for...of の使用whileループの使用折り畳み実装に近い展開する配...
Linux LVM論理ボリューム構成プロセスの詳細な説明多くの Linux ユーザーは、オペレーティ...
この記事では、参考までに、centOSにmysql5.7をインストールする詳細な手順を紹介します。具...
この記事の例では、検証コードを作成して取得するためのjsキャンバスの具体的なコードを共有しています。...
Docker はますます成熟し、その機能もますます強力になっています。 Docker Stack を...
目次序文コア - キャンセルトークン実用的なアプリケーションとパッケージングいくつかの小さな詳細序文...
1. 概念分析 1: UE ユーザー エクスペリエンス <br />英語ではユーザー エ...
CentOS の紹介CentOS は、Red Hat Linux が提供する無料で利用できるソースコ...
まず、CSS3 の相対的な長さの単位を見てみましょう (詳細なチュートリアルを参照してください)。相...
この記事では、コードレイン特殊効果を実現するためのjQueryプラグインの具体的なコードを参考までに...
MySQL のインデックスの種類一般的に、次の 4 つのカテゴリに分類できます。通常のインデックス:...
RULES を使用すると、テーブルの内部境界のスタイルを制御できます。基本的な構文<TABLE...