listingsパッケージのtitleオプションについて

listingsパッケージのtitleオプションについて

- 山下 大輔 の投稿
返信数: 5
山下と申します。

listingsパッケージのtitleオプションで任意のタイトルを付けようとすると,
タイトルの前に「1zw」という文字が勝手に追加されてしまいます。
どうすれば回避できるでしょうか?

以下は問題が発生するソースです。

\documentclass[a4j,11pt]{jsarticle}

\usepackage{listings,jlisting}


\lstnewenvironment{FILE}[2]{

\lstset{%

title={#1},%

tabsize=4,%

breaklines=true,%

basicstyle=\ttfamily,%

framesep=3pt,%

frame=single,%

frameround=tttt,%

#2,%

}}{}


\begin{document}


test


\begin{FILE}{abc}{}

adlfkjel

ajldkfje


\end{FILE}


\end{document}



山下 大輔 への返信

Re: listingsパッケージのtitleオプションについて

- 前田 一貴 の投稿
小手先ですが,\begin{document} の直前に

\makeatletter
\def\lst@title@dropdelim\hskip1zw{}
\makeatother

と入れておくとどうでしょうか.
前田 一貴 への返信

Re: listingsパッケージのtitleオプションについて

- 山下 大輔 の投稿
前田様のご教授の方法で,希望通りの動作ができました。
ありがとうございました。

山下 大輔 への返信

Re: listingsパッケージのtitleオプションについて

- 匿 名 の投稿

# 前田さんのご回答を見た後なので、後出しなのですけれど…。

> タイトルの前に「1zw」という文字が勝手に追加されてしまいます。

ということになった原因は、jsclasses で \@makecaption を再定義していることだと思われますので、そこを以下のように変更することによっても、回避できるように思われます:

\documentclass[a4j,11pt]{jsarticle}

\makeatletter
\long\def\@makecaption#1#2{{\small
  \advance\leftskip .0628\linewidth
  \advance\rightskip .0628\linewidth
  \vskip\abovecaptionskip
  \sbox\@tempboxa{#1\hskip1zw\relax #2}%
  \ifdim \wd\@tempboxa <\hsize \centering \fi
%  #1\hskip1zw\relax #2\par
  #1{\hskip1zw\relax}#2\par
  \vskip\belowcaptionskip}}
\makeatother

\usepackage{listings}

匿 名 への返信

Re: listingsパッケージのtitleオプションについて

- 奥村 晴彦 の投稿
えっ!

listingパッケージを見ていないのですが,こういう簡単なことでしたら,フィックスしても既存の文書に影響は出ませんね。

それよりjsclassesをどこかにホストしてもらうことをまず考えたほうがいいでしょうか。
奥村 晴彦 への返信

Re: listingsパッケージのtitleオプションについて

- 前田 一貴 の投稿
匿名さん,補足ありがとうございます(説明サボってごめんなさい).

listings.sty の問題箇所は

\def\lst@maketitle{\@makecaption\lst@title@dropdelim}
\def\lst@title@dropdelim#1{\ignorespaces}

で,article.cls などでの \@makecaption 中の

#1: #2

の「: 」を食べることが意図されているのだと思います.
しかし,jsclasses の \@makecaption の場合,\hskip しか食べてくれなくて 1zw が残ってしまいます.

私は,\lst@title@dropdelim は \lst@maketitle でしか使われていないようだったので,上のように小手先の修正を書きました.
確かに匿名さんの書かれたようにクラスファイル側で対応してしまえば問題はなくなります.
副作用もなさそうでしょうか.