Kodama's home / tips.

LaTeX \section などで箇条書きのように字下げする方法

節の表題部分で, 箇条書きのように字下げする方法.
1. 節(section)
  1.2 細節(subsection)
    1.2.3  細細節(subsubsection)
       ア 箇条書き レベル1
         (1) 箇条書き レベル2
\section 等と \item の両方を調整する必要がある.

想定しているのは, 神戸市でよく使われている文書形式. すごく珍しい形式のような気がするが, 何に由来するのだろう?

マクロ定義の開始部分

LaTeX 文書の先頭部分で マクロを操作するため @ の扱いを変更する.
\documentclass[a4j,11pt]{jarticle}
\makeatletter

用紙サイズ,本文領域など

本題に入る前に, マージン, 本文領域など設定する. A4, 上下左右は 3cm 空き.
%%%%%%% Paper size
%% 1in=72.27pt=25.4mm   %%  1pt=0.351mm   %%  3pt=1.054mm
\setlength\paperheight {297mm}
\setlength\paperwidth  {210mm}
%%%% height
\topmargin -40pt % 30+10
\headheight 10pt%
\headsep 30pt % 
\addtolength{\headsep}{5.4mm} % 上端空き 30mm
\newlength{\undermargin}
\undermargin 5.4mm % 下端空き 30mm
%%%% width
\oddsidemargin  5.4mm % 左右空き 30mm
\evensidemargin 5.4mm % 左右空き 30mm
%% textheight
\setlength{\textheight}{\paperheight}
\addtolength{\textheight}{-2in}
\addtolength{\textheight}{-\topmargin}
\addtolength{\textheight}{-\headheight}
\addtolength{\textheight}{-\headsep}
\addtolength{\textheight}{-\undermargin}
%% textwidth
\setlength{\textwidth}{\paperwidth}
\addtolength{\textwidth}{-2in}
\addtolength{\textwidth}{-2\oddsidemargin}

節(section等)の扱い

以下のように節番号の形式を定義する.
%% タグ附けの階層 (節番号)
%% 1. %% \section
%%   1.1 %%  \subsection
%%     1.1.1 %%  \subsubsection
%% 大見出し(3.○○の部分)    ゴシック 1行空け,2行とり
%% 中見出し(3.1 ○○の部分)  ゴシック 1行とり 左インデント1字(字下げ)
%% 小見出し(3.1.1 ○○の部分)ゴシック 1行とり 左インデント2字(字下げ)

節番号

番号附けのルールを定義する.
\def\thesection{\protect\noexpand\bf\arabic{section}.} %% 1. %% section番号
\def\thesubsection{\protect\noexpand\thesection\arabic{subsection}} %% 1.1 %% subsection番号
\def\thesubsubsection{\protect\noexpand\thesubsection.\arabic{subsubsection}} %% 1.1.1 %% subsubsection番号

節の字下げ修正

字下げには \leftskip を用いることにする. \section などのマクロを jart10.sty を参考に修正する.
% c.f. jart11.sty
% \def\section{\@startsection {section}{1}{\z@}{前}{後}{\Large\bf}}
%% 箇条書きのような感じで, 字下げを行う.  \leftskip を用いる
\def\section{\leftskip=0em%
  \@startsection {section}{1}{\z@}{2.00ex plus 1ex minus .2ex}{0.1ex plus .2ex}{\Large\bf}}
\def\subsection{\leftskip=1em% 本文 1字下げ
  \@startsection{subsection}{2}{\z@}{0.00ex plus 1ex minus .2ex}{0.1ex plus .2ex}{\normalsize\bf}}
\def\subsubsection{\leftskip=2em% 本文 2字下げ
  \@startsection{subsubsection}{3}{\z@}{0.00ex plus 1ex minus .2ex}{0.1ex plus .2ex}{\normalsize\bf}}

目次の修正

\tableofcontents で作成される目次の字下げなどを, latex.tex を参考に修正する.
%% 目次 \tableofcontents
%%     \@dottedtocline{レベル}{字下げ}{節番号-題間隔}{題字}{ページ}  %%% latex.tex
\def\l@section#1#2{\@dottedtocline{1}{0em}{1.8em}{\bf #1}{#2}}
\def\l@subsection#1#2{\@dottedtocline{2}{1.5em}{2.3em}{\bf #1}{#2}}
\def\l@subsubsection#1#2{\@dottedtocline{3}{3.8em}{3.2em}{\bf #1}{#2}}

箇条書き

箇条書きは以下のように階層を定義する.
%% タグ附けの階層 (箇条書き)
%%  ア %% enumi
%%    (1) %%  enumii
%%      (iii) %% enumiii

1レベル箇条書きはカタカナ

1レベルの箇条書きは カタカナ を用いる.
\def\@kkana#1{%
  \ifcase#1\or ア\or イ\or ウ\or エ\or オ\or カ\or キ\or ク\or ケ\or コ\or
  サ\or シ\or ス\or セ\or ソ\or タ\or チ\or ツ\or テ\or ト\or
  ナ\or ニ\or ヌ\or ネ\or ノ\or ハ\or ヒ\or フ\or ヘ\or ホ\else\@ctrerr\fi}
\def\kkana#1{\expandafter\@kkana\csname c@#1\endcsname}%カナ
%%
\def\theenumi{\kkana{enumi}}  \def\labelenumi{\theenumi} %%% ア

2,3レベルの箇条書き

2,3レベルの箇条書き (2), (iii) のように 括弧で括る.
\def\theenumii{\arabic{enumii}}  \def\labelenumii{(\theenumii)} %%% (2)
\def\theenumiii{\roman{enumiii}}  \def\labelenumiii{(\theenumiii)} %%% (iii)

箇条書きの字下げ・行送り調整

地の文書は \leftskip で字下げしているので, 箇条書きも対応させる. また, 行間の調整は行わないべた書きにするため, 行間調整を 0pt にする.
%% 行間の調整は行わないべた書き
\def\@listI{%
  \leftmargin\leftmargini \addtolength{\leftmargin}{\leftskip}
  \parsep 0pt %4.5pt plus 2pt minus 1pt
  \topsep 0pt% 9pt plus 3pt minus 5pt
  \itemsep 0pt% 4.5pt plus 2pt minus 1pt
}
\let\@listi\@listI
\@listi 
\def\@listii{\leftmargin\leftmarginii \addtolength{\leftmargin}{\leftskip}
  \labelwidth\leftmargin\advance\labelwidth-\labelsep
  \topsep 0pt%4.5pt plus 2pt minus 1pt
  \parsep 0pt%2pt plus 1pt minus 1pt
  \itemsep \parsep}
\def\@listiii{\leftmargin\leftmarginiii \addtolength{\leftmargin}{\leftskip}
 \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
 \topsep 0pt% 2pt plus 1pt minus 1pt 
 \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
 \itemsep \topsep}
\def\@listiv{\leftmargin\leftmarginiv \addtolength{\leftmargin}{\leftskip}
 \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}

箇条書きの文段先頭の字下げ

\item の後, 文段の始めに相当する, 1字字下げを行う.
%% \item の後 1字字下げ
\def\item{\@ifnextchar [{\@item}{\@noitemargtrue \@item[\@itemlabel]}{\hskip 1em}}

その他の縦の間隔

段落や箇条書きでの行送りの調整は行わない. 基本的にはべた書き.
%% 縦の間隔  基本的にはべた書き
\parskip=0ex
\topsep=0ex % \@list.. で再設定される
\parsep=0ex % \@list.. で再設定される
\partopsep=0ex % \@list.. で再設定される
\itemsep=0ex % \@list.. で再設定される
\renewcommand{\baselinestretch}{1.2} %% 行送りの補正

その他の横の間隔

字下げも文段のはじめの字下げのみ. 基本的にはべた書き.
%% 横の間隔
%\itemindent=3em
%\listparindent=1ex
\labelsep=0em % \item の後字下げするので, ここは 0pt
\itemindent=0em
\parindent=1em %% 段落字下げ
\leftskip=0em%
\sloppy %% 横調整は緩く
%\twocolumn
%\flushbottom

マクロ定義の終りと本文

マクロ定義の最後に @ の扱いを戻す.
\makeatother

\begin{document}
ここに本文.
\end{document}

Kodama's home / tips.