コンテンツへスキップ
Topos Uranos

文書の構造:まとめと挑戦課題

要約

この課は、文書の構造を扱う本講座の第三単元を締めくくる。文書クラスから自前のプリアンブルへと至る決定と仕組みの連鎖を組み立て直し、各環でどの原理が使われ、それがどの課で確立されるかを示す。達成したことを講座の計画に照らして位置づけ、予告しただけで後の単元に残る問題を明らかにする。終了テストでは開始テストの技能を繰り返す。そして各課の問題より難しい六つの挑戦課題で終わる。そこでは複数の課を組み合わせて、規程から学位論文を設計すること、一冊の本の番号と参照を予測すること、複数のファイルに分けた文書のうち、失敗する文書や嘘をつく文書を診断することが求められる。

学習目標

  1. 単元の決定と仕組みの順序を組み立て直し、それぞれが拠って立つ原理を特定する。
  2. 番号、目次、参照、部分コンパイルが補助ファイルにどう依存するかを説明する。
  3. 単元が確立したことと、予告しただけで後の単元が展開することとを区別する。
  4. 複数のファイルに分けた文書のうち、失敗する文書や偽の番号のままコンパイルされる文書を診断し、修正の順序を決める。
  5. 学位論文が満たすべき規程から、そのクラス、ページ、構成、参照、ファイルを設計する。

単元で達成したこと

この単元は、文書に、あらゆる変更を経ても番号、目次、参照が正しいままであるような構造を与えることを目指した。その目的は、導入がそれまでの単元から既知とした事柄に支えられて果たされた。コンパイルのパス、プリアンブルと本文の区分、そして論理的なマークアップである。こうして、たどってきた道は五つの区間からなる一本の連鎖として読める。

文書クラスとページ

文書クラスとページの回は、どの見出しがあるか、\maketitle が何をするか、概要があるか、偶数ページと奇数ページを区別するかをクラスが決めることを確立した。そこから、構成と印刷のしかたによって article、report、book のどれを選ぶかの基準を導き、KOMA-Script のクラスを、これらの例の TeX Live の版でスペイン語と組み合わせるときに必要なオプション es-noquoting とともに紹介した。クラスのオプションを順に見て、余白がなぜ行の長さに左右されるのか、geometry でどう決めるのかを説明し、最後に、クラスの一部の命令が自分から押しつけるページスタイルを扱った。

見出し、目次、付録

見出し、目次、付録の回は、表題の情報と概要を組み、見出しのレベルを整理し、互いに独立した二つのカウンタ secnumdepth と tocdepth が、何に番号を付け何を目次に載せるかを決めることを確立した。目次は前のパスが書き留めたもので組まれ、古くなっても警告しないこと、\appendix はその後に続くものの番号付けを変えること、本には三つの部分があって二通りのページ番号をもち、その順序はどうでもよいものではないことを説明した。

相互参照

相互参照の回は、あらゆる参照が依存する原理を確立した。ラベルは、自分より前に、自分のいる環境の中で最後に割り当てられた番号を記録する。そこから、各要素でラベルをどこに置くか、図のキャプションより前のラベルがなぜ節を指すのか、番号のない節にはなぜ参照すべき自分の番号がないのかを導いた。変更の後に一回だけコンパイルすると、前の番号がいかにも正しそうな姿で印刷されることを示し、パッケージの最後に読み込むべき hyperref と、その後に置く cleveref を紹介した。cleveref は、\crefformat や \crefname が日本語の名称を与えるまでは英語の名称を書く。

長い文書

長い文書の回は、一つの文書を親ファイルとプリアンブルのない部品とに分けた。文字どおりの置き換えである \input と、ページを改め、自分の補助ファイルを書き、\includeonly を受け付ける \include とを区別した。\includeonly の番号は、それ以前の完全なコンパイルの補助ファイルに依存する。パスは親ファイルのフォルダから書くこと、Texmaker ではマスター文書を設定することを確立し、分割した文書に特有のエラーを見ていった。その中には静かなものが二つある。\include が見つけられない部品と、プリアンブルをもつ部品で、後者の \end{document} は論文をそこで終わらせてしまう。

マクロと自前のプリアンブル

マクロと自前のプリアンブルの回は、論理的なマークアップを方法にまで高めた。引数とオプション引数をとる \newcommand、使用中の名前の再定義を防ぐ保護、引数のない命令の後で失われる空白、\NewDocumentCommand、引数が開始部分にしか存在しない自前の環境、そしてファイルやパッケージに移したプリアンブルである。このプリアンブルは、クラス、言語、hyperref の位置を押しつけてはならない。

次の図は、五つの区間を一本の連鎖にまとめたものである。列の各節点は決定か仕組みで、互いによりかかる順に番号が付き、用いる前の環と弧で結ばれている。そのまわりに浮かぶのが支え、すなわち連鎖が何度も立ち返る原理であり、それぞれはよりかかる環と実線で、確立される環と点線で結ばれる。ただし前の単元で確立されたものは輪として描かれる。支えを押すと、それを使うすべての環が強調され、各環はそれを学ぶ課へのリンクになっている。

鎖の支え

  • Aパス. 組版エンジンは、あるパスで番号、見出し、ページを補助ファイルに書き留め、次のパスでそれを使う。第一単元で確立される。 この単元では証明なしに認める。
  • Bプリアンブルと本文. プリアンブルは設定とパッケージの読み込みを行い、本文は組版する。定義や保存をするだけのものはどちらに置いてもよい。第一単元で確立される。 この単元では証明なしに認める。
  • C内容と形. 著者は各要素が何であるかを宣言し、別の場所でなされた決定がその見た目を決める。前の単元で確立される。 この単元では証明なしに認める。
  • Dクラスが決める. 文書クラスは、どの見出しがあるか、表題が何を組むか、概要があるか、ページがどう配分されるか、その命令がどのスタイルを押しつけるかを決める。 確立される環: 1. 三つの標準クラス.
  • Eラベルが記録するもの. ラベルは、自分より前に、自分のいる環境の中で最後に割り当てられた番号を記録する。何に付いているかは知らない。 確立される環: 11. ラベルと参照.
  • F読み込みの順序. パッケージは読まれた順に読み込まれ、後のものは前のものがしたことを取り消しうる。hyperref は最後に、cleveref はその後に置く。 確立される環: 13. リンク.
  • G親ファイル. コンパイルするのはつねに親ファイルである。部品はその本文の断片でプリアンブルをもたず、そのパスは親ファイルのフォルダから書く。 確立される環: 16. include 命令.
  1. 第 1 区間 文書クラスとページ

    • 文書の構成と印刷のしかたからクラスを選ぶ。
    • クラスのオプションを宣言し、その効果を予測する。
    • 行を長くしすぎずに geometry で余白を決める。
    • ページスタイル、ヘッダ、フッタを予測し、変更する。
    1. 三つの標準クラス. article には章がない。report には章があり、表題と概要は独立したページに置かれる。book は両面に印刷し、概要をもたない。

      支え: B (プリアンブルと本文). 証明される授業: ドキュメントクラスとページ.

    2. KOMA-Script. scrartcl、scrreprt、scrbook は標準クラスにヨーロッパ流の決定を加えたものに当たる。スペイン語の babel と組み合わせると、この版ではオプション es-noquoting が必要になる。

      使う結果: 1. 三つの標準クラス. 支え: C (内容と形). 証明される授業: ドキュメントクラスとページ.

    3. クラスのオプション. 用紙、文字サイズ、片面か両面か、タイトルページ、章の始まり、草稿モードは一行目で宣言する。

      使う結果: 1. 三つの標準クラス. 支え: D (クラスが決める). 証明される授業: ドキュメントクラスとページ.

    4. 余白. geometry はわずかな寸法からページを計算する。版面の幅が行の長さを決め、それこそが読者の負担になる。

      使う結果: 3. クラスのオプション. 支え: B (プリアンブルと本文). 証明される授業: ドキュメントクラスとページ.

    5. ページスタイル. スタイルはヘッダとフッタを決める。\maketitle と \chapter は自分のページに plain スタイルを押しつけ、fancyhdr や scrlayer-scrpage は独自のスタイルを組み立てる。

      使う結果: 1. 三つの標準クラス, 4. 余白. 支え: D (クラスが決める). 証明される授業: ドキュメントクラスとページ.

  2. 第 2 区間 見出し、目次、付録

    • クラスに応じて表題と概要を組む。
    • 見出しのレベルを選び、番号と目次を予測する。
    • どのパスに依存するかを知ったうえで、目次と一覧を作る。
    • 付録と本の各部分を順序立てる。
    1. 表題と概要. \title、\author、\date は保存し、\maketitle が組む。abstract 環境は article と report にあり、book にはない。

      使う結果: 1. 三つの標準クラス. 支え: D (クラスが決める), B (プリアンブルと本文). 証明される授業: 見出し、目次、付録.

    2. 見出しのレベル. 部から小段落までの七つのレベルがある。章は report と book にしかなく、階層は見出しの大きさで選ぶものではない。

      使う結果: 1. 三つの標準クラス. 支え: D (クラスが決める). 証明される授業: 見出し、目次、付録.

    3. 番号と目次. secnumdepth はどのレベルに番号を付けるかを、tocdepth はどのレベルを目次に載せるかを決める。星付きの形は番号を付けず、番号を消費もしない。

      使う結果: 7. 見出しのレベル. 支え: C (内容と形). 証明される授業: 見出し、目次、付録.

    4. 目次と一覧. 目次は、前のパスが .toc ファイルに書き留めたものを組み、古くなっても警告しない。

      使う結果: 7. 見出しのレベル, 8. 番号と目次. 支え: A (パス). 証明される授業: 見出し、目次、付録.

    5. 付録と本の各部分. \appendix はその後に続くものの番号付けを変える。book では前付け、本文、後付けが二通りのページ番号をもち、付録は \backmatter の前に置く。

      使う結果: 7. 見出しのレベル, 5. ページスタイル. 支え: D (クラスが決める). 証明される授業: 見出し、目次、付録.

  3. 第 3 区間 相互参照

    • ラベルを置き、名前を付ける。
    • 一回または二回のパスの後に参照が何を印刷するかを予見する。
    • hyperref と cleveref を正しい順序で読み込む。
    • 名称と番号で、あるいは見出しで参照する。
    1. ラベルと参照. \label は場所に印を付け、\ref と \pageref はその番号とページを書く。二回のパスが要る。

      使う結果: 7. 見出しのレベル. 支え: A (パス). 証明される授業: 相互参照.

    2. ラベルの置き場所. 番号を割り当てる命令の後、同じ環境の中に置く。\section の後、\caption の後である。何を指すかを示す接頭辞を付ける。

      使う結果: 11. ラベルと参照. 支え: E (ラベルが記録するもの). 証明される授業: 相互参照.

    3. リンク. hyperref は参照、目次、脚注をリンクに、節をしおりに変え、パッケージの最後に読み込む。

      使う結果: 11. ラベルと参照, 9. 目次と一覧. 支え: B (プリアンブルと本文). 証明される授業: 相互参照.

    4. 名称付きの参照. cleveref は名称と番号を書く。日本語の名称がなければ英語の名称(「section」)を書き、日本語の名称は \crefformat や \crefname で設定する。nameref は見出しで参照する。

      使う結果: 13. リンク, 12. ラベルの置き場所. 支え: E (ラベルが記録するもの), F (読み込みの順序). 証明される授業: 相互参照.

  4. 第 4 区間 長い文書

    • 部品ごとに \input と \include のどちらを使うかを選ぶ。
    • \includeonly が何を保つかを予測する。
    • フォルダを整理し、マスター文書を設定する。
    • 分割した文書の、騒がしいエラーと静かなエラーを見分ける。
    1. input 命令. \input は、ファイルの本文がその場所に書かれているかのように挿入し、ページを改めず、補助ファイルも作らない。

      支え: B (プリアンブルと本文). 証明される授業: 長い文書.

    2. include 命令. \include は前後でページを改め、部品ごとに自分の補助ファイルを書き、入れ子にできない。

      使う結果: 15. input 命令, 7. 見出しのレベル. 支え: A (パス). 証明される授業: 長い文書.

    3. 部分コンパイル. \includeonly は選んだ部品だけを組み、ほかの部品はその補助ファイルで番号を付ける。その補助ファイルは、部品の最後の変更より後の完全なコンパイルから来たものでなければならない。

      使う結果: 16. include 命令, 11. ラベルと参照. 支え: A (パス). 証明される授業: 長い文書.

    4. フォルダとマスター文書. 親ファイルは最上位に、部品はフォルダに置き、パスは親ファイルから書き、名前は簡潔にし、Texmaker では親ファイルをマスター文書にする。

      使う結果: 16. include 命令. 支え: G (親ファイル). 証明される授業: 長い文書.

    5. 分割した文書のエラー. ファイルのない \input はコンパイルを止める。ファイルのない \include は「No file」と記録するだけである。プリアンブルをもつ部品は、その \end{document} で論文を終わらせる。

      使う結果: 16. include 命令, 18. フォルダとマスター文書. 支え: G (親ファイル), B (プリアンブルと本文). 証明される授業: 長い文書.

  5. 第 5 区間 マクロと自前のプリアンブル

    • 引数と一つのオプション引数をとる命令を定義する。
    • 定義、再定義、条件付き定義を区別し、失われる空白を避ける。
    • 自前の環境を定義する。
    • プリアンブルをファイルやパッケージにまとめる。
    1. 自前の命令. \newcommand は最大九つの引数をとる命令を定義し、最初の引数を既定値つきのオプション引数にできる。繰り返し現れる機能に名前を与える。

      支え: C (内容と形). 証明される授業: マクロと自前のプリアンブル.

    2. 使用中の名前と空白. \newcommand は既存の名前を、\renewcommand は存在しない名前を拒む。引数のない命令は後に続く空白を飲み込む。

      使う結果: 20. 自前の命令. 支え: B (プリアンブルと本文). 証明される授業: マクロと自前のプリアンブル.

    3. 自前の環境. \newenvironment は開始と終了を定義する。その引数は開始部分にしか存在せず、\NewDocumentEnvironment は終了部分でも引数を受け付ける。

      使う結果: 20. 自前の命令. 支え: C (内容と形). 証明される授業: マクロと自前のプリアンブル.

    4. 自前のプリアンブル. プリアンブルは、\input で読むファイルか .sty パッケージに移す。パッケージはクラス、言語、hyperref の位置を押しつけない。

      使う結果: 20. 自前の命令, 21. 使用中の名前と空白, 15. input 命令, 13. リンク. 支え: F (読み込みの順序), C (内容と形). 証明される授業: マクロと自前のプリアンブル.

数学へ. 連鎖は、構造が完成し、それを満たすことだけが残ったところで止まる。番号付きの数式と定理は、この単元のラベルで参照されることになり、次の単元の主題である。