backgroundcolor の処理は lstmisc.sty 中で行われていますが, その 1629 行目に
\lst@frameMakeBoxV\lst@framebox{\ht\strutbox}{\dp\strutbox}%
とあり,高さ・深さが \strutbox のそれと決め打ちされています.
ここをうまく直せればいいのですが.高さ・深さが \strutbox のそれと決め打ちされています.
「白筋」の要因がなんとなくわかりました. 欧文クラスで LuaTeX-ja を使うと,
\ht\strutbox = 0.7\baselineskip = 8.4 pt, \cht = 0.962216 * 0.88 * 10 pt = 8.4675 ptとなり,背景色の高さ \ht\strutbox, 深さ \dp\strutbox (= 0.3\baselineskip) から 0.0675 pt だけ和文文字がはみ出します. (注意深く見れば,lstlisting 環境の中身の1行目に和文文字を持ってきた時に,和文文字が若干はみ出ることに気づくかもしれません).
さて,はみ出し量はわずかですが,lstlistings 環境で出力される各行の高さが \baselineskip を超えてしまうのがキーになります. 出力処理のところ(詳細未確認)で \lineskiplimit = 0 pt, \lineskip = 1 pt と設定されているので, わずかにはみ出しただけでも背景色で塗られた箱と箱の間に1 pt の白筋が出てしまう,というわけです.
問題は,「背景色で塗る」ことが各行の中身を実際に出力する前に行われることで,これによって 「その行に和文文字がある」かどうかを事前に調べることが出来ないことになります.対応策として,
を思いつきました.個人的には後者が好みです(1行目に和文文字が来た場合の問題はどうにもならないですが,そこは微少量のはみ出しなので大きな問題ではないと思います). 今日の午後〜夜にでもコードを書いてみます.
コミットをみてみました。ただlistingsに frame=single などを入れると上部にでかい白帯が出るようになってしまいました。
None への返信
コミットをみてみました。ただlistingsに frame=single などを入れると上部にでかい白帯が出るようになってしまいました。
すみません,frame=single で白帯が出る問題は,commit 5cc51f7 で直したつもりです.
h7k への返信
すみません,frame=single で白帯が出る問題は,commit 5cc51f7 で直したつもりです.
しまった,手元で直したのに満足して,push するのを忘れてしまいました.今日の夜に push します.
h7k への返信
しまった,手元で直したのに満足して,push するのを忘れてしまいました.今日の夜に push します.
遅くなりましたが,確認しました.直ったようです.
あとは
(また,\colorbox{blue}{\lstinline|あいうえお|} を使うと ! Missing $ inserted. のエラーも出ますね.)
も解決するとよいですね.これは元々 uplatex + jlisting でも
! Invalid code (12354), should be in the range 0..255.と出てだめみたいです.
(また,\colorbox{blue}{\lstinline|あいうえお|} を使うと ! Missing $ inserted. のエラーも出ますね.)
新バージョン 20150922.0 を出しましたが,まだこっちは直していません.
\colorbox{blue}{\lstinline|あいうえお|}
listings.sty の処理をまだ完全にわかっているわけではないですが, aca0dcf で対応してみたつもりです. (\lstinline!...! で,中身の内容を全部トークンレジスタに読んで,それを listings の 出力命令に変換する処理を行うようにしました.どんな副作用があるかわからないです)
こちらもひとまず直っているようなので,完了とします.何かあれば再オープンしましょう.
フォーラム 公開討議/質問 [#76839] からの引用
[forum: 76839]
チケット #27098 「listings で白筋」への対応のため,lstlisting, lstinline による出力で 各行の高さ・深さを 0 にする処理を加えていますが,それが裏目に出ているようです.
(また,\colorbox{blue}{\lstinline|あいうえお|} を使うと ! Missing $ inserted. のエラーも出ますね.)