TeX言語でオシャレしよう

LaTeXの魅力を伝えていきます.

スタイルファイル作っちゃった☆(・ω<)

本記事では, 処理機構に関しては一切触れてません. あくまでも使い方を説明しています.
また, どうしてもエラーが出てしまうケースが存在することがあります, その際はコメントやTwitter なりで, ご一報頂けると幸いです.

1か月ほど前より, 大学の講義内容を LaTeX でまとめPDFに集約させていたのだが, 体裁や使い勝手など既存の気に食わないかったので思い切って自作しました. (自作と言っても latex.ltx, jsarticle.cls を一部改変, 追加した形である. )
また, この記事またはスタイルファイルは予告なく変更します.
早速, 今回の構成に関して...

の順番で進めていく.
また, 先に述べておくが, \item のlabel に関してはデフォルトから以下のように改変している. そして, \itemize の深さ許容値(入れ子にできる数)も増やしてある.

\renewcommand{\labelitemi}{$\cdot$}%
\renewcommand{\labelitemii}{}%
\renewcommand{\labelitemiii}{}%
\renewcommand{\labelitemiv}{}%

本スタイルファイルで何が出来るのか

今回私が作成したスタイルファイル(summary.sty) は itemize 環境を利用して定義, 定理などを1つのpdfファイルに集約するのが目的である.
ですので, 現状の形では定理の証明などを明記するのには不向きであるが, 今後追加していく予定である.

スタイルファイルの使い方

基本的には普段目にする人も多いであろう itemize 環境に従って書いてゆく.
例えば, 以下のような形である.

\begin{itemize}
	\item hoge
	\begin{itemize}
		\item HOGE
	\end{itemize}
\end{itemize}

たまに勘違いしてる人もいるみたいであるが, \item{hoge} などの書き方は非常に好ましくないです.
上記に加えて大きく2つの制御綴 \text\withpage を追加しました.

  • \text の使い方

\text は必須の引数とオプションの引数を各1つずつ取ります.
また, \item の時とは違い必ず { } で囲みます.
以下, 簡単な例.
( \@listdepthが1( itemize が入れ子になってない時) \item の先頭に自動的に・ が不随するので敢えて, \text は一つ深い位置にした. )

\begin{itemize}
	\item kore
	\begin{itemize}
		\text {hoge}
		\text[center]{HOGE}
		\text[symbol=dot]{geho}
		\text[symbol=$\int$]{GEHO}
	\end{itemize}
\end{itemize}

f:id:takasca0123:20200728123501p:plain
\item[] ほげほげ と \text{ほげほげ} は同じと考えて問題なく, これを基準にオプションをつけていきます.
上記でも使用したオプションも含め, 合計で 6 つのオプションが存在します.
オプションを複数用いる際は \text[symbol=dot, mathmode]{hoge} のようにします.
1. center
聡明な読者であれば, 察するところであると思いますが, テキスト( { }内 )を中央配置させます.

2. symbol
これは, \item における [ ] の中に当たります.
symbol=hoge と書けば, テキストの前に hoge を配置します. (これは $$ で囲んでも問題ないです)
特殊なケースとして, symbol=$\cdot$ は symbol=dot と等価の意味を成します.
symbol の値として\cnt という (TeXの) カウンタも用意しており, 1 から始まり, \end{itemize} と共に1に戻ります.
カウンタを途中から始めたい場合は, \cunt=5 などを適宜追加してください.

3. mathmode,dmathmode
この2つのオプションはそれぞれ { }内部を数式モード, ディスプレイ数式モードとします. (2つ指定した場合 dmath が優先されます. )

4. tableofcontent, index
それぞれ目次と索引の補助ファイルを生成します. 索引は upmendex を利用します. (後述)

  • \withpage の使い方

\withpage は \text に酷似してますが, とる引数の数が1つ多いです.
以下例.

\hbox to \hsize{\leaders\hbox to .5ex{\hfill--\hfill}\hfill}
\begin{itemize}
	\item kore
	\begin{itemize}
		\withpage {hoge}{1}
		\withpage[center]{HOGE}{(1)}
		\withpage[symbol=dot]{geho}{12}
		\withpage[symbol=$\int$]{GEHO}{123}
	\end{itemize}
\end{itemize}

f:id:takasca0123:20200728134544p:plain
一番上のラインがテキスト本文の右端から左端を繋ぐ線である.
\withpage の必須の引数の2つ目を右端に配置しドットリーダーで結びます.
使用できるオプションは\text を全く同じです.

  • 索引

索引に関してはこちらのサイトにあるのをほぼ丸パクリしました.
qiita.com
.ist は全く同じのを使用してます. ( summary.ist とした)
upmendex での処理と\printindex を以てして初めて索引は生成されます.
以下例.

\begin{itemize}
	\item kore
	\begin{itemize}
		\text[index]{イデアル}
		\text[index]{デュアル}
		\text[index]{双対}
	\end{itemize}
\end{itemize}
\printindex
% upmendex  -r -c -g -s summary.ist  summary.idx

f:id:takasca0123:20200728140311p:plain
しかしながら, このままでは索引に漢字の読みが登録されてないのでソートが出来てません.
ですので, 辞書ファイル (summary.dic) を別途書きます.

双対 そうつい

このように <漢字> <よみ> で並べた辞書ファイルを生成し,

upmendex  -r -c -g -s summary.ist -d summary.dic  summary.idx

で処理すると希望する索引が生成されます.
f:id:takasca0123:20200728140712p:plain
また, 目次は \begin{document}の直後に\tableofcontents と明記することで目次を出力させます.

  • その他機能

1. ほかにある機能として大きいのは, \text と \item の折り返し位置に関してです.
以下例.

\hbox to \hsize{\leaders\hbox to .5ex{\hfill--\hfill}\hfill}
\begin{itemize}
	\item あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも
	\text{あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも}
	\withpage{あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも}{50音}
	\withpage{あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも}{50音}
\end{itemize}

f:id:takasca0123:20200728141803p:plain
上記のように, \withpage の2つ目の必須の引数と被らないように, \item と \text は \withpage に比べて右側の空白が少し多くなってます. ただし, \withpage の文が複数行に跨がる際は最終行以外に関しては右端まで詰まってしまいます. (現在改良中)
2. \newbook
ここでは, \newbook, \book, \bookinfo, \maketitile の4つの制御綴を主に使用します.
以下例. ( \tableofcontents を入れないとエラーになってしまう)

\tableofcontents
\newbook{測度論}
\book{ルベーグ積分入門}
\bookinfo{伊藤清三 2019 裳華房}
\maketitle

f:id:takasca0123:20200728143855p:plain

3. \skippage
このスタイルファイルは数学書(に限らないが)と併せて利用する想定であるので, やむを得ずページを飛ばすときがある. その時に活躍する制御綴である.
以下例.

\begin{itemize}
	\item kore
	\begin{itemize}
		\text[index]{イデアル}
		\text[index]{デュアル}
		\skippage{12to18}
		\text[index]{双対}
	\end{itemize}
\end{itemize}

f:id:takasca0123:20200728142329p:plain
例のようにシンプルに to でつなぐだけです.
また, \makeskiplist をプリアンブルに明記することで, 飛ばしたページの一覧が .txt で生成されます. またこの時, 直前で話した \newbook の値を参照します.

今後追加したい機能

今後追加したい機能は山ほどあるのだが, 2020/07/28 現在で優先的に追加したいものを幾つか挙げる.

1. itemize 環境すべての強制終了と途中再開
2. 複数行にわたる withpage の空白処理
3. 索引のアルファベット, カタカナ双方での対応

1.itemize 環境すべての強制終了と途中再開
やはりどうしても, itemize 環境内のみでやりくりするのにも限界がるので, 一時的に itemize 環境から抜け出して自由に同じ深さから再開できるようにしたい. (現状でも何個も\end{itemize}を書けば可能であるがかなり億劫)
2. 使用の説明でもあったが, 複数行に渡る際も最終行以外は右の空白を大きめにしたい.
3. 索引で調べる際, カタカナで登録してるのか, アルファベットで登録しているのか悩まずに調べることが出来るとかなり便利.


また, 細かい変更など1か月または2週間を目処に変更していく予定です.