lstlisting環境のcaptionを中央への配置,上下位置の調整する設定について

lstlisting環境のcaptionを中央への配置,上下位置の調整する設定について

- 小林 コウキ の投稿
返信数: 6
lstlisting環境のcaptionを中央への配置,上下位置の調整する設定について,質問です.

・TeXのソース
\begin{lstlisting}[caption=xyzxyz]
aaaaaa
bbbbbb
cccccc
ddddd
\end{lstlisting}%


・styでの設定
\lstset{%
language={Python},
basicstyle={\small\ttfamily},%基本書体
identifierstyle={\small},%キーワードでない文字の書体
ndkeywordstyle={\small},%キーワードその2の書体
stringstyle={\small\bf\ttfamily},
frame={tb},
breaklines=true,
columns=[l]{fullflexible},%
numbers=left,%
framexleftmargin=6mm,
xrightmargin=0zw,%
xleftmargin=6mm,%
numberstyle={\scriptsize\usefont{OT1}{phv}{m}{n}},%
stepnumber=1,
numbersep=2mm,%
moredelim=[is][\bf\ttfamily]{<\#}{\#>},%%%<#,#>で囲むと書体変更
lineskip=-0.25ex,%%行間変更
morecomment=[l]{//}%
}

と指定しています.
この形でコンパイルをすると,キャプションはセンターではなく,
左から4字下ほどの位置に出力され,罫線とキャプションが重なってしまいます.

\lstset内での設定,listings.styでの設定で,キャプションの位置の調整できる箇所,もしくは設定方法を教えていただけないでしょうか.

いつも質問ばかりで恐れ入ります.
よろしくお願いいたします.
小林 コウキ への返信

Re: lstlisting環境のcaptionを中央への配置,上下位置の調整する設定について

- 和田 勇 の投稿
  • この手の問題が発生した場合は、ソース/出力結果/ログファイルを添付していただいた方が、解決は早いと思います。

    • ソースは、お互いのコピペ操作ミスを防ぐため/プリアンブルと呼んでいる \begin{document} の前のパッケージ読み込み情報から platex / uplatex / lualatex などの処理エンジンを特定するため
    • ログファイルは、どのようなパッケージを「どこから」読み込んでるか、その改訂日付情報などの判断
    • 出力結果は、PDF であれば、画像化するなどして、お絵描きエディタで「ここが問題」などと注釈してくれると助かります
    • その他、OS, TeXLive バージョンや適宜スクリーンショットなど
  • 検証に使用したソースは天王ファイルを参考にしてください

    • 今回は一部プリアンブルは提示されていますが
    • 使用されているエンジンなどの明記がなかったので、試行錯誤の結果、定義で「0zw」となっているので「uplatex」で処理されていると判断
    • documentclass も不明でしたので 「jlreq」を使用しました
    • lstset で「Xlanguage」というようになっていますが、以前にも同じようなことがありましたので「language」に修正
  • 添付した pdf ファイルを参考にしてほしいのですが、以下の症状はいずれも発生していないと思います。

    • キャプションはセンターではなく
    • 左から4字下ほどの位置に出力され
    • 罫線とキャプションが重なってしまいます
和田 勇 への返信

Re: lstlisting環境のcaptionを中央への配置,上下位置の調整する設定について

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

>この手の問題が発生した場合は、ソース/出力結果/ログファイルを添付していただいた方が、解決は早いと思います。
ソース,出力結果など,諸事情がありすべてのせることはできないのですが,可能な限り,フォーラムにアップするようにいたします.

今回のキャプションの位置ですが,\caption内で@makecaptionを再定義していて,そこの箇所とlisting.sty内の@makecaptionがかぶっていたために起こっていました.
listing.sty内の@makecaptionを@Makecaptionに変更して試したら,位置:中央,罫線と重なることもなくなりました.

和田様の「以下の症状はいずれも発生していないと思います。」のお言葉で,問題個所を特定することができました.
ありがとうございました.


小林 コウキ への返信

Re: lstlisting環境のcaptionを中央への配置,上下位置の調整する設定について

- 帯田 木偶太 の投稿
》 listing.sty内の@makecaptionを@Makecaptionに変更して

これが、ファイルとしての listing.sty そのものに変更を加えていると
云うことなら、種々の混乱の元凶となりかねないので
絶対にやめてください。
帯田 木偶太 への返信

Re: lstlisting環境のcaptionを中央への配置,上下位置の調整する設定について

- 小林 コウキ の投稿
帯田 木偶太様
ご返信ありがとうございます.

>種々の混乱の元凶となりかねないので絶対にやめてください。
申し訳ありませんでした.
今後,このようなことのないようにいたします.
ご指摘,ありがとうございました.

小林 コウキ への返信

Re: lstlisting環境のcaptionを中央への配置,上下位置の調整する設定について

- 北見 けん の投稿
> >種々の混乱の元凶となりかねないので絶対にやめてください。
> 申し訳ありませんでした.
> 今後,このようなことのないようにいたします.

ここでそんなに謝らなければいけないようなことでもないですよ。
元ファイルを書き換えると何がいけないのかについては、
TeX Wikiの「パッケージファイルを直接書き換える方法」というところに書かれていますので、ご参考まで。
https://texwiki.texjp.org/?%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8#tee3be98
小林 コウキ への返信

Re: lstlisting環境のcaptionを中央への配置,上下位置の調整する設定について

- Yamamoto Munehiro "munepi" の投稿
lstlisting環境で利用可能なオプションを駆使してデザイン周りの変更を止めてしまい、
デザイン周りの変更をすべてtcolorboxに任せてしまう手もあります。

ここでは、tcolorboxの使い方の説明を省きますが、
以下のような小さな例が考えられます。

%#!lualatex
\documentclass[luatex,book]{jlreq}
\usepackage{tcolorbox}
\tcbuselibrary{listings}
\renewcommand{\lstlistingname}{リスト}

\newtcblisting[auto counter, number within=chapter]{pythonsourcecode}[1]{%
  listing only,
  listing options={%
    language=Python,
  },
  title={\lstlistingname\thetcbcounter\hspace{1\zw}#1},
  center title
}

\begin{document}
\chapter{「listingはtcolorboxをかませ!」の巻}

\begin{pythonsourcecode}{はじめてのPython}
print('Hello, World!')
\end{pythonsourcecode}

\begin{pythonsourcecode}{つぎのPython}
def main():
    print('Hello, World!')

if __name__ == '__main__':
    main()
\end{pythonsourcecode}

\end{document}