📋

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

2 min read 3

独自のスタイルファイルを使えるようになるとLaTeXの作業が一層楽しくなります。

間違いなどがあったら教えてください。
筆者の環境はTeXLive 2020です。

スタイルファイルとは

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

書き方

jsclasses[1]などは、

  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のように指定します。
\endinput この命令よりも後の記述を無視します。

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
脚注
  1. jsarticlejsbookなどの「LaTeX2e新ドキュメントクラス」のことです。 ↩︎

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

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

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

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

Discussion

<del>\ProvideTeXFormat{<バージョン>}</del><ins>NeedsTeXFormat{<バージョン>}</ins>でしょうか。

初めての方にむけてということはわかるんですが、ここで「バージョン」とするのもあまりよくなくて、
具体的に「LaTeX2e」などを記述した例を載せておいて、他に「pLaTeX2e」なども有り得る、程度にして良いのではないかと思います。この段階でゼネラルなことを書こうとすると脱線が激しくなると思うので。
(丁度よい代案はないのですが)たとえば美文書であればこの箇所入る文字列については「形態」と紹介していますね。

<del>\ProvideTeXFormat{<バージョン>}</del>
<ins>NeedsTeXFormat{<バージョン>}</ins>でしょうか。

その通りです。ありがとうございます。

この段階でゼネラルなことを書こうとすると脱線が激しくなると思うので。

確かにそうですね。変更します。

<日付>よりLaTeXのバージョンが古い場合に警告を出すことができます。

\ProvidesPackageのこれはパッケージの要求バージョンですね。

LaTeX(LaTeX2e)のバージョン警告は\NeedsTeXFormat{LaTeX2e}[<日付>]とした場合で、こんな感じになります。

% my.sty
\NeedsTeXFormat{LaTeX2e}[2030/01/01]
\ProvidesPackage{my}[1970/04/01]
\documentclass{article}
\usepackage{my}[2021/04/14]
$ lualatex tes.tex
...
LaTeX Warning: You have requested release `2030/01/01' of LaTeX,
               but only release `2020-10-01' is available.

)

LaTeX Warning: You have requested, on input line 2, version
               `2021/04/01' of package my,
               but only version
               `1970/04/01'
               is available.
ログインするとコメントできます