2018年5月14日

titlesec

LaTeXで標準的に定義されている各種見出し\part\chapter\section\subsection\subsubsection\paragprah\subparagraphの見た目を変更するパッケージとして,titlesecパッケージというのがある.

使い方

\usepackage{titlesec}
とする.
\documentclass{jsarticle}
\usepackage{titlesec}
\titleformat{\section}{\LARGE\itshape}{■\thesection}{1zw}{}
\begin{document}
\section{I Am a Cat}
どこで生れたかとんと見当がつかぬ。
\end{document}

\titleformat

書式の変更には,\titleformatを使う.書式は次の通り.

\titleformat{<命令>}
    [<特殊な形状の指定>]
    {<書式>}
    {<ラベル書式>}
    {<ラベルと見出し文字列の間の空き>}
    {<見出し文字列直前に入るコード>}
    [<見出し直後に入るコード>]

「ラベル」というのは節番号などの部分です.たとえば\section{セクション}とすると,「1 セクション」のように出ますが,この「1」の部分をラベル,「セクション」の部分を見出し文字列と呼んでいます.

\titleformat{\section} % \sectionを変更する
    [hang] % 形状はhang(デフォルト値)
    {\LARGE} % フォントサイズを\LARGEとする
    {\fbox{\thesection}} % ラベルを枠で囲む(\thesectionにより明示的に出力をする必要がある)
    {1zw} % ラベルと見出しとの間に全角一文字分の空白を入れる
    {■} % 見出し文字列の前に■を入れる
    [] % 後ろには何も入れない

書式内では,\filright\filcenter\filleft\fillastを使うことができる.それぞれ見出しを左寄せ,中央寄せ,右寄せ,最後の行のみ中央寄せを行う.

「特殊な形状」は以下の通り.

hang

デフォルト値です.

\titleformat{\section}[hang]{\large\bfseries}{\thesection}{1zw}{}

block

見出し全体を一つの段落として扱う.

\titleformat{\section}[block]{\large\bfseries}{\thesection}{1zw}{}

display

ラベルと見出し文字列の間に改行を挟む.

\titleformat{\section}[display]{\large\bfseries}{\thesection}{1zw}{}

runin

同行見出し.(下のサンプルで太字でない部分は見出しに続く本文.)

\titleformat{\section}[runin]{\large\bfseries}{\thesection}{1zw}{}

leftmargin,rightmargin

それぞれ左余白と右余白に見出しを出す.以下で説明する\titlespacingでの調整が必要.

\titleformat{\section}[leftmargin]{\large\bfseries}{\thesection}{1zw}{}
\titlespacing{\section}{5zw}% 見出しの長さを5zwとする.
    {0zw}
    {1zw}% 見出しと本文との間を1zw空ける

drop,wrap

窓見出しっぽいのを作る.やっぱり\titlespacingでの調整が必要.dropは\titlespacingで指定された長さを必ず見出しの長さとするが(見出しが短い場合は本文との間に空白が入る)wrapは見出し文字列の長さに応じて短くなる.

\titleformat{\section}[wrap]{\large\bfseries}{\thesection}{1zw}{}
\titlespacing{\section}{5zw}{0zw}{1zw}

見出し直後に改段落があると大変なことになります…….

frame

枠囲み.

\titleformat{\section}[frame]{\large\bfseries}{\thesection}{1zw}{}

\titlespacing

周りの空白などは\titlespacingで指定する.書式は

\titlespacing{<命令>}
    {<見出し左の空き(hang,block,display,frameの時)または見出しの長さ(その他)>}
    {<見出し上の空き>}
    {<見出しとその後の本文との空き>}% hang/block/display/frameとその他で方向が異なる
    [<見出し右の空き>] % hang,block,display,frameのみ
となる.代わりに\titlespacing*を使うと,見出し直後の本文のインデントを抑制する.

改ページ

\<見出し命令>breakが定義されていると,見出しの場所での改ページが行われる.たとえば

\newcommand{\sectionbreak}{\clearpage}
とすると,\sectionの直前で改ページされる.

やりたい放題

\titleformat<書式>と書いた第二引数,実際には「見出しの前に入る命令」なので,ここに色々書くと見出しの見た目をカスタマイズできる.例えば

\titleformat{\section}
    {\vspace{3cm}\LARGE}% \vspace{3cm}を加えた
    {\fbox{\thesection}}{1zw}{■}% 後はさっきと同じ
とすると見出しの前に3cmの空白が入る.さらに<ラベル書式><見出し文字列直前に入るコード><見出し直後に入るコード>を組み合わせるとかなりやりたい放題になる.

もっとやりたい放題をするには,パッケージオプションにexplicitを加える.これをすると,<見出し文字列直前に入るコード>において,見出し文字列自身を#1でとることができる.ただし,この場合自動的には見出し文字列が出力されなくなるので,<見出し文字列直前に入るコード>で明示的に出力をする必要がある.

\documentclass{jsarticle}
\usepackage[explicit]{titlesec}
\titleformat{\section}{\LARGE}{}% 通常のラベル出力を無効化しておく
  {0pt}{\fbox{#1} (\thesection)}% 見出し文字列を四角で囲み,その後にラベルを出力する
\begin{document}
\section{はじめに}
\end{document}

罫線

前節の要領でやりたい放題しようとすると,線とか引きたくなるかもしれない.titlesecパッケージは罫線を出力する\titleruleとかいう命令を用意している.\titleruleは行末まで罫線を引く.\titlerule[2pt]というようにオプションで高さ(太さ)を指定もできる.*をつけた\titlerule*は,同じものの繰り返しで行末まで埋める.\dotfillの中身変更できるバージョン.使い方は,\titlerule*[<並べるものの長さ>]{<並べるもの>}とする.

いずれの命令も,その直前に\titleline[l]{<テキスト>}をしておくと,<テキスト>を含めて下線が引かれる.[l]はテキストの配置指定で,lは左寄せ.他には中央配置cと右寄せr.省略すると均等割的な感じになる.いくつか例.

\documentclass{jsarticle}
\usepackage[explicit]{titlesec}
\titleformat{\part}{\LARGE}{}{0pt}{\titleline[l]{\rule[-4pt]{.2cm}{1em}\hspace{.3zw}\thepart\hspace{1zw}#1}\titlerule}
\titleformat{\section}{\Large}{\thesection}{1zw}{\titleline[r]{#1}\titlerule}
\titleformat{\subsection}{\normalsize}{\thesubsection}{1zw}{\titleline[l]{#1}\titlerule*{/}}
\begin{document}
\part{ぱーと}
\section{せくしょん}
\subsection{さぶせくしょん}
\end{document}

0 件のコメント:

コメントを投稿

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