summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/uplatex/base/uplatex.dtx
blob: fbe4391b811d2af60970f649ce5882206757b6c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
% \iffalse meta-comment
%% File: uplatex.dtx
%
%    pLaTeX base file:
%       Copyright 1995,1996 ASCII Corporation.
%    and modified for upLaTeX
%
%  Copyright (c) 2010 ASCII MEDIA WORKS
%  Copyright (c) 2016 Takuji Tanaka
%  Copyright (c) 2016-2017 Japanese TeX Development Community
%
%  This file is part of the upLaTeX2e 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}
% \def\upTeX{u\pTeX}
% \def\eupTeX{$\varepsilon$-\upTeX}
% \def\upLaTeX{u\pLaTeX}
% \def\upLaTeXe{u\pLaTeXe}
% \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.0c-u00}{2011/05/07}{p\LaTeX{}用からup\LaTeX{}用に修正。}
% \changes{v1.0d}{2016/01/27}{\file{mkpldoc.sh}を改善。
%     p\LaTeXe{}に付属するファイルの説明を更新}
% \changes{v1.0e}{2016/02/16}{platexreleaseの説明を追加}
% \changes{v1.0e-u00}{2016/04/06}{p\LaTeX{}の変更に追随。}
% \changes{v1.0f}{2016/04/12}{ドキュメントを更新}
% \changes{v1.0g}{2016/05/07}{フォーマット作成時に\LaTeX{}のバナーを一旦保存}
% \changes{v1.0h-u00}{2016/05/08}{ドキュメントから\file{uplpatch.ltx}を除外}
% \changes{v1.0i}{2016/05/12}{一時コマンド\cs{orgdump}を最終的に未定義へ}
% \changes{v1.0j}{2016/05/20}{pfltraceの説明を追加}
% \changes{v1.0k}{2016/05/21}{変更履歴も出力するようにした}
% \changes{v1.0k-u00}{2016/05/21}{p\LaTeX{}の変更に追随。}
% \changes{v1.0k-u01}{2016/06/06}{up\LaTeX{}用にドキュメントを全体的に改訂}
% \changes{v1.0l-u01}{2016/06/19}{パッチレベルを\file{uplvers.dtx}から取得}
% \changes{v1.0m-u01}{2016/08/26}{\file{uplatex.cfg}の読み込みを
%    \file{uplcore.ltx}から\file{uplatex.ltx}へ移動}
% \changes{v1.0n}{2016/09/14}{\LaTeX{}のバナーの保存しかたを改良}
% \changes{v1.0n-u01}{2016/09/14}{p\LaTeX{}の変更に追随。}
% \changes{v1.0o}{2017/09/24}{パッチレベルが負の数の場合をpre-release扱いへ}
% \changes{v1.0o-u01}{2017/09/24}{p\LaTeX{}の変更に追随。}
% \fi
%
% \iffalse
%<*driver>
\NeedsTeXFormat{pLaTeX2e}
% \fi
\ProvidesFile{uplatex.dtx}[2017/09/24 v1.0o-u01 upLaTeX document file]
% \iffalse
\documentclass{jltxdoc}
\usepackage{plext}
\GetFileInfo{uplatex.dtx}
\title{up\LaTeXe{}について}
\author{Ken Nakano \& Japanese \TeX\ Development Community \& TTK}
\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 (uplatex.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}
%</driver>
% \fi
%
%
% \changes{v1.0c-u00}{2011/05/07}{p\LaTeX{}用からup\LaTeX{}用に修正。}
% \changes{v1.0k-u01}{2016/06/06}{up\LaTeX{}用にドキュメントを全体的に改訂}
% \begin{chuui}
% これは、アスキーのオリジナル版からforkしたコミュニティ版\pLaTeXe{}の
% 付属文書を\upLaTeXe{}用に書き換えたものです。
% \end{chuui}
%
% アスキー\pTeX{}には、高品質の日本語組版ソフトウェアとしてデファクト
% スタンダードの地位にあるといえます。しかし、
% (1) 直接使える文字集合が原則的にJIS X 0208(JIS第1,2水準)の範囲に限定
% されていること、
% (2) 8bitの非英語欧文との親和性が高いとは言えないこと、
% (3) \pTeX{}の利用が日本語に限られ、中国語・韓国語との混植への利用が
% 進んでいないこと、といった弱点がありました。
%
% これらの弱点を克服するため、\pTeX{}の内部コードをUnicode化した拡張版
% が\upTeX{}です。また、\upTeX{}上で用いるUnicode版\pLaTeX{}が\upLaTeX{}で
% す\footnote{\texttt{http://www.t-lab.opal.ne.jp/tex/uptex.html}}。
% 現在の\upLaTeX{}は、日本語\TeX{}開発コミュニティが配布しているコミュニティ
% 版\pLaTeX{}\footnote{\texttt{https://github.com/texjporg/platex}}を
% ベースにしています。開発中の版は\pLaTeX{}と同様に、GitHubの
% リポジトリ\footnote{\texttt{https://github.com/texjporg/uplatex}}で
% 管理しています。
%
% より詳細な\upTeX{}や\upLaTeX{}の情報は、
% それぞれ\file{README\_uplatex.txt}や\file{README\_uptex.txt}などの
% テキストファイルを参照してください。
%
%
% \clearpage
%
% \section{概要}\label{platex:intro}
% この文書は、up\LaTeXe{}の概要を示していますが、使い方のガイドではありません。
% 元となっているp\LaTeXe{}や\LaTeXe{}については、それぞれp\LaTeXe{}と
% \LaTeXe{}の付属文書を参照してください。
%
% この文書の構成は次のようになっています。
%
% \begin{quote}
% \begin{description}
% \item[第\ref{platex:intro}節]
%  この節です。この文書についての概要を述べています。
%
% \item[第\ref{platex:plcore}節]
%  up\LaTeXe{}で拡張した機能についての概要です。
%  付属のクラスファイルやパッケージファイルについても簡単に
%  説明しています。
%
% ^^A \item[第\ref{platex:compatibility}節]
% ^^A  旧バージョンのp\LaTeX{}との互換性について述べています。
%
% \item[付録\ref{app:dst}]
%  この文書ソースの\dst{}のためのオプションについて述べています。
%
% \item[付録\ref{app:pldoc}]
%  up\LaTeXe{}のdtxファイルをまとめて一つのDVIファイルにするための
%  文書ファイルの説明をしています。
%
% \item[付録\ref{app:omake}]
%  付録\ref{app:pldoc}で説明をした文書ファイルを処理するshスクリプト(手順)、
%  \dst{}文書ファイル内の入れ子の対応を調べるperlスクリプトなどについて
%  説明しています。
% \end{description}
% \end{quote}
%
%
%
% \section{up\LaTeXe{}の機能について}\label{platex:plcore}
% up\LaTeXe{}の機能は、いくつものファイルに分割されて実装されています。
% これらのファイルはつぎの3種類に分類することができます。
%
% \begin{itemize}
% \item フォーマットファイル
% \item クラスファイル
% \item パッケージファイル
% \end{itemize}
%
% フォーマットファイルには、基本的な機能が定義されており、
% up\LaTeXe{}の核となるファイルです。このファイルに定義されているマクロは、
% 実行時の速度を高めるために、あらかじめ\TeX の内部形式の形で保存されて
% います。
%
% クラスファイルは文書のレイアウトを設定するファイル、
% パッケージファイルはマクロの拡張を定義するファイルです。
% 前者は|\documentclass|コマンドを用いて読み込み、
% 後者は|\usepackage|コマンドを用いて読み込みます。
%
% \begin{chuui}[古いp\LaTeX~2.09ユーザへの注意:]%\normalfont
% u\pLaTeX{}は新しいマクロパッケージですので、2.09互換モードはサポートして
% いません。\LaTeXe{}の仕様に従ってドキュメントを作成してください。
% \end{chuui}
%
% \subsection{フォーマットファイル}
% フォーマットファイルには、基本的な機能が定義されていますが、
% これらは\TeX{}の内部形式に変換された形式となっています。
% フォーマットファイルを作成するには、
% ソースファイル``uplatex.ltx''を|iniuptex|プログラムで処理します。
% ただし、\TeX\ LiveやW32\TeX{}ではこの処理を簡単にする|fmtutil-sys|あるいは
% |fmtutil|というプログラムが用意されています。
% 以下を実行すれば、フォーマットファイル\file{uplatex.fmt}が作成されます。
%\begin{verbatim}
%   fmtutil-sys --byfmt uplatex
%\end{verbatim}
%
% 次のリストが、``uplatex.ltx''のの内容です。
% ただし、このバージョンでは、\LaTeX{}からup\LaTeXe{}への拡張を
% \file{uplcore.ltx}をロードすることで行ない、
% \file{latex.ltx}には直接、手を加えないようにしています。
% したがって\file{uplatex.ltx}はとても短いものとなっています。
% \file{latex.ltx}には\LaTeX{}のコマンドが、
% \file{uplcore.ltx}にはup\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{uplcore.ltx}を読み込み、このup\LaTeX{}のバージョンを表示します。
%    \begin{macrocode}
\typeout{**************************^^J%
         *^^J%
         * making upLaTeX format^^J%
         *^^J%
         **************************}
\makeatletter
\input uplcore.ltx
\the\everyjob
%    \end{macrocode}
%
% 起動時に\file{uplatex.cfg}がある場合、それを読み込むようにします。
% バージョン2016/07/01ではコードを\file{uplcore.ltx}に入れていました
% が、\file{uplatex.ltx}へ移動しました。
% \changes{v1.0m-u01}{2016/08/26}{\file{uplatex.cfg}の読み込みを
%    \file{uplcore.ltx}から\file{uplatex.ltx}へ移動}
%    \begin{macrocode}
\everyjob\expandafter{%
  \the\everyjob
  \IfFileExists{uplatex.cfg}{%
    \typeout{*************************^^J%
             * Loading uplatex.cfg.^^J%
             *************************}%
    \input{uplatex.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}
%</plcore>
%    \end{macrocode}
%
% 実際にup\LaTeXe{}への拡張を行なっている\file{uplcore.ltx}は、
% \dst{}プログラムによって、次のファイルの断片が連結されたものです。
%
% \begin{itemize}
% \item \file{uplvers.dtx}は、up\LaTeXe{}のフォーマットバージョンを
%   定義しています。
% \item \file{uplfonts.dtx}は、\NFSS2を拡張しています。
% \item このほか、p\LaTeXe{}に含まれる\file{plcore.dtx}をそのまま利用
%   しています。これは、上記以外のコマンドでフォーマットファイルに
%   格納されるコマンドを定義しています。
% \end{itemize}
%
% プリロードフォントや組版パラメータなどの設定は、
% \file{upldefs.ltx}をロードすることで行なっています。
% このファイルに記述されている設定を変更すれば、
% up\LaTeXe{}をカスタマイズすることができます。
% カスタマイズする場合は、このファイルを直接、修正するのではなく、
% \file{upldefs.cfg}という名前でコピーをして、そのファイルを編集します。
% \file{upldefs.cfg}は\file{upldefs.ltx}の代わりに読み込まれます。
%
%
% \subsubsection{バージョン}
% up\LaTeXe{}のバージョンやフォーマットファイル名は、
% \file{uplvers.dtx}で定義しています。これは、p\LaTeXe{}のバージョンや
% フォーマットファイル名が\file{plvers.dtx}で定義されているのと同じです。
%
%
% \subsubsection{\NFSS2コマンド}
% \LaTeX{}では、フォント選択機構として\NFSS2を用いています。
% p\LaTeXe{}では、オリジナルの\NFSS2 と同様のインターフェイスで、
% 和文フォントを選択できるように、\file{plfonts.dtx}で\NFSS2を拡張して
% いますので、up\LaTeXe{}も\file{uplfonts.dtx}で同じ方式を採用しています。
%
% ^^A p\LaTeXe{}の\NFSS2は、フォントを切替えるコマンドを指定するときに、
% ^^A それが欧文書体か和文書体のいずれかを対象とするものかを、
% ^^A できるだけ意識しないようにする方向で拡張しています。
% ^^A いいかえれば、コマンドが(可能な限りの)判断をします。
% ^^A したがって数多くある英語版のクラスファイルやパッケージファイルなどで
% ^^A 書体の変更を行っている箇所を修正する必要はあまりありません。
%
% \file{uplfonts.dtx}ファイルでは、\NFSS2コマンドの定義のほか、プリロード
% フォントの設定、和文エンコードの定義、組版パラメータなどの設定、
% フォント定義ファイルなどの記述も含まれています。
%
% ^^A \NFSS2についての詳細は、\LaTeXe に付属の\file{fntguide.tex}を参照して
% ^^A ください。
%
%
% ^^A \subsubsection{出力ルーチンとフロート}
% ^^A \file{plcore.dtx}は、次の項目に関するコマンドを日本語処理用に修正や拡張
% ^^A をしています。
% ^^A
% ^^A \begin{itemize}
% ^^A \item プリアンブルコマンド
% ^^A \item 改ページ
% ^^A \item 改行
% ^^A \item オブジェクトの出力順序
% ^^A \item トンボ
% ^^A \item 脚注マクロ
% ^^A \item 相互参照
% ^^A \item 疑似タイプ入力
% ^^A \end{itemize}
%
%
% \subsection{クラスファイルとパッケージファイル}
% ^^A クラスファイルとパッケージファイルは、従来、スタイルファイルと呼ばれていた
% ^^A ものです。\LaTeX{}ではそれらを、レイアウトに関するものをクラスファイルと
% ^^A 呼び、マクロの拡張をするものをパッケージファイルと呼んで区別するように
% ^^A なりました。
%
% up\LaTeXe{}が提供をする、クラスファイルやパッケージファイルのいくつかは、
% p\LaTeXe{}に含まれるファイルを修正しています。
% ^^A 修正箇所には``\texttt{platex}''条件が付けられています。
%
% up\LaTeXe{}に付属のクラスファイルは、次のとおりです。
% ^^A \changes{v1.0d}{2016/01/27}{p\LaTeXe{}に付属するファイルの説明を更新}
% ^^A \changes{v1.0j}{2016/05/20}{pfltraceの説明を追加}
%
% \begin{itemize}
% \item ujbook.cls, ujarticle.cls, ujreport.cls\par
%   横組用の標準クラスファイル。\file{ujclasses.dtx}から作成される。
%
% \item utbook.cls, utarticle.cls, utreport.cls\par
%   縦組用の標準クラスファイル。\file{ujclasses.dtx}から作成される。
%
% ^^A \item jltxdoc.cls\par
% ^^A   日本語の\file{.dtx}ファイルを組版するためのクラスファイル。
% ^^A  \file{jltxdoc.dtx}から作成される。
% \end{itemize}
%
% また、up\LaTeXe{}に付属のパッケージファイルは、次のとおりです。
%
% \begin{itemize}
% ^^A \item plext.sty\par
% ^^A   縦組用の拡張コマンドなどが定義されているファイル。
% ^^A
% ^^A \item oldpfont.sty\par
% ^^A   p\LaTeX~2.09のフォントコマンドを提供するパッケージ。
% ^^A   \file{pl209.dtx}から作成される。
%
% \item uptrace.sty\par
%   \LaTeX{}でフォント選択コマンドのトレースに使う\file{tracefnt.sty}が
%   再定義してしまう\NFSS2コマンドを、up\LaTeXe{}用に再々定義するための
%   パッケージ。
%   \file{uplfonts.dtx}から作成される。
%
% ^^A \item pfltrace.sty\par
% ^^A   \LaTeX{}でフロート関連コマンドのトレースに使う\file{fltrace.sty}%
% ^^A   \footnote{\LaTeX\ 2014/05/01で追加されました。参考:
% ^^A   \LaTeXe\ News Issue 21 (ltnews21.tex)}が再定義してしまうコマンド
% ^^A   を、p\LaTeXe{}用に再々定義するためのパッケージ。
% ^^A   \file{plcore.dtx}から作成される。
% ^^A
% ^^A \item ascmac.sty, tascmac.sty\par
% ^^A   \LaTeX{}の標準機能の範囲で、図や罫線で囲んだボックスを出力する命令
% ^^A   などを提供するパッケージ。旧バージョンのp\LaTeX{}でも配布されていた。
% ^^A
% ^^A \item nidanfloat.sty\par
% ^^A   二段組時に段抜きのフロートをページ下部にも配置可能にする
% ^^A   パッケージ。
% \end{itemize}
%
%
% \section{旧バージョンとの互換性}\label{platex:compatibility}
% ここでは、このバージョンと以前のバージョンとの互換性や拡張部分について
% 説明をしています。
%
% \subsection{p\LaTeX{}との互換性}
% up\LaTeXe{}は、p\LaTeX{}の上位互換という形を取っていますので、
% クラスファイルやいくつかのコマンドを置き換えるだけで、
% たいていのp\LaTeX{}文書を簡単にup\LaTeX{}文書に変更することができます。
% ただし、up\LaTeX{}ではp\LaTeX{}で問題が指摘されていたフォントメトリックの
% 不都合などいくつかのパラメータを変更していますので、レイアウトが変化
% することがあります。
%
% また、u\pLaTeX{}は新しいマクロパッケージですので、2.09互換モードを
% サポートしていません。\LaTeXe{}の仕様に従ってドキュメントを作成して
% ください。
%
% ^^A \subsection{p\LaTeX~2.09との互換性}
% ^^A p\LaTeXe{}は、\LaTeX{}の上位互換という形を取っていますが、
% ^^A いくつかのパラメータなども変更しています。
% ^^A したがって英文書など、\LaTeX{}でも処理できるファイルを
% ^^A p\LaTeXe{}で処理しても、完全に同じ結果になるとは限りません。
% ^^A これは、英語版の\LaTeX{}でも同じです。
% ^^A 詳細は、\LaTeXe に付属の\file{usrguide.tex}を参照してください。
%
% p\LaTeX{}向けあるいは\LaTeX{}向けに作られた多くのクラスファイルや
% パッケージファイルはそのまま使えると思います。ただし、p\LaTeX{}標準の
% 漢字エンコーディング(JY1, JT1)を前提としたものがup\LaTeX{}で採用した
% 漢字エンコーディング(JY2, JT2)と合致しないといったエラーが発生すること
% もあります。用いようとしているクラスファイルやパッケージファイルが
% うまく動くかどうかを、完全に確かめる方法は残念ながらありません。
% 一番簡単なのは、動かしてみることです。不幸にもうまく動かない場合は、
% ログファイルや付属の文書ファイルを参考に原因を調べてください。
% ^^A 多くのクラスファイルやパッケージファイルはそのまま使えると思います。
% ^^A ただし、それらがp\LaTeXe{}で拡張しているコマンドと同じ名前のコマンドを
% ^^A 再定義している場合は、コマンドの拡張の仕方によってはエラーになることも
% ^^A あります。用いようとしている、クラスファイルやパッケージファイルが
% ^^A うまく動くかどうかを、完全に確かめる方法は残念ながらありません。
% ^^A 一番簡単なのは、動かしてみることです。不幸にもうまく動かない場合は、
% ^^A ログファイルや付属の文書ファイルを参考に原因を調べてください。
%
% \subsection{latexreleaseパッケージへの対応}
% ^^A \changes{v1.0e}{2016/02/16}{platexreleaseの説明を追加}
% \LaTeX\ \texttt{<2015/01/01>}で導入されたlatexreleaseパッケージを
% もとに、新しいp\LaTeX{}ではplatexreleaseパッケージが用意されました。
% 本来はup\LaTeX{}でも同様のパッケージを用意するのがよいのですが、
% 現在はp\LaTeX{}からup\LaTeX{}への変更点が含まれていませんので、
% 幸いplatexreleaseパッケージをそのまま用いることができます。
% このため、up\LaTeX{}で独自のパッケージを用意することはしていません。
% platexreleaseパッケージを用いると、過去のup\LaTeX{}をエミュレート
% したり、フォーマットを作り直すことなく新しいup\LaTeX{}を試したりする
% ことができます。詳細はplatexreleaseのドキュメントを参照してください。
%
%
%
% \appendix
%
% \section{\dst{}プログラムのためのオプション}\label{app:dst}
% この文書のソース(uplatex.dtx)を\dst{}プログラムによって処理することによって、
% いくつかの異なるファイルを生成することができます。
% \dst プログラムの詳細は、\file{docstrip.dtx}を参照してください。
%
% この文書の\dst{}プログラムのためのオプションは、次のとおりです。
%
% \DeleteShortVerb{\|}
% \begin{center}
% \begin{tabular}{l|p{.8\linewidth}}
% \emph{オプション} & \emph{意味}\\\hline
% plcore & フォーマットファイルを作るためのファイルを生成\\
% pldoc  & up\LaTeXe{}のソースファイルをまとめて組版するための
%          文書ファイルを生成\\[2mm]
% shprog & 上記のファイルを作成するためのshスクリプトを生成\\
% plprog & 入れ子構造を調べる簡単なperlスクリプトを生成\\
% Xins   & 上記のshスクリプトやperlスクリプトを取り出すための
%            \dst{}バッチファイルを生成\\
% \end{tabular}
% \end{center}
% \MakeShortVerb{\|}
%
% \subsection{ファイルの取り出し方}
%
% たとえば、この文書の``plcore''の部分を``\file{uplatex.ltx}''という
% ファイルにするときの手順はつぎのようになります。
%
% \begin{enumerate}
% \item uplatex docstrip
% \item 入力ファイルの拡張子(dtx)を入力する。
% \item 出力ファイルの拡張子(ltx)を入力する。
% \item \dst{}オプション(plcore)を入力する。
% \item 入力ファイル名(uplatex)を入力する。
% \item \file{uplatex.ltx}が存在する場合は、確認を求めてくるので、
%  ``y''を入力する。
% \item 別の処理を行なうかを問われるので、``n''を入力する。
% \end{enumerate}
% これで、\file{uplatex.ltx}が作られます。
%
% あるいは、次のような内容のファイル\file{fmt.ins}を作成し、
% |uplatex fmt.ins|することでも\file{uplatex.ltx}を作ることができます。
%
%\begin{verbatim}
%   \def\batchfile{fmt.ins}
%   \input docstrip.tex
%   \generateFile{uplatex.ltx}{t}{\from{uplatex.dtx}{plcore}}
%\end{verbatim}
%
%
% \section{文書ファイル}\label{app:pldoc}
% ^^A \changes{v1.0c}{1997/01/25}{Add to filecontents environment for pldoc.dic.}
% ここでは、このパッケージに含まれているdtxファイルをまとめて組版をするための
% 文書ファイルについて説明をしています。個別に処理した場合と異なり、
% 変更履歴や索引も付きます。全体で、およそ120ページ程度になります。
%
% |filecontents|環境は、引数に指定されたファイルが存在するときは何も
% しませんが、存在しないときは、環境内の内容でファイルを作成します。
% \file{upldoc.dic}ファイルは、mendexプログラムで索引を処理するときに
% \cs{西暦}, \cs{和暦}に対する「読み」を付けるために必要です。
%    \begin{macrocode}
%<*pldoc>
\begin{filecontents}{upldoc.dic}
西暦    せいれき
和暦    われき
\end{filecontents}
%    \end{macrocode}
% 文書クラスには、\file{jltxdoc}クラスを用います。
% ^^A \file{plext.dtx}の中でサンプルを組み立てていますので、
% ^^A \file{plext}パッケージが必要です。
%    \begin{macrocode}
\documentclass{jltxdoc}
%\usepackage{plext} %% comment out for upLaTeX
\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}
% ここからが本文ページとなります。
% ^^AA \changes{v1.0c}{1997/01/29}{Rename pltpatch to plpatch.}
% \changes{v1.0h-u00}{2016/05/08}{ドキュメントから\file{uplpatch.ltx}を除外}
% \changes{v1.0l-u01}{2016/06/19}{パッチレベルを\file{uplvers.dtx}から取得}
% \changes{v1.0o}{2017/09/24}{パッチレベルが負の数の場合をpre-release扱いへ}
%    \begin{macrocode}
\begin{document}
 \title{The up\LaTeXe\ Sources}
 \author{Ken Nakano \& Japanese \TeX\ Development Community \& TTK}

% This command will be used to input the patch file
% if that file exists.
\newcommand{\includeltpatch}{%
  \def\currentfile{uplpatch.ltx}
  \part{uplpatch}
  {\let\ttfamily\relax
    \xdef\filekey{\filekey, \thepart={\ttfamily\currentfile}}}%
  Things we did wrong\ldots
  \IndexInput{uplpatch.ltx}}

% Get the date and patch level from uplvers.dtx
\makeatletter
\let\patchdate=\@empty
\begingroup
   \def\ProvidesFile#1\pfmtversion#2#3\ppatch@level#4{%
      \date{#2}\xdef\patchdate{#4}\endinput}
   \input{uplvers.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{uplpatch.ltx}
    {\let\def\Xdef}{\global\let\includeltpatch\relax}
\endgroup

\ifx\@date\X@date
  \def\Xpatch{0}
  \ifx\patchdate\Xpatch\else
  % number is assumed
  \ifnum\patchdate>0
    \edef\@date{\@date\space Patch level\space\patchdate}
  \else
    \edef\@date{\@date\space Pre-Release\patchdate}
  \fi\fi
\else
   \@warning{uplpatch.ltx does not match uplvers.dtx!}
   \let\includeltpatch\relax
\fi
\makeatother

\pagenumbering{roman}
\maketitle
\renewcommand\maketitle{}
\tableofcontents
\clearpage
\pagenumbering{arabic}

\DocInclude{uplvers}   % upLaTeX version

\DocInclude{uplfonts}  % NFSS2 commands

%\DocInclude{plcore}   % kernel commands (comment out for upLaTeX)

%\DocInclude{plext}    % external commands (comment out for upLaTeX)

%\DocInclude{pl209}    % 2.09 compatibility mode commands (comment out for upLaTeX)

\DocInclude{ukinsoku}  % kinsoku parameter

\DocInclude{ujclasses} % Standard class

%\DocInclude{jltxdoc}  % dtx documents class (comment out for upLaTeX)

%\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}
%</pldoc>
%    \end{macrocode}
%
%
%
% \section{おまけプログラム}\label{app:omake}
%
% \subsection{シェルスクリプト\file{mkpldoc.sh}}\label{app:shprog}
% up\LaTeXe{}のマクロ定義ファイルをまとめて組版するときに便利なシェルスクリプトです。
% このシェルスクリプト\footnote{このシェルスクリプトはUNIX用です。
% しかしrmコマンドをdeleteコマンドにするなどすれば、簡単にDOSなどのバッチ
% ファイルに修正することができます。}の使用方法は次のとおりです。
%\begin{verbatim}
%    sh mkpldoc.sh
%\end{verbatim}
%
% \subsubsection{\file{mkpldoc.sh}の内容}
% まず、以前に\file{upldoc.tex}を処理したときに作成された、
% 目次ファイルや索引ファイルなどを削除します。
% ^^A \changes{v1.0c}{1997/01/23}{Don't copy gind.ist and gglo.ist from
% ^^A        \$TEXMF/tex/latex2e/base directory.}
% ^^A \changes{v1.0d}{2016/01/27}{\file{mkpldoc.sh}を改善}
%    \begin{macrocode}
%<*shprog>
for f in upldoc.toc upldoc.idx upldoc.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{upldoc.tex}を処理します。
%    \begin{macrocode}
uplatex upldoc.tex
%    \end{macrocode}
% 索引と変更履歴を作成します。
% このスクリプトでは、変更履歴や索引を生成するのにmendexプログラムを用いて
% います。mendexはmakeindexの上位互換のファイル整形コマンドで、
% 索引語の読みを自動的に付けるなどの機能があります。
%
% up\LaTeX{}の場合はmendexコマンドをUTF-8モードで実行する必要があります
% ので、|-U|というオプションを付けます\footnote{uplatexコマンドも
% 実際にはUTF-8モードで実行する必要がありますが、デフォルトの内部漢字
% コードがUTF-8に設定されているはずですので、\texttt{-kanji=utf8}を
% 付けなくても処理できると思います。}。
% makeindexコマンドには、このオプションがありません。
%
% |-s|オプションは、索引ファイルを整形するためのスタイルオプションです。
% 索引用の\file{gind.ist}と変更履歴用の\file{gglo.ist}は、
% \LaTeX{}のディストリビューションに付属しています。
%
% |-o|は、出力するファイル名を指定するオプションです。
%
% |-f|は、項目に``読み''がなくてもエラーとしないオプションです。
% makeindexコマンドには、このオプションがありません。
%    \begin{macrocode}
mendex -U -s gind.ist -d upldoc.dic -o upldoc.ind upldoc.idx
mendex -U -f -s gglo.ist -o upldoc.gls upldoc.glo
%    \end{macrocode}
% \file{ltxdoc.cfg}の内容を|\includeonly{}|にし、\file{upldoc.tex}を処理します。
% このコマンドは、引数に指定されたファイルだけを``|\include|''するための
% コマンドですが、ここでは何も|\include|したく\emph{ない}ので、
% 引数には何も指定をしません。
% しかし、|\input|で指定されているファイルは読み込まれます。
% したがって、目次や索引や変更履歴のファイルが処理されます。
% この処理は、主に、これらでエラーが出るかどうかの確認です。
%    \begin{macrocode}
echo "\includeonly{}" > ltxdoc.cfg
uplatex upldoc.tex
%    \end{macrocode}
% 最後に、再び\file{ltxdoc.cfg}を空にして、\file{upldoc.tex}を処理をします。
% 本文を1ページから開始していますので、この後、もう一度処理をする
% 必要はありません。
%    \begin{macrocode}
echo "" > ltxdoc.cfg
uplatex upldoc.tex
# EOT
%</shprog>
%    \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{条件}|>|''です。
% \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: `</$1>' (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;
%</plprog>
%    \end{macrocode}
%
% \subsection{\dst{}バッチファイル}
% ^^A \changes{v1.0b}{1996/02/01}{\dst{}にともなう変更}
% ^^A \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{uplatex.dtx}{plprog}}
   \file{mkpldoc.sh}{\from{uplatex.dtx}{shprog}}
}
\endbatchfile
%</Xins>
%    \end{macrocode}
%
% \iffalse ^^A comment out for upLaTeX
%
% \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}
%
% \fi
%
% \iffalse
% ここで、このあとに組版されるかもしれない文書のために、
% 節見出しの番号を算用数字に戻します。
% \fi
%
% \renewcommand{\thesection}{\arabic{section}}
%
% \Finale
%
\endinput