Build LaTex projectを実行したい

Build LaTex projectを実行したい

- 西崎 晴彦 の投稿
返信数: 8
私はtexのversionを
PS C:\Users\haruhiko> tex -version
TeX 3.141592653 (TeX Live 2022)
vscodeのversionを
PS C:\Users\haruhiko> code -v
1.68.1
を使っています。

実験のレポートでlatexを使っているのですが、エラーが出て困っています。
私が陥っているエラーは、logファイルに特に重大なエラーはないけど、Recipe terminated with errorが起こって、pdfを出力してくれないというものです。
証拠として添付ファイルを見てほしいです。
これの厄介なところは、vscodeを開いて何もコードを書かず、実行してもエラーは出ず、pdfは何も変更されていないが、エラーが絶対に起こらないところでスペースや文字、改行するだけでエラーを吐くようになります。
そして、そのままvscodeを長時間放置して実行するとなぜかRecipe terminated with errorは出なくなるが、出力されるpdfは何も変わっていないということです。
実はこのエラーは二度目で、前回はエラーの原因をネットで調べてていたら勝手に直っていました。


いま、vscodeが原因かと思ってコマンドで
platex "result.tex"
dvipdfmx "result.dvi"
と打ったらちゃんとpdf出力されていて、それになぜかvscodeも直っていました。


結果としてこのフォーラムを書いている間に自己解決しましたが、同じような現象に陥っている方や、何が原因かわかる方はいらっしゃるでしょうか?今後起きた場合に対処したいです。
西崎 晴彦 への返信

Re: Build LaTex projectを実行したい

- 西崎 晴彦 の投稿
もう少し自分の環境を詳しく書くと、https://blog.cles.jp/item/12911を参考に、texのダウンロードはchocolatyでダウンロードしてます。
そして、必要ならtlmgr install でダウンロードしています。



code . -n

私は、上のコマンドでよくvscodeを起動します。
私が考えた上のようなエラーが起こった原因は、ふつうにクリックしてvscodeを起動したときと、上のコマンドから実行したときのものが相互作用して起こったのではないかと思いました。
しかし、実験してみてもこのようなエラーは起きませんでした。

ふとした時に、latexが使えなくなっているので不便です。
本当に何もわからなくて、申し訳ないです。
西崎 晴彦 への返信

Re: Build LaTex projectを実行したい

- 和田 勇 の投稿
発生したり、しなかったりと不安定なのが気になるのですが ..
環境変数 %PATH% とか複数の texlive が導入されているのかしら?
ちょっと調べてみたりしてみました。添付を参考に検討してください。
和田 勇 への返信

Re: Build LaTex projectを実行したい

- 西崎 晴彦 の投稿
返信ありがとうございます。
たくさんの解決策ありがとうございます。
今はエラーが起きていないので、実験することができないのですが、今度起こった時に、やってみようと思います。

とりあえず、参考までに環境を送ります。

.latexmkrc

#!/usr/bin/env perl

# LaTeX
$latex = 'platex -synctex=1 -halt-on-error -file-line-error %O %S';
$max_repeat = 5;

# BibTeX
$bibtex = 'pbibtex %O %S';
$biber = 'biber --bblencoding=utf8 -u -U --output_safechars %O %S';

# index
$makeindex = 'mendex %O -o %D %S';

# DVI / PDF
$dvipdf = 'dvipdfmx %O -o %D %S';
$pdf_mode = 3;

# preview
$pvc_view_file_via_temporary = 0;
if ($^O eq 'linux') {
$dvi_previewer = "xdg-open %S";
$pdf_previewer = "xdg-open %S";
} elsif ($^O eq 'darwin') {
$dvi_previewer = "open %S";
$pdf_previewer = "open %S";
} else {
$dvi_previewer = "start %S";
$pdf_previewer = "start %S";
}

# clean up
$clean_full_ext = "%R.synctex.gz"

setting.json

{
"editor.guides.bracketPairs": true,
"editor.bracketPairColorization.enabled": true,
"workbench.editorAssociations": {
"*.ipynb": "jupyter-notebook"
},
"code-runner.clearPreviousOutput": true,
"notebook.cellToolbarLocation": {
"default": "right",
"jupyter-notebook": "left"
},
"editor.suggestSelection": "first",
"vsintellicode.modify.editor.suggestSelection": "automaticallyOverrodeDefaultValue",
"JAVA.HOME": "C:\\Program Files\\Java\\jdk-17",
"files.exclude": {
"**/.classpath": true,
"**/.project": true,
"**/.settings": true,
"**/.factorypath": true
},
"code-runner.runInTerminal": true,
"code-runner.executorMap": {
"javascript": "node",
"java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"objective-c": "cd $dir && gcc -framework Cocoa $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"php": "php",
"python": "python -u",
"perl": "perl",
"perl6": "perl6",
"ruby": "ruby",
"go": "go run",
"lua": "lua",
"groovy": "groovy",
"powershell": "powershell -ExecutionPolicy ByPass -File",
"bat": "cmd /c",
"shellscript": "bash",
"fsharp": "fsi",
"csharp": "cd $dir && dotnet run $fileName",
"vbscript": "cscript //Nologo",
"typescript": "ts-node",
"coffeescript": "coffee",
"scala": "scala",
"swift": "swift",
"julia": "julia",
"crystal": "crystal",
"ocaml": "ocaml",
"r": "Rscript",
"applescript": "osascript",
"clojure": "lein exec",
"haxe": "haxe --cwd $dirWithoutTrailingSlash --run $fileNameWithoutExt",
"rust": "cd $dir && rustc $fileName && $dir$fileNameWithoutExt",
"racket": "racket",
"scheme": "csi -script",
"ahk": "autohotkey",
"autoit": "autoit3",
"dart": "dart",
"pascal": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt",
"d": "cd $dir && dmd $fileName && $dir$fileNameWithoutExt",
"haskell": "runhaskell",
"nim": "nim compile --verbosity:0 --hints:off --run",
"lisp": "sbcl --script",
"kit": "kitc --run",
"v": "v run",
"sass": "sass --style expanded",
"scss": "scss --style expanded",
"less": "cd $dir && lessc $fileName $fileNameWithoutExt.css",
"FortranFreeForm": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"fortran-modern": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"fortran_fixed-form": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"fortran": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
},
"omnisharp.useGlobalMono": "always",
// ---------- LaTex ----------
// ---------- Language ----------
"[tex]": {
// スニペット補完中にも補完を使えるようにする
"editor.suggest.snippetsPreventQuickSuggestions": false,
// インデント幅を2にする
"editor.tabSize": 2
},
"[latex]": {
// スニペット補完中にも補完を使えるようにする
"editor.suggest.snippetsPreventQuickSuggestions": false,
// インデント幅を2にする
"editor.tabSize": 2
},
"[bibtex]": {
// インデント幅を2にする
"editor.tabSize": 2
},
// ---------- LaTeX Workshop ----------
// 使用パッケージのコマンドや環境の補完を有効にする
"latex-workshop.intellisense.package.enabled": true,
// 生成ファイルを削除するときに対象とするファイル
// デフォルト値に "*.synctex.gz" を追加
"latex-workshop.latex.clean.fileTypes": [
"*.aux",
"*.bbl",
"*.blg",
"*.idx",
"*.ind",
"*.lof",
"*.lot",
"*.out",
"*.toc",
"*.acn",
"*.acr",
"*.alg",
"*.glg",
"*.glo",
"*.gls",
"*.ist",
"*.fls",
"*.log",
"*.fdb_latexmk",
"*.snm",
"*.nav",
"*.dvi",
"*.synctex.gz"
],
// 生成ファイルを "out" ディレクトリに吐き出す
"latex-workshop.latex.outDir": "out",
// ビルドのレシピ
"latex-workshop.latex.recipes": [
{
"name": "latexmk",
"tools": [
"latexmk",
]
},
// Recipes for compiling TeX to PDF
// ... ...
{
"name": "Convert PDF to PNG",
"tools": [
"latexmkout",
"pdftrimming",
"pdf2png",
]
},
],
// ビルドのレシピに使われるパーツ
"latex-workshop.latex.tools": [
{
"name": "latexmk",
"command": "latexmk",
"args": [
"-silent",
"-outdir=%OUTDIR%",
"%DOC%"
],
},
{
"name": "latexmkout",
"command": "latexmk",
"args": [
"-silent",
"%DOC%"
],
},
// Tools for compiling TeX to PDF
// ... ...
{ // Trimming PDF
"name": "pdftrimming",
"command": "pdfcrop",
"args": [
"--margins",
"10 5",
"%DOC%.pdf",
"%DOC%.pdf",
]
},
// Tools for compiling TeX to PDF
// ... ...
{ // Convert PDF to PNG
"name": "pdf2png",
"command": "pdftocairo",
"args": [
"-png",
"-r",
"300",
"-transp", // If use a transparent page color instead of white
// "-singlefile",// Only convert first page and Remove file number
"%DOC%.pdf",
//"%DOC%-image",
]
},
],
// ---------- LaTex END ----------
"latex-workshop.latexindent.path": "C:\\texlive\\2022\\bin\\win32\\latexindent.exe",
"editor.fontSize": 13,
"redhat.telemetry.enabled": true,
"[xml]": {
"editor.defaultFormatter": "redhat.vscode-xml"
},
"docomment.syntax": "delimited",
"[jsonc]": {
"editor.defaultFormatter": "vscode.json-language-features"
},
"latex-workshop.view.pdf.viewer": "tab",
"notebook.output.textLineLimit": 25
}

