TeX & LaTeX Advent Calendar 2012

この記事は、TeX & LaTeX Advent Calendar 2012 の 第 11 日目 のために書いたものです。

12/10 の担当者は naoya_t さん で、12/12 の担当者は…どなたでしょう? 。

→ 12/12 の担当者は Nyoho さん です (「※初心者大歓迎。 いやマジで。」 という ZR さんの言葉を真に受けたのは、実際には私くらいだと思いますけど)[Added: Dec 13, 2012]

■ はじめに

私は私立文系の万年初級ユーザーで、しかもプログラミングのプの字も知らない人間なので、他のみなさんのような、「TeX でプログラミング」 みたいなカッコイイお話は書けません。そこで、質よりも量で臨むことにして、初級ユーザー向けのトピックを 2 つ用意しました (と言っても、どちらも随分前に TeX Q & A で触れたことがあるものです.成長しないなぁ>自分)。あと、頑張って 「ネタ」 っぽいものも一つ考えてみました。

0. が一応ネタです。それから、I. が、classicthesis パッケージを例にして、複数の既存のパッケージをひとつのパッケージにまとめる初級的一方法の紹介で、そして、II. が、doc パッケージのコマンドインデックスを作る機能の解説です。

Since: December 10, 2012.


0. Docstrip の log ファイルで…

というわけで、まずはネタから:

という 2 つのファイルをダウンロードしていただいて、いずれも rename して末尾の “.txt” を取り除いてください (お手数をお掛けして恐縮ですが、dtxins という拡張子だと geocities にアップロード出来ず、別名でアップ後に拡張子を変更しようとしてもそれもダメだったので、仕方なく後ろに txt を付けました. zip にまとめたものも置いておきますので、rename が面倒な場合には こちら をダウンロードしてください)

それで、ins ファイルのほうを、texlatex で処理してください。出オチというか瞬間芸というか、ただ、それだけのものです。

dtx ファイルは、拡張子を dtx にしていますが、中にドキュメントは一切ありませんし、こちらをタイプセットしてしまいますと、ネタである Docstrip の log が上書きされてしまいますので、もしもタイプセットをされたい場合には、dtx ではなく、ins の結果出来る “Merry.TeXmas” というファイルのほうをタイプセットしてください。中味は dtx と同じものです。

dtx の中味自体は何でもよかったので、最初は単に “\LaTeXe” を延々並べていたのですけれど、それもつまらないかと思って少し手を加えてみましたが、飽くまでネタは Docstrip の log のほうです (念のため私の手元で実行した場合の log も置いておきます.こういう log になる予定なのですが)

ふぅ…。一応義務 (?!) を果たして人心地ついたので、以下、本論 (?) です。いずれも、初級らしさ満載の、泥臭いお話です。


I. 複数のパッケージをまとめてひとつのパッケージにする

必要なマクロを自分でスラスラと書いたりなど出来ない初級の身では、頼りになるのはパッケージですが、既存の複数のパッケージを組み合わせて、それを新たなパッケージとしているようなものがあります (なんか、他人の褌で…という感じがしないでもありませんが)。そういう例として、“classicthesis” というパッケージを挙げることが出来ます。

classicthesis は、listings, hyperref, xcolor, typearea, booktabs, soul, scrpage2, titlesec, tocloft, footmisc 等々といった代表的なパッケージを利用することで、Robert Bringhurst の “The Elements of Typographic Style” っぽい体裁を実現しようというものです (なお、W32TeX には classicthesis は入ってないようです.classicthesis が読み込んでいるパッケージについても、W32TeX には収録されていないものがいくつかあります)

驚くべきことに、classicthesis 自体は、何も新たなマクロを定義したりはしていません (いえ、正確には、ほんのちょっとだけはしてます)。既存のパッケージを読み込んで、そのパッケージの設定をして、また次のパッケージを読み込んで、そのための設定をして…、を繰り返しているだけです。また、パッケージオプションの処理のために、中級以上の方なら滅多に使わないであろう ifthen パッケージを利用している点も、初級者フレンドリーです。これを参考にすると、\newif とかを知らなくても、既存のクラスファイルと既存のパッケージを読み込んだ自分用のクラスファイルでもオプションを受け取れるようにも出来ます。

※ 既存のクラスファイルを下敷きにして自分用のクラスファイルを作る方法については、参照: Jim Hefferon, Minutes in Less Than Hours: Using LaTeX Resources

