要約
この課は、文書の構造を扱う本講座の第三単元の始まりである。単元が何のためにあるかを説明する。すなわち、前の単元で整えた本文から、固有の骨組みをもつ長い文書へ進むことである。その文書では各部分が番号をもち、目次に並び、互いに参照し合い、複数のファイルに分けられる。さらに、単元の五つの課と、ドキュメントクラスとページから自前のプリアンブルまでそれらを貫く筋道を示し、それまでの単元から何を前提とするかを明らかにし、学術文書の形がどこから来たかを振り返る。そして単元が解決する問題、すなわち参照と番号を手で書いた文書は変更されたとたんに嘘をつき始めるという問題を立て、この骨組みが物理学の学位論文にも歴史学の学位論文にも同じように役立つことを示す。
学習目標
- 単元の内容の順序を述べ、各課が次の課に何をもたらすかを説明する。
- 単元がそれまでの単元から前提としていることを見分け、必要なら復習する。
- 内部の参照を手で書かない理由を、例を用いて説明する。
- さまざまな分野の学術的なジャンルのうちに、単元が組み方を教える構造を見いだす。
開始テスト
単元に取りかかる前に、出発点を測っておくとよい。このテストは自己評価であり、採点はされず、学習の方向づけだけを目的とする。最初の二問は、単元がそれまでの単元から前提としていることを復習する。続く十問は、二問ずつ順に、単元の五つの課を扱う。長い文書を組んだことのない人は、正解できなくてもかまわない。どの答えも、正しくても誤っていても、要点を説明し、それを扱う課の名を示す。同じ技能は、最後のまとめの課で改めて測る。
単元を始める前に、自分の出発点を測りましょう。短い自己評価です。採点はされず、結果はあなたのブラウザーにだけ保存されます。
問 1前の単元から文書を初めてコンパイルしたあと、
\refで書いた参照が二つの疑問符として表示され、ログはもう一度コンパイルするよう求めている。何が起きているのか。そういうこともあるが、その場合は再びコンパイルしても未定義参照の警告が残る。ここでログが求めているのは、まさにもう一回のパスである。\refと\labelは LaTeX の核に属しており、パッケージは要らない。削除しても何も進まない。次のパスがそれを書き直し、参照はさらにもう一回のパスを待つことになる。エンジンはソースを一度しか読まない。あるパスで.auxファイルに書いたことは、次のパスの始めに読む。だから参照と目次には少なくとも二回のパスが要る。復習: コンパイルとエラーの修正
問 2前の単元からあるエッセイは、作品名を毎回『』で囲んで手で書くかわりに、プリアンブルで
\newcommand{\sakuhin}[1]{『#1』}と定義した\sakuhin{…}で示している。何が得られるか。いまの結果は似ている。得になるのは、規程が変わって書名をほかの表記と区別しなければならなくなったときである。速度はほとんど変わらない。利点は保守のしやすさにあり、性能にはない。定義のどこにも書名を目次に入れるものはない。定義は見た目を決めるだけである。命令は機能、つまり作品名を名指し、その定義が見た目を決める。これが論理的なマークアップであり、この単元では自前のプリアンブルによってそれを方法に変える。復習: 意味のある書式
問 3ある学生が
\documentclass{article}で学位論文を書き、本文を\chapter{…}で区切った。コンパイルすると何が起きるか。クラスは知らない階層を置き換えはしない。その命令はクラスの中に存在しない。階層はクラスによって決まる。だからクラスの選択が構造についての最初の決定になる。未知の命令はエラーを起こす。エンジンはそれを黙って無視したりしない。各クラスは自分の見出しの階層を定義する。reportとbookには\chapterがあり、articleは\sectionから始まる。章立ての学位論文は、章をもつクラスで書く。復習: ドキュメントクラスとページ
問 4ある大学は A4 用紙で 2.5 センチメートルの余白を求めている。それを設定する適切な方法はどれか。
a4paperは用紙の大きさを選ぶだけである。余白はクラスが自分の比率に従って決め、大学の規程には従わない。それは余白を変えるのではなく本文をずらすだけであり、改行で生じた行頭の\hspaceは消える。しかも本文中の視覚的なマークアップになる。文字の大きさはページの余白を変えない。geometry はいくつかの寸法からページのすべての寸法を計算するので、寸法は一度だけ宣言され、互いに整合する。復習: ドキュメントクラスとページ
問 5
articleクラスの文書で、\tableofcontentsの前に\setcounter{tocdepth}{1}と書いた。目次には何が表示されるか。この数は最大の深さであって、単一の階層ではない。第 1 階層まで、つまり節が入る。目次が空になるのは、パスの仕組みのために最初のコンパイルのときだけである。tocdepthが目次を空にするわけではない。番号付けは別のカウンタsecnumdepthが決める。tocdepthは目次に何が入るかを決めるだけである。tocdepthは目次に入る最も深い階層を決める。articleでは節が第 1 階層、小節が第 2 階層である。小節は本文では引き続き番号をもち、目次から消えるだけである。復習: 見出し、目次、付録
問 6
articleクラスの文書で、命令\appendixのあとに\sectionを二つ書いた。どのように番号がつくか。\appendixはまさに番号付けを変えるためにある。それがなければ、付録は節が増えただけのものになる。付録には文字による番号がつき、目次にも入る。基本クラスでは、付録の番号に大文字のアルファベットを使う。\appendixは節の番号をふり直し、大文字のアルファベットに切り替える。reportとbookでは章について同じことをする。復習: 見出し、目次、付録
問 7ある著者が、第 2 節にあたる
\section{方法}の前の行に\label{sec:methods}と書いた。\ref{sec:methods}はどの番号を印字するか。ソースの中で近いだけでは足りない。効くのは順序である。前に書かれたラベルには、第 2 節の番号は見えない。ラベルは存在し、記録される。二回目のパスのあとには番号を印字する。ただし望んだ番号ではない。エラーにはならない。ラベルは見出しのあとに書き、中にも前にも書かない。\labelは自分のあとに来るものを知らない。自分より前に最後に割り当てられた番号、ここでは第 1 節の番号を保存する。だから\section{…}の直後に書く。復習: 相互参照
問 8hyperref パッケージを読み込むと、文書の何が変わるか。
番号付けは変わらない。hyperref はそれをリンクに変える。パスはやはり必要である。リンクも補助ファイルの同じデータに頼っている。見出し語を決めるのは言語の設定(babel やクラス)である。hyperref はそれに手を触れない。hyperref は番号も本文も変えない。加えるのは移動の手段である。だから、動作を変える相手であるほとんどすべてのパッケージのあと、プリアンブルの終わり近くで読み込む。復習: 相互参照
問 9学位論文の親ファイルで、
\include{chapter1}と\input{chapter1}は何が違うか。改ページ、補助ファイル、一部だけをコンパイルできるかどうかが違う。\inputはどんなファイルでも受けつける。プリアンブルでも本文でもよい。どちらもファイルを書き換えない。どちらもコンパイル時にファイルを読む。\includeは章のために作られている。ページを改め、部分ごとに専用の補助ファイルをもち、選択を許す。\inputはどんな断片にも使え、段落の中やプリアンブルの中でも使える。復習: 長い文書
問 10ある学位論文のプリアンブルに
\includeonly{chapter3}があり、本文は五つの章を\includeで取り込んでいる。論文が以前に全体としてコンパイル済みなら、このコンパイルは何を生むか。\includeonlyはどの章を組むかを決める。残りの章は PDF に現れない。ほかの\includeを消せばそうなる。\includeonlyでは番号は保たれる。ほかのファイルはそのまま元の場所にある。組まれないだけである。LaTeX は除外された各章について、その章の最後のコンパイルが残した補助ファイルを読む。そのため番号は文書全体の番号のままである。復習: 長い文書
問 11プリアンブルに
\newcommand{\emph}[1]{\textbf{#1}}がある。何が起きるか。それは\renewcommandのすることである。\newcommandは定義し直しを拒む。一つの名前は一つの命令しか指さない。同じ名前の命令が二つ共存することはできない。定義はプリアンブルで実行され、拒まれた定義はエラーになる。この保護は、LaTeX やパッケージの命令をうっかり置き換えるのを防ぐ。本当に定義し直したいときは、何を失うかを承知のうえで\renewcommandを使う。復習: マクロと自前のプリアンブル
問 12プリアンブルに
\newcommand{\ryou}[2]{#1~#2}があるとき、\ryou{5}{km}は何を印字するか。#1は最初に書かれた引数、つまり 5 であり、定義でも先に来る。チルダは予約文字である。定義の中では分割できない空白として働き、印字されない。\newcommandは#1から#9まで、九つまでの引数をとれる。[2]は二つの引数を宣言し、#1と#2がそれを順に受け取る。数とその単位で、チルダでつながれる。この命令は機能を名指し、チルダを書き忘れないことを保証する。復習: マクロと自前のプリアンブル
コンテンツを読み込んでいます…