listingsを使った場合の、figureの位置調整

listingsを使った場合の、figureの位置調整

- oxon oxon の投稿
返信数: 4
listingsを使用してソースコードを文章中に記述しています。

少し長めのコードを書くと、当然ですが複数ページにまたがります。例えば添付PDFの1ページ目と2ページ目には、1つのコードが分断されています。

たとえコードは分断されても、PDFをスクロールすれば可読性の点では問題ありません。しかし、このPDFのように途中にfigure(図2.5)が入ってしまうことがあります。この図があると、コードの可読性が下がってしまいます。

figureの位置指定を自分ですれば良いのですが、文章や記載しているコードを大幅に改変する可能性があるため、できれば自分で調整する作業は減らしたいです。

===質問===
自動的に「分断されたソースコードの途中に図が配置されない」ような設定にする、うまい方法はあるでしょうか。

どなたがご教示いただければ幸いです。

===.texの抜粋===
(略)
\usepackage{listings}
\definecolor{stringcolor}{rgb}{0.20,0.50,0.20}
\definecolor{commentcolor}{rgb}{0.40,0.40,0.40}
\definecolor{keywordcolor}{rgb}{0.50,0.10,0.10}
\definecolor{idcolor}{rgb}{0.10,0.10,0.50}
\definecolor{bg}{rgb}{0.95,0.95,0.95}
\lstset{basicstyle={\small\ttfamily},
ndkeywordstyle={\small},
keywordstyle={\small\color{keywordcolor}},
commentstyle={\small\color{commentcolor}\itshape},
stringstyle={\small\color{stringcolor}},
identifierstyle={\small\color{idcolor}},
xleftmargin=2em,
xrightmargin=2em,
framerule=0.8pt,
frame=tlrb,
showstringspaces=false,
tabsize=2,
backgroundcolor=\color{bg}}
(略)
\section{やっておきたい初期設定}

さて、図\ref{fig_first_script_eps}を見ると、背景色が薄い灰色です。これでは、本書の紙面や通常の論文で使用するには問題があります。研究室内のみで使うような図だとしても、プリンタのインクの無駄です。ヒストグラムのタイトル部分を見ると、``$\sigma$''と他の文字のフォントが一致していません。文章自体のフォントに対しても太すぎます。これでは格好悪いので、少しROOTの設定を変更してみましょう。

以下の内容を、\~{}/.rootlogon.Cとして保存して、再度ROOTを起動しましょう。
\begin{lstlisting}[Xlanguage=c++]
gROOT->SetStyle("Plain");
gStyle->SetTitleBorderSize(2);
gStyle->SetFrameFillColor(0);
gStyle->SetCanvasColor(0);
gStyle->SetPadBorderSize(0);

gStyle->SetPadTickX(1);
gStyle->SetPadTickY(1);

Int_t fontid = 132;
gStyle->SetStatFont(fontid);
gStyle->SetLabelFont(fontid, "XYZ");
gStyle->SetLabelFont(fontid, "");
gStyle->SetTitleFont(fontid, "XYZ");
gStyle->SetTitleFont(fontid, "");
gStyle->SetTitleOffset(1.2, "XYZ");
gStyle->SetTextFont(fontid);
gStyle->SetFuncWidth(2);
gStyle->SetLegendBorderSize(0);

gStyle->SetPalette(1);
\end{lstlisting}
再びfirst\_script.Cを走らせると、図\ref{fig_first_script_mod_eps}のような結果が得られます。まだまだ見栄えを変更可能ですが、ひとまずは良しとします。もし図\ref{fig_first_script_eps}のほうが好みであれば、\~{}/.rootlogon.Cの不要な行を消していきましょう。

\begin{figure}
\begin{center}
\includegraphics[width=10cm,clip]{fig/first_script_mod.eps}
\caption{\~{}/.rootlogon.Cを使って図\ref{fig_first_script_eps}の見栄えを変更したもの}
\label{fig_first_script_mod_eps}
\end{center}
\end{figure}
(略)
oxon oxon への返信

Re: listingsを使った場合の、figureの位置調整

- oxon oxon の投稿
おそらく、「本文のここからここまでには絶対に図を割り込ませない」と指定するようなコマンドがあれば解決できると思うのですが、何かあるでしょうか。
oxon oxon への返信

Re: listingsを使った場合の、figureの位置調整

- 匿 名 の投稿
>「本文のここからここまでには絶対に図を割り込ませない」と
>指定するようなコマンドがあれば
そのようなコマンドは,(少なくとも LaTeX 自身には)ありません.
# \suppressfloats コマンドを用いると float の配置の抑制はできますが,
# ご所望の挙動は示さないようです.

もっとも,http://www.h4.dion.ne.jp/~latexcat/20091017.tex に
書いてあるような処理は可能です.
# なお,このサンプルのサポートはいたしません.
# また,例のごとく既製品については存じません.
匿 名 への返信

Re: listingsを使った場合の、figureの位置調整

- 匿 名 の投稿
言い忘れましたが,そのサンプル(20091017.tex)では
「脚注」に対しては何もしていません.
# もっとも,PDF 化した文書の閲覧時に「連続ページ」表示にして
# ――という状況と想像しますが――コードリスト部の途中に図が
# 入り込むのを嫌う状況なら,脚注の使用自体も避ける(傍注で
# 済ませる)ほうがよいでしょうから,脚注については(マクロ側で
# 対処していなくても)気にしなくてもよいのではないかとも思いますが.

# そういえば,提示されていたサンプル(RHEA.pdf)では,
# 脚注も用いられていたような……脚注の取り扱いについては
# 元質問者はどうお考えなのでしょう?
匿 名 への返信

Re: listingsを使った場合の、figureの位置調整

- oxon oxon の投稿
ご返信ありがとうございます。お礼が遅くなり、申し訳ありません。

ご用意下さったサンプルで、うまく動作しております。以下のような場合だとうまくいかなかったので、

\lstinputlisting[language=c++,caption=.rootlogon.Cの例,label=code_rootlogon]{src/rootlogon.C}

ダミーの環境を作り、該当箇所を囲んでやることで解決しました(もっと賢いやり方があるのでしょうが、期待通りに動くのでこれで良しとします)。

\newenvironment{NoFloat}{}

\def\@listoflistenv{[NoFloat][listings]}

># もっとも,PDF 化した文書の閲覧時に「連続ページ」表示にして
># ――という状況と想像しますが――コードリスト部の途中に図が
># 入り込むのを嫌う状況

># 脚注も用いられていたような……脚注の取り扱いについては
># 元質問者はどうお考えなのでしょう?

仰る通り、縦スクロールの連続性を意識してのことです。図は10cm程度の不連続箇所を生じてしまいますが、脚注はせいぜい2cm程度しか場所を取らず目の移動量が少ないので、脚注は今回は問題視していません。

どうもありがとうございました。