ptex2pdfを用いた際の,日本語を含んだパスのファイルの検索

ptex2pdfを用いた際の,日本語を含んだパスのファイルの検索

- t y の投稿
返信数: 6
【環境】
Microsoft Windows 10 Pro (64bit) 10.0.16299 ビルド 16299
TeX Live 2018 64bit版
ptex2pdf version 20180514
uplatex (e-upTeX) 3.14159265-p3.8.1-u1.23-180901-2.6
dvipdfmx Version 20181012

---

【やりたいこと】

C:\workにおいて,ptex2pdfを用いてtest.texからtest.pdfを生成する際に,
「C:\work2以下にある」かつ「fileというディレクトリ直下にある」
という条件で,C:\work2\テスト\file\test2.texを見つけさせたい.
ただし,できればTeX Liveのシステムをいじりたくない.

---

【検証1】

C:\workにtest.texを置く.

(以下test.texの内容)
\documentclass[uplatex]{jsarticle}
\begin{document}
\input{test2.tex}
\end{document}
(以上test.texの内容)

C:\work2\テスト\fileにtest2.texを置く.

(以下test2.texの内容)
test
テスト
(以上test2.texの内容)

環境変数TEXINPUTSを以下のそれぞれのように設定
.//;C:/work2//;
.//;C:/work2//file;
.//;C:/work2/テスト//;
.//;C:/work2/テスト//file;
.//;C:/work2/テスト/file;

コマンドプロンプトにて以下のコマンドを実行
cd C:\work
uplatex test.tex
ptex2pdf -l -u test.tex

---

【検証1の結果】

uplatex…いずれの場合もtest.dviの生成に成功.
ptex2pdf…TEXINPUTSが「.//;C:/work2//;」のときのみtest.pdfの生成に成功.それ以外のときはtest2.texがnot found.

(以下エラーメッセージを含む,コンソール出力)
This is ptex2pdf[.lua] version 20180514.0.
Processing test.tex
This is e-upTeX, Version 3.14159265-p3.8.1-u1.23-180901-2.6 (utf8.uptex) (TeX Live 2018/W32TeX) (preloaded format=uplatex)
restricted \write18 enabled.
entering extended mode
(./test.tex
pLaTeX2e <2018-07-28u02>+1 (based on LaTeX2e <2018-04-01> patch level 5)
(c:/texlive/2018/texmf-dist/tex/platex/jsclasses/jsarticle.cls(guessed encoding: UTF-8 = utf8)
Document Class: jsarticle 2018/06/23 jsclasses (okumura, texjporg)
(c:/texlive/2018/texmf-dist/tex/platex/jsclasses/jslogo.sty)) (./test.aux)

! LaTeX Error: File `test2.tex' not found.

Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: tex)

Enter file name:
(以上エラーメッセージを含む,コンソール出力)

---

【検証2】

ptex2pdf.luaの410~418行目をコメントアウト.
(以下ptex2pdf.luaの410~418行目)
-- we are still here, so we found a file
-- make sure that on Windows/uptex we are using utf8 as command line encoding
if os.type == 'windows' then
if use_uptex == 1 then
os.setenv('command_line_encoding', 'utf8')
else
os.setenv('command_line_encoding', 'none')
end
end
(以上ptex2pdf.luaの410~418行目)

後は検証1と同じことを行う.

---

【検証2の結果】
uplatex…いずれの場合もtest.dviの生成に成功.
ptex2pdf…いずれの場合もtest.pdfの生成に成功.

---

【考察と質問】

TEXINPUTSを「.//;C:/work2//;」とすればtest2.texは見つかりますが,file直下を探すという指定ができていません.
また,どうもcommand_line_encoding=utf8が悪さをしているようなので,
ptex2pdf.luaの410~418行目をコメントアウトすれば,file直下を探すという指定はできます.
しかし,TeX Liveのシステムをいじるのは気持ち悪いです.いじらずにfile直下を探すよう指定できないものでしょうか.

---

【余談】

検証ではなく実用ではVSCodeとLaTeX workshopを使っていますが,
この場合,LaTeX Compilerのログにおいて,日本語を含むパスの日本語の部分が,文字化けしているのも気持ち悪いです.
t y への返信

Re: ptex2pdfを用いた際の,日本語を含んだパスのファイルの検索

- Akira Kakuto の投稿
> TEXINPUTSを「.//;C:/work2//;」とすればtest2.texは見つかりますが,
> file直下を探すという指定ができていません.
> また,どうもcommand_line_encoding=utf8が悪さをしているようなので,

これは制限事項です。つまり仕様です。command_line_encoding=utf8
の場合,環境変数,texmfcnf 変数は ascii 文字だけを使って下さい。

> 検証ではなく実用ではVSCodeとLaTeX workshopを使っていますが,
> この場合,LaTeX Compilerのログにおいて,日本語を含むパスの
> 日本語の部分が,文字化けしているのも気持ち悪いです.

(e)uptex のオプション -sjis を使うと,文字化けが無くなります。
なお, TeX Live 2019 では -sjis オプションが無くなりますが,
文字化けもしなくなります。
Akira Kakuto への返信

Re: ptex2pdfを用いた際の,日本語を含んだパスのファイルの検索

- Akira Kakuto の投稿
> (e)uptex のオプション -sjis を使うと,文字化けが無くなります。
> なお, TeX Live 2019 では -sjis オプションが無くなりますが,
> 文字化けもしなくなります。

これは通常のコンソール出力に関することで,各種の
エディタに関しては,知りません。
Akira Kakuto への返信

Re: ptex2pdfを用いた際の,日本語を含んだパスのファイルの検索

- t y の投稿
ご返信ありがとうございます.

.//;C:/work2//file;
といった書き方でも「非ascii文字を使っている」ことになるのでしょうか.

また,"uptex -sjis ..."や"uplatex -sjis ..."というコマンドを試してみましたが,どちらも"unrecognized option `-sjis'"と表示されました.
t y への返信

Re: ptex2pdfを用いた際の,日本語を含んだパスのファイルの検索

- Akira Kakuto の投稿
> .//;C:/work2//file;
> といった書き方でも「非ascii文字を使っている」
> ことになるのでしょうか.

ascii 文字だけですが,TEXINPUTS が展開された段階で非ascii文字
が入るので,だめになるのだと思います。

> また,"uptex -sjis ..."や"uplatex -sjis ..."というコマンドを
> 試してみましたが,どちらも"unrecognized option `-sjis'"
> と表示されました

TeX Live 2018 では -sjis があるのですが,
64bit 版には,TeX Live 2019 用のものを入れていますから,
新しいものをお使いのようです。よって

TEXINPUTS=.//;C:/work2//;
の場合に,コンソールで
ptex2pdf -l -u test.tex
とすると,画面表示は文字化けしないはずです。

各種エディタに関してはわかりません。
Akira Kakuto への返信

Re: ptex2pdfを用いた際の,日本語を含んだパスのファイルの検索

- Akira Kakuto の投稿
>> .//;C:/work2//file;
>> といった書き方でも「非ascii文字を使っている」
>> ことになるのでしょうか.
>
> ascii 文字だけですが,TEXINPUTS が展開された段階で非ascii文字
> が入るので,だめになるのだと思います。

こちらでテストして見ると,
TEXINPUTS=.//;C:/work2//file;
はだめですが,
TEXINPUTS=.//;C:/work2//file//;
は成功したので,お知らせします。
Akira Kakuto への返信

Re: ptex2pdfを用いた際の,日本語を含んだパスのファイルの検索

- t y の投稿
ご返信が遅くなり申し訳ありません.もう少し自分なりに検証したいと思いながら,できていません.

> TEXINPUTS=.//;C:/work2//;
> の場合に,コンソールで
> ptex2pdf -l -u test.tex
> とすると,画面表示は文字化けしないはずです。

確かに文字化けしませんでした.他方,uplatex test.texでは(カタカナはしないが漢字は)文字化けしました.set command_line_encoding=utf8としてから再度uplatex test.texすると,文字化けしなくなりました.今後は,環境変数あるいはtexmf.cnfでcommand_line_encoding=utf8を設定しておくようにします.

> こちらでテストして見ると,
> TEXINPUTS=.//;C:/work2//file;
> はだめですが,
> TEXINPUTS=.//;C:/work2//file//;
> は成功したので,お知らせします。

同じことが起こりました.そもそも//を複数使えることを知りませんでした(kpathseaのドキュメントに書いてありますね…).