コード表示にmintedスタイルファイルを使った場合における、コード内の日本語の扱い

コード表示にmintedスタイルファイルを使った場合における、コード内の日本語の扱い

- 萩原 淳一郎 の投稿
返信数: 13
mintedスタイルファイルを試したのですが、日本語の扱いに課題があるようです。
ネットでいろいろ調べてみましたが、私の理解力では解決に至る事ができませんでしたので、皆様のお知恵を拝借できればと思います。


まず試行環境は以下の通りです。
OS: Windows 7
TeX: TeX Live2015(pLaTeXを使用、--shell-escapeを設定)
Python: 2.7(pygmentize.exeをインストール済み)


次にTeXファイル(UTF-8)の内容は以下の通りです。
\documentclass{jsbook}
\usepackage[cache=false]{minted}


\begin{document}

\begin{minted}{text}
int main(void){
    // 日本語
    return 0;
}
\end{minted}

\end{document}


最後に出力のpdfは添付ファイルの通りで、「日本語」が化けて「日暴 PYGZob 語」となってしまっています。
mintedのオプションを[cache=false,draft=true]としてdraftを付けると解消されますので、外部プログラムであるpygmentize.exeとのやり取りに関して何らかの問題が発生していると思われます。


この現象を回避できる情報をお持ちの方は、ご教授を頂けると助かります。
よろしくお願いいたします。
萩原 淳一郎 への返信

Re: コード表示にmintedスタイルファイルを使った場合における、コード内の日本語の扱い

- 浮亭 夢介 の投稿
マニュアルによれば,compileは pdflatex , xelatex を
使うようにみえます.日本語があるので lualatex(luajitlatex)
を使ったところ文字化けすることなく,"日本語" が表示されました.
試されては,どうでしょうか.
浮亭 夢介 への返信

Re: コード表示にmintedスタイルファイルを使った場合における、コード内の日本語の扱い

- Akira Kakuto の投稿
lualatex
\documentclass{ltjbook}
... ...

xelatex
\documentclass[xelatex,ja=standard]{bxjsbook}
... ...

で ok でした。
Akira Kakuto への返信

Re: コード表示にmintedスタイルファイルを使った場合における、コード内の日本語の扱い

- 萩原 淳一郎 の投稿
ご指摘に基づきXeLaTeXで試したところ、確かに問題は解消さました。
従いまして、XeLaTeX/LuaLaTeXを使うというのも回避策の一つと認識いたしました。
情報ありがとうございます。
浮亭 夢介 への返信

Re: コード表示にmintedスタイルファイルを使った場合における、コード内の日本語の扱い

- 萩原 淳一郎 の投稿
確かにXeLaTeXを使った所、文字化けは解消されました。
ご指摘ありがとうございました。


萩原 淳一郎 への返信

Re: コード表示にmintedスタイルファイルを使った場合における、コード内の日本語の扱い

- aminophen の投稿
Windows とのことなので
platex -shell-escape -kanji=utf8 test.tex
のように -kanji=utf8 を付けてみると、platex でも化けないかもしれません。
たしか、win32 では入出力の encoding がデフォルトで sjis になっているはずです。
test.tex を処理した場合、中間ファイル test.out.pyg が一旦書き出されるので、
その encoding が utf8 でないと化けるのではないかということです。

ちなみに手元の mac 環境では、入出力の encoding が utf8 なので化けませんでした。
aminophen への返信

Re: コード表示にmintedスタイルファイルを使った場合における、コード内の日本語の扱い

- 萩原 淳一郎 の投稿
アドバイスありがとうございました。
-kanji=utf8を付けてみましたが、残念ながら結果は変わりませんでした。
MacではpLaTeXでも問題ないとのことなので、pLaTeXが問題という訳でもなさそうだと考えています。
もう少し情報を確認してみて、有益なものがあれば改めて共有させていただきたいと思います。
よろしくお願いします。
萩原 淳一郎 への返信

Re: コード表示にmintedスタイルファイルを使った場合における、コード内の日本語の扱い

- aminophen の投稿
では
platex -shell-escape -no-guess-input-enc -kanji=utf8 test.tex
としてみるとどうでしょうか。win32 バイナリは入力ファイルの encoding を自動推定
するので、これが間違っていれば文字化けの原因になると思います。
したがって、この自動推定を起こさないように -no-guess-input-enc を付けます。
aminophen への返信

Re: コード表示にmintedスタイルファイルを使った場合における、コード内の日本語の扱い

- Akira Kakuto の投稿
こちらの W32TeX
e-pTeX 3.14159265-p3.7.1-161114-2.6 (sjis) (TeX Live 2016/W32TeX)
では,
platex --kanji=utf8 --shell-escape test2
dvipdfmx test2
で文字化けはありませんでした。(添付 test2.pdf)。
Akira Kakuto への返信

Re: コード表示にmintedスタイルファイルを使った場合における、コード内の日本語の扱い

- aminophen の投稿
私の手元でもようやく、実際に win32 環境を試してみました。
e-pTeX 3.14159265-p3.7.1-161030-2.6 (sjis) (TeX Live 2016/W32TeX)
です(10/31 付けの W32TeX)。
-kanji=utf8 -no-guess-input-enc なら化けませんでしたが
-kanji=utf8 だけでは化けました。化けたときは
(guessed encoding: Shift_JIS = sjis)
という行が出ていますので、test.out.pyg が sjis と判定されているのでしょうか。
aminophen への返信

Re: コード表示にmintedスタイルファイルを使った場合における、コード内の日本語の扱い

- Akira Kakuto の投稿
たまたま,バイナリの微妙な違いで,こちらでは
成功したのかも知れませんが,何かおかしなこと
があったら -no-guess-input-enc
(-no-guess, あるいは -no-g でも 可)
を付けて下さいというのが標語ですね。
Akira Kakuto への返信

Re: コード表示にmintedスタイルファイルを使った場合における、コード内の日本語の扱い

- 萩原 淳一郎 の投稿
ご確認並びにご協力ありがとうございます。

私の手元の環境は、
 e-pTeX, Version 3.14159265-p3.6-141210-2.6 (sjis) (TeX Live 2015/W32TeX)
でして、この環境で-no-guess-input-encを付けてみましたが、文字化けは残ってしまうようでした(具体的には、ptex2pdfのオプションをTeXWorks0.6.0上で設定しています)。
私の設定が正しくないのかもしれませんので、もう少しトライしてみたいと思います。
萩原 淳一郎 への返信

Re: コード表示にmintedスタイルファイルを使った場合における、コード内の日本語の扱い

- aminophen の投稿
TeXworks での設定方法は合っているでしょうか?
ptex2pdf の設定は

-l
-ot
-shell-escape -kanji=utf8 -no-guess-input-enc $synctexoption
$fullname

と書くのが正しいと思います。platex に渡したいオプションはすべて
同じ枠内に続けて書きます。

もし TeXworks がわからなければ、コマンドプロンプトに
直接コマンドを入力して試してみるとよいでしょう。
aminophen への返信

Re: コード表示にmintedスタイルファイルを使った場合における、コード内の日本語の扱い

- 萩原 淳一郎 の投稿
ありがとうございます。
ご指摘の指定方法で解決できました。
#ptex2pdf --helpの表示から類推して、$synctexoptionの後にオプションを連ねておりました...
試しにplatex -> dvipdfmxをコマンドプロンプトから手動で動作させた場合も、文字化けのない結果が得られました。