% \iffalse meta-comment %% File: platex.dtx % % Copyright 1995,1996 ASCII Corporation. % % This file is part of pLaTeX2e system. % ------------------------------------- % % \fi % % \CheckSum{367} %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} %% % % \setcounter{StandardModuleDepth}{1} % \def\chuui#1{\par\vskip.5\baselineskip % \noindent\bfseries{注意:}\par % \noindent\bgroup\bf#1} % \def\endchuui{\egroup\vskip.5\baselineskip} % \StopEventually{} % % \iffalse % \changes{v1.0}{1995/05/08}{first edition} % \changes{v1.0a}{1995/08/25}{互換性について、\dst{}の使い方、参考文献を追加} % \changes{v1.0b}{1996/02/01}{\file{omake-sh.ins}, \file{omake-pl.ins}を % \dst{}の変更にともなう変更をした} % \changes{v1.0c}{1997/01/23}{\LaTeX\ \textt{!<1996/12/01!>}に合わせて修正} % \fi % % \iffalse %<*driver> \NeedsTeXFormat{pLaTeX2e} % \fi \ProvidesFile{platex.dtx}[1997/01/29 v1.0c pLaTeX document file] % \iffalse \documentclass{jltxdoc} \usepackage{plext} \GetFileInfo{platex.dtx} \title{p\LaTeXe{}について} \author{Ken Nakano} \date{作成日:\filedate} \begin{document} \MakeShortVerb{\+} \maketitle \DocInput{\filename} \end{document} % % \fi % % % \section{概要}\label{platex:intro} % この文書は、p\LaTeXe{}の概要を示していますが、使い方のガイドでは % ありません。p\LaTeXe{}の機能についての説明は、\cite{platex2e-book}を % 参照してください。日本語\TeX{}については\cite{jtex-tech}を参照してください。 % % p\LaTeXe{}では\cite{tate-book}で説明されている、いくつかの拡張コマンドの % 動作を修正しています。その詳細については、\file{plext.dtx}を参照して % ください。 % % \LaTeX{}の機能については、\cite{latex-book2}や\cite{latex-comp}などを % 参照してください。新しい機能については\file{usrguide.tex}を参照してください。 % % この文書の構成は次のようになっています。 % % \begin{quote} % \begin{description} % \item[第\ref{platex:intro}節] % この節です。この文書についての概要と、 % \dst{}のためのオプションについて述べています。 % % \item[第\ref{platex:plcore}節] % p\LaTeXe{}で拡張した機能についての概要です。 % 付属のクラスファイルやパッケージファイルについても簡単に % 説明しています。 % % \item[第\ref{platex:compatibility}節] % 旧バージョンのp\LaTeX{}との互換性について述べています。 % % \item[付録\ref{app:pldoc}] % p\LaTeXe{}のdtxファイルをまとめて一つのDVIファイルにするための % 文書ファイル説明をしています。 % % \item[付録\ref{app:omake}] % 付録\ref{app:pldoc}で説明をした文書ファイルを処理するshスクリプト(手順)、 % \dst{}文書ファイル内の入れ子の対応を調べるperlスクリプトなどについて % 説明しています。 % \end{description} % \end{quote} % % % \subsection{\dst{}プログラムのためのオプション} % この文書を\dst{}プログラムによって処理することによって、 % いくつかの異なるファイルを生成することができます。 % % この文書の\dst{}プログラムのためのオプションは、次のとおりです。 % % \DeleteShortVerb{\|} % \begin{center} % \begin{tabular}{l|p{.8\linewidth}} % \emph{オプション} & \emph{意味}\\\hline % plcore & フォーマットファイルを作るためのファイルを生成\\ % pldoc & p\LaTeXe{}のソースファイルをまとめて組版するための % 文書ファイルを生成\\[2mm] % shprog & 上記のファイルを作成するためのshスクリプトを生成\\ % plprog & 入れ子構造を調べる簡単なperlスクリプトを生成\\ % Xins & 上記のshスクリプトやperlスクリプトを取り出すための % \dst{}バッチファイルを生成\\ % \end{tabular} % \end{center} % \MakeShortVerb{\|} % % \subsubsection{ファイルの取り出し方} % % たとえば、この文書の``plcore''の部分を``\file{platex.ltx}''という % ファイルにするときの手順はつぎのようになります。 % % \begin{enumerate} % \item platex docstrip % \item 入力ファイルの拡張子(dtx)を入力する。 % \item 出力ファイルの拡張子(ltx)を入力する。 % \item \dst{}オプション(plcore)を入力する。 % \item 入力ファイル名(platex)を入力する。 % \item \file{platex.ltx}が存在する場合は、確認を求めてくるので、 % ``y''を入力する。 % \item 別の処理を行なうかを問われるので、``n''を入力する。 % \end{enumerate} % これで、\file{platex.ltx}が作られます。 % % あるいは、次のような内容のファイル\file{batch.ins}を作成し、 % |platex fmt.ins|することでも\file{platex.ltx}を作ることができます。 % % \begin{verbatim} % \def\batchfile{batch.ins} % \input docstrip.tex % \generateFile{platex.ltx}{t}{\from{platex.dtx}{plcore}} % \end{verbatim} % % \dst プログラムの詳細は、\file{docstrip.dtx}を参照してください。 % % % % \section{p\LaTeXe{}の機能について}\label{platex:plcore} % p\LaTeXe{}の機能は、いくつものファイルに分割されて実装されています。 % これらのファイルはつぎの3種類に分類することができます。 % % \begin{itemize} % \item フォーマットファイル % \item クラスファイル % \item パッケージファイル % \end{itemize} % % フォーマットファイルには、基本的な機能が定義されており、 % p\LaTeXe{}の核となるファイルです。このファイルに定義されているマクロは、 % 実行時の速度を高めるために、あらかじめ\TeX の内部形式の形で保存されて % います。 % % クラスファイルとパッケージファイルは、従来、スタイルファイルと呼ばれていた % ものです。\LaTeXe{}ではそれらを、レイアウトに関するものをクラスファイルと % 呼び、マクロの拡張をするものをパッケージファイルと呼んで区別するように % なりました。 % % \TeX{}文書が使用するクラスは、文書のプリアンブルで|\documentclass|コマンド % を用いて指定します。|\documentclass|ではなく、旧版の|\documentstyle|を % 用いると、自動的に\emph{2.09互換モード}に入ります。 % 互換モードは旧版の文書を組版するためだけに作られていますので、 % 新しく文書を作成する場合は、|\documentclass|コマンドを用いてください。 % 互換モードでは\LaTeX{}の新機能も使えなくなります。 % % 旧版では、|\documentstyle|のオプションでマクロファイルを読み込んで % いましたが、\LaTeX{}では、|\usepackage|コマンドを用いて読み込みます。 % % \subsection{フォーマットファイル} % フォーマットファイルには、基本的な機能が定義されていますが、 % これらは\TeX{}の内部形式に変換された形式となっています。 % フォーマットファイルを作成するには、 % ソースファイル``platex.ltx''を|iniptex|プログラムで処理します。 % % 次のリストが、その内容です。 % ただし、このバージョンでは、\LaTeX{}からp\LaTeXe{}への拡張を % \file{plcore.ltx}をロードすることで行ない、 % \file{latex.ltx}には直接、手を加えないようにしています。 % したがって\file{platex.ltx}はとても短いものとなっています。 % \file{latex.ltx}には\LaTeX{}のコマンドが、 % \file{plcore.ltx}にはp\LaTeXe{}で拡張したコマンドが定義されています。 % % \begin{macrocode} %<*plcore> \let\orgdump\dump \let\dump\relax \input latex.ltx \typeout{**************************^^J% *^^J% * making pLaTeX format^^J% *^^J% **************************} \makeatletter \input plcore.ltx \makeatother \the\everyjob \let\dump\orgdump \dump %\endinput % % \end{macrocode} % % 実際にp\LaTeXe{}への拡張を行なっている\file{plcore.ltx}は、 % \dst{}プログラムによって、次のファイルの断片が連結されたものです。 % % \begin{itemize} % \item \file{plvers.dtx}は、p\LaTeXe{}のフォーマットバージョンを % 定義しています。 % \item \file{plfonts.dtx}は、\NFSS2を拡張しています。 % \item \file{plcore.dtx}は、上記以外のコマンドでフォーマットファイルに % 格納されるコマンドを定義しています。 % \end{itemize} % % プリロードフォントや組版パラメータなどの設定は、 % \file{pldefs.ltx}をロードすることで行なっています。 % このファイルに記述されている設定を変更すれば、 % p\LaTeXe{}をカスタマイズすることができます。 % カスタマイズする場合は、このファイルを直接、修正するのではなく、 % \file{pldefs.cfg}という名前でコピーをして、そのファイルを編集します。 % \file{pldefs.cfg}は\file{pldefs.ltx}の代わりに読み込まれます。 % % % \subsubsection{バージョン} % p\LaTeXe{}のバージョンやフォーマットファイル名は、 % \file{plvers.dtx}で定義しています。 % % % \subsubsection{\NFSS2コマンド} % \LaTeX{}では、フォント選択機構として\NFSS2を用いています。 % p\LaTeXe{}では、オリジナルの\NFSS2 と同様のインターフェイスで、 % 和文フォントを選択できるように、\file{plfonts.dtx}で\NFSS2を拡張しています。 % % p\LaTeXe{}の\NFSS2は、フォントを切替えるコマンドを指定するときに、 % それが欧文書体か和文書体のいずれかを対象とするものかを、 % できるだけ意識しないようにする方向で拡張しています。 % いいかえれば、コマンドが(可能な限りの)判断をします。 % したがって数多くある英語版のクラスファイルやパッケージファイルなどで % 書体の変更を行っている箇所を修正する必要はあまりありません。 % % \file{plfonts.dtx}ファイルでは、\NFSS2コマンドの定義のほか、プリロード % フォントの設定、和文エンコードの定義、組版パラメータなどの設定、 % フォント定義ファイルなどの記述も含まれています。 % % \NFSS2についての詳細は、\LaTeXe に付属の\file{fntguide.tex}を参照して % ください。 % % % \subsubsection{出力ルーチンとフロート} % \file{plcore.dtx}は、次の項目に関するコマンドを日本語処理用に修正や拡張 % をしています。 % % \begin{itemize} % \item プリアンブルコマンド % \item 改ページ % \item 改行 % \item オブジェクトの出力順序 % \item トンボ % \item 脚注マクロ % \item 相互参照 % \item 疑似タイプ入力 % \end{itemize} % % % \subsection{クラスファイルとパッケージファイル} % クラスファイルとパッケージファイルは、従来、スタイルファイルと呼ばれていた % ものです。\LaTeX{}ではそれらを、レイアウトに関するものをクラスファイルと % 呼び、マクロの拡張をするものをパッケージファイルと呼んで区別するように % なりました。 % % p\LaTeXe{}が提供をする、クラスファイルやパッケージファイルのいくつかは、 % オリジナルのファイルを修正しています。 % 修正箇所には``\texttt{platex}''条件が付けられています。 % % p\LaTeXe{}に付属のクラスファイルは、次のとおりです。 % % \begin{itemize} % \item jbook.cls,jarticle.cls,jreport.cls\par % 横組用の標準クラスファイル。\file{jclasses.dtx}から作成される。 % % \item tbook.cls,tarticle.cls,treport.cls\par % 縦組用の標準クラスファイル。\file{jclasses.dtx}から作成される。 % % \item jltxdoc.cls\par % \file{.dtx}ファイルを組版するためのクラスファイル。 % \file{jltxdoc.dtx}から作成される。 % % \item jltxguid.cls\par % \file{usrguide.tex}や\file{fntguide.tex}などを組版するための % クラスファイル。 % \end{itemize} % % また、p\LaTeXe{}に付属のパッケージファイルは、次のとおりです。 % % \begin{itemize} % \item oldpfont.sty\par % p\LaTeX~2.09のフォントコマンドを提供するパッケージ。 % \file{oldpfont.dtx}から作成される。 % % \item ptrace.sty\par % \file{tracefnt.sty}で再定義された\NFSS2コマンドをp\LaTeXe{}用に % 再々定義するためのパッケージ。 % % \item ascmac.sty, tascmac.sty\par % 旧バージョンのp\LaTeX{}で配布されていたファイル。 % % \item plext.sty\par % 縦組用の拡張コマンドなどが定義されているファイル。 % \end{itemize} % % % \section{旧バージョンとの互換性}\label{platex:compatibility} % ここでは、このバージョンと以前のバージョンとの互換性や拡張部分について % 説明をしています。 % % \subsection{p\LaTeX~2.09との互換性} % p\LaTeXe{}は、\LaTeX{}の上位互換という形を取っていますが、 % いくつかのパラメータなども変更しています。 % したがって英文書など、\LaTeX{}でも処理できるファイルを % p\LaTeXe{}で処理しても、完全に同じ結果になるとは限りません。 % これは、英語版の\LaTeX{}でも同じです。 % 詳細は、\LaTeXe に付属の\file{usrguide.tex}を参照してください。 % % 多くのクラスファイルやパッケージフィルはそのまま使えると思います。 % ただし、それらがp\LaTeXe{}で拡張しているコマンドと同じ名前のコマンドを % 再定義している場合は、コマンドの拡張の仕方によってはエラーになることも % あります。用いようとしている、クラスファイルやパッケージファイルが % うまく動くかどうかを、完全に確かめる方法は残念ながらありません。 % 一番簡単なのは、動かしてみることです。不幸にもうまく動かない場合は、 % ログファイルや付属の文書ファイルを参考に原因を調べてください。 % % % % \appendix % % \section{文書ファイル}\label{app:pldoc} % \changes{v1.0c}{1997/01/25}{Add to filecontents environment for pldoc.dic.} % ここでは、このパッケージに含まれているdtxファイルをまとめて組版をするための % 文書ファイルについて説明をしています。個別に処理した場合と異なり、 % 変更履歴や索引も付きます。全体で、およそ150ページ程度になります。 % % |filecontents|環境は、引数に指定されたファイルが存在するときは何も % しませんが、存在しないときは、環境内の内容でファイルを作成します。 % \file{pldoc.dic}ファイルは、mendexプログラムで索引を処理するときに % \cs{西暦}, \cs{和暦}に対する「読み」を付けるために必要です。 % \begin{macrocode} %<*pldoc> \begin{filecontents}{pldoc.dic} 西暦 せいれき 和暦 われき \end{filecontents} % \end{macrocode} % 文書クラスには、\file{jltxdoc}クラスを用います。 % \file{plext.dtx}の中でサンプルを組み立てていますので、 % \file{plext}パッケージが必要です。 % \begin{macrocode} \documentclass{jltxdoc} \usepackage{plext} \listfiles % \end{macrocode} % いくつかの\TeX{}プリミティブとコマンドを索引に出力しないようにします。 % \begin{macrocode} \DoNotIndex{\def,\long,\edef,\xdef,\gdef,\let,\global} \DoNotIndex{\if,\ifnum,\ifdim,\ifcat,\ifmmode,\ifvmode,\ifhmode,% \iftrue,\iffalse,\ifvoid,\ifx,\ifeof,\ifcase,\else,\or,\fi} \DoNotIndex{\box,\copy,\setbox,\unvbox,\unhbox,\hbox,% \vbox,\vtop,\vcenter} \DoNotIndex{\@empty,\immediate,\write} \DoNotIndex{\egroup,\bgroup,\expandafter,\begingroup,\endgroup} \DoNotIndex{\divide,\advance,\multiply,\count,\dimen} \DoNotIndex{\relax,\space,\string} \DoNotIndex{\csname,\endcsname,\@spaces,\openin,\openout,% \closein,\closeout} \DoNotIndex{\catcode,\endinput} \DoNotIndex{\jobname,\message,\read,\the,\m@ne,\noexpand} \DoNotIndex{\hsize,\vsize,\hskip,\vskip,\kern,\hfil,\hfill,\hss,\vss,\unskip} \DoNotIndex{\m@ne,\z@,\z@skip,\@ne,\tw@,\p@,\@minus,\@plus} \DoNotIndex{\dp,\wd,\ht,\setlength,\addtolength} \DoNotIndex{\newcommand, \renewcommand} % \end{macrocode} % 索引と変更履歴の見出しに\cs{part}を用いるように設定をします。 % \begin{macrocode} \IndexPrologue{\part*{索 引}% \markboth{索 引}{索 引}% \addcontentsline{toc}{part}{索 引}% イタリック体の数字は、その項目が説明されているページを示しています。 下線の引かれた数字は、定義されているページを示しています。 その他の数字は、その項目が使われているページを示しています。} % \GlossaryPrologue{\part*{変更履歴}% \markboth{変更履歴}{変更履歴}% \addcontentsline{toc}{part}{変更履歴}} % \end{macrocode} % 標準の|\changes|コマンドを、複数ファイルの文書に合うように修正しています。 % \begin{macrocode} \makeatletter \def\changes@#1#2#3{% \let\protect\@unexpandable@protect \edef\@tempa{\noexpand\glossary{#2\space\currentfile\space#1\levelchar \ifx\saved@macroname\@empty \space\actualchar\generalname \else \expandafter\@gobble \saved@macroname\actualchar \string\verb\quotechar*% \verbatimchar\saved@macroname \verbatimchar \fi :\levelchar #3}}% \@tempa\endgroup\@esphack} \makeatother \RecordChanges \CodelineIndex \EnableCrossrefs \setcounter{IndexColumns}{2} \settowidth\MacroIndent{\ttfamily\scriptsize 000\ } % \end{macrocode} % ここからが本文ページとなります。 % \changes{v1.0c}{1997/01/29}{Rename pltpatch to plpatch.} % \begin{macrocode} \begin{document} \title{The p\LaTeXe\ Sources} \author{Ken Nakano} % This command will be used to input the patch file % if that file exists. \newcommand{\includeltpatch}{% \def\currentfile{plpatch.ltx} \part{plpatch} {\let\ttfamily\relax \xdef\filekey{\filekey, \thepart={\ttfamily\currentfile}}}% Things we did wrong\ldots \IndexInput{plpatch.ltx}} % Get the date from plvers.dtx \makeatletter \let\patchdate=\@empty \begingroup \def\ProvidesFile#1\pfmtversion#2{\date{#2}\endinput} \input{plvers.dtx} \global\let\X@date=\@date % Add the patch version if available. \long\def\Xdef#1#2#3\def#4#5{% \xdef\X@date{#2}% \xdef\patchdate{#5}% \endinput}% \InputIfFileExists{plpatch.ltx} {\let\def\Xdef}{\global\let\includeltpatch\relax} \endgroup \ifx\@date\X@date \def\Xpatch{0} \ifx\patchdate\Xpatch\else \edef\@date{\@date\space Patch level\patchdate} \fi \else \@warning{plpatch.ltx does not match plvers.dtx!} \let\includeltpatch\relax \fi \makeatother \pagenumbering{roman} \maketitle \renewcommand\maketitle{} \tableofcontents \clearpage \pagenumbering{arabic} \DocInclude{plvers} % pLaTeX version \DocInclude{plfonts} % NFSS2 commands \DocInclude{plcore} % kernel commands \DocInclude{plext} % external commands \DocInclude{pl209} % 2.09 compatibility mode commands \DocInclude{kinsoku} % kinsoku parameter \DocInclude{jclasses} % Standard class \DocInclude{jltxdoc} % dtx documents class \includeltpatch % patch file % \end{macrocode} % \file{ltxdoc.cfg}に|\AtEndOfClass{\OnlyDescription}|が指定されている場合は、 % ここで終了します。 % \begin{macrocode} \StopEventually{\end{document}} % \end{macrocode} % 変更履歴と索引を組版します。 % 変更履歴ファイルと索引の作り方の詳細については、 % おまけ\ref{app:shprog}を参照してください。 % \begin{macrocode} \clearpage \pagestyle{headings} % Make TeX shut up. \hbadness=10000 \newcount\hbadness \hfuzz=\maxdimen % \PrintChanges \clearpage % \begingroup \def\endash{--} \catcode`\-\active \def-{\futurelet\temp\indexdash} \def\indexdash{\ifx\temp-\endash\fi} \PrintIndex \endgroup % \end{macrocode} % \file{ltxdoc.cfg}に2度目の|\PrintIndex|が指定されているかもしれません。 % そこで、最後に、変更履歴や索引が2度組版されないように|\PrintChanges|および % |\PrintIndex|コマンドを何も実行しないようにします。 % \begin{macrocode} \let\PrintChanges\relax \let\PrintIndex\relax \end{document} % % \end{macrocode} % % % % \section{おまけプログラム}\label{app:omake} % % \subsection{シェルスクリプト\file{mkpldoc.sh}}\label{app:shprog} % ここでは、p\LaTeXe{}のマクロ定義ファイルをまとめて組版するときに便利な、 % シェルスクリプト\footnote{このシェルスクリプトはUNIX用です。 % しかしrmコマンドをdeleteコマンドにするなどすれば、簡単にDOSなどのバッチ % ファイルに修正することができます。}について説明をしています。 % また、このシェルスクリプトを取り出すための、 % \dst{}バッチファイルについても説明をしています。 % % このシェルスクリプトの使用方法は次のとおりです。 % \begin{verbatim} % sh mkpldoc.sh % \end{verbatim} % % \subsubsection{\file{mkpldoc.sh}の内容} % まず、以前に\file{pldoc.tex}を処理したときに作成された、 % 目次ファイルや索引ファイルなどを削除します。 % \changes{v1.0c}{1997/01/23}{Don't copy gind.ist and gglo.ist from % \$TEXMF/tex/latex2e/base directory.} % \begin{macrocode} %<*shprog> rm pldoc.toc pldoc.idx pldoc.glo % \end{macrocode} % そして、\file{ltxdoc.cfg}を空にします。 % このファイルは、\file{jltxdoc.cls}の定義を変更するものですが、 % ここでは、変更されたくありません。 % \begin{macrocode} echo "" > ltxdoc.cfg % \end{macrocode} % そして、\file{pldoc.tex}を処理します。 % \begin{macrocode} platex pldoc.tex % \end{macrocode} % 索引と変更履歴を作成します。 % このスクリプトでは、変更履歴や索引を生成するのにmendexプログラムを用いて % います。mendexはmakeindexの上位互換のファイル整形コマンドで、 % 索引語の読みを自動的に付けるなどの機能があります。 % % |-s|オプションは、索引ファイルを整形するためのスタイルオプションです。 % 索引用の\file{gind.ist}と変更履歴用の\file{gglo.ist}は、 % \LaTeX{}のディストリビューションに付属しています。 % % |-o|は、出力するファイル名を指定するオプションです。 % % |-f|は、項目に``読み''がなくてもエラーとしないオプションです。 % makeindexコマンドには、このオプションがありません。 % \begin{macrocode} mendex -s gind.ist -d pldoc.dic -o pldoc.ind pldoc.idx mendex -f -s gglo.ist -o pldoc.gls pldoc.glo % \end{macrocode} % \file{ltxdoc.cfg}の内容を|\includeonly{}|にし、\file{pldoc.tex}を処理します。 % このコマンドは、引数に指定されたファイルだけを``|\include|''するための % コマンドですが、ここでは何も|\include|したく\emph{ない}ので、 % 引数には何も指定をしません。 % しかし、|\input|で指定されているファイルは読み込まれます。 % したがって、目次や索引や変更履歴のファイルが処理されます。 % この処理は、主に、これらでエラーが出るかどうかの確認です。 % \begin{macrocode} echo "\includeonly{}" > ltxdoc.cfg platex pldoc.tex % \end{macrocode} % 最後に、再び\file{ltxdoc.cfg}を空にして、\file{pldoc.tex}を処理をします。 % 本文を1ページから開始していますので、この後、もう一度処理をする % 必要はありません。 % \begin{macrocode} echo "" > ltxdoc.cfg platex pldoc.tex # EOT % % \end{macrocode} % % % \subsection{perlスクリプト\file{dstcheck.pl}}\label{app:plprog} % \dst{}文書ファイルは、\LaTeX{}のソースとその文書を同時に管理する方法として、 % とてもすぐれていると思います。しかし、たとえば\file{jclasses.dtx}のように、 % 条件が多くなると、入れ子構造がわからなくなってしまいがちです。 % \LaTeX{}で処理すれば、エラーによってわかりますが、 % 文書ファイルが大きくなると面倒です。 % % ここでは、\dst{}文書ファイルの入れ子構造を調べるのに便利な、 % perlスクリプトについて説明をしています。 % % このperlスクリプトの使用方法は次のとおりです。 % % \begin{verbatim} % perl dstcheck.pl file-name % \end{verbatim} % % \subsubsection{\file{dstcheck.pl}の内容} % 最初に、このperlスクリプトが何をするのかを簡単に記述したコメントを % 付けます。 % \begin{macrocode} %<*plprog> ## ## DOCSTRIP 文書内の環境や条件の入れ子を調べる perl スクリプト ## % \end{macrocode} % このスクリプトは、入れ子の対応を調べるために、次のスタックを用います。 % \meta{条件}あるいは\meta{環境}を開始するコードが現れたときに、 % それらはスタックにプッシュされ、終了するコードでポップされます。 % したがって、現在の\meta{条件}あるいは\meta{環境}と、 % スタックから取り出した\meta{条件}あるいは\meta{環境}と一致すれば、 % 対応が取れているといえます。そうでなければエラーです。 % % |@dst|スタックには、\meta{条件}が入ります。 % 条件の開始は、``|%<*|\meta{条件}|>|''です。 % 条件の終了は、``|%|''です。 % \meta{条件}には、|>|文字が含まれません。 % |@env|スタックには、\meta{環境}が入ります。 % % 先頭を明示的に示すために、ダミーの値を初期値として用います。 % スタックは、\meta{条件}あるいは\meta{環境}の名前と、その行番号をペアにして % 操作をします。 % \begin{macrocode} push(@dst,"DUMMY"); push(@dst,"000"); push(@env,"DUMMY"); push(@env,"000"); % \end{macrocode} % この|while|ループの中のスクリプトは、文書ファイルの1行ごとに実行をします。 % \begin{macrocode} while (<>) { % \end{macrocode} % 入力行が条件を開始する行なのかを調べます。 % 条件の開始行ならば、|@dst|スタックに\meta{条件}と行番号をプッシュします。 % \begin{macrocode} if (/^%<\*([^>]+)>/) { # check conditions push(@dst,$1); push(@dst,$.); % \end{macrocode} % そうでなければ、条件の終了行なのかを調べます。 % 現在行が条件の終了を示している場合は、|@dst|スタックをポップします。 % \begin{macrocode} } elsif (/^%<\/([^>]+)>/) { $linenum = pop(@dst); $conditions = pop(@dst); % \end{macrocode} % 現在行の\meta{条件}と、スタックから取り出した\meta{条件}が一致しない場合、 % その旨のメッセージを出力します。 % % なお、|DUMMY|と一致した場合は、一番外側のループが合っていないと % いうことを示しています。このとき、これらのダミー値をスタックに戻します。 % いつでもスタックの先頭をダミー値にするためです。 % \begin{macrocode} if ($1 ne $conditions) { if ($conditions eq "DUMMY") { print "$ARGV: `' (l.$.) is not started.\n"; push(@dst,"DUMMY"); push(@dst,"000"); } else { print "$ARGV: `<*$conditions>' (l.$linenum) is ended "; print "by `<*$1>' (l.$.)\n"; } } } % \end{macrocode} % 環境の入れ子も条件と同じように調べます。 % % verbatim環境のときに、その内側をスキップしていることに注意をしてください。 % \begin{macrocode} if (/^% *\\begin\{verbatim\}/) { # check environments while(<>) { last if (/^% *\\end\{verbatim\}/); } } elsif (/^% *\\begin\{([^{}]+)\}\{(.*)\}/) { push(@env,$1); push(@env,$.); } elsif (/^% *\\begin\{([^{}]+)\}/) { push(@env,$1); push(@env,$.); } elsif (/^% *\\end\{([^{}]+)\}/) { $linenum = pop(@env); $environment = pop(@env); if ($1 ne $environment) { if ($environment eq "DUMMY") { print "$ARGV: `\\end{$1}' (l.$.) is not started.\n"; push(@env,"DUMMY"); push(@env,"000"); } else { print "$ARGV: \\begin{$environement} (l.$linenum) is ended "; print "by \\end{$1} (l.$.)\n"; } } } % \end{macrocode} % ここまでが、最初の|while|ループです。 % \begin{macrocode} } % \end{macrocode} % 文書ファイルを読み込んだ後、終了していない条件があるかどうかを確認します。 % すべての条件の対応がとれていれば、この時点での|@dst|スタックには % ダミー値しか入っていません。したがって、対応が取れている場合は、 % 最初の2つのポップによって、ダミー値が設定されます。 % ダミー値でなければ、ダミー値になるまで、取り出した値を出力します。 % \begin{macrocode} $linenum = pop(@dst); $conditions = pop(@dst); while ($conditions ne "DUMMY") { print "$ARGV: `<*$conditions>' (l.$linenum) is not ended.\n"; $linenum = pop(@dst); $conditions = pop(@dst); } % \end{macrocode} % 環境の入れ子についても、条件の入れ子と同様に確認をします。 % \begin{macrocode} $linenum = pop(@env); $environment = pop(@env); while ($environment ne "DUMMY") { print "$ARGV: `\\begin{$environment}' (l.$linenum) is not ended.\n"; $linenum = pop(@env); $environment = pop(@env); } exit; % % \end{macrocode} % % \subsection{\dst{}バッチファイル} % \changes{v1.0b}{1996/02/01}{\dst{}にともなう変更} % \changes{v1.0c}{1997/01/23}{\dst{}にともなう変更} % ここでは、付録\ref{app:shprog}と付録\ref{app:plprog}で説明をした二つの % スクリプトを、このファイルから取り出すための\dst{}バッチファイルについて % 説明をしています。 % % まず、\dst{}パッケージをロードします。 % また、実行経過のメッセージを出力しないようにしています。 % \begin{macrocode} %<*Xins> \input docstrip \keepsilent % \end{macrocode} % \dst{}プログラムは、連続する二つのパーセント記号(\%\%)ではじまる行を % メタコメントとみなし、条件によらず出力をします。 % しかし、``\%''は\TeX{}ではコメントであっても、shやperlにとってはコメント % ではありません。そこで、メタコメントとして出力する文字を``\#\#''と % 変更します。 % \begin{macrocode} {\catcode`#=12 \gdef\MetaPrefix{## }} % \end{macrocode} % そして、プリアンブルに出力されるメッセージを宣言します。 % ここでは、とくに何も指定していませんが、宣言をしないとデフォルトの記述が % `\%\%'付きで出力されてしまうため、それを抑制する目的で使用しています。 % \begin{macrocode} \declarepreamble\thispre \endpreamble \usepreamble\thispre % \end{macrocode} % ポストアンブルも同様に、宣言をしないと`|\endinput|'が出力されます。 % \begin{macrocode} \declarepostamble\thispost \endpostamble \usepostamble\thispost % \end{macrocode} % |\generate|コマンドで、どのファイルに、どのファイルのどの部分を出力するのか % を指定します。 % \begin{macrocode} \generate{ \file{dstcheck.pl}{\from{platex.dtx}{plprog}} \file{mkpldoc.sh}{\from{platex.dtx}{shprog}} } \endbatchfile % % \end{macrocode} % % \newpage % \begin{thebibliography}{1} % \bibitem{tex-book} % Donald~E. Knuth. % \newblock ``{\em The TeX Book}''. % \newblock Addison-Wesley, 1984. % \newblock (邦訳:斎藤信男監修, 鷺谷好輝訳, % \TeX ブック 改訂新版, アスキー出版局, 1989) % % \bibitem{tate-book} % インプレス・ラボ監修, アスキー書籍編集部編 % \newblock 『縦組対応 パーソナル日本語\TeX{}』 % \newblock アスキー出版局, 1994 % % \bibitem{latex-comp} % Michel Goossens, Frank Mittelbach, Alexander Samarin. % \newblock ``{\em The {\LaTeX} Companion}''. % \newblock Addison-Wesley, 1994. % % \bibitem{latex-book2} % Laslie Lamport. % \newblock ``{\em {\LaTeX:} A Document Preparation System}''. % \newblock Addison-Wesley, second edition, 1994. % % \bibitem{latex-book} % Laslie Lamport. % \newblock ``{\em {\LaTeX:} A Document Preparation System}''. % \newblock Addison-Wesley, 1986. % \newblock (邦訳:倉沢良一監修, 大野俊治・小暮博通・藤浦はる美訳, % 文書処理システム \LaTeX, アスキー, 1990) % % \bibitem{jtex-tech} % アスキー出版技術部責任編集 % \newblock 『日本語\TeX テクニカルブックI』 % \newblock アスキー, 1990. % % \bibitem{platex2e-book} % 中野 賢 % \newblock 『日本語\LaTeXe ブック』 % \newblock アスキー, 1996. % % \bibitem{perl} % 河野真治著 % \newblock 『入門perl』 % \newblock アスキー出版局, 1994 % \end{thebibliography} % % \iffalse % ここで、このあとに組版されるかもしれない文書のために、 % 節見出しの番号を算用数字に戻します。 % \fi % % \renewcommand{\thesection}{\arabic{section}} % % \Finale % \endinput