• 検索結果がありません。

章・節

ドキュメント内 10 相互参照 目次の類 参考文献 索引 (ページ 69-82)

ムニャムニャ……。

\bxjs@label@sect 節付#1の番号を出力する。節付XXXに対して、\labelXXXが定義済ならそれが出力書式 を表す。未定義ならばカウンタの出力書式\theXXXが使われる。

1864\def\bxjs@label@sect#1{%

1865 \expandafter\ifx\csname label#1\endcsname\relax

1866 \csname the#1\endcsname

1867 \else \csname label#1\endcsname

1868 \fi}

1869\def\@seccntformat#1{\bxjs@label@sect{#1}\quad}

\@secapp 節番号の接頭辞。

\@secpos 節番号の接尾辞。

69

1870\ifnum\bxjs@label@section=\bxjs@label@section@compat\else

1871\def\@secapp{\presectionname}

1872\def\@secpos{\postsectionname}

1873\fi

\labelsection 節番号の出力書式。

1874\ifnum\bxjs@label@section=\bxjs@label@section@modern

1875\def\labelsection{\@secapp\thesection\@secpos}

1876\fi

■構成要素 \@startsectionマクロは6個の必須引数と,オプションとして*1個の オプション引数と1個の必須引数をとります。

\@startsection{}{レベル}{字下げ}{前アキ}{後アキ}{スタイル}

*[別見出し]{見出し}

それぞれの引数の意味は次の通りです。