環境変数

C:\WINDOWS;
C:\WINDOWS\system32;
C:\WINDOWS\System32\Wbem;
C:\WINDOWS\System32\OpenSSH\;
C:\Python310\;
C:\Python310\Scripts\;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\;
C:\ProgramData\chocolatey\bin;
C:\Program Files\Microsoft VS Code\bin;
C:\Users\haruhiko\AppData\Roaming\Python\Python310\Scripts;
C:\Program Files\dotnet\;
C:\Program Files\Wolfram Research\WolframScript\;
C:\tools\Manim\Scripts;
C:\tools\gsudo\Current;
C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
C:\Program Files\Microsoft SQL Server\150\Tools\Binn\;
C:\texlive\2022\bin\win32;
C:\Program Files\OpenJDK\jdk-18.0.1.1\bin;
C:\Program Files\MATLAB\R2022a\bin;
C:\Program Files\Git\cmd;
C:\Program Files\PowerShell\7\;C:\Strawberry\c\bin;
C:\Strawberry\perl\site\bin;
C:\Strawberry\perl\bin;
C:\Program Files\nodejs\;


となっています。




和田 勇 への返信

Re: Build LaTex projectを実行したい

- 西崎 晴彦 の投稿
out ディレクトリ以下のファイルを削除した場合はどうなるか

正常な時は、次の質問の所でやってみました。
またおかしくなった時にやってみたいと思います。

out ディレクトリそのものが存在しない場合は、確実のこの現象は発生すると思いますが、out ディレクトリはいつ作成しましたか?

今回エラーが起こったのは2週間前くらいに作ったものです。
outディレクトリが存在しないときに、この現象が発生するのですか?
私の場合は、outディレクトリを消して、Ctrl+Sや実行ボタンを押したら、outディレクトリが作られてpdfがしっかりと出力されます。


c:\texlive\2022 以外の latex 環境はインストールされていますか?

chocolatyを入れる前にtexlive2019くらいの奴を入れていました
手動で消したので、それがいけなかった可能性はあると思います。
userファイルとかにtexliveのフォルダとかあるのでしょうか?


report5 のディレクトリで latexmk -C report として一旦生成されるファイル のクリーニングを実行したあと latexmk report でもうまくいくのだろうか

今は正常なので

result.texしかないところで、
latexmk result
と打つとlogやdviが出て(outディレクトリには作られず、コマンドのパスの位置)、
latexmk -C result
とおすと、すべて消えます。

西崎 晴彦 への返信

Re: Build LaTex projectを実行したい

