高校数学幽玄夢幻@imaginarywisdom.net

お手軽「自分専用パッケージ」のすすめ

本稿はTeX & LaTeX Advent Calendar 2017の5日目です。4日目はabenoriさんでした。6日目はtrueroadさんです。

やや長めの文書となりました。ご興味のある部分をお読みください。(Ins: 2017-12-09)投稿ののち,いくつかの大変有益なコメントを頂戴いたしました。本稿の内容は,初心者がひとまず自分なりに実践したことの紹介であり,必ずしも最善のものではないことをご留意の上,お読みください。詳細は記事の最後に載せています。

文書目次

ご挨拶と趣旨
自己紹介と本稿の趣旨を述べました。
数学科教員志望の方へ
本題を逸れて,数学科教員志望の方へ向けてのLaTeXへのお誘いです。 本稿の他の部分は一般向けに書いております。
お手軽「自分専用パッケージ」のすすめ
長いプリアンブルをコンパクトにまとめる「自分専用パッケージ」の効用を,私自身のプリアンブルを例にとりお伝えします。
お手軽「自分専用パッケージ」の作り方 (1)
本稿の主題です。お手軽「自分専用パッケージ」を実際に作り,短いプリアンブルになった.texファイルをコンパイルしてみましょう。基本的な部分のみを解説しています。
お手軽「自分専用パッケージ」の作り方 (2)
保守性や今後の使いやすさを考えて手を加え,「自分専用パッケージ」をワンランク上のものにしましょう。
深淵への誘い
完成度向上を目指したり,好みの組版結果を追求したりしているうちに,楽しくなってきます。
謝辞
このページにご来訪いただきありがとうございます。

ご挨拶と趣旨

Graceful Ghostと申します。高等学校で数学科教諭をしており,講義資料作成にあたってLaTeXを楽しく利用しています。LaTeXを楽しみはじめたのはごく最近で,まだ詳しいことは理解しておらず,これから勉強しようと思っています。

本稿では,LaTeXを快適に使うための手軽なカスタマイズを紹介いたします。実作業時間は10分程度で済むかと存じます。仮想読者は

としました。LaTeXを用いた中身のある文書を作った経験は前提としますが,それ以上のことは前提としません。なお,LaTeXのご経験がない場合は,TeX Wiki/ はじめての方へTeX Wiki/ TeX入手法などの記事をお読みください。

知識不足のため,不適切であったり冗長であったりする内容が含まれるかもしれません。ご容赦ください。ご指摘いただけましたら,随時修正いたします。上級者の方におかれましては,初心者が学んでゆく様子をご覧いただき,「それならこんなことでも記事にしておこうか」と思っていただければ恐悦至極に存じます。

Back to Contents

数学科教員志望の方へ

数学科教員志望の方は,本題に入る前に,よろしければ少しだけ現在の状況と願いをお聞きください。

私は,数学の授業をするにあたって講義資料が必要な場合にLaTeXを用いています。 個人的には,少し手をかければ綺麗な出力が得られるため,とても満足しています。

残念なことに,同僚に聞いてみてもLaTeXユーザは少数派(2017年度の職場環境では私のみ)です。大学時代は使ったがそれ以後はまったく,という声が多いように感じます。周りでは,

がよく使われています。いずれのソフトウェアも,講義資料を作成するにあたって十分な機能を備えており,操作は直観的です。しかし,出力の細かな部分はソフトウェアの仕様に合わせねばならず,こうしたい,ああしたい,といった欲求にはあまり応えてくれませんし,自分好みの表記を実現するには毎回の手間が大きくなります。

一方でLaTeXは,WYSIWYGなソフトウェアではないため,初めに少々の勉強や準備を要することは確かです。しかし,一度自分好みの設定を作り上げてしまえば,以後は手軽に高品質な出力が得られます。また,工夫すれば文書の保守性も高いものとなります(たとえば,gfngfnさんの解説記事があります)。企業の今後の動向に左右されないことも強みといえるでしょう。

このように同僚にLaTeXを表現力やマクロの手軽さを宣伝したことはあるのですが,どうにもハードルが高く見えるようです。また,先に挙げた2つのソフトウェアには,いわゆる「問題データ集」が販売されており,そのために使っているという意見もありました。寡聞にして,高校数学向けの.texファイルを集約したウェブサイトをあまり存じ上げません。

LaTeXを用いて高校数学の講義資料を作成する仲間が増え,互いのファイルを公開し利用しあう文化が生まれれば,有意義であろうと考えています。入試問題や問題集においては著作権の問題がありますが,オリジナルの講義資料や練習問題の交流を図ることができれば,負担を軽減しつつ,質の良い問題を知る機会になるでしょう。

そこで,現在大学の講義でLaTeXを使っていたり,論文執筆のためにLaTeXを使っている数学科教員志望のみなさんには,教員になられてからもLaTeXと仲良くしていただければ,そして講義資料や作成された問題をWWW上で公開していただければ,と願っています。

Back to Contents

お手軽「自分専用パッケージ」のすすめ

ここからが本題です。自分自身の成長過程を下敷きに,お手軽「自分専用パッケージ」の有用性を述べます。

LaTeXを用いて文書を作成するにあたって,必要なパッケージや,よく使う命令をプリアンブル(\begin{document}の前)に記述することとなります。私が教員になったばかりの頃のプリアンブルは

\documentclass[11pt,b5paper,papersize,uplatex]{jsarticle}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{indentfirst}
\usepackage{mathrsfs}
\usepackage{ulem}
\usepackage{amscd}
\usepackage{fancyhdr}
\usepackage{lastpage}
\usepackage{eclbkbox}
\usepackage{theorem}
\makeatletter
\gdef\th@breakindent{\normalfont\itshape
\def\@begintheorem##1##2{%
\item[\hskip\labelsep \theorem@headerfont ##1\ ##2]\quad\newline\indent}%
\def\@opargbegintheorem##1##2##3{%
\item[\hskip\labelsep \theorem@headerfont ##1\ ##2\ \, \textmd{(##3)}]\quad\newline\indent}}%
%\item[\hskip\labelsep \theorem@headerfont ##1\ ##2\ (##3)]\quad\newline\indent}}%
\makeatother
\theoremstyle{breakindent}
\theorembodyfont{\normalfont}
\newtheorem{dfn}{Definition}[subsection]
\newtheorem{thm}[dfn]{Theorem}
\newtheorem{prop}[dfn]{Proposition}
\newtheorem{lem}[dfn]{Lemma}
\newtheorem{cor}[dfn]{Corollary}
\newtheorem{rem}[dfn]{Remark}
\newtheorem{eg}[dfn]{e.g}
\makeatletter
\gdef\th@breakindentproof{\normalfont\itshape
\def\@begintheorem##1##2{%
\item[\hskip\labelsep ##1\ ##2]\quad\newline\indent}%
\def\@opargbegintheorem##1##2##3{%
\item[\hskip\labelsep ##1\ ##2\ \, (##3)]\quad\newline\indent}}%
\makeatother
\theoremstyle{breakindentproof}
\newtheorem{pf}{Proof.}
\renewcommand{\thepf}{}
\newtheorem{welldef}{Well-definedness.}
\renewcommand{\thewelldef}{}
\newtheorem{view}{Point of View.}
\renewcommand{\theview}{}
\newtheorem{ans}{Answer.}
\renewcommand{\theans}{}
\newtheorem{note}{Note.}
\renewcommand{\thenote}{}
\renewcommand{\thesubsection}{\arabic{subsection}}
\usepackage{enumitem}
\numberwithin{equation}{section}
\renewcommand{\labelenumi}{(\arabic{enumi})}
\newcommand{\QED}{\textbf{Q.E.D.}}
\newcommand{\set}[1]{\left\{ \, #1\, \right\} }
\newcommand{\setcolon}{\, ;\, }
\setlength{\textheight}{\paperheight}
\setlength{\topmargin}{4.6truemm}
\addtolength{\topmargin}{-\headheight}
\addtolength{\topmargin}{-\headsep}
\addtolength{\textheight}{-60truemm}
\setlength{\textwidth}{\paperwidth}
\setlength{\oddsidemargin}{-0.4truemm}
\setlength{\evensidemargin}{-0.4truemm}
\addtolength{\textwidth}{-50truemm}
\pagestyle{fancy}
\lhead{タイトル}
%\chead{\title}
\rhead{\thepage{}/{}\pageref{LastPage}}
\cfoot{}
とこんな具合でした(実際にはコメント行あり)。パッケージの読み込み・定理環境のカスタマイズ・余白の設定などをしています。自分なりに理解して書いた部分と検索して得られたものをコピーした部分が入り交じり,それなりの長さです。これを,LaTeX文書を書くたびに毎回コピーアンドペーストしていました。 一方現在は,当時よりもはるかに使用しているパッケージも増え,独自の命令も増えているにもかかわらず,プリアンブルは
\documentclass[11pt,b5j,twoside,fleqn,papersize,dvipdfmx,uplatex]{jsarticle}
\usepackage{jphsbase20171205}
\usepackage{jphshand20171205}
\jphstitle{タイトル}
のみです。プリアンブルが長いと,.texファイルが読みづらくなるばかりか,置換などを行う場合にも思わぬ箇所に影響が及びます。この短いプリアンブルを実現してくれるのが「自分専用パッケージ」です

「自分専用パッケージ」とは,もともと書いていたプリアンブルを単純に外部の.styファイルにそのまま押し付けたものです。たったそれだけですが,プリアンブルはとてもシンプルになります。WWW上で公開されている殆どのパッケージは,何らかの新たな機能を提供するためのものですから,パッケージを作るというと難しく聞こえたかもしれません。しかし,本稿における「自分専用パッケージ」は,LaTeXの文書を作成することのできた人であれば,誰にでも作れます。ご安心ください。

Back to Contents

お手軽「自分専用パッケージ」の作り方 (1)

パッケージの作り方については,TeX Wikiにも解説がありますが,この記事は新たな機能を提供するパッケージを想定しているように思われます。今回はそうではなく,ただプリアンブルを短くする目的のみですので,極めて単純です。作り方は以下です。

  1. プリアンブルが長くなってしまった.texファイルを開きます。
  2. 「名前をつけて保存」します。その際,ファイル名を「mypreamble20171205.sty」とします(名前は自由ですが,日付を入れる意味は後程述べます)。拡張子が.styになってくれない場合,生成された「mypreamble20171205.sty.tex」から「.tex」を削除し,拡張子を.styに変更してください。なおTeXWorksでは,保存形式のプルダウンメニューから,「スタイルファイル(*.sty)」を選ぶことができます。
  3. 改めて「mypreamble20171205.sty」を開き,1行目すなわち
    \documentclass[...]{...}
    と,
    \begin{document}
    以降の行(\begin{document}を含む)をすべて削除し,上書き保存します。 ただし,\title\author\dateを使用している場合は,その部分も消してください。

これで「自分専用パッケージ」は完成です。お手軽でしたね。早速,「自分専用パッケージ」を使ってみましょう。

  1. 先程の.texファイル(心配ならばコピー)を開きます。
  2. 1行目すなわち
    \documentclass[...]{...}
    を残して,2行目から
    \begin{document}
    の直前までを削除します。ただし,\title\author\dateを使用している場合は,その部分は消さずに残してください。要するに,先程消した部分と残した部分を逆にします。
  3. 2行目に
    \usepackage{mypreamble20171205}
    と書き加えます。

「mypreamble20171205.sty」を.texファイルと同じフォルダに置き,コンパイルしてみてください。これまでと同じ出力が得られたことでしょう。

さて,このままでは,毎度.texファイルと同じフォルダに「mypreamble20171205.sty」を置き続けなければなりません。最後に,TeXがよく分かる場所に「mypreamble20171205.sty」を置き,それを使ってもらうことにしましょう。TeX Wikiの解説が参考になります。蛇足ながら,私の環境(Windows 10,TeX Live 2017)の例を挙げておきます。環境により異なりますのでご注意ください。

  1. まず,フォルダ
    C:\texlive\texmf-local\tex\latex
    を開きます(2017などに入れてしまうと,TeX Liveを更新したときに引き継いでくれません)。
  2. mypreambleという名前のフォルダを作ります。
  3. mypreambleフォルダの中に「mypreamble20171205.sty」を置きます。
  4. コマンドプロンプト(管理者)を起動します(Windows 10の場合,スタートメニュを右クリックすると出てきます)。
  5. コマンドプロンプトに
    mktexlsr
    と打ち込みenterキーを押します。
  6. しばらく待つと
    Done.
    と表示されます。終わりです。

これで,以後プリアンブルには

\documentclass[...]{...}
\usepackage{mypreamble20171205}
のみ(と必要に応じて\title\author\date)を書けば済むこととなり,長いプリアンブルからは解放されました。快適なプリアンブルで素敵なLaTeXライフをお過ごしください!

Back to Contents

お手軽「自分専用パッケージ」の作り方 (2)

さて,私はしばらくの間,直前で述べたような「自分専用パッケージ」で満足していました。しかし,講義資料の体裁をより自分好みにしようと奮闘するうち,「自分専用パッケージ」の完成度がアレであることに気付きはじめました。結局,使う中で不満な点を見つけては勉強(検索ないし試行錯誤)し,また次に使うときに……を繰り返し,「自分専用パッケージ」は成長してゆきます。個人的な好みや使いたいマクロの内容は省き,一般的に起きるであろう問題に絞って振り返ると,

といった修正を繰り返しています。ここで,組版結果に影響を与えるような修正を加えたり,マクロ名を変更したりすると,過去の文書をコンパイルできなくなって(または仕上がりが変わって)しまいます。そこで,修正した.styファイルには新しく「mypreamble20171206.sty」と名前を付けておくと混乱が防げます(TeXの分かる場所に置き,mktexlsrしておきましょう)。新たな機能を提供するパッケージでは,大がかりな修正を安易に行うと混乱を招く可能性がありますが,「自分専用パッケージ」なのですから,気楽に考えましょう。

パッケージをアレな完成度から素敵な完成度にするにはまだまだ遠い道程に思われます。私の「自分専用パッケージ」(jphsmathパッケージ)には色々とアレな点が残っています。致命的な点だけでも

といった具合です。当然,細かな修正点は枚挙に暇がありません。それでも,完璧でないからと足踏みしていても仕方がありません。応急処置を施しながら使い,今後も少しずつ手を入れて,より良いものにしたいと考えています。しかし,これ以上のことは本稿の趣旨を外れますので立ち入りません。WWW上の各種情報や,既にある有名なパッケージの中身を眺めて勉強することになるでしょう。興味の湧いた方がいらしたら,互いに頑張りましょう。

Back to Contents

深淵への誘い

「自分専用パッケージ」の完成度向上を目指したり,好みの組版結果を追求したりしているうちに,楽しくなってきます。.texファイル作成の手間が少なく済むようにマクロを工夫したり,保守性を高めたり,既存のパッケージにはないマクロを色々と組み込んだりしはじめます。実装しようとしてはエラー,検索,試行錯誤……を繰り返すうちに,少しずつ理解できる部分が増えてゆきます。こうなると,私にとっては講義資料を作るための作業であったはずの「自分専用パッケージ」が,趣味の様相を呈してきます。組版結果はもちろん,内部の書き方にもこだわりはじめます。そして,折角だから誰か一人でも役に立てば,という気持ちが湧きはじめ,「自分専用パッケージ」だったもの(jphsmathパッケージ)を公開してしまうようになります。このパッケージは,高等学校数学科教員向けに,講義資料・定期試験においてよく使いそうな体裁をまとめたものです。もとが「自分専用パッケージ」ですから,依存しているスタイルファイルが極めて多く,褒められたものではありませんが,高校数学の講義資料をLaTeXで作る仲間を増やしたい気持ちで公開しています。現在はまだ程度の低いものですが,少しずつ改善してゆきたいと考えています。

最終的にどの点に着地するかは人それぞれですが,兎も角お手軽「自分専用パッケージ」を利用して,快適なLaTeXライフをお過ごしください。

Back to Contents

謝辞

本稿は,TeX & LaTeX Advent Calendar 2017に参加してみようという好奇心によって書きあげました。「とっておき」という言葉の意味については考えないこととします。重点テーマは「TeXでつくるアレ」ですが,「TeXでつくるアレな完成度のパッケージ(ただし,自分使いならこれくらいでもいいのではないか)」で回収とさせてください。主宰のzr_tex8r氏に深く感謝申しあげます。また,公開されている多数の記事に(許可も得ず)リンクをしています。有益な記事を公開なさっているみなさまに,厚くお礼申しあげます。 そして,本稿をお読みいただきましたみなさま,誠にありがとうございました。

(Ins: 2017-12-09)投稿ののち,いくつかの大変有益なコメントを頂戴いたしました。具体的には

などをご参照ください。これらをもとに,自作パッケージを改めて作り直してみようと考えています。たとえば,
  • 基本的な表記の体裁に関する部分とemathに依存した図形描画の部分を分割する。とくに,依存パッケージが多い部分を切り離し,読み込むか否かを選択可能にする。
  • 体裁が異なるごとに新たな名称のマクロを用意していたが,代わりにスイッチで切り替える方式を導入する。
  • バージョン管理について学んだうえで,適切な方式を選択する。
などを検討しています。

(Ins: 2018-06-18)2018-/02-26版より,パッケージの分割とスイッチによる切り替えを試みています。

Top of Page