名 ユーザレベルコマンドの名前です(例: section

レベル 見 出 し の 深 さ を 示 す 数 値 で す (chapter=1, section=2, …。 こ の 数 値 が secnumdepth 以下のとき見出し番号を出力します。

字下げ 見出しの字下げ量です。

前アキ この値の絶対値が見出し上側の空きです。負の場合は,見出し直後の段落をインデ ントしません。

後アキ 正の場合は,見出しの下の空きです。負の場合は,絶対値が見出しの右の空きです

(見出しと同じ行から本文を始めます)。 スタイル 見出しの文字スタイルの設定です。

* この*印がないと,見出し番号を付け,見出し番号のカウンタに1を加算します。

別見出し 目次や柱に出力する見出しです。

見出し 見出しです。

見出しの命令は通常\@startsectionとその最初の6個の引数として定義されます。

次 は \@startsection の 定 義 で す。 情 報 処 理 学 会 論 文 誌 ス タ イ ル フ ァ イ ル

(ipsjcommon.sty)を参考にさせていただきましたが,完全に行送りが \baselineskip の整数倍にならなくてもいいから前の行と重ならないようにしました。

1877\def\@startsection#1#2#3#4#5#6{%

1878 \if@noskipsec \leavevmode \fi

1879 \par

1880% 見出し上の空きを \@tempskipa にセットする

1881 \@tempskipa #4\relax

1882% \@afterindent は見出し直後の段落を字下げするかどうかを表すスイッチ 1883 \if@english \@afterindentfalse \else \@afterindenttrue \fi

1884% 見出し上の空きが負なら見出し直後の段落を字下げしない 1885 \ifdim \@tempskipa <\z@

1886 \@tempskipa -\@tempskipa \@afterindentfalse

1887 \fi

1888 \if@nobreak

1889% \everypar{\everyparhook}% これは間違い 1890 \everypar{}%

1891 \else

1892 \addpenalty\@secpenalty

1893% 次の行は削除

1894% \addvspace\@tempskipa

1895% 次の \noindent まで追加

1896 \ifdim \@tempskipa >\z@

1897 \if@slide\else

1898 \null

1899 \vspace*{-\baselineskip}%

1900 \fi

1901 \vskip\@tempskipa

1902 \fi

1903 \fi

1904 \noindent

1905% 追加終わり 1906 \@ifstar

1907 {\@ssect{#3}{#4}{#5}{#6}}%

1908 {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}

\@sect\@xsectは,前のアキがちょうどゼロの場合にもうまくいくように,多少変え てあります。\everyparhookも挿入しています。

\everyparhookの挿入はeveryparhook=compatの時のみ行う。

\bxjs@if@ceph everyparhook=compatである場合にのみ直後のトークンを実行する。

1909\ifnum\bxjs@everyparhook=\bxjs@everyparhook@compat

1910 \let\bxjs@if@ceph\@firstofone

1911\else \let\bxjs@if@ceph\@gobble

1912\fi

1913\def\@sect#1#2#3#4#5#6[#7]#8{%

1914 \ifnum #2>\c@secnumdepth

1915 \let\@svsec\@empty

1916 \else

1917 \refstepcounter{#1}%

1918 \protected@edef\@svsec{\@seccntformat{#1}\relax}%

1919 \fi

1920% 見出し後の空きを \@tempskipa にセット 1921 \@tempskipa #5\relax

1922% 条件判断の順序を入れ換えました 1923 \ifdim \@tempskipa<\z@

1924 \def\@svsechd{%

1925 #6{\hskip #3\relax

71

1926 \@svsec #8}%

1927 \csname #1mark\endcsname{#7}%

1928 \addcontentsline{toc}{#1}{%

1929 \ifnum #2>\c@secnumdepth \else

1930 \protect\numberline{\bxjs@label@sect{#1}}%

1931 \fi

1932 #7}}% 目次にフルネームを載せるなら #8

1933 \else

1934 \begingroup

1935 \interlinepenalty \@M % 下から移動

1936 #6{%

1937 \@hangfrom{\hskip #3\relax\@svsec}%

1938% \interlinepenalty \@M % 上に移動 1939 #8\@@par}%

1940 \endgroup

1941 \csname #1mark\endcsname{#7}%

1942 \addcontentsline{toc}{#1}{%

1943 \ifnum #2>\c@secnumdepth \else

1944 \protect\numberline{\bxjs@label@sect{#1}}%

1945 \fi

1946 #7}% 目次にフルネームを載せるならここは #8

1947 \fi

1948 \@xsect{#5}}

二つ挿入した \everyparhookのうち後者が \paragraph 類の後で2回実行され,それ 以降は前者が実行されます。

[2016-07-28]slideオプションとtwocolumnオプションを同時に指定した場合の罫線の 位置を微調整しました。

1949\def\@xsect#1{%

1950% 見出しの後ろの空きを \@tempskipa にセット

1951 \@tempskipa #1\relax

1952% 条件判断の順序を変えました 1953 \ifdim \@tempskipa<\z@

1954 \@nobreakfalse

1955 \global\@noskipsectrue

1956 \everypar{%

1957 \if@noskipsec

1958 \global\@noskipsecfalse

1959 {\setbox\z@\lastbox}%

1960 \clubpenalty\@M

1961 \begingroup \@svsechd \endgroup

1962 \unskip

1963 \@tempskipa #1\relax

1964 \hskip -\@tempskipa

1965 \else

1966 \clubpenalty \@clubpenalty

1967 \everypar\expandafter{\bxjs@if@ceph\everyparhook}%

1968 \fi\bxjs@if@ceph\everyparhook}%

1969 \else

1970 \par \nobreak

1971 \vskip \@tempskipa

1972 \@afterheading

1973 \fi

1974 \if@slide

1975 {\vskip\if@twocolumn-5\jsc@mpt\else-6\jsc@mpt\fi

1976 \maybeblue\hrule height0\jsc@mpt depth1\jsc@mpt

1977 \vskip\if@twocolumn 4\jsc@mpt\else 7\jsc@mpt\fi\relax}%

1978 \fi

1979 \par % 2000-12-18

1980 \ignorespaces}

1981\def\@ssect#1#2#3#4#5{%

1982 \@tempskipa #3\relax

1983 \ifdim \@tempskipa<\z@

1984 \def\@svsechd{#4{\hskip #1\relax #5}}%

1985 \else

1986 \begingroup

1987 #4{%

1988 \@hangfrom{\hskip #1}%

1989 \interlinepenalty \@M #5\@@par}%

1990 \endgroup

1991 \fi

1992 \@xsect{#3}}

■柱関係の命令

\chaptermark

\sectionmark

\subsectionmark

\subsubsectionmark

\paragraphmark

\subparagraphmark

\...markの形の命令を初期化します(第7節参照)。\chaptermark 以外はLATEX本体で 定義済みです。

1993\newcommand*\chaptermark[1]{}

1994% \newcommand*{\sectionmark}[1]{}

1995% \newcommand*{\subsectionmark}[1]{}

1996% \newcommand*{\subsubsectionmark}[1]{}

1997% \newcommand*{\paragraphmark}[1]{}

1998% \newcommand*{\subparagraphmark}[1]{}

■カウンタの定義

\c@secnumdepth secnumdepthは第何レベルの見出しまで番号を付けるかを決めるカウンタです。

1999%<!book&!report>\setcounter{secnumdepth}{3}

2000%<book|report>\setcounter{secnumdepth}{2}

\c@chapter

\c@section

\c@subsection

\c@subsubsection

\c@paragraph

\c@subparagraph

見出し番号のカウンタです。\newcounterの第1引数が新たに作るカウンタです。これは 第2引数が増加するたびに0に戻されます。第2引数は定義済みのカウンタです。

2001\newcounter{part}

2002%<book|report>\newcounter{chapter}

2003%<book|report>\newcounter{section}[chapter]

2004%<!book&!report>\newcounter{section}

73

2005\newcounter{subsection}[section]

2006\newcounter{subsubsection}[subsection]

2007\newcounter{paragraph}[subsubsection]

2008\newcounter{subparagraph}[paragraph]

\thepart

\thechapter

\thesection

\thesubsection

\thesubsubsection

\theparagraph

\thesubparagraph

カウンタの値を出力する命令\the何々を定義します。

カウンタを出力するコマンドには次のものがあります。

\arabic{COUNTER} 1, 2, 3, …

\roman{COUNTER} i, ii, iii, …

\Roman{COUNTER} I, II, III, …

\alph{COUNTER} a, b, c, …

\Alph{COUNTER} A, B, C, …

\kansuji{COUNTER} ,,, …

以下ではスペース節約のため@の付いた内部表現を多用しています。

2009\renewcommand{\thepart}{\@Roman\c@part}

2010%<*!book&!report>

2011\ifnum\bxjs@label@section=\bxjs@label@section@compat

2012\renewcommand{\thesection}{\presectionname\@arabic\c@section\postsectionname}

2013\renewcommand{\thesubsection}{\@arabic\c@section.\@arabic\c@subsection}

2014\else

2015\renewcommand{\thesection}{\@arabic\c@section}

2016\renewcommand{\thesubsection}{\thesection.\@arabic\c@subsection}

2017\fi

2018%</!book&!report>

2019%<*book|report>

2020\renewcommand{\thechapter}{\@arabic\c@chapter}

2021\renewcommand{\thesection}{\thechapter.\@arabic\c@section}

2022\renewcommand{\thesubsection}{\thesection.\@arabic\c@subsection}

2023%</book|report>

2024\renewcommand{\thesubsubsection}{%

2025 \thesubsection.\@arabic\c@subsubsection}

2026\renewcommand{\theparagraph}{%

2027 \thesubsubsection.\@arabic\c@paragraph}

2028\renewcommand{\thesubparagraph}{%

2029 \theparagraph.\@arabic\c@subparagraph}

\@chapapp

\@chappos

\@chapappの初期値は \prechaptername(第)です。

\@chapposの初期値は\postchaptername(章)です。

\appendix\@chapapp\appendixnameに,\@chapposを空に再定義します。

[2003-03-02]\@secappは外しました。

2030%<book|report>\newcommand{\@chapapp}{\prechaptername}

2031%<book|report>\newcommand{\@chappos}{\postchaptername}

■前付,本文,後付 本のうち章番号があるのが「本文」,それ以外が「前付」「後付」です。

\frontmatter ページ番号をローマ数字にし,章番号を付けないようにします。

[2017-03-05]\frontmatter\mainmatter 2つの命令は,改丁または改ページした 後で\pagenumbering{...}でノンブルを1にリセットします。長い間\frontmatter

openanyのときに単なる改ページとしていましたが,これではノンブルをリセットする際に

偶奇逆転が起こる場合がありました。openanyかどうかに依らず奇数ページまで繰るように 修正することで,問題を解消しました。実は,LATEXの標準クラスでは1998年に修正され ていた問題です(コミュニティ版pLATEXの標準クラス2017/03/05も参照)。

2032%<*book|report>

2033\newcommand\frontmatter{%

2034 \pltx@cleartooddpage

2035 \@mainmatterfalse

2036 \pagenumbering{roman}}

\mainmatter ページ番号を算用数字にし,章番号を付けるようにします。

2037\newcommand\mainmatter{%

2038 \pltx@cleartooddpage

2039 \@mainmattertrue

2040 \pagenumbering{arabic}}

\backmatter 章番号を付けないようにします。ページ番号の付け方は変わりません。

2041\newcommand\backmatter{%

2042 \if@openleft

2043 \cleardoublepage

2044 \else\if@openright

2045 \cleardoublepage

2046 \else

2047 \clearpage

2048 \fi\fi

2049 \@mainmatterfalse}

2050%</book|report>

■部

\part 新しい部を始めます。

\secdefを使って見出しを定義しています。このマクロは二つの引数をとります。

\secdef{星なし}{星あり} 星なし *のない形の定義です。

星あり *のある形の定義です。

\secdefは次のようにして使います。

\def\chapter { ... \secdef \CMDA \CMDB }

\def\CMDA [#1]#2{....} % \chapter[...]{...} の定義

\def\CMDB #1{....} % \chapter*{...} の定義 まずbook report のクラス以外です。

75

2051%<*!book&!report>

2052\newcommand\part{%

2053 \if@noskipsec \leavevmode \fi

2054 \par

2055 \addvspace{4ex}%

2056 \if@english \@afterindentfalse \else \@afterindenttrue \fi

2057 \secdef\@part\@spart}

2058%</!book&!report>

bookおよび reportクラスの場合は,少し複雑です。

2059%<*book|report>

2060\newcommand\part{%

2061 \if@openleft

2062 \cleardoublepage

2063 \else\if@openright

2064 \cleardoublepage

2065 \else

2066 \clearpage

2067 \fi\fi

2068 \thispagestyle{empty}% 欧文用標準スタイルでは plain

2069 \if@twocolumn

2070 \onecolumn

2071 \@restonecoltrue

2072 \else

2073 \@restonecolfalse

2074 \fi

2075 \null\vfil

2076 \secdef\@part\@spart}

2077%</book|report>

\@part 部の見出しを出力します。\bfseriesを\headfontに変えました。

bookおよびreport クラス以外ではsecnumdepth−1 より大きいとき部番号を付け ます。

2078%<*!book&!report>

2079\def\@part[#1]#2{%

2080 \ifnum \c@secnumdepth >\m@ne

2081 \refstepcounter{part}%

2082 \addcontentsline{toc}{part}{%

2083 \prepartname\thepart\postpartname\hspace{1\jsZw}#1}%

2084 \else

2085 \addcontentsline{toc}{part}{#1}%

2086 \fi

2087 \markboth{}{}%

2088 {\parindent\z@

2089 \raggedright

2090 \interlinepenalty \@M

2091 \normalfont

2092 \ifnum \c@secnumdepth >\m@ne

2093 \Large\headfont\prepartname\thepart\postpartname

2094 \par\nobreak

2095 \fi

2096 \huge \headfont #2%

2097 \markboth{}{}\par}%

2098 \nobreak

2099 \vskip 3ex

2100 \@afterheading}

2101%</!book&!report>

bookおよびreportクラスではsecnumdepth−2より大きいとき部番号を付けます。

2102%<*book|report>

2103\def\@part[#1]#2{%

2104 \ifnum \c@secnumdepth >-2\relax

2105 \refstepcounter{part}%

2106 \addcontentsline{toc}{part}{%

2107 \prepartname\thepart\postpartname\hspace{1\jsZw}#1}%

2108 \else

2109 \addcontentsline{toc}{part}{#1}%

2110 \fi

2111 \markboth{}{}%

2112 {\centering

2113 \interlinepenalty \@M

2114 \normalfont

2115 \ifnum \c@secnumdepth >-2\relax

2116 \huge\headfont \prepartname\thepart\postpartname

2117 \par\vskip20\p@?

2118 \fi

2119 \Huge \headfont #2\par}%

2120 \@endpart}

2121%</book|report>

\@spart 番号を付けない部です。

2122%<*!book&!report>

2123\def\@spart#1{{%

2124 \parindent \z@ \raggedright

2125 \interlinepenalty \@M

2126 \normalfont

2127 \huge \headfont #1\par}%

2128 \nobreak

2129 \vskip 3ex

2130 \@afterheading}

2131%</!book&!report>

2132%<*book|report>

2133\def\@spart#1{{%

2134 \centering

2135 \interlinepenalty \@M

2136 \normalfont

2137 \Huge \headfont #1\par}%

2138 \@endpart}

77

2139%</book|report>

\@endpart \@part\@spartの最後で実行されるマクロです。両面印刷のときは白ページを追加しま

す。二段組のときには,二段組に戻します。

[2016-12-13]openanyのときには白ページが追加されるのは変なので,その場合は追加し

ないようにしました。このバグはLATEXではclasses.dtx v1.4b (2000/05/19)で修正されて います。

2140%<*book|report>

2141\def\@endpart{\vfil\newpage

2142 \if@twoside

2143 \if@openleft %% added (2017/02/24)

2144 \null\thispagestyle{empty}\newpage

2145 \else\if@openright %% added (2016/12/13)

2146 \null\thispagestyle{empty}\newpage

2147 \fi\fi %% added (2016/12/13, 2017/02/24)

2148 \fi

2149 \if@restonecol

2150 \twocolumn

2151 \fi}

2152%</book|report>

■章

\chapter 章の最初のページスタイルは,全体がemptyでなければplainにします。また,\@topnum を0にして,章見出しの上に図や表が来ないようにします。

2153%<*book|report>

2154\newcommand{\chapter}{%

2155 \if@openleft\cleardoublepage\else

2156 \if@openright\cleardoublepage\else\clearpage\fi\fi

2157 \plainifnotempty % 元: \thispagestyle{plain}

2158 \global\@topnum\z@

2159 \if@english \@afterindentfalse \else \@afterindenttrue \fi

2160 \secdef

2161 {\@omit@numberfalse\@chapter}%

2162 {\@omit@numbertrue\@schapter}}

\@chapter 章見出しを出力します。secnumdepth0以上かつ\@mainmatterが真のとき章番号を出 力します。

2163\def\@chapter[#1]#2{%

2164 \ifnum \c@secnumdepth >\m@ne

2165 \if@mainmatter

2166 \refstepcounter{chapter}%

2167 \typeout{\@chapapp\thechapter\@chappos}%

2168 \addcontentsline{toc}{chapter}%

2169 {\protect\numberline

2170% %{\if@english\thechapter\else\@chapapp\thechapter\@chappos\fi}%

2171 {\@chapapp\thechapter\@chappos}%

2172 #1}%

2173 \else\addcontentsline{toc}{chapter}{#1}\fi

2174 \else

2175 \addcontentsline{toc}{chapter}{#1}%

2176 \fi

2177 \chaptermark{#1}%

2178 \addtocontents{lof}{\protect\addvspace{10\jsc@mpt}}%

2179 \addtocontents{lot}{\protect\addvspace{10\jsc@mpt}}%

2180 \if@twocolumn

2181 \@topnewpage[\@makechapterhead{#2}]%

2182 \else

2183 \@makechapterhead{#2}%

2184 \@afterheading

2185 \fi}

\@makechapterhead 実際に章見出しを組み立てます。\bfseries\headfontに変えました。

2186\def\@makechapterhead#1{%

2187 \vspace*{2\Cvs}% 欧文は50pt

2188 {\parindent \z@ \raggedright \normalfont

2189 \ifnum \c@secnumdepth >\m@ne

2190 \if@mainmatter

2191 \huge\headfont \@chapapp\thechapter\@chappos

2192 \par\nobreak

2193 \vskip \Cvs % 欧文は20pt

2194 \fi

2195 \fi

2196 \interlinepenalty\@M

2197 \Huge \headfont #1\par\nobreak

2198 \vskip 3\Cvs}} % 欧文は40pt

\@schapter \chapter*{...}コマンドの本体です。\chaptermarkを補いました。

2199\def\@schapter#1{%

2200 \chaptermark{#1}%

2201 \if@twocolumn

2202 \@topnewpage[\@makeschapterhead{#1}]%

2203 \else

2204 \@makeschapterhead{#1}\@afterheading

2205 \fi}

\@makeschapterhead 番号なしの章見出しです。

2206\def\@makeschapterhead#1{%

2207 \vspace*{2\Cvs}% 欧文は50pt

2208 {\parindent \z@ \raggedright

2209 \normalfont

2210 \interlinepenalty\@M

2211 \Huge \headfont #1\par\nobreak

2212 \vskip 3\Cvs}} % 欧文は40pt

2213%</book|report>

79

■下位レベルの見出し

\section 欧文版では\@startsectionの第4引数を負にして最初の段落の字下げを禁止しています

が,和文版では正にして字下げするようにしています。

段組のときはなるべく左右の段が狂わないように工夫しています。

2214\if@twocolumn

2215 \newcommand{\section}{%

2216%<jspf>\ifx\maketitle\relax\else\maketitle\fi

2217 \@startsection{section}{1}{\z@}%

2218%<!kiyou> {0.6\Cvs}{0.4\Cvs}%

2219%<kiyou> {\Cvs}{0.5\Cvs}%

2220% {\normalfont\large\headfont\@secapp}}

2221 {\normalfont\large\headfont\raggedright}}

2222\else

2223 \newcommand{\section}{%

2224 \if@slide\clearpage\fi

2225 \@startsection{section}{1}{\z@}%

2226 {\Cvs \@plus.5\Cdp \@minus.2\Cdp}% 前アキ 2227 {.5\Cvs \@plus.3\Cdp}% 後アキ

2228% {\normalfont\Large\headfont\@secapp}}

2229 {\normalfont\Large\headfont\raggedright}}

2230\fi

\subsection 同上です。

2231\if@twocolumn

2232 \newcommand{\subsection}{\@startsection{subsection}{2}{\z@}%

2233 {\z@}{\if@slide .4\Cvs \else \z@ \fi}%

2234 {\normalfont\normalsize\headfont}}

2235\else

2236 \newcommand{\subsection}{\@startsection{subsection}{2}{\z@}%

2237 {\Cvs \@plus.5\Cdp \@minus.2\Cdp}% 前アキ

2238 {.5\Cvs \@plus.3\Cdp}% 後アキ 2239 {\normalfont\large\headfont}}

2240\fi

\subsubsection [2016-07-22]slideオプション指定時に\subsubsectionの文字列と罫線が重なる問題に 対処しました(forum:1982)。

2241\if@twocolumn

2242 \newcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}%

2243 {\z@}{\if@slide .4\Cvs \else \z@ \fi}%

2244 {\normalfont\normalsize\headfont}}

2245\else

2246 \newcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}%

2247 {\Cvs \@plus.5\Cdp \@minus.2\Cdp}%

2248 {\if@slide .5\Cvs \@plus.3\Cdp \else \z@ \fi}%

2249 {\normalfont\normalsize\headfont}}

2250\fi

ドキュメント内 10 相互参照 目次の類 参考文献 索引 (ページ 69-82)