- 和田 勇 の投稿
  • out ディレクトリに関して

    • 当初の情報では out が何時生成されるかが不明でしたが setting.json の以下の記述があるので「Ctrl+S」で自動生成されるようですね

      "latex-workshop.latex.outDir": "out",
      
    • ただし、コマンドプロンプトなどで platex や latexmk を行う際には -outdir=out オプションを併用したほうがよいでしょう

    • なお「"name": "latexmkout",」のところにも 「"-outdir=%OUTDIR%",」 の記述を追記したほうがよいでしょう
  • PATH の C:\tools\gsudo\Current について

    • このツール使用したことはないのですが、おかしな現象はこのツールを利 用後に「code . -n」とかしていませんか?

    • linux 系の sudo と同じセキュリティポリシーで「信用できる PATH」情 報に書き換えているかもしれません。

    • その PATH を利用して vscode を実行すると、実行状況が時によって変化 する可能性が出てきます。

    • 対策は、gsudo 後は、そのコマンドプロンプトやパワーシェルコンソール を一旦終了させて、改めてコマンドプロンプトを起動してから vscoode を起動してください。

  • userファイルとかにtexliveのフォルダについて

    • latex 用環境変数 TEXMFHOME や TEXMFLOCAL で示されるディレクトリ処理に影響します
    • それらの情報は以下のようにして調べてください

      kpsewhich -var-value=TEXMFHOME
      kpsewhich -var-value=TEXMFLOCAL
      
和田 勇 への返信

Re: Build LaTex projectを実行したい

- 西崎 晴彦 の投稿
ありがとうございます。返信遅れて申し訳ございません。

なお「"name": "latexmkout",」のところにも 「"-outdir=%OUTDIR%",」 の記述を追記したほうがよいでしょう

これは、透過された数式をpngで作りたいと思っていたのですが、私がこういうPATHの設定に慣れていないため、
latexmk => pdfcrop =>pdftocairo
のコマンドの過程で入力されるpdfをoutディレクトリのpathの位置でやるやり方がわからなかったから-outdir=%OUTDIR%を入れませんでした


このツール使用したことはないのですが、おかしな現象はこのツールを利用後に「code . -n」とかしていませんか?

gsudoはよく使うのでそれはあると思います


linux 系の sudo と同じセキュリティポリシーで「信用できる PATH」情 報に書き換えているかもしれません。
その PATH を利用して vscode を実行すると、実行状況が時によって変化 する可能性が出てきます

このようなことが起こっているんですね。
全然知りませんでした。
3回ほどやってみましたが、何も変わりませんでした。
コマンドの実行はどこでやっているのですか?
pythonの場合vscode上のターミナルで

python -----.py

みたいな感じで出てくるのでターミナルで行われていることがわかるのですが、latexの場合どこで行われているのかわかりません。
そこのコマンドがgsudoされていたのかもしれません。


latex 用環境変数 TEXMFHOME や TEXMFLOCAL で示されるディレクトリ処理に影響しますそれらの情報は以下のようにして調べてください

kpsewhich -var-value=TEXMFHOME
kpsewhich -var-value=TEXMFLOCAL

実行してみました。おそらくないことがわかりました。




西崎 晴彦 への返信

Re: Build LaTex projectを実行したい

- 和田 勇 の投稿
  • 「"-outdir=%OUTDIR%",」の件に関する私の提案は撤回

    setting.json を見直したところ、仰るような画像ファイル生成手順のためだと理解しました。

    「動いている」「手順としてマスターしてる」と状態は重要なので私の提案は撤回します。

  • 環境変数 PATH の件

    通常股プロセスが親プロセスの環境変数を変えてしまうなんてことは考えられないのと レポート内容から私の杞憂のようです。

    いずれにしても、次回発生時は、画面キャプチャやログ表示ウィンドウ に表示されたもの、.logファイルなどの情報提供をお願いします。

  • TEXMFHOME と TEXMFLOCAL

    どちらも texlive のバージョンに関わらず、ユーザ自身、あるいはそのマ シンを利用するユーザのためにカスタマイズしたスタイルファイルをおく場 所ですので実体ファイルは無い場合もあります。

    ちなみに通常の設定値などの情報は以下の通り。

    • TEXMFHOME … %USEPROFILE%\texmf ですが、ディレクトリ自体が無い場 合も多いです

    • TEXMFLOCAL … C:\texlive\texmf-local で texlive インストール時に 存在しなければ必要なディレクトリが作成され ls-R という処理に必要な データベースファイルが生成されています

和田 勇 への返信

Re: Build LaTex projectを実行したい

- 西崎 晴彦 の投稿
何度も返信ありがとうございます。
次回発生したら、動画などを送って、質問します。
解決方法がわかった場合も送ってみたいと思います。
長い間、私の返信をしてくだっさってありがとうございました。