HiroSpark

LaTeX のスタイルファイルを自作する

スタイルファイルとは、LaTeX のマクロパッケージのことで、ドキュメントクラス(.cls)やパッケージ(.sty)もその一種です。スタイルファイルを使うことで、同じコマンドを複数の文書で使い回せるようになります。

筆者の環境は TeXLive 2020 です。

書き方

jsclasses1などは、Docstrip というプログラムを使って、

  1. コードに説明が付いた.dtxファイルを作成
  2. .dtxファイルをコンパイルして、説明付き PDF と.styファイルを出力

のようにして作成されています。しかし、このやり方は複雑なので、.styファイルを直に書く方法を紹介します。

スタイルファイルの中身はプリアンブルと同じように書くことができますが、\makeatletter\makeatotherを書く必要はありません。

以上の事を踏まえたスタイルファイルは次のようになります。

% パッケージの読み込み
\usepackage{graphicx}

% jlreqの見出しをカスタマイズ
\NewBlockHeading{section}{1}{%
    font={\normalfont\fontsize{32Q}{32H}\bfseries},
    before_space=0mm,
    after_space=8mm,
    align=left
}

このスタイルファイルをパッケージとして呼ぶには、このスタイルファイルを使いたいソースのプリアンブルに、

\usepackage{mypkg}

のように書きます。

スタイルファイル向けのコマンド

スタイルファイルで使うと便利、もしくは使われてるのを見かけるコマンドです。

  • \NeedsTeXFormat{LaTeX2e}2
    必要な LaTeX の形態としてLaTeX2eを指定します。LaTeX2eの代わりにpLaTeX2eなどを指定することもできます。
  • \ProvidesPackage{<パッケージ名>}[<日付>]
    パッケージの名前を定義します。<日付>より LaTeX のバージョンが古い場合に警告を出すことができます。<日付>は、2020/12/28のように指定します。
  • \ProvidesClass{<クラス名>}[<日付>]
    クラスの名前を定義します。他は\ProvidesPackageと同じです。
  • \LoadClass[<オプション>]{<クラス名>}
    クラスを読み込みます。自分用のクラスを作る時に便利で、これを使うと最初の例は以下のようになります。
    \LoadClass{jlreq}
    \RequirePackage{graphicx}
    \NewBlockHeading{section}{1}{%
        font={\normalfont\fontsize{32Q}{32H}\bfseries},
        before_space=0mm,
        after_space=8mm,
        align=left
    }
    
    \documentclass{mycls}
  • \endinput
    この命令よりも後の記述を無視します。

さらに詳しい内容を知りたい方は、クラス・パッケージ作者のためのLaTeX 2ε(抄訳)を読んでみてください。

TeX Liveに認識させる

スタイルファイルを作っただけでは、そのディレクトリ3以外で使うことが出来ません。そこで、TeX Live に認識させます。

TeX Live でユーザーのスタイルファイルを入れるディレクトリは$TEXMFLOCAL/tex/latex/、すなわちtexlive/texmf-local/tex/latex/です4。手順は以下のようになります。

  1. 前述のディレクトリにファイルを保存もしくはシンボリックリンクを作成
  2. コマンドラインにてmktexlsrを実行(管理者権限が必要5

参考資料


この記事は以下のシリーズの一部です。

https://zenn.dev/hirospark/scraps/549a0863ca408d

Footnotes

  1. jsarticlejsbookなどの「pLaTeX2e 新ドキュメントクラス」のことです。

  2. 2021/04/14 誤植の指摘を受け修正しました。

  3. いわゆるフォルダのことです(厳密には少し違います)。

  4. スタイルファイルを入れることのできるディレクトリは他にもあります。詳細は TeX Live ガイドを参照してください。

  5. Windows なら管理者権限でコマンドプロンプトを起動してから実行してください。UNIX 系ならsudoを頭につけて実行してください。