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'.
現実的な回避策は前田さんが書かれているようにネットワークドライブを割り当てる以外にないと思います。
ところで質問には
> ネットワークドライブになっていて 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 だけ対応しても解決しないのではないかと思います。
TeXworks で H: にあるファイルを編集しているはずなのだが,ptex2pdf を実行すると UNC パスでの実行になっているということですか?
ptex2pdf については,os.execute でさらに powershell を呼んで……,みたいなことをすれば一応回避策はあるんじゃないかと思っています(面倒ですが).
ただ,\write18 についてはおっしゃる通りで,extractbb などなど失敗しそうな気がします.
(system で呼び出されるデフォルトシェルの変更とか,環境変数でも制御できないのだろうか?)
前田さん・はやてさんのフォローにつなげます。
完全な再現テストできたわけではなく、いろいろテスト・調整したらうまくいくようになったという報告です。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 のようなことをしておく
和田さんのご報告を参考にして試してみたところ,うまくいくようです。
ありがとうございました。
要点は,
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/
皆様,ありがとうございました。
> いったん,この方法で untitled-2.tex がタイプセットできると,今度は TeXworks を [スタート] から起動し,untitled-2.tex を開いてもタイプセットできるようになる。
これを読んでもしばらく謎だったのですが,要ははやてさんの書かれた通りで,H: にネットワークドライブ上のホームを割り当てているが,TeXworks からファイルを作ったり開いたりするとなぜか UNC パス指定になってしまって,そのまま ptex2pdf を実行すると失敗するということでしょうか.
一旦コマンドラインで H: からのパスで開くとちゃんと意図通りのパス指定になって,そのパスの情報が TeXworks に保存されるのでうまくいくということ?
Windows の仕様なのか,ネットワークドライブの設定の問題なのかわかりませんが,TeXworks から直接開いても大丈夫になった方が嬉しいですね.
ソースは見ていませんが、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 を運用する必要になるかもしれません。