% \iffalse meta-comment %% File: platex.dtx % % Copyright 1995,1996 ASCII Corporation. % Copyright (c) 2010 ASCII MEDIA WORKS % Copyright (c) 2016-2017 Japanese TeX Development Community % % This file is part of the pLaTeX2e system (community edition). % ------------------------------------------------------------- % % \fi % % % \setcounter{StandardModuleDepth}{1} % \makeatletter % \def\chuui{\@ifnextchar[{\@chuui}{\@chuui[注意:]}} % \def\@chuui[#1]{\par\vskip.5\baselineskip % \noindent{\em #1}\par\bgroup\gtfamily\sffamily} % \def\endchuui{\egroup\vskip.5\baselineskip} % \makeatother % \def\pTeX{p\kern-.15em\TeX} % \def\epTeX{$\varepsilon$-\pTeX} % \def\pLaTeX{p\kern-.05em\LaTeX} % \def\pLaTeXe{p\kern-.05em\LaTeXe} % \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!>}に合わせて修正} % \changes{v1.0d}{2016/01/27}{\file{mkpldoc.sh}を改善。 % p\LaTeXe{}に付属するファイルの説明を更新} % \changes{v1.0e}{2016/02/16}{platexreleaseの説明を追加} % \changes{v1.0f}{2016/04/12}{ドキュメントを更新} % \changes{v1.0g}{2016/05/07}{フォーマット作成時に\LaTeX{}のバナーを一旦保存} % \changes{v1.0h}{2016/05/08}{ドキュメントから\file{plpatch.ltx}を除外} % \changes{v1.0i}{2016/05/12}{一時コマンド\cs{orgdump}を最終的に未定義へ} % \changes{v1.0j}{2016/05/20}{pfltraceの説明を追加} % \changes{v1.0k}{2016/05/21}{変更履歴も出力するようにした} % \changes{v1.0l}{2016/06/19}{パッチレベルを\file{plvers.dtx}から取得} % \changes{v1.0m}{2016/08/26}{\file{platex.cfg}の読み込みを % \file{plcore.ltx}から\file{platex.ltx}へ移動} % \changes{v1.0n}{2016/09/14}{\LaTeX{}のバナーの保存しかたを改良} % \changes{v1.0o}{2017/09/24}{パッチレベルが負の数の場合をpre-release扱いへ} % \fi % % \iffalse %<*driver> \NeedsTeXFormat{pLaTeX2e} % \fi \ProvidesFile{platex.dtx}[2017/09/24 v1.0o pLaTeX document file] % \iffalse \documentclass{jltxdoc} \usepackage{plext} \GetFileInfo{platex.dtx} \title{p\LaTeXe{}について} \author{Ken Nakano \& Japanese \TeX\ Development Community} \date{作成日:\filedate} \renewcommand{\refname}{参考文献} \GlossaryPrologue{\section*{変更履歴}% \markboth{変更履歴}{変更履歴}% \addcontentsline{toc}{section}{変更履歴}} \makeatletter \def\levelchar{>・} \def\changes@#1#2#3{% \let\protect\@unexpandable@protect \edef\@tempa{\noexpand\glossary{#2\space#1\levelchar \ifx\saved@macroname\@empty % \space\actualchar\generalname: %% comment out (platex.dtx only) \else \expandafter\@gobble \saved@macroname\actualchar \string\verb\quotechar*% \verbatimchar\saved@macroname \verbatimchar: \fi #3}}% \@tempa\endgroup\@esphack} \makeatother \RecordChanges \begin{document} \MakeShortVerb{\+} \maketitle \DocInput{\filename} \StopEventually{\end{document}} \clearpage % Make TeX shut up. \hbadness=10000 \newcount\hbadness \hfuzz=\maxdimen \PrintChanges \let\PrintChanges\relax \end{document} % % \fi % % % \changes{v1.0f}{2016/04/12}{ドキュメントを更新} % \changes{v1.0k}{2016/05/21}{変更履歴も出力するようにした} % \begin{chuui} % これは、株式会社アスキー(現アスキー・メディアワークス\footnote{アスキー % 日本語\TeX{}(\pTeX{})、\texttt{http://ascii.asciimw.jp/pb/ptex/}})が % 配布している\pLaTeXe{}の付属文書ではありません。アスキーのオリジナル版 % からforkしたコミュニティ版\pLaTeXe{}の付属文書です。 % \end{chuui} % % 2010年以降、アスキー\pTeX{}は、国際的に広く使われている\TeX\ Liveという % ディストリビューションに取り込まれ、そこで独自の改良や仕様変更が加えられ % てきました。最近の\TeX\ LiveやW32\TeX{}では、\pLaTeX{}も元々の\pTeX{}で % はなく、その拡張版\epTeX{}をエンジンとして用いるようになっています。 % また、\pLaTeX{}のベースである\LaTeX{}も更新が進められています。 % % こうした流れにあわせた新しい\pLaTeX{}として、アスキー版からforkして % 日本語\TeX{}開発コミュニティ (Japanese \TeX\ Development Community) が % 配布しているものが、コミュニティ版\pLaTeX{}です。開発中の版はGitHubの % リポジトリ\footnote{\texttt{https://github.com/texjporg/platex}}で % 管理しています。コミュニティ版\pLaTeX{}はアスキー版とは異なりますので、 % バグレポートはアスキー宛てではなく、日本語\TeX{}開発コミュニティに報告 % してください。\TeX\ ForumやGitHubのIssueシステムが利用できます。 % % この文書(platex.pdf)はコミュニティ版\pLaTeX{}の概要を説明した % もので、実際の\pLaTeX{}のソースコードはpldoc.pdfで説明しています。 % % % \clearpage % % \section{概要}\label{platex:intro} % この文書は、p\LaTeXe{}の概要を示していますが、使い方のガイドでは % ありません。p\LaTeXe{}の機能についての説明は、\cite{platex2e-book}を % 参照してください。日本語\TeX{}については\cite{jtex-tech}を参照してください。 % \changes{v1.0}{1995/05/08}{first edition} % \changes{v1.0a}{1995/08/25}{互換性について、\dst{}の使い方、参考文献を追加} % % 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}節] % この節です。この文書についての概要を述べています。 % % \item[第\ref{platex:plcore}節] % p\LaTeXe{}で拡張した機能についての概要です。 % 付属のクラスファイルやパッケージファイルについても簡単に % 説明しています。 % % \item[第\ref{platex:compatibility}節] % 旧バージョンのp\LaTeX{}との互換性について述べています。 % % \item[付録\ref{app:dst}] % この文書ソースの\dst{}のためのオプションについて述べています。 % % \item[付録\ref{app:pldoc}] % p\LaTeXe{}のdtxファイルをまとめて一つのDVIファイルにするための % 文書ファイルの説明をしています。 % % \item[付録\ref{app:omake}] % 付録\ref{app:pldoc}で説明をした文書ファイルを処理するshスクリプト(手順)、 % \dst{}文書ファイル内の入れ子の対応を調べるperlスクリプトなどについて % 説明しています。 % \end{description} % \end{quote} % % % % \section{p\LaTeXe{}の機能について}\label{platex:plcore} % p\LaTeXe{}の機能は、いくつものファイルに分割されて実装されています。 % これらのファイルはつぎの3種類に分類することができます。 % % \begin{itemize} % \item フォーマットファイル % \item クラスファイル % \item パッケージファイル % \end{itemize} % % フォーマットファイルには、基本的な機能が定義されており、 % p\LaTeXe{}の核となるファイルです。このファイルに定義されているマクロは、 % 実行時の速度を高めるために、あらかじめ\TeX の内部形式の形で保存されて % います。 % % クラスファイルは文書のレイアウトを設定するファイル、 % パッケージファイルはマクロの拡張を定義するファイルです。 % 前者は|\documentclass|コマンドを用いて読み込み、 % 後者は|\usepackage|コマンドを用いて読み込みます。 % % \begin{chuui}[古いp\LaTeX~2.09ユーザへの注意:]\normalfont % クラスファイルとパッケージファイルは、従来、スタイルファイルと呼ばれていた % ものです。\LaTeXe{}ではそれらを、レイアウトに関するものをクラスファイルと % 呼び、マクロの拡張をするものをパッケージファイルと呼んで区別するように % なりました。 % % \TeX{}文書が使用するクラスは、文書のプリアンブルで|\documentclass|コマンド % を用いて指定します。|\documentclass|ではなく、旧版の|\documentstyle|を % 用いると、自動的に\emph{2.09互換モード}に入ります。 % 互換モードは旧版の文書を組版するためだけに作られていますので、 % 新しく文書を作成する場合は、|\documentclass|コマンドを用いてください。 % 互換モードでは\LaTeX{}の新機能も使えなくなります。 % % 旧版では、|\documentstyle|のオプションでマクロファイルを読み込んで % いましたが、\LaTeX{}では、|\usepackage|コマンドを用いて読み込みます。 % \end{chuui} % % \subsection{フォーマットファイル} % フォーマットファイルには、基本的な機能が定義されていますが、 % これらは\TeX{}の内部形式に変換された形式となっています。 % フォーマットファイルを作成するには、 % ソースファイル``platex.ltx''を|iniptex|プログラムで処理します。 % ただし、\TeX\ LiveやW32\TeX{}ではこの処理を簡単にする|fmtutil-sys|あるいは % |fmtutil|というプログラムが用意されています。 % 以下を実行すれば、フォーマットファイル\file{platex.fmt}が作成されます。 %\begin{verbatim} % fmtutil-sys --byfmt platex %\end{verbatim} % % 次のリストが、``platex.ltx''の内容です。 % ただし、このバージョンでは、\LaTeX{}からp\LaTeXe{}への拡張を % \file{plcore.ltx}をロードすることで行ない、 % \file{latex.ltx}には直接、手を加えないようにしています。 % したがって\file{platex.ltx}はとても短いものとなっています。 % \file{latex.ltx}には\LaTeX{}のコマンドが、 % \file{plcore.ltx}にはp\LaTeXe{}で拡張したコマンドが定義されています。 % \begin{macrocode} %<*plcore> % \end{macrocode} % % \file{latex.ltx}の末尾で使われている|\dump|をいったん無効化します。 % \begin{macrocode} \let\orgdump\dump \let\dump\relax % \end{macrocode} % % \file{latex.ltx}を読み込み、起動時のバナーを保存します。\TeX\ Liveの標準的 % インストールでは、この中でBabel由来のハイフネーション・パターン % \file{hyphen.cfg}が読み込まれ、そのバージョンも含めて保存されるはずです。 % %\iffalse % 2016/05/07の実装では、\file{platex.ltx}のなかで %\begin{verbatim} % \edef\platexBANNER{\the\everyjob} %\end{verbatim} % としてバナーを保存し、この内容が %\begin{verbatim} % \typeout{LaTeX2e version}\typeout{Babel version} %\end{verbatim} % という4つのトークンから成ると仮定して、\file{plcore.ltx}のなかで %\begin{verbatim} % \def\parse@@BANNER#1#2#3#4{#2} %\end{verbatim} % のようにパースしていました。ところが、この「4つのトークンから成る」と % いう仮定はBabel由来の\file{hyphen.cfg}を使用した場合のみ成り立ち、 % それ以外の特別な\file{hyphen.cfg}や\file{hyphen.ltx}を使用した場合に % エラーになってしまいます。 % そこで、新たに2016/09/14の実装では、\file{platex.ltx}のなかで %\begin{verbatim} % \edef\platexBANNER{\the\everyjob\noexpand\typeout{}\relax} %\end{verbatim} % としてダミーを追加します(|\relax|はただの区切りトークンの役割)。 % こうすると、|\platexBANNER|の内容は、Babelの\file{hyphen.cfg}のとき %\begin{verbatim} % \typeout{LaTeX2e version}\typeout{Babel version}\typeout{}\relax %\end{verbatim} % となり、それ以外のとき %\begin{verbatim} % \typeout{LaTeX2e version}\typeout{}\relax %\end{verbatim} % となるはずです。このように、少なくとも|\typeout|が2回含まれています % ので、\file{plcore.ltx}のなかで %\begin{verbatim} % \def\parse@@BANNER\typeout#1\typeout#2#3\relax{#1} %\end{verbatim} % とパースすることができるようになります。 %\fi % % \changes{v1.0g}{2016/05/07}{フォーマット作成時に\LaTeX{}のバナーを一旦保存} % \changes{v1.0n}{2016/09/14}{\LaTeX{}のバナーの保存しかたを改良} % \begin{macrocode} \input latex.ltx \edef\platexBANNER{\the\everyjob\noexpand\typeout{}\relax}% save LaTeX banner % \end{macrocode} % % \file{plcore.ltx}を読み込み、このp\LaTeX{}のバージョンを表示します。 % \begin{macrocode} \typeout{**************************^^J% *^^J% * making pLaTeX format^^J% *^^J% **************************} \makeatletter \input plcore.ltx \the\everyjob % \end{macrocode} % % 起動時に\file{platex.cfg}がある場合、それを読み込むようにします。 % バージョン2016/07/01ではコードを\file{plcore.ltx}に入れていました % が、\file{platex.ltx}へ移動しました。 % \changes{v1.0m}{2016/08/26}{\file{platex.cfg}の読み込みを % \file{plcore.ltx}から\file{platex.ltx}へ移動} % \begin{macrocode} \everyjob\expandafter{% \the\everyjob \IfFileExists{platex.cfg}{% \typeout{*************************^^J% * Loading platex.cfg.^^J% *************************}% \input{platex.cfg}}{}% } % \end{macrocode} % % フォーマットファイルにダンプします。 % \changes{v1.0i}{2016/05/12}{一時コマンド\cs{orgdump}を最終的に未定義へ} % \begin{macrocode} \let\dump\orgdump \let\orgdump\@undefined \makeatother \dump %\endinput % \end{macrocode} % % \begin{macrocode} % % \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{クラスファイルとパッケージファイル} % ^^A クラスファイルとパッケージファイルは、従来、スタイルファイルと呼ばれていた % ^^A ものです。\LaTeX{}ではそれらを、レイアウトに関するものをクラスファイルと % ^^A 呼び、マクロの拡張をするものをパッケージファイルと呼んで区別するように % ^^A なりました。 % % p\LaTeXe{}が提供をする、クラスファイルやパッケージファイルのいくつかは、 % オリジナルのファイルを修正しています。 % ^^A 修正箇所には``\texttt{platex}''条件が付けられています。 % % p\LaTeXe{}に付属のクラスファイルは、次のとおりです。 % \changes{v1.0d}{2016/01/27}{p\LaTeXe{}に付属するファイルの説明を更新} % \changes{v1.0j}{2016/05/20}{pfltraceの説明を追加} % % \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}から作成される。 % \end{itemize} % % また、p\LaTeXe{}に付属のパッケージファイルは、次のとおりです。 % % \begin{itemize} % \item plext.sty\par % 縦組用の拡張コマンドなどが定義されているファイル。 % % \item oldpfont.sty\par % p\LaTeX~2.09のフォントコマンドを提供するパッケージ。 % \file{pl209.dtx}から作成される。 % % \item ptrace.sty\par % \LaTeX{}でフォント選択コマンドのトレースに使う\file{tracefnt.sty}が % 再定義してしまう\NFSS2コマンドを、p\LaTeXe{}用に再々定義するための % パッケージ。 % \file{plfonts.dtx}から作成される。 % % \item pfltrace.sty\par % \LaTeX{}でフロート関連コマンドのトレースに使う\file{fltrace.sty}% % \footnote{\LaTeX\ 2014/05/01で追加されました。参考: % \LaTeXe\ News Issue 21 (ltnews21.tex)}が再定義してしまうコマンド % を、p\LaTeXe{}用に再々定義するためのパッケージ。 % \file{plcore.dtx}から作成される。 % % \item ascmac.sty, tascmac.sty\par % \LaTeX{}の標準機能の範囲で、図や罫線で囲んだボックスを出力する命令 % などを提供するパッケージ。旧バージョンのp\LaTeX{}でも配布されていた。 % % \item nidanfloat.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{}で拡張しているコマンドと同じ名前のコマンドを % 再定義している場合は、コマンドの拡張の仕方によってはエラーになることも % あります。用いようとしている、クラスファイルやパッケージファイルが % うまく動くかどうかを、完全に確かめる方法は残念ながらありません。 % 一番簡単なのは、動かしてみることです。不幸にもうまく動かない場合は、 % ログファイルや付属の文書ファイルを参考に原因を調べてください。 % % \subsection{latexreleaseパッケージへの対応} % \changes{v1.0e}{2016/02/16}{platexreleaseの説明を追加} % \LaTeX\ \texttt{<2015/01/01>}で導入されたlatexreleaseパッケージを % もとに、新しいp\LaTeX{}ではplatexreleaseパッケージを用意しました。 % platexreleaseパッケージを用いると、過去のp\LaTeX{}をエミュレート % したり、フォーマットを作り直すことなく新しいp\LaTeX{}を試したりする % ことができます。詳細はplatexreleaseのドキュメントを参照してください。 % % % % \appendix % % \section{\dst{}プログラムのためのオプション}\label{app:dst} % この文書のソース(platex.dtx)を\dst{}プログラムによって処理することによって、 % いくつかの異なるファイルを生成することができます。 % \dst プログラムの詳細は、\file{docstrip.dtx}を参照してください。 % % この文書の\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{\|} % % \subsection{ファイルの取り出し方} % % たとえば、この文書の``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{fmt.ins}を作成し、 % |platex fmt.ins|することでも\file{platex.ltx}を作ることができます。 % %\begin{verbatim} % \def\batchfile{fmt.ins} % \input docstrip.tex % \generateFile{platex.ltx}{t}{\from{platex.dtx}{plcore}} %\end{verbatim} % % % \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.} % \changes{v1.0h}{2016/05/08}{ドキュメントから\file{plpatch.ltx}を除外} % \changes{v1.0l}{2016/06/19}{パッチレベルを\file{plvers.dtx}から取得} % \changes{v1.0o}{2017/09/24}{パッチレベルが負の数の場合をpre-release扱いへ} % \begin{macrocode} \begin{document} \title{The p\LaTeXe\ Sources} \author{Ken Nakano \& Japanese \TeX\ Development Community} % 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 and patch level from plvers.dtx \makeatletter \let\patchdate=\@empty \begingroup \def\ProvidesFile#1\pfmtversion#2#3\ppatch@level#4{% \date{#2}\xdef\patchdate{#4}\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 % number is assumed \ifx\patchdate>0 \edef\@date{\@date\space Patch level\space\patchdate} \else \edef\@date{\@date\space Pre-Release\patchdate} \fi\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 (comment out May 8, 2016) % \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などのバッチ % ファイルに修正することができます。}の使用方法は次のとおりです。 %\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.} % \changes{v1.0d}{2016/01/27}{\file{mkpldoc.sh}を改善} % \begin{macrocode} %<*shprog> for f in pldoc.toc pldoc.idx pldoc.glo ; do if [ -e $f ]; then rm $f; fi done % \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