TeXworks の ptex2pdf はネットワークドライプに対応していない?

TeXworks の ptex2pdf はネットワークドライプに対応していない?

- 葛西 の投稿
返信数: 8
大学のPC実習室のWindowsで TeXworks の pLaTeX(ptex2pdf) で日本語LaTeXファイルがタイプセットできない件についてお聞きしたく。以下はインストールされている TeXLive 2020 で確認しています。また,大学ではユーザのホームディレクトリがネットワークドライブになっていて H: としてマウントされています。

H: にて,
コマンドラインで ptex2pdf -l hello.tex などとすると問題なく pdf ができますが,TeXworks ではコンソールに文字化けしたエラーが出てタイプセットできません。
Visual Studio Code の settings.json に ptex2pdf を設定して様子をみると以下のようなメッセージですので,ptex2pdf.lua が(?)ネットワークドライブの UNC パスに対応していないため hello.tex のあるディレクトリに cd できないからではないか?と憶測しています。
同じ状況で,日本語なしの latex ファイルをTeXworks の pdflatex でタイプセットするとうまくいくので,ptex2pdf 固有の問題かなと思います。

・この憶測は間違いで原因は別,とか
・この不具合は texlive 2021 では解消されている,とか
・このような回避策がある,など
情報をお持ちの方がいましたら,教えていただければ幸いです。

PS Microsoft.PowerShell.Core¥FileSystem::¥¥CHAOS-2¥riko¥stf¥kasai¥windows¥_redirected¥Document
> cd "¥¥CHAOS-2¥riko¥stf¥kasai¥windows¥_redirected¥Document¥" ; if ($?) { ptex2pdf -l -ot "-kanji=utf8 -synctex=1 -interaction=nonstopmode -file-line-error" hello.tex }
This is ptex2pdf[.lua] version 20200520.0.
Processing hello.tex
'¥¥CHAOS-2¥riko¥stf¥kasai¥windows¥_redirected¥Document'
上記の現在のディレクトリで CMD.EXE を開始しました。
UNC パスはサポートされません。Windows ディレクトリを既定で使用します。
This is e-pTeX, Version 3.14159265-p3.8.3-191112-2.6 (utf8.sjis) (TeX Live 2020/W32TeX) (preloaded format=platex)
restricted ¥write18 enabled.
entering extended mode
! I can't find file `hello.tex'.

葛西 への返信

Re: TeXworks の ptex2pdf はネットワークドライプに対応していない?

- 前田 一貴 の投稿
ptex2pdf.lua の内部で os.execute すると cmd.exe を起動するので,その時点で UNC パスは使えなくなるということでしょうか.
ユーザ側で対応するならば,調べて出てくるのはそのネットワークドライブに一時的にドライブレターを割り当てることですが,実習室の環境だと難しいでしょうか.

(開発者向け)Lua のスクリプト側で対応するならば,texcmd や dvipdfcmd を powershell 上で走らせるように書き直さないとだめなんじゃないかと思います.
前田 一貴 への返信

Re: TeXworks の ptex2pdf はネットワークドライプに対応していない?

- はやて (h20y6m) の投稿

現実的な回避策は前田さんが書かれているようにネットワークドライブを割り当てる以外にないと思います。

ところで質問には

> ネットワークドライブになっていて H: としてマウントされています。

> H: にて, > コマンドラインで ptex2pdf -l hello.tex などとすると問題なく pdf ができます

と書かれているのですでにネットワークドライブが割り当てられていて ptex2pdf コマンドが正常に動作しているのだと思います。

そのうえで

> TeXworks ではコンソールに文字化けしたエラーが出てタイプセットできません。

> Visual Studio Code の settings.json に ptex2pdf を設定して様子をみると以下のようなメッセージ

という状態なのでしょうか。

TeXworks や Visual Studio Code でファイルやフォルダーを開くときにネットワークパス指定になっていないでしょうか。 ネットワークドライブが H: に割り当てられているのであれば H: ドライブからファイルやフォルダーを開いてみてください。

(Windows 10 であればファイルを開くダイアログで左のツリーから「PC」を開いてその中に「共有名 (\サーバー名) (H:‌)」のようなドライブがあると思うのでそこからたどってみてください(「\サーバー名\共有名」が H: に割り当てられている場合))


cmd.exe は os.execute の内部で呼び出されるのでスクリプト側からでは対応できないのではないかと思います。

外部コマンドの呼び出しに使われている C 言語の system 関数が cmd.exe を呼び出すことによるものだと思うので対応は難しいのではないかと思います。

またこの問題は ptex2pdf 固有の問題ではなく tex の \write18 等にも影響するので ptex2pdf だけ対応しても解決しないのではないかと思います。

はやて (h20y6m) への返信

Re: TeXworks の ptex2pdf はネットワークドライプに対応していない?

- 前田 一貴 の投稿
スルーしてしまっていましたが,文字化けの方は確かにこの情報だけだとよくわかりません.
TeXworks で H: にあるファイルを編集しているはずなのだが,ptex2pdf を実行すると UNC パスでの実行になっているということですか?

ptex2pdf については,os.execute でさらに powershell を呼んで……,みたいなことをすれば一応回避策はあるんじゃないかと思っています(面倒ですが).
ただ,\write18 についてはおっしゃる通りで,extractbb などなど失敗しそうな気がします.

(system で呼び出されるデフォルトシェルの変更とか,環境変数でも制御できないのだろうか?)
前田 一貴 への返信

Re: TeXworks の ptex2pdf はネットワークドライプに対応していない?

- 和田 勇 の投稿

前田さん・はやてさんのフォローにつなげます。

  • 完全な再現テストできたわけではなく、いろいろテスト・調整したらうまくいくようになったという報告です。texlive2020 でテストです。

  • > H: にて,コマンドラインで ptex2pdf -l hello.tex などとすると問題なく pdf できるとのことでしたので、 同じく H: にてコマンドラインで texworks hello.tex のようなことをしてみた。

    • hello.tex のみだとエラーになる
    • ptex2pdf -l -ot -synctex-1 hello.tex をやった後だとなんとかできる
    • コルタナから texworks を起動し H: の hello.tex を開き、編集してタイプセットしようとするとエラーになる
    • エクスプローラで H: の hello.tex をダブルクリックしてtexworks で開き編集するとコルタナと同じようにエラーになる
    • このテストを行い始めた時から急に texworks の起動がメチャメチャ遅くなってしまったので過去の情報を漁ったら以下の記事を見つけ、ホームにある .texlive2020 を丸ごと削除。

      https://okumuralab.org/tex/mod/forum/discuss.php?d=3036&parent=17958
      
    • すると、起動速度は元に戻り、上記の二つのケースのエラーも発生しなくなり、タイプセットとプレビューも表示できるようになりました。

  • .私は .texlive2020 以下をバッサリ削除しましたが、.texlive2020\texmf-config\texworks\TUG\TeXworks.ini のみの初期化(=削除)して簡単なテストをしましたがエラーは起きませんでした。とはいえ ...

    • 現状の texworks.ini を保持しする必要があれば、H: にて texworks を起動する。ただし、一度 ptex2pdf -l -ot -synctex=1 HOGE.tex のようなことをしておく
和田 勇 への返信

Re: TeXworks の ptex2pdf はネットワークドライプに対応していない?

- 和田 勇 の投稿
VScode のこと忘れていたので追記。(こちらも具体的な原因は説明できないのですが、結果報告です)

VScode も昨日検証開始時にテストした時は、VScode のインストール時の問題か、UNC パス先へのアクセスができずファイルをオープンできませんでした。

念の為、scoop で導入した VScode を uninstall / install したところ、問題なく ptex2pdf -l で pdf イメージを作成できるようになりました。
和田 勇 への返信

Re: TeXworks の ptex2pdf はネットワークドライプに対応していない?

- 葛西 の投稿
皆様,いろいろご助言ありがとうございました。
和田さんのご報告を参考にして試してみたところ,うまくいくようです。
ありがとうございました。

要点は,
tex ファイルのあるディレクトリに cd して,コマンドラインから
texworks hello.tex
のようにして起動し,タイプセットするとうまくいく。
(カレントディレクトリに hello.tex があるから ptex2pdf は cd しない?
からエラーが回避できる,とか)

いったんタイプセットできた hello.tex は
「スタート」メニューから TeXworks を起動して,hello.tex を開いても
タイプセットできるようになる。

完全に解決するのではなく,別の tex ファイルでまたタイプセットできなく
なる場合がある(ように思われる)。
そのときは,またその tex ファイルのカレントディレクトリで
コマンドラインから texworks hoge.tex とする。

完全に解決したわけではないですが,現状を以下の記事にまとめました。
PC 実習室 Windows の TeXworks が日本語 LaTeX ファイルをタイプセットできない
https://home.hirosaki-u.ac.jp/heroic-2020/2054/

皆様,ありがとうございました。
葛西 への返信

Re: TeXworks の ptex2pdf はネットワークドライプに対応していない?

- 前田 一貴 の投稿
なんだか大変な解決策ですが,一応うまくいったようでよかったです.

> いったん,この方法で untitled-2.tex がタイプセットできると,今度は TeXworks を [スタート] から起動し,untitled-2.tex を開いてもタイプセットできるようになる。

これを読んでもしばらく謎だったのですが,要ははやてさんの書かれた通りで,H: にネットワークドライブ上のホームを割り当てているが,TeXworks からファイルを作ったり開いたりするとなぜか UNC パス指定になってしまって,そのまま ptex2pdf を実行すると失敗するということでしょうか.
一旦コマンドラインで H: からのパスで開くとちゃんと意図通りのパス指定になって,そのパスの情報が TeXworks に保存されるのでうまくいくということ?

Windows の仕様なのか,ネットワークドライブの設定の問題なのかわかりませんが,TeXworks から直接開いても大丈夫になった方が嬉しいですね.
前田 一貴 への返信

Re: TeXworks の ptex2pdf はネットワークドライプに対応していない?

- 和田 勇 の投稿
  • ソースは見ていませんが、ptex2pdf は UNC パスを問題なく処理できます・ptex2pdf は cd を行いません

    • 任意のディレクトリで ptex2pdf -l "UNCパス\hoge.tex" を実行すればわかると思いますが、デフォルトではそのディレクトリに log や aux pdf ファイルが作られます。
  • cd を実施しているのは texworks です。

    • texworks "UNCパス\hoge.tex" とするとイメージ的には以下のようにコマンドが実行されます。cmd が UNC 未サポートなので hoge.tex が見つからないと言われエラーになります。

               cd "UNCパス"
               ptex2pdf -l hoge.tex
     
    • ですので UNC パスが H: で参照できるので texworks "H:\パス\hoge.tex" とすれば問題なくタイプセットできるようです。

      • タイムリな情報見つけましたが、cd の代わりに利用するには少なくとも空きドライブレターを探す手間がありそうです

        https://nyanblog2222.com/programming/cmd/399/

  • PS

    私は imac 上に VMware の仮想環境で windows を動かしていますが、UNC パス上のファイルをオープンしようとすると「最近アクセスしたファイル recentFiles」の情報が急に肥大化し、texworks の起動に相当数の時間を要するようになってしまいます。

    もし、実環境でも texworks の動きが遅くなったら TeXworks.ini を削除し、UNC パスを使わないように texworks を運用する必要になるかもしれません。