Skip to content
matsub.rk edited this page Feb 24, 2016 · 3 revisions

プリアンブルとスタイルファイル

テンプレート作成などの要素として、プリアンブルがあります。 プリアンブルによって図や参照などさまざまな組版の処理を制御し、 LaTeXを書きやすくしたり、組版時のレイアウトを変更することができます。

\documentclass[a4j]{jsarticle}
\usepackage{listings}

\newcommand{\lstref}[1]{リスト\ref{lst:#1}}
\renewcommand{\lstlistingname}{リスト}

\lstset{
  numbers=left,
  tabsize=4,
  frame=trbl,
  breaklines=true,
  basicstyle=\ttfamily\footnotesize,
}

\begin{document}
LaTeXのコードは\lstref{texcode}のようにプリアンブル(preamble)、
文書本体(決まった呼び方多分ない)によって構成されています。
1行目から3行目がプリアンブルとなります。

\begin{lstlisting}[
  language=tex,
  caption={\LaTeX の文書構造},
  label=lst:texcode,
]
% ------ preamble ------
\documentclass{jsarticle}
\usepackage{here}
% ------ body ------
\begin{document}
Blah Blah Blah
\end{document}
\end{lstlisting}

\end{document}

preamble

このコードのプリアンブルではざっくり3種類のことを行っています。

  • 外部ファイルからクラス/スタイルの呼び出し
  • マクロ定義
  • マクロ処理

スタイル呼び出し

前述したように、documentclassの指定と、パッケージの利用です。 詳しくは当該記事参照願います。

マクロ定義

ここでは\newcommand\renewcommandというコマンドを用いて、 コマンドの定義 / 既存コマンドの再定義を行っています。

まずコマンド定義です。ラベルと参照で述べたように、リストのラベルはlst:の形でつけられます。 さらに、リストを参照するときは「リスト1は〜」のように記述すると思います。 これをいちいち打つのはアホなので、新しく「リスト参照用のコマンド」を作ります。

\newcommand{\lstref}[1]{リスト\ref{lst:#1}}

これで、\lstref{hoge}とするとリスト\ref{lst:hoge}と展開する\lstrefコマンドが新たに定義されました。イケてます。

といった風に、\newcommandコマンドを用いて、新しいコマンドを定義することができます。使い方は以下。

\newcommand{cmd}[argc][default]{hogehoge}

cmdはコマンド名、argcは引数の数、hogehogeには好きなことかいてください。 引数を使うときは、#1, #2...のように#数字で扱うことができます。 シェルスクリプトのコマンドライン引数みたいなかんじ。 呼び出しは\cmd{arg1}{arg2}...となります。 最初の引数だけオプション引数とすることができて、 引数が1つ不足してdefaultの値が定義されている場合は#1にはdefaultの値が入っています。 引数使わないときは[]部分は不要です。

次いで\renewcommandです。 listingsパッケージは南蛮渡来のブツでして、 基本的にキャプションタイトルは「Listing: なんたら」の形になります。 日本語レポートの一部だけ「Listing: 」とか言われてもドン引きなのでここを「リスト 」に変えたい。 listingsのキャプションのタイトルは\lstlistingnameで定義されているので、 \renewcommandを使って既存値を変更します。

\renewcommand{\lstlistingname}{リスト}

これでキャプションタイトルが変わりました。 こんな感じで、\renewcommandコマンドを使えば既存のコマンドを変更することができます。

\renewcommand{cmd}[argc][default]{hogehoge}

ほぼ\newcommandと同じですね。 今回は引数の無いコマンドを扱いましたが、 もちろん引数のあるコマンドも扱えます。

マクロ処理

「マクロ処理」というのは別段用語というわけではなく、今回便宜上そう呼んでいるだけです。 今回で言う\lstsetコマンドのような操作です。 これは、listingsで定義されるコマンドで、行番号の表示、枠の形式などリストの書式を指定するコマンドです。 このような文書本体のスタイルを操作する処理もプリアンブルで行われます。

スタイルファイル

以上のような操作や、TeX言語の処理など、プリアンブルをひとつにまとめたファイルをスタイルファイルといいます。 スタイルファイルは*.styの形になります。

さっきのtexファイルをstyファイルとtexファイルに分割してみましょう。

mylist.sty

\RequirePackage{listings}

\newcommand{\lstref}[1]{リスト\ref{lst:#1}}
\renewcommand{\lstlistingname}{リスト}

\lstset{
  numbers=left,
  tabsize=4,
  frame=trbl,
  breaklines=true,
  basicstyle=\ttfamily\footnotesize,
}

practice.tex

\documentclass[a4j]{jsarticle}
\usepackage{mylist}
\begin{document}
LaTeXのコードは\lstref{texcode}のようにプリアンブル(preamble)、
文書本体(決まった呼び方多分ない)によって構成されています。
1行目から3行目がプリアンブルとなります。

\begin{lstlisting}[
  language=tex,
  caption={\LaTeX の文書構造},
  label=lst:texcode,
]
% ------ preamble ------
\documentclass{jsarticle}
\usepackage{here}
% ------ body ------
\begin{document}
Blah Blah Blah
\end{document}
\end{lstlisting}

\end{document}

上のようにmylist.styを作成し、usepackage{mylist}とすれば、texファイルにmylist.styが読み込まれます。 これで最初のコードと同様の動きをします*1。 お気づきかと思いますが、パッケージTEXINPUTSで指定された範囲内にあるstyファイルのことだったわけです。

これでLaTeXを書くのに必要な事項はだいたい抑えたと思います。 あとは具体的な仕様やなんやらを調べながら書いていただければ

next >>

*1: lstでは(というか文書以外では)正しいエラー表示のために`usepackage`コマンドを`RequirePackage`とします。