2019年12月17日

クラスファイルを作ろう(6)

\maketitleやabstract環境を定義します.

\maketitle

ご存じタイトルを出力する命令です.実際の処理は\@maketitleに回す感じで実装をします.以下の中身はjsarticleのものそのものです.

\newcommand{\maketitle}{%
  \par
  \begingroup
    % 脚注用設定を一時的に変更する.
    \renewcommand{\thefootnote}{\fnsymbol{footnote}}% 脚注の番号を1 = *,2 = **みたいにする.
    \renewcommand{\@makefnmark}{\hbox{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}}%
    \long\def\@makefntext##1{%
      \advance\leftskip 3zw
      \parindent 1zw\noindent
      \llap{\@textsuperscript{\normalfont\@thefnmark}\hskip0.3zw}##1%
    }%
    \@maketitle % 本体
    % このページだけページスタイルをplainにする.ただしもとがemptyスタイルの場合はいじらない.
    % \ifnum 0[\if... 1\fiの連続]>0 は「or」を実現する慣用句
    \ifnum 0\ifx\@oddhead\@empty\else 1\fi\ifx\@evenhead\@empty\else 1\fi\ifx\@oddfoot\@empty\else 1\fi\ifx\@evenfoot\@empty\else 1\fi>0
      \thispagestyle{plain}%
    \fi
    % \thanksにより保存されていた\footnotetextの列を吐き出す.
    \@thanks
  \endgroup
  % 色々と空にする.
  \setcounter{footnote}{0}%
  \global\let\thanks\relax
  \global\let\maketitle\relax
  \global\let\@maketitle\relax
  \global\let\@thanks\@empty
  \global\let\@author\@empty
  \global\let\@date\@empty
  \global\let\@title\@empty
  \global\let\title\relax
  \global\let\author\relax
  \global\let\date\relax
  \global\let\and\relax  
}
\newcommand{\@maketitle}{%
  \newpage\null
  \vskip 2em
  \begin{center}%
    % \footnoteを\thanksにする.\thanks{#1}は\@thanksマクロに\footnotetext{#1}を追加する.
    \let\footnote\thanks
    {\LARGE \@title \par}% \titleで指定されたタイトルは\@titleで参照できる.
    \vskip 1.5em
    {%
      \large
      \lineskip .5em
      % 著者は\@authorで参照できる.tabular環境で囲っておくと複数著者でもよくなる
      \begin{tabular}[t]{c}%
        \@author
      \end{tabular}%
      \par
    }%
    % 日付は\@dateで参照
    \ifx\@date\@empty\else % 日付が空でないときだけ出力する
      \vskip 1em
      {\large \@date}%
    \fi
  \end{center}%
  \par\vskip 1.5em
}
縦書きの場合

縦書きの場合は,tabular環境の仕様により著者名が寝てしまいます.plextパッケージを読み込んでtabular環境を再定義させてしまうのが早いでしょう.

\RequirePackage{plext}

LuaTeXの場合はlltjextパッケージです.

\RequirePackage{lltjext}% LuaTeXの場合
二段組みの場合

タイトル部分だけは一段組になるようにしておきます.そうする必然性があるわけではなく,クラスファイルのデザインによっては二段組みのままということもあるでしょう.\maketitleの定義内で\@maketitleを呼び出している部分を次のようにしておきます.

\twocolumn[\@maketitle]% \@maketitleの部分をこうする.
titlepage指定時

articleクラスでは,titlepageが指定されるとタイトルが一ページ使って表示されます.次のようにtitlepage環境を使います.titlepage環境自身は後で定義します.何故か\@maketitleに追い出すと言うことをしないようなので,それに習います.

\newcommand{\maketitle}{%
  \begin{titlepage}%
    % 脚注の文字サイズを少し変更し,また脚注の前の線を引かないようにする.
    \let\footnotesize\small
    \let\footnoterule\relax
    \let\footnote\thanks
    \null\vfil
    \vskip 60pt
    \begin{center}%
      {\LARGE \@title \par}% 中央配置でタイトル
      \vskip 3em
      {%
        \large
        \lineskip .75em
        \begin{tabular}[t]{c}%
        \@author
        \end{tabular}\par
      }%
      \vskip 1.5em
      {\large \@date \par}%
    \end{center}%
    \par
    \@thanks
    \vfil\null
  \end{titlepage}%
  \setcounter{footnote}{0}%
  \global\let\thanks\relax
  \global\let\maketitle\relax
  \global\let\@thanks\@empty
  \global\let\@author\@empty
  \global\let\@date\@empty
  \global\let\@title\@empty
  \global\let\title\relax
  \global\let\author\relax
  \global\let\date\relax
  \global\let\and\relax
}

titlepage環境

上で使ったtitlepage環境を定義しておきます.

\newenvironment{titlepage}{%
  \newpage
  \thispagestyle{empty}% titlepage環境には柱やノンブルを入れない
}{%
  \newpage
  % ページ数を戻す.
  \setcounter{page}{1}
}
二段組みの場合

二段組みの場合は,titlepage環境内のみ一段組にします.

\newenvironment{titlepage}{%
  \onecolumn % 一段組へ
  \thispagestyle{empty}%
}{%
  \twocolumn % 二段組みに戻す
  \setcounter{page}{1}%
}
abstract環境

とりあえず普通の場合.

\newenvironment{abstract}{%
  \small
  \begin{center}%
    {\bfseries\gtfamily\abstractname\vspace{-.5em}% \abstractnameには「概要」のような文字が入っている.
  \end{center}%
  \list{}{% list環境は後でまた出てきます.
    \listparindent\parindent
    \itemindent \listparindent
    \rightmargin \leftmargin
  }%
  \item
}{\endlist}

二段組みの場合は,概要を一段で表示するか二段組みの中に入れるかで違う形の処理になります.二段組みの中に組み込むならば上のような処理で殆ど問題ないでしょう.一段組にする場合は,\maketitleと併せて出力することになります.jsarticleでは,abstract環境内を一度boxに入れておいて,\maketitle内で出力するようにしています.つまり,次のような形で使うことになります.

\begin{abstract}
<概要>
\end{abstract}
\maketitle

このようにするには次のようにします.

\newbox\mycls@abstractbox % アブストラクトを格納するboxを確保
\newenvironment{abstract}{\global\setbox\mycls@abstractbox=\vtop\bgroup % アブストラクトの中身の保存開始
  \begin{minipage}[b]{\textwidth}% minipageで囲む
  \small
  \begin{center}%
    {\bfseries\gtfamily\abstractname\vspace{-.5em}%
  \end{center}%
  \list{}{%
    \listparindent\parindent
    \itemindent \listparindent
    \rightmargin \leftmargin
  }%
  \item
}{%
  \endlist
  \end{minipage}%
  \egroup % アブストラクトの中身の保存終了
}

また\@maketitleの末尾に\centerline{\box\mycls@abstractbox}と加えておきます.

0 件のコメント:

コメントを投稿

コメントの追加にはサードパーティーCookieの許可が必要です