fancyhdrのフッタの線とfootnoteの脚注位置がずれます

fancyhdrのフッタの線とfootnoteの脚注位置がずれます

- 匿 名 の投稿
返信数: 6
Windows7にtexlive2013(install-tl-20130903)をインストールしています。

現在、B5版にjsbookの文書を作成しようとしていますが、
fancyhdrのフッタの線とfootnoteの脚注位置がずれてしまいます。
どのようにすれば(fancyhdrの)フッタの線の下に脚注を出力できるのでしょうか?
なお、脚注を出力できるならfootnoteでなくてもかまいません。
(むしろ、footnoteだと短い線がでてしまう問題がありますので
 他に脚注を出力する方法がありましたら併せてご教示ください)


texファイルの主な内容は次の通りです。

# B5サイズの書籍形式
\documentclass[b5j]{jsbook}

# PDFをB5サイズで出力
\AtBeginDvi{\special{pdf: pagesize width 182truemm height 257truemm}}

# フッタの線を表示
\usepackage{fancyhdr}
\renewcommand{\footrulewidth}{\headrulewidth}

# 余白設定は下記URLを参考にこれだけ設定しています
# 「jsbook の余白が広すぎます」
# http://oku.edu.mie-u.ac.jp/~okumura/jsclasses/
\setlength{\textwidth}{\fullwidth}
\setlength{\evensidemargin}{\oddsidemargin}

出力されたPDFを見た感じでは
・footnoteは本文領域に出力している
・fancyhdrは本文領域外に出力している
ような気がしますが、具体的にどこを直せばよいのか???な状況です。
匿 名 への返信

Re: fancyhdrのフッタの線とfootnoteの脚注位置がずれます

- 匿 名 の投稿

> fancyhdrのフッタの線とfootnoteの脚注位置がずれます

の 「ずれる」 とは、どういう状態を指してらっしゃるのでしょうか?

最初は,フッタの罫線の開始位置と脚註番号の出力位置との関係について
おっしゃっているのかと思ったのですが,

> どのようにすれば(fancyhdrの)フッタの線の下に脚注を出力できるのでしょうか?
・・・・・
> 出力されたPDFを見た感じでは
> ・footnoteは本文領域に出力している
> ・fancyhdrは本文領域外に出力している
> ような気がしますが、具体的にどこを直せばよいのか???な状況です。

とおっしゃるところからすると、「ずれる」 というのは,垂直方向について
「ずれている」 と感じてらっしゃるということでしょうか。

おっしゃるとおり,垂直方向でのページ出力の順番は,ヘッダ、本文領域,フッタ,の順で,
そして,本文領域の内部では,本文,本文と脚註との境界線,脚註,の順です。
ですから,フッタの罫線の下に脚註を出力するというのは,恐らく簡単ではありません。

ただ,

> むしろ、footnoteだと短い線がでてしまう問題がありますので

とのことですので,もしも 「問題」 が,本文と脚註との境界線が短いということ
でしたら,fancyhdr.sty とは関係なく,\footnoterule を再定義するだけで
済むように思われます。

jsbook.cls の \footnoterule の定義は,

    \renewcommand{\footnoterule}{%
      \kern-3\p@
      \hrule width .4\columnwidth
      \kern 2.6\p@}

なので,“.4\columnwidth” の部分を “\columnwidth” とか “\fullwidth” に
変えることで,境界線を長くすることが可能です。

匿 名 への返信

Re: fancyhdrのフッタの線とfootnoteの脚注位置がずれます

- 匿 名 の投稿
「ずれる」というのはまさしく
『フッタの罫線と脚註が(垂直方向にずれて)重なった状態』
のことです。


>> むしろ、footnoteだと短い線がでてしまう問題がありますので

>とのことですので,もしも 「問題」 が,本文と脚註との境界線が短いということ
>でしたら,fancyhdr.sty とは関係なく,\footnoterule を再定義するだけで
>済むように思われます。

>なので,“.4\columnwidth” の部分を “\columnwidth” とか “\fullwidth” に
>変えることで,境界線を長くすることが可能です。

この「問題」というのは短い境界線とfancyhdrの線で2重に出力されてしまうという意味です。

私の希望は
・脚注のあるページは「本文+境界線+脚注」
・脚注の無いページは「本文+境界線」
・どちらのページも下の余白は同じにしたい
の3点です。

提示いただいた方法では脚注の無いページで境界線が出ませんでした。
(こちらの情報不足でした、申し訳ないです)

脚注の無いページでも境界線を出力できれば
提示いただいた方法で解決できそうですが、
そんな方法はありますでしょうか?
匿 名 への返信

Re: fancyhdrのフッタの線とfootnoteの脚注位置がずれます

- 匿 名 の投稿

2013年09月05日(木曜日)09:58 の 匿名 です。

「ずれる」 等の意味について,

> 「ずれる」というのはまさしく
> 『フッタの罫線と脚註が(垂直方向にずれて)重なった状態』
> のことです。
・・・・・
> この「問題」というのは短い境界線とfancyhdrの線で2重に出力されてしまうという意味です。

と改めてご説明くださいましたが,私の理解力不足のため,「ずれる」 についても
「問題」 についても,よく分かりませんでした。

( 「フッタの罫線と脚註が重なる」 としたら,それは何か変わった 〔または誤った〕
設定をされてらっしゃるせいなのかも知れませんし,
短い境界線とフッタの罫線の両方が出力されるとしても,それは 「正常な」 出力結果
だと思われるからです)

それでも,

> 私の希望は
>  ・脚注のあるページは「本文+境界線+脚注」
>  ・脚注の無いページは「本文+境界線」
>  ・どちらのページも下の余白は同じにしたい
> の3点です。

とのことから,ご希望の体裁に関しては,一応理解できました。

私の実力でご希望の体裁を実現するのは難しいので,
あとはお詳しい方にお任せしたいと思いますが,
とりあえず,以下のようなことは可能かも知れません:

------------------------------------------------------------
\documentclass[b5j,papersize]{jsbook}

\makeatletter
\setlength{\textwidth}{\fullwidth}
\setlength{\evensidemargin}{\oddsidemargin}

\renewcommand{\footnoterule}{%
      \kern-3\p@
      \hrule width \fullwidth % changed
      \kern 2.6\p@}

% from: plcore.ltx
\gdef\@makecol{%
  \setbox\@outputbox\box\@cclv%
  \xdef\@freelist{\@freelist\@midlist}%
  \global \let \@midlist \@empty
  \@combinefloats
  \ifvbox\@kludgeins
    \@makespecialcolbox
  \else
    \setbox\@outputbox \vbox to\@colht {%
      \@texttop
      \dimen@ \dp\@outputbox
      \unvbox \@outputbox
      \iftdir\hskip\z@
      \else\vskip -\dimen@\fi
      \@textbottom
      \ifvoid\footins
        \vskip \skip\footins % added from here
        \color@begingroup
            \normalcolor
            \footnoterule
            %\unvbox \footins
        \color@endgroup % added up to here
      \else % for pLaTeX
        \vskip \skip\footins
        \color@begingroup
            \normalcolor
            \footnoterule
            \unvbox \footins
        \color@endgroup
      \fi
      }%
  \fi
  \global \maxdepth \@maxdepth
}
\makeatother

\begin{document}

a\footnote{footnote1}

\newpage

b

\newpage

c\footnote{footnote2}

\end{document}
------------------------------------------------------------

plcore.dtx (plcore.ltx) から \@makecol の定義をコピーして,
オリジナルでは:

      \ifvoid\footins\else % for pLaTeX
        \vskip \skip\footins
        \color@begingroup
            \normalcolor
            \footnoterule
            \unvbox \footins
        \color@endgroup
      \fi

となっているところを,\else の前に,\else 以下の部分をコピーして
(“\unvbox \footins” はもちろんコメントアウト),脚註がない場合でも
\footnoterule が引かれるようにしてみました。
(\enlargethispage にも対応するには,\@makespecialcolbox にも同様に
手を加える必要があるようです)

匿 名 への返信

Re: fancyhdrのフッタの線とfootnoteの脚注位置がずれます

- 匿 名 の投稿
たしかにこれで、脚注がない場合も脚注罫線(\footnoterule)が引かれますね。
あとは、脚注の高さ(行数)によらずに罫線の位置を固定させたいわけですが、なかなか難しそうですね。

通常は、脚注の高さの分だけ本文領域が短くされてしまうわけですから、そうさせないためには
脚注にインサート(\insert)の仕組みを使うのをやめるか、
インサートを使うとしても本文領域を短くしないように \count\footins=0 と設定するかですね。

また、通常のように \@makecol のなかで脚注を配置するのは、
実は本文領域の底から積み上げて配置することになるので、
決まった高さに引かれる罫線の下にぶら下げていくのとは概念的にミスマッチな感じです。
それよりも、\@oddfoot や \@evenfoot などのフッタ領域に罫線および脚注を配置するのが
今回の要求にマッチしそうです。

で、ちょっとやってみたのが次のような感じです。

(1) \@makecol を改変して、\ifvoid\footins A \else B \fi の部分を A だけにする。
(2) \count\footins=0 とする。
(3) \@oddfoot, \@evenfoot を \def\@oddfoot{\vbox{\hrule width \fullwidth \kern2.6pt \unvbox\footins}}のようにする。

これでどうでしょうか。
匿 名 への返信

Re: fancyhdrのフッタの線とfootnoteの脚注位置がずれます

- 匿 名 の投稿
トピ主です。

忙しくてしばらくアクセスできませんで
ご提示いただいた方法はまだ試せていませんが、
なかなかに難しい問題のようですね。

残念ながらまだしばらくは忙しく上記案を試すことができませんので、
また結果が分かり次第報告させていただきます。
(せっかくご提示いただいたのにすみません)

お二方ともありがとうございました
匿 名 への返信

Re: fancyhdrのフッタの線とfootnoteの脚注位置がずれます

- 匿 名 の投稿
トピ主です。

忙しくてしばらくアクセスできませんでした。
ご提示いただいた方法はまだ試せていませんが、
なかなかに難しい問題のようですね。

残念ながらまだしばらくは忙しく上記案を試すことができませんので、
また結果が分かり次第報告させていただきます。
(せっかくご提示いただいたのにすみません)

お二方ともありがとうございました