\@startsection 中の第4引数の数値は,どうして「負」の数となっているのでしょうか

名前: 永田善久
日時: 2002-12-09 18:29:08
IPアドレス: 133.100.243.*

article.cls (さらに report.cls, book.cls も) の中にある \@startsection 中の 第4引数の数値に関する質問です。これは {-3.5ex \@plus -1ex \@minus -.2ex} のようになっていますが,なぜ,「マイナス」が付いているのでしょうか? 実は,本掲示板上における「見出し」等の出力制御に関わる一連の議論を興味深く 拝見しており,そこから沢山のことを教えていただきました。 特に,「見出しの改行」を扱った 10687, 10695, 10704, 10710, 10719, 10722, 10724, 10735, 10740, 10741, 10747 番投稿記事からは, A. \section{見出し} とした場合の「見出し」の部分を,「1 見出し」のような 初期設定による出力デザインは保ったまま「そのまま丸ごと,太字にしたり中央 寄せしたり」して出力する場合は \@startsection を「再定義」すればよい B. しかし,「見出し」部分の出力デザインを初期設定のものとは異なったもの,例えば 1. 見出し. のように番号部分と見出し部分とを改行して(さらにはこれらをそれぞれ中央寄 せするなどして)出力させる場合には,新たに \section そのものを(\part 定義 等の記述に倣って)再定義しなくてはならない といったことを理解いたしました。そこでこの理解(が正しいかどうか)を 具体的に確かめるために,次のような簡単な練習問題をやってみよう と思いました。 a. \section そのものをいじるのは畏れ多い (^^; ので新たに \nnewsecc なるものを作り,このコマンドにより出力される「見出し」のデザインを, 上記 B のように,番号部分と見出し部分とを改行させ,かつ,中央寄せ とする。番号,見出しの後にはそれぞれピリオドを付ける b. 目次には「1. 見出し」のように通常の \section と同深度で自動出力させる c. ヘッダには --~\thepage~-- で「ページ数だけ」を出力させるような \ps@pagenotop を定義する d. 最初のページにページ番号は付けない,また,\nnewsecc 後の「本文」 は全てインデントさせる,ただし,一番最初の \nnewsecc 後の本文だけは インデントさせない e. 番号部分と見出し部分との間でページ分割が起こらないようにする f. \nnewsecc 前後の「本文(地の文)」との間隔は,\section と同じくする さて,以上の方針の元,次のような記述をしたのですが,「マイナス符号を 取らない限り,望む結果が得られない」のです。よろしくお願い致します。 ---------------- \makeatletter \def\ps@pagenotop{% \def\@oddhead{% \hfil{--~\thepage~--}\hfil}% \def\@evenhead{% \hfil{--~\thepage~--}\hfil}% \let\@oddfoot\@empty% \let\@evenfoot\@empty% \let\@mkboth\@gobbletwo} \newcounter{nnewsecc} \newcommand\nnewsecc{% \ifnum \thepage=\@ne \thispagestyle{empty}\noindent \fi \par \addvspace{-3.5ex \@plus -1ex \@minus -.2ex} \@afterindenttrue \secdef\@nnewsecc\@snnewsecc} \def\@nnewsecc[#1]#2{% \ifnum \c@secnumdepth >\z@ \refstepcounter{nnewsecc}% \addcontentsline{toc}{section}{\thennewsecc.\hspace{1em}#1}% \else \addcontentsline{toc}{section}{#1}% \fi {\parindent \z@ \centering \interlinepenalty \@M \normalfont \ifnum \c@secnumdepth >\z@ \Large\bfseries \thennewsecc. \par \nobreak \fi \Large\bfseries #2.% \markboth{}{}\par}% \nobreak \vskip 2.3ex \@plus.2ex \@afterheading} \def\@snnewsecc#1{% {\parindent \z@ \centering \interlinepenalty \@M \normalfont \Large \bfseries #1.\par}% \nobreak \vskip 2.3ex \@plus.2ex \@afterheading} \makeatother

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます)