📋
LaTeX のスタイルファイルを自作する
スタイルファイルとは、LaTeXのマクロパッケージのことで、ドキュメントクラス(.cls
)やパッケージ(.sty
)もその一種です。スタイルファイルを使うことで、同じコマンドを複数の文書で使い回せるようになります。
書き方
jsclasses[1]などは、DOCSTRIP というプログラムを使って、
- コードに説明が付いた
.dtx
ファイルを作成 -
.dtx
ファイルをコンパイルして、説明付きPDFと.sty
ファイルを出力
のようにして作成されています。しかし、このやり方は複雑なので、.sty
ファイルを直に書く方法を紹介します。
スタイルファイルの中身はプリアンブルと同じように書くことができますが、\makeatletter
や\makeatother
を書く必要はありません。
以上の事を踏まえたスタイルファイルは次のようになります。
mypkg.sty
% パッケージの読み込み
\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[<オプション>]{<クラス名>}
クラスを読み込みます。自分用のクラスを作る時に便利で、これを使うと最初の例は以下のようになります。mycls.cls\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]。手順は以下のようになります。
- 前述のディレクトリにファイルを保存もしくはシンボリックリンクを作成
- コマンドラインにて
mktexlsr
を実行(管理者権限が必要[5])
参考資料
- LaTeX2e美文書作成入門[改訂第7版]
- 独習LaTeX2e
- TeX Liveガイド 2020
- LaTeX2e unofficial manual
この記事は以下のシリーズの一部です。
Discussion
<del>\ProvideTeXFormat{<バージョン>}</del><ins>NeedsTeXFormat{<バージョン>}</ins>でしょうか。
初めての方にむけてということはわかるんですが、ここで「バージョン」とするのもあまりよくなくて、
具体的に「LaTeX2e」などを記述した例を載せておいて、他に「pLaTeX2e」なども有り得る、程度にして良いのではないかと思います。この段階でゼネラルなことを書こうとすると脱線が激しくなると思うので。
(丁度よい代案はないのですが)たとえば美文書であればこの箇所入る文字列については「形態」と紹介していますね。
その通りです。ありがとうございます。
確かにそうですね。変更します。
\ProvidesPackage
のこれはパッケージの要求バージョンですね。LaTeX(LaTeX2e)のバージョン警告は\NeedsTeXFormat{LaTeX2e}[<日付>]とした場合で、こんな感じになります。