classictheisis の作者は、「I am tired of seeing so many ugly ones」 とか 「please do not break the beauty of the style by changing these things unless you really know what you are doing」 などとなかなか鼻息が荒いのですが、確かに “The Elements of Typographic Style” がキレイなのを認めるにはやぶさかではありませんが、classicthesis のほうはそれほどでもないようにも思います。ですから、ここで classicthesis を取り上げるのは、classicthesis の利用を薦めるためではなくて、初級的なパッケージの利用例を紹介することが目的です。

うんと単純化すると、classicthesis.sty の中味は、次のようになっています:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{classicthesis}[2012/08/12 v4.1 Typographic style for a classic-looking thesis]

\RequirePackage{ifthen}
   \newboolean{@foo}
   \newboolean{@bar}
   \newboolean{@baz}
   .....
   \newboolean{@zzz}

% ********
% Options
% ********
\DeclareOption{foo}{\setboolean{@foo}{true}}
\DeclareOption{bar}{\setboolean{@bar}{true}}
\DeclareOption{baz}{\setboolean{@baz}{true}}
.....
\DeclareOption{zzz}{\setboolean{@zzz}{true}}
\ProcessOptions\relax

% packageZ-related stuff
\ifthenelse{\boolean{@zzz}}
   {\@ifpackageloaded{packageZ}
       {\relax}
       {\RequirePackage{packageZ}}
   }
   {\relax}

% **************
% For Package A
% **************
\PassOptionsToPackage{options for pckgA}{packageA}
\RequirePackage{packageA}
\ifthenelse{\boolean{@foo}}{true-settings1}{false-settings1 (or \relax)}
\ifthenelse{\boolean{@bar}}{true-settings2}{false-settings2 (or \relax)}

% **************
% For Package B
% **************
\PassOptionsToPackage{options for pckgB}{packageB}
\RequirePackage{packageB}
\ifthenelse{\boolean{@baz}}{true-settings3}{false-settings3 (or \relax)}
\ifthenelse{\boolean{@qux}}{true-settings4}{false-settings4 (or \relax)}
.....

(なんで \RequirePackage のオプション引数を使わずにいちいち \PassOptionsToPackage を使っているのかがちょっと謎ですが)

ここで例えば、

\usepackage[foo]{classicthesis}

とすると、スイッチ (フラグ)@foo” が true にセットされて、packageA 用の設定 “true-settings1” を実行することが出来る、というわけです。“zzz” というオプションの場合は、

\usepackage[zzz]{classicthesis}

とすると、ユーザーが classicthesis よりも前に既に packageZ を読み込んでいたら何もせず、読み込んでいなければ packageZ を読み込む、という指定になっています (“\@ifpackageloaded” はユーザー用コマンドではないですけど、その名前から使い方は分かると思います)

実際のコードについては、classicthesis.sty の中をご覧ください。TeX のプリミティブと LaTeX の内部コマンドで書かれている一般的なパッケージとは違って、classicthesis.sty はほぼ LaTeX のコマンドと各パッケージのユーザーコマンドのみで書かれていますので、初級でも十分理解出来ます \ifthenelse がネストしてたりしてちょっとゴチャゴチャはしてますけど)

※ 逆に言うと、「TeX のプリミティブと LaTeX の内部コマンドで書かれている一般的なパッケージ」 の学習のためにはまったく役に立たないということですが…。

(なお、似たようなものに tufte-latex パッケージというのもあります.ただ、tufte のほうは、最初の頃は classicthesis と同じような単純なものでしたが、バージョンが上がるに連れだんだんと洗練されてきて複雑になってしまったので、中味を覗いて見るという点ではあまり初級向きではなくなってしまいました.)

ところで、いまどきのパッケージは、package.dtx, package.ins, package.pdf, readme というセットで配布されることが多いと思われますが、classicthesis には dtx ファイルがありません。普通は、package.dtx をタイプセットしたものが package.pdf ですが、classicthesis の場合には、本体の classicthesis.sty と、あと、ClassicThesis.pdf というタイプセット例とそのソースが同梱されています。そして、classicthesis.sty の中に、結構いろいろとコメントが書いてあります。

classicthesis.sty の中味を見るには、エディタでそのまま読んでもいいですしワープロで印刷することも出来ますし、また、せっかく LaTeX を使ってるのだからと頑張って listings パッケージを使ってカラフルにタイプセットしたりなんかも可能です。でもここで、doc パッケージを使いますと、コードをタイプセットできるだけでなく、コマンドインデックスを作ることが出来ます。


II. doc パッケージを使ってコマンドインデックスを作る

続いては、「doc パッケージを使うと、コマンドインデックスを作ることが出来て便利!」、という話をしようと思うのですが、その結論だけを書くなら、

\documentclass{article}
\usepackage{doc}
\EnableCrossrefs
\CodelineIndex
\begin{document}
\IndexInput{classicthesis.sty}
\PrintIndex
\end{document}

で済むのですけれど、ここに至るまでの説明が以下、少々長くなります。

なぜ長くなったかと言いますと:

という風に欲張ってしまったせいで、説明量が増えてしまいました。すいません。

□ dtx ファイル一般の話とサンプル

というわけで、まずは、少し一般的な話から。

dtx ファイルを latex で処理するとドキュメント (ユーザーマニュアル+コードの説明) が取り出せて、ins ファイルを texlatex で処理するとパッケージ (コードそのもの) が取り出せる、というのが普通ですよね。

dtx ファイルを書くのに使われているクラスファイルは ltxdoc.cls の場合が多いですが、ltxdoc の内部では doc パッケージが読み込まれています。また、ins ファイルの内部では、docstrip.tex\input されています。

つまり、doc パッケージが提供する枠組みに則って書かれているファイルを doc パッケージを使って処理すると、user manual + documented source code がタイプセット出来ます。また、Docstrip でファイルを処理すると、コメント行を取り去って code のみを取り出すことが出来るという仕組みになっています。

例として、いんちきな dtx ファイルを用意してみました (foobar.dtx.txt):

% \iffalse
%
% --- meta comments ---
%
% \fi
%
% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{foobar}[2012/12/11 v0.0 make me relax]
%
%<*driver>
\ProvidesFile{foobar.drv}[2012/12/11 v0.0 sample dtx n driver]
\documentclass{ltxdoc}
   \DoNotIndex{\def}
   \RecordChanges
   \EnableCrossrefs
   \CodelineIndex
   \GetFileInfo{foobar.drv}
\begin{document}
   \DocInput{foobar.dtx}
   \PrintChanges
   \PrintIndex
\end{document}
%</driver>
% \fi
%
% \CheckSum{3}
%
% \changes{v0.0}{2012/12/11}{sample dtx}
%
% \title{Package \textsf{Foobar}^^A
%    \thanks{This document corresponds to
%            \textsf{Foobar}~\fileversion,
%            dated \filedate.}}
% \author{Creator of Foobar}
% \date{\filedate}
% \maketitle
% \tableofcontents
%
% \section*{Introduction}
% \addcontentsline{toc}{section}{Introduction}
%
% \section{User Manual}
%
% \textit{--- Description of user commands ---}
%
% \DescribeMacro{\usrcmd}
% This control sequence is used to make me relax.
%
% \StopEventually{^^A
%   \begin{thebibliography}{1}
%      \bibitem{LLa94}
%      \textsc{Leslie Lamport}.
%      \newblock \textsc{\LaTeX: A Document Preparation System}.
%      \newblock Addison-Wesley, Reading, Massachusetts, 2nd edition, 1994.
%   \end{thebibliography}
%   }
% 
% \section{Implementation}
%
% \textit{--- Description of the package's codes ---}
%
% \begin{macro}{\usrcmd}
% \changes{v0.0}{2012/12/11}{the one and only macro}
%    \begin{macrocode}
%<*package>
\def\usrcmd{\relax}
%</package>
%    \end{macrocode}
% \end{macro}
%
% \Finale
%
\endinput

ここで、青字の部分がドキュメント (user manual + documented source code) で、赤字の部分がドキュメントをタイプセットして且つコマンドインデックスや変更履歴を作る指示をする部分です (“driver” と呼ばれます)

※ < > で囲まれたタグは、Docstrip 用の指示です。Docstrip は原則として % で始まる行を取り去りますが、% の次にオプションのタグがあると、conditional に処理することが出来ます。例えば、Docstrip に “package” というオプションを指定すると、%<package> の行と、あと %<*package>%</package> に挟まれた部分は残ります。逆に、“package” が指定されていないと、行頭に % がないにも関わらず、%<*package>%</package> に挟まれた部分も取り去られます。この foobar.dtx の場合、行頭に % がなく且つタグにも挟まれていないコードは \endinput だけなので、Docstrip に何もオプションを指定しないと、\endinput しか残りません(!)。

この foobar.dtxlatex で処理する場合には、“%” で始まる行はコメントですし、\end{document} で原稿は終わりとなりますので、latex には最初、赤字の部分しか見えません (上から順に処理していくので、実際には赤字の部分全体が一遍に見えるわけではないのですが)

そして、\begin{document} の次の行の \DocInput{foobar.dtx} に到達すると、foobar.dtx 自身が読み込まれます (びっくり)。その際、“%” のカテゴリコードを一旦 9 (ignored character) にしてから foobar.dtx を読み込んで、その後でまた 14 (comment character) に戻しています。

そのため、\DocInput で読み込まれた foobar.dtx では、“%” はコメントの印ではなく、かと言って印字もされない、無視される文字となります。また、\iffalse\fi で挟まれた部分は 「常に偽」 ということで無視されるので、冒頭の “--- meta comments ---” の部分と、<package> から </driver> までの部分も無視されることになり、結局 \CheckSum 以下から最後の \endinput までが \input されたのと同じことになります。

それで、青字のドキュメント部分が、「普通に」 タイプセットされることになり、最後に \PrintChanges\PrintIndex が実行された後、\end{document} へと至ります。

※ 一般論としては \iffalse\fi でコメントアウトするやり方は推奨されません。

※ “\NeedsTeXFormat{LaTeX2e}” は \begin{document} より後ろでは使えないので、<package> の行を無視させないと、エラーになります。

<*driver> </driver> で挟まれた部分を無視させないと “\documentclass{ltxdoc}” がもう一度読み込まれることになり、やはりエラーとなります。

doc では “%” の代わりに、コメントの印としては、“^^A” が使えるようになっています。

※※ 実際にこの foobar.dtx から、変更履歴とコマンドインデックス付のドキュメントを得るには、以下のように処理します (なお、最近の W32TeX の場合には、オマケ に注意が必要かも知れません)

latex foobar.dtx
makeindex -s gind.ist foobar.idx
makeindex -s gglo.ist -o foobar.gls foobar.glo
latex foobar.dtx
makeindex -s gind.ist foobar.idx
makeindex -s gglo.ist -o foobar.gls foobar.glo
latex foobar.dtx

□ よく使われるコマンド

次に、上の foobar.dtx で使っているコマンドについて。

doc パッケージは、コードを説明するドキュメントを書くためのコマンド群と、コマンドインデックスを生成するためのコマンド群とを提供しています (いえ、他にもありますけどここでは割愛します)

青字の部分でよく使われるコマンド:

赤字の部分でよく使われるコマンド:

パッケージを作ってドキュメントと共に配布したりするような方以外は青字の部分で使われるコマンドには用はないわけで、今回取り上げたいのも、コマンドインデックスの作成に関わる赤字の部分で使われるコマンドのほうです:

以上から、dtx 以外のファイルについては、\IndexInput で読み込んで、 \CodelineIndex\EnableCrossrefs を宣言すれば、各行には行番号が付き、そして行番号が載ったコマンドインデックスも作れることが分かります。

□ driver ファイル

で、これらのコマンドは赤字の driver の部分で使われるわけですが、最後に、ようやく driver の話です。

dtx ファイルの場合には、上の foobar.dtx で見ましたように冒頭に driver が組み込まれていますが、driver は単独のファイルとして作成することも出来ます。また、<*driver> </driver> で挟まれていますので、Docstrip に “driver” というオプションを与えると driver の部分のみを取り出すことも出来ます。

普通、dtx ファイルは冒頭にそれぞれの driver を含んでいて、その dtx ファイルのドキュメント部分で使われている独自のマクロの定義などもそこに書かれています。ここで、その driver がコマンドインデックスを作成するような指示になっていないようなときには、Docstrip で driver を取り出して、その driver ファイルに自分で必要な指示を書き加えてタイプセットするということも可能です。dtx ファイルに直接指示を書き足すのは多分 LPPL 上よろしくありません driver ファイルを書き換える場合には driver のファイル名を rename すればいいわけですし、また、その dtx ファイルが ltxdoc.cls を使って書かれているならば、ltxdoc.cfg を使って指示を書き足すという手もあります → オマケ を参照)

そして、dtx ではないファイルを verbatim にタイプセットして且つコマンドインデックスも作りたいという場合には、そのファイルを \IndexInput で読み込むような driver ファイルを作成すればいいわけです。

ようやくゴールに辿りつきました。冒頭の例にもう少し手を加えるとしますと、こんな感じでしょうか (リンクも欲しいので、doc パッケージの代わりに hypdoc パッケージを使いました)

\documentclass[a4paper,landscape,pdftex]{article}
\usepackage[hmargin=3cm,vmargin={2.5cm,2cm}]{geometry}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{hypdoc}
\DoNotIndex{\boolean,\DeclareOption,\ifthenelse,\setboolean}
\DoNotIndex{\relax,\renewcommand,\RequirePackage}
\EnableCrossrefs
\CodelineIndex
\setcounter{IndexColumns}{4}
\pagestyle{headings}
\markright{\normalfont\small \textit{Andr\'e Miede} \textsf{classicthesis.sty}
           \footnotesize\ttfamily\itshape v4.1 Typographic style for a classic-looking thesis}
\begin{document}
\title{\textsf{\huge classicthesis.sty}\\
       \texttt{v4.1 Typographic style for a classic-looking thesis}}
\author{Andr\'e Miede}
\date{2012/08/12}
\maketitle
\IndexInput{classicthesis.sty}
\PrintIndex
\end{document}

このファイルの名前を仮に “doc_classicthesis.drv” としますと (拡張子は別に drv でなくてもいいのですが)、以下のように処理すると、コマンドインデックス付の pdf が出来ます タイプセット例

pdflatex doc_classicthesis.drv
makeindex -s gind.ist doc_classicthesis.idx
pdflatex doc_classicthesis.drv
makeindex -s gind.ist doc_classicthesis.idx
pdflatex doc_classicthesis.drv

なお、classicthesis.sty には \changes が含まれていないですし、\IndexInput をしているので変更履歴は作れませんが、dtx ファイル等を \DocInputして変更履歴もタイプセットする場合には、\RecordChanges\PrintChanges を指定した上で、

makeindex -s gglo.ist -o filename.gls filename.glo

を同じように途中で実行します。

□ オマケ ltxdoc.cls と ltxdoc.cfg ファイルについて

dtx ファイルを書くのによく使われる ltxdoc.cls は、artcle.clsdoc.sty とで作られているクラスファイルで、その冒頭は次のようになっています:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{ltxdoc}
         [2007/11/11 v2.0u Standard LaTeX documentation class]
\DeclareOption{a5paper}{\@latexerr{Option not supported}%
   {}}
\DeclareOption*{%
    \PassOptionsToClass  {\CurrentOption}{article}}
\InputIfFileExists{ltxdoc.cfg}
           {\typeout{*************************************^^J%
                     * Local config file ltxdoc.cfg used^^J%
                     *************************************}}
           {}
\ProcessOptions
\LoadClass{article}
\RequirePackage{doc}
.....

\InputIfFileExists{ltxdoc.cfg}{}{} という行があるので、TeX から見えるところに “ltxdoc.cfg” というファイルがあると、ここで読み込まれます。また、\LoadClass{article} よりも前に読み込まれているので、ltxdoc.cfg の中で \PassOptionsToClass{}{article} を使うと、article.cls にオプションを渡すことも出来ます。

※ もちろん、\RequirePackage{pckg} よりも前であれば \PassOptionsToPackage{}{pckg} を使って pckg にもオプションを渡せますが、doc パッケージの場合にはそもそも利用可能なオプションがありません。

ltxdoc.dtx に挙げられている ltxdoc.cfg の記述例から転記しますが、例えば、article.cls のデフォルトのペーパーサイズは letterpaper なので、それを a4paper に替えたい場合には、ltxdoc.cfg に、

\PassOptionsToClass{a4paper}{article}

と書いておけばよく、また、user manual しか必要なく、documented source code は要らないという場合には、

\AtBeginDocument{\OnlyDescription}

と書けばいいわけです (“\OnlyDescription” は doc で提供されているコマンドのため、ltxdoc.cfg が読み込まれる時点では未定義なので、実行のタイミングを \AtBeginDocument でズラします)

そして、ltxdoc.cls で書かれた dtx ファイルの driver 部分にコマンドインデックス作成の指示がないようなときには、

\AtBeginDocument{\CodelineIndex\EnableCrossrefs}
\AtEndDocument{\PrintIndex}

ltxdoc.cfg に書いておけば、dtx ファイルや driver に手を加えることなしに、指示を書き足すことが出来ます。

また、hypdoc パッケージを使うと、リンクやしおりも作れてより便利なドキュメントになりますが、その場合には、例えば dvipdfmx を使って pdf にするなら、ltxdoc.cfg に、

\PassOptionsToPackage{dvipdfmx}{hyperref}
\AtEndOfClass{\RequirePackage{hypdoc}}

と書けば、hypdoc.sty が最後に読み込まれますし、hypdoc の背後の hyperref に “dvipdfmx” というオプションも渡せます。

以上のように、ltxdoc.cfg ファイルは、個々のユーザーが必要に応じて作成するのが本来のはずです。

ところが。上掲のいんちき foobar.dtx を作るときに、一応テストのために実は latex ではなく) pdflatex でタイプセットをしてみたのですが、いきなりリンクやしおりがついた pdf が出来てしまい、驚きました。それで log を見てみましたら、

*************************************
* Local config file ltxdoc.cfg used
*************************************
(c:/w32tex/share/texmf/source/latex/uri/ltxdoc.cfg
File: ltxdoc.cfg 2011/03/04 v1.0a configuration file for uri (HMM)
)

となってました。なんと、uri というパッケージに ltxdoc.cfg が含まれていて、その中に、

\PassOptionsToClass{a4paper}{article}
\AtEndOfClass{%
  \RequirePackage[numbered]{hypdoc}[2010/03/26]% v1.9
  \pdfstringdefDisableCommands{%
    \let\env\relax % longtable.dtx
    \let\mytt\relax % tabularx.dtx
  }%
  \addtolength{\topmargin}{-10mm}%
  \addtolength{\textheight}{20mm}%
...

等々が書かれていました。ありゃりゃ。

上の 「□ dtx ファイル一般の話とサンプル」 の最後のところで、「実際にこの foobar.dtx から、変更履歴とコマンドインデックス付のドキュメントを得るには、以下のように処理します」 として、latex で処理する例を挙げていますが、その場合でもこの uri パッケージの ltxdoc.cfg が読み込まれてしまいますので、知らない間に hypdoc 延いては hyperref が読み込まれてしまって、dvi ファイルにはいろんな special が入ってしまいます。これを避ける方法としては、 uri パッケージの ltxdoc.cfg を TeX から見えないようにするか、または作業しているフォルダ (や uri パッケージの ltxdoc.cfg よりも先にサーチされるフォルダ) に空の ltxdoc.cfg を置いておくくらいしか思いつきません。

この、uri パッケージに含まれる ltxdoc.cfg を予め uri.dtx から抽出してあるのが、手元の W32TeX [2012/08/30] だけなのか、それとも TeX Live とかでもそうなっているのかは確かめていませんけれど、これにはちょっとびっくりしました。

【追記】 qa: 56765 で、本田さんが W32TeX の showexpl パッケージについて、showexpl.cfg が最初から入っちゃってるということをご報告なさっていて、qa: 56766 で、角藤先生が対応してくださったと書かれているので、この件も、ご報告さえすれば割とすぐに改善されるのかも知れません。 [Added: Jan 20, 2013]

□ 蛇足 “stop eventually” って?

dtx ファイルのドキュメント部分は、大体、

% \iffalse
% -- meta-comments --
% \fi
%
% -- description part (user manual) --
%
% \StopEventually{}
%
% -- implementation part (documented source code) --
%
% \Finale

という構造になっていて、driver\OnlyDescription が宣言されていると \StopEventually までがタイプセットされ、\AlsoImplementation だと最後の \Finale までがタイプセットされるようになっています。

このように、description part と implementation part とを区切っているコマンドが “\StopEventually” ですが、“stop eventually”ってなんか違和感ありますよね (eventually = after a long time, or after a lot of things have happened)。これは、doc パッケージの作者の Mittelbach さんがドイツ人で、ドイツ語の “eventuell” は英語の “possibly” とか “contingently” の意味なので、それをそのまま “eventually” としてしまわれたらしいです。

Last modified: Jan 20, 2013.


home