jlisting.styがうまく使えない

jlisting.styがうまく使えない

- pazu 1232 の投稿
返信数: 10
日本語が含まれるソースコードをlatexに乗せようと思って次のホームページを参考にjlisting.styをダウンロードしました.


作成したtexファイルは次の通りです.

\documentclass[a4paper]{article}
\usepackage{CJKutf8}
\usepackage{graphicx}
\usepackage{here}
\usepackage{url}
\usepackage{indentfirst}
\usepackage{listings}
\usepackage{jlisting}
\usepackage[dvipdfm]{geometry}
\geometry{left=30truemm,right=30truemm,top=35truemm,bottom=30truemm}
\begin{document}
\begin{CJK}{UTF8}{min}

\begin{lstlisting}[basicstyle=\ttfamily\footnotesize,frame=single]
int main(void){
printf("こんにちは\n");
return 0;
}
\end{lstlisting}

\end{CJK}
\end{document}

これをTexworksで実行したところ,次のようなエラーが出ました.

...
...
! Illegal parameter number in definition of \lstlistingname.
<to be read again>
1
l.158 \def\email#1
{\gdef\@email{\texttt{#1}}}
?

このエラーを調べたところ,ダウンロードしたjlistimg.styの中身に問題があるそうなんですが,ダウンロードするファイルを勝手に修正するわけにもいかずどうすればいいかわからないといった状況です.

どなかたこの問題を解決できる方がいらっしゃたらどうかよろしくお願いします.
添付 キャプチャ.JPG
pazu 1232 への返信

Re: jlisting.styがうまく使えない

- 和田 勇 の投稿
頂いたソースと jlisting.sty をダウンロードしただけですが問題なくplatex でコンパイルできます。

こちらで検証した方法
■macOS mojave Beta
■texlive 2019
■jlisting.sty のみカレントディレクトリにダウンロード
■listings関連は2019 に含まれていたものを利用

お願い
■ログファイルを貼り付けるか添付してください **これ必要です**
コンパイルしたファイル名に拡張子 .log がついたファイルです。
■ダウンロードしたものは jlisting.sty だけ?
■それとも listings もダウンロードした?

和田 勇 への返信

Re: jlisting.styがうまく使えない

- 前田 一貴 の投稿
元の投稿の添付画像でわかる通り,pdflatex を使っています.
また,コードも CJKutf8 を読み込んでいて,pdflatex 用のように見えます.
まずはこれが意図通りなのかどうかが気になるのですが.
前田 一貴 への返信

Re: jlisting.styがうまく使えない

- 和田 勇 の投稿
やはりpdflatex ですか
# 再現したのでログの提供は不要です

眠いけどちょっと気になって調べてみましたが挫折 :-(

> Illegal parameter number in definition of \lstlistingname.

なので jlisting.sty をみると

  \def\lstlistingname{B%=!<%9%3!<%I}
  \def\lstlistlistingname{B%=!<%9%3!<%IL\
と文字コードは ISO-2022-JP なのでutf-8 に変換しました。

  \def\lstlistingname{ソースコード}
  \def\lstlistlistingname{ソースコード目次}

が、pdflatex すると本文で

  ! Improper alphabetic constant.
  
   \lst@FillFixed@
  .16 printf("こんにちは\n
");

となってしまいます。
メッセージを内容を参考にとりあえず本文の printf の日本語を削除する通るようになるのですが、解析ちっと大変そうなのと、明日は早いのでここで挫折。
また土曜日は一日中外出なのでどなたかフォローお願いします。

今回チェックしたこと
1)  jlisting.sty を UTF-8 に変更
2) 提供本文の printf のメッセージの日本語を取り除いた
pazu 1232 への返信

Re: jlisting.styがうまく使えない

- 前田 一貴 の投稿
まず,もし特に必要性もなく pdflatex を使っているならば,platex を使ってください.
platex を使う場合は CJKutf8 も不要です.

そうではなくて,なんらかの理由で pdflatex で欧文の文書に日本語を含むソースコードを
書かなければならないとします.jlisting は platex で使うことを前提に書かれたものですから,
pdflatex ではまともに動かないと思った方がよいです.

解決策は調べた限りだと2通りあります.
1つは escapechar を使って日本語部分を listings の処理から外す方法です.
https://tex.stackexchange.com/questions/177482/cjk-and-code-highlighting
ただ,この方法ではいちいち日本語部分を指定した escapechar で囲む必要があり,面倒です.

もう1つは,CJK の処理を listings に追加する方法です.
https://gist.github.com/leo-liu/a7085b75c726f75ccadf74fbc88c0eb3
この中国語用の処理がほぼそのまま使えますが,このままだと欧文部分がおかしくなるので,
少し手を入れてみました.試した限りではうまく動いているように見えますが,
私は追加部分の動作を何ひとつ理解していません.

やったこと:
・Gist の \patchcmd のコードがあると欧文の単語がひとまとまりになって処理されてしまうようなので削除した.
・するとなにやら \lst@hss に関するエラーが出るので,これを CJK の処理では \relax にした.


\documentclass[a4paper]{article}
\usepackage{CJKutf8}
\usepackage{listings}
\makeatletter
\def\lst@CJK@XXX#1#2#3{%
  \lst@ifletter\else\lst@OutputOther\fi
  \lst@whitespacefalse
  \advance\lst@length\@ne
  \lst@AppendOther{\let\lst@hss\relax\csname CJK@\number`#1\endcsname{`#2}{`#3}}%
}%
\lst@AddToHook{SelectCharTable}{%
  \let\CJK@XXX\lst@CJK@XXX
}
\makeatother
\lstset{extendedchars=false}
\begin{document}
\begin{CJK}{UTF8}{ipxg}
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize,frame=single]
int main(void){
    printf("こんにちは\n");
    return 0;
}
\end{lstlisting}
\end{CJK}
\end{document}
前田 一貴 への返信

Re: jlisting.styがうまく使えない

- pazu 1232 の投稿
返信が遅れてしまい,申し訳ありません.

まず,listingsはダウンロードして現在はC:\Program Files\MiKTeX 2.9\tex\latexに置いています.jlisting.styは上のtexファイル(hello.tex)と同じディレクトリ(カレントディレクトリ)に置いています.

OSはWindows8.1です.

hello.texをTeXworksでpLaTeX(ptex2pdf)として通したところ,添付ファイルのようなメッセージが出てきてしまいました.ptex2pdfをダウンロードしていなかったと思い,これについていろいろと調べてみたのですが結局どうすればいいかわかりませんでした.

また,その調べる過程でMiKTeXよりもTeX Liveのほうがいいということが書いてありました.私としては,日本語と英語の両方を含むLaTeXのPDFが得られればどのような方法でもいいのですが,和田さんもTeX liveでうまくいっていることを考慮に入れるとTeX Liveのほうがよいのでしょうか.
添付 キャプチャ.JPG
pazu 1232 への返信

Re: jlisting.styがうまく使えない

- 和田 勇 の投稿
■ ptex2pdf
MikTeX 使ったこと無いけど
http://supportdoc.net/support-latex/newmik.html の
「追加パッケージのインストール」のところに「図19 キーワード「cjk」を入れてみた」という興味深いキーワードがあります。試してみてはいかがでしょうか?

■ TeXLive のほうがよいか?

ツレナイと感じられるかもしれませんが、どちらでも良いのでは?それぞれの考え・環境に依存すると思います。

#このフォーラムに質問する時「MikTeX ユーザです」などと始めると回答する側もそれなりに対応しようとしますのでよろしく。

以下は次の二点について和田の個人的な思いを書いておきます
 1)面倒なパッケージ管理から開放されたい
 2)昨今は豊富なストレージ領域が入手可能なので

MikTeX とTeX Live の違いをあまり理解しているとはいえないのですが、listings ptex2pdf がMikTex では追加イパッケージンストールないし手動インストールしなければならないようですが、通常フルインストールが標準なTeX Live との顕著な違い例ですね。

何かを実現しようとした時、追加パッケージなどのインストールで対応でよいのならMikTeX かしら?(言い過ぎかな :-) )
TeX Live になってから必要なパッケージなどは意図的に追加インストールした記憶は確か無いですね。どちらかというと BeamerやTikZ などを如何に利用すべきか考えるようになりましたね。
ということでパッケージ管理の面から考慮されてはどうですか?

さてちょっと昔話を触りに ...
LaTeX を触り始めた1990 年代後半は、コンパイルするにも結構難儀してたし評判の良いパッケージのあれこれ調べダウンロードし検証したりと、面倒だななとかならないかなと日々でした。その頃はまだディスクスペースも今のように潤沢ではなかったので、ハードウェアの成長がなければきっと最小構成がベースなMikTeX を選んでいたかもしれませんが、数百ギガからテラバイトスペースが個人的ににも容易に入手できる時代なので、昔経験した苦労のことを考えるとフルインストールが標準(異論はありますが)なTeX Live はストレージデバイス食いとはいえなんと手軽なことか、てことで愛用しています。

以上強引にまとめると現在 2019 だと7G 専有しているので来年新しいバージョンのこと考慮しストレージに 20G 以上余裕があるなら僕だったら TeX Live 一押しです。

#これ書いていたらソースからコンパイルしてみたい気持ちが沸々沸き起こっている
和田 勇 への返信

Re: jlisting.styがうまく使えない

- 前田 一貴 の投稿
MiKTeX には ptex2pdf どころか ptex のバイナリもないようですから,
pLaTeX を使いたい初心者には厳しいでしょう.
言及されている cjk というのは,既に最初のコードで使われている CJKutf8 のことです.
MiKTeX でとにかくなんとかしたいならば,LuaTeX-ja を使うのが一番楽でしょう.

> #これ書いていたらソースからコンパイルしてみたい気持ちが沸々沸き起こっている

ここからどうぞ:
https://github.com/TeX-Live/texlive-source
少なくとも Linux では ./Build するだけで簡単です.タイミングによってはコケることもあるかもですが.
前田 一貴 への返信

Re: jlisting.styがうまく使えない

- 和田 勇 の投稿
> ptex のバイナリもない

そうなんですか、基本にたいするかんがえかたのちがいですかね。返信する際、ちょっとは調べたけど情報少ないですしね。

> コンパイル
はい、かつてはやっていたのですが、手順は忘れていましたが昔々ほどは面倒ではないことはうろ覚えで覚えています。
今git clone しています。一応macOS fedora debian のどれかあるいは全部で試せればと思います。
前田 一貴 への返信

Re: jlisting.styがうまく使えない

- 若松 久仁光 の投稿
前田一貴様
色々な情報の開示を有り難うございます。
少し前から「listings」に興味があったので、参考のために此処の書き込みも拝読させて貰っておりました。
「もう1つは,CJK の処理を listings に追加する方法です」と書かれた文書例をコンパイル。
MacOSX10.12.6 Sierra でMikTeX(ver.2.9.7000)で追試をしてみました。
「\documentclass[a4paper]{article}」を「ltjarticle」Lua用にのみ変更して
実験してみました。「LuaLaTeX」だと(思いの外簡単に(?))目的が遂行されるのですね。
TeX環境の最後の体験のために、MikTeXも本年1月にDLインストールしていましたが「日本語を含む書類」の
コンパイル方法が判らず、今まで中断していました。
追試は、TeXworksを呼び出してのMikTeXでしたが、とても貴重な経験をさせて頂きました。
MikTeXでの「XeTeX」等を使用して「日本語表示」が出来るとの書き込みもありましたが、小生の
Mac環境では思った様には「変換できず」、今回、
解決法は「LuaLaTeX」を使用する事。を知り安堵しました。若松久仁光拝
追伸
(此処での情報の交換に関しては何の役にも立たない書き込みで申し訳ございません。)