lstlisting環境で複数のオプションを使用する設定について

lstlisting環境で複数のオプションを使用する設定について

- 小林 コウキ の投稿
返信数: 6
lstlisting環境で複数のオプションを使用する設定について質問があります。

以前,別のコメントにて,左端の部分に濃度の違う線を引く方法について質問させていただきました。
下記が解答になります。

\lstset{
basicstyle = \ttfamily,
backgroundcolor = \color[cmyk]{0,0,0,0.2},
framerule = 8pt, %左端の線の太さ
frame = leftline,
rulecolor = \color[cmyk]{0,0,0,0.6}
}

ここで,leftlineで左側の罫線の指定をしているのですが,60%のアミ濃度の下に,以下のように設定をすると,下側部分のみが変更となってしまいます。

\lstset{
basicstyle = \ttfamily,
backgroundcolor = \color[cmyk]{0,0,0,0.2},
framerule = 8pt, %左端の線の太さ
frame = leftline,
rulecolor = \color[cmyk]{0,0,0,0.6} ,
framerule = 0pt, %下端の線の太さ
frame = bottomline,%%下端の線
rulecolor = \color[cmyk]{0,0,0,0.1},%%下のアミの濃度
}

左側,下側と複数個所の設定方法を教えていただけませんか。

ご存じの方,よろしくお願いいたします。



小林 コウキ への返信

Re: lstlisting環境で複数のオプションを使用する設定について

- 和田 勇 の投稿
  • lstlisting は keyval を利用して各種オプションを取り込んでいます。

    • lstset すると lstlisting のデフォルトに lstset の内容で置き換えます

    • begin{lstlisting}[オプション] でさらに内容を置き換えます

  • なので一番最後に設定したものが有効になると思います

    • lstset で framerule や frame rulecolor を複数回設定するとそれぞれ最後のものが有効になります。
  • 左端と下端のそれぞれの線幅と色を指定したいように見受けられますが、上下左右のそれぞれの線色と線幅の keyval が存在しないので、現状では無理のようです。

  • ただし、線幅に関しては、frame=lb とかでなんとか誤魔かせそうです

    • 添付の tex ファイルのデバッグのところを取っていただければ参考になると思いますが、ポイントは以下のような設定になるかと思います。

        framerule      = 0pt, % フレームの周囲の枠線の太さ
        rulecolor       = \color[cmyk]{0,0,0,0.6},
        rulesep         = 10pt, % frame で B L など大文字指定した時に効果明瞭
         rulesepcolor    = \color[cmyk]{0,0,0,0.1},
      
    • frame に「leftline,bottomline」と指定すると「topline」も表示されてしまうので lbなどを使ってください。

    • l: leftline, b:bottomline, bl でも同じ。

    • 情報源 「texdoc listings」で表示される p37 「4.3.10 Frames」の「frame=⟨subset of trblTRBL⟩」の項
  • 今回の回答は frame=shadebox に似た設定をしたいように見受けられたので shadebox の定義を見たのですが時間がなくて B(bottomline) を指定hした時、「黒い線」が出る不具合の解析まで至りませんでした。

和田 勇 への返信

Re: lstlisting環境で複数のオプションを使用する設定について

- 小林 コウキ の投稿
和田 勇様
ご返信,ありがとうございます。

教えていただいた方法を試してみましたが,添付ファイルと同じ結果となりました。
leftline,bottomlineを別々の指定と言うのは,うまくいかないようですね。

丁寧に教えていただきまして,ありがとうございました。

小林 コウキ への返信

Re: lstlisting環境で複数のオプションを使用する設定について

- 和田 勇 の投稿
もやもやしていたので色々試行錯誤していたところ frameshape を利用すると、額縁のように装飾した二重・三重に入れ子にした枠が描けるようです。

上、右は枠無し、左を太くして、下を細くとするようなど、各辺毎にも枠数を変えて指定できますので、 frame=shadowbox のようなものも表現できます。

ただし、枠用に指定した染色は一つだけです。

また、指定方法によっては四隅に窪みが現れたり、無かったりで調整には試行錯誤が必要です。

色々試したところ、
「frameshape = {ynn}{yny}{ }{rynYNN}」下側の線の一部に R を指定することで気になる凹みが軽減される感じがします。

あるいは frameshape = {ynn}{yny}{ }{rynYYN}, とした上でrulesepcolor=\color{white} などして色を使わず線だけで装飾するのも手かと思います。(この部分 texdoc listings で表示される p39 の「frameshape=」のところの例を参考に考えてみました)

試行錯誤結果を添付しますので参考にしていただければと思います。

それから、frameshape と違って太さは変更できませんが、先日紹介した「frame= T/t L/l R/r B/b」の組み合わせる例も一緒に入っていますので参考にしていただけると幸いです。
和田 勇 への返信

Re: lstlisting環境で複数のオプションを使用する設定について

- 小林 コウキ の投稿
和田 勇様
ご返信ありがとうございます。

添付ファイルもお送りいただきまして,ありがとうございます。
PDFの3ページ目のパターンを見て,試してみます。
いろいろ調べていただきまして,ありがとうございました。
和田 勇 への返信

Re: lstlisting環境で複数のオプションを使用する設定について

- 本田 知亮 の投稿
装飾の自由度を求めるなら
tcolorboxのlistingsライブラリの利用を考える方が
てっとり早いかもしれません.

tcolorboxの前(後でもいいのかもしれない)に
plistingsかjlistingsを読んでおけば,
日本語も通ります.
小林 コウキ への返信

Re: lstlisting環境で複数のオプションを使用する設定について

- 和田 勇 の投稿
もやもやしていたので色々試行錯誤していたところ frameshape を利用すると、額縁のように装飾した二重・三重に入れ子にした枠が描けるようです。

上、右は枠無し、左を太くして、下を細くとするようなど、各辺毎にも枠数を変えて指定できますので、 frame=shadowbox のようなものも表現できます。

ただし、枠用に指定した線の色は一つだけです。

また、指定方法によっては四隅に窪みが現れたり、無かったりで調整には試行錯誤が必要です。

色々試したところ、
「frameshape = {ynn}{yny}{ }{rynYNN}」下側の線の一部に R を指定することで気になる凹みが軽減される感じがします。

あるいは frameshape = {ynn}{yny}{ }{rynYYN}, とした上でrulesepcolor=\color{white} などして色を使わず線だけで装飾するのも手かと思います。(この部分 texdoc listings で表示される p39 の「frameshape=」のところの例を参考に考えてみました)

試行錯誤結果を添付しますので参考にしていただければと思います。

それから、frameshape と違って太さは変更できませんが、先日紹介した「frame= T/t L/l R/r B/b」の組み合わせる例も一緒に入っていますので参考にしていただけると幸いです。