% \iffalse meta-comment
%% File: plcore.dtx
%
%  Copyright 1994-2001 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}
% \StopEventually{}
%
% \iffalse
% \changes{v1.0}{1994/09/16}{first edition}
% \changes{v1.1}{1995/04/12}{脚注マクロ修正}
% \changes{v1.1a}{1995/11/10}{\cs{topmargin}が反映されないバグを修正}
% \changes{v1.1b}{1996/01/26}{脚注マークの後ろに余計なスペースが入るのを修正}
% \changes{v1.1c}{1996/01/30}{ファイル名を\file{ploutput.dtx}から
%    \file{plcore.dtx}とした。キャプション拡張を\file{plext.dtx}に移動。
%    プリアンブルコマンドを追加}
% \changes{v1.1d}{1996/02/17}{\cs{printglossary}を追加}
% \changes{v1.1e}{1996/03/12}{tabbing環境での和欧文間スペース}
% \changes{v1.1f}{1996/07/10}{トンボまわりを修正}
% \changes{v1.1g}{1997/01/16}{\LaTeX\ \textt{!<1996/06/01!>}に対応}
% \changes{v1.1h}{1997/06/25}{\LaTeX\ の改行マクロの変更に対応}
% \changes{v1.1i}{1998/02/03}{\cs{@shipoutsetup}を\cs{@outputpage}内に入れた}
% \changes{v1.1j}{2001/05/10}{\cs{@makecol}で組み立てられる
%    \cs{@outputbox}の大きさが、縦組で中身が空のボックスだけの場合も適正になる
%    ように修正}
% \changes{v1.2}{2001/09/04}{本文と\cs{footnoterule}が重なってしまうのを修正}
% \changes{v1.2a}{2001/09/26}{\LaTeX\ \texttt{!<2001/06/01!>}に対応}
% \changes{v1.2b}{2016/01/26}{2013年以降のp\TeX\ (r28720)で脚注番号の前後の和文文字
%    との間にxkanjiskipが入ってしまう問題に対応。
%    \cs{@outputbox}の深さが他のものの位置に影響を与えない
%    ようにする\texttt{\cs{vskip}~-\cs{dimen@}}が縦組モードでは無効になっていたので修正}
% \changes{v1.2c}{2016/02/28}{1.2bと同様の修正を
%     tabular環境、\cs{parbox}命令、\cs{underline}命令にも行った}
% \changes{v1.2d}{2016/04/01}{multicolパッケージを使うとトンボの下端が縮む問題を修正}
% \changes{v1.2e}{2016/05/20}{\file{fltrace}パッケージのp\LaTeX{}版
%    として\file{pfltrace}パッケージを新設}
% \changes{v1.2f}{2016/06/30}{\cs{@begindvibox}を常に横組に}
% \changes{v1.2g}{2016/08/25}{カウンタ\cs{pltx@foot@penalty}を追加}
% \changes{v1.2g}{2016/08/25}{合印の前の文字と合印の間をベタ組に}
% \changes{v1.2g}{2016/08/25}{閉じ括弧類の直後に\cs{footnotetext}が続く
%    場合に改行が起きることがある問題に対処}
% \changes{v1.2g}{2016/08/25}{脚注の合印直後での改行が禁止されてしまう
%    問題に対処}
% \changes{v1.2h}{2016/09/01}{縦組でlongtableパッケージを使って表組の途中で改ページ
%    するとき無限ループが起こる問題に対処(Issue 21)}
% \changes{v1.2i}{2016/09/08}{v1.2gの修正で入れた\cs{null}がまずかったので
%    水平モードのときだけ発行することにした(Issue 23)}
% \changes{v1.2j}{2016/11/09}{FAM256パッチ適用e-p\TeX{}に対応}
% \changes{v1.2k}{2017/02/20}{目次で\cs{ref}を使った場合に後ろの空白が消える
%    現象に対処するため、\cs{relax}のあとに\{\}を追加}
% \changes{v1.2l}{2017/02/25}{脚注とボトムフロートの順序を入れ替えたことで
%    版面全体の垂直位置がずれていたのを修正(Issue 32)}
% \changes{v1.2l}{2017/02/25}{\cs{@makecol}を変更したのに
%    \cs{@makespecialcolbox}を変更しない、という判断について明文化}
% \changes{v1.2m}{2017/03/19}{\cs{language}をリセット
%    (sync with ltoutput.dtx 2017/03/10 v1.3c)}
% \changes{v1.2m}{2017/03/19}{\cs{verb}の途中でハイフネーションが起きない
%    ように\cs{language}を設定(sync with ltmiscen.dtx 2017/03/09 v1.1m)}
% \changes{v1.2n}{2017/04/23}{ドキュメントの追加}
% \changes{v1.2o}{2017/05/03}{行頭禁則文字の直前でも改行するようにした}
% \fi
%
% \iffalse
%<*driver>
\NeedsTeXFormat{pLaTeX2e}
% \fi
\ProvidesFile{plcore.dtx}[2017/05/03 v1.2o pLaTeX core file]
% \iffalse
\documentclass{jltxdoc}
\GetFileInfo{plcore.dtx}
\title{p\LaTeXe{}の拡張\space\fileversion}
\author{Ken Nakano \& Hideaki Togashi}
\date{作成日：\filedate}
\begin{document}
   \maketitle
   \tableofcontents
   \DocInput{\filename}
\end{document}
%</driver>
% \fi
%
%
% \section{概要}\label{plcore:intro}
% このファイルでは、つぎの機能の拡張や修正を行っています。
% 詳細は、それぞれの項目の説明を参照してください。
%
% \begin{itemize}
% \item プリアンブルコマンド
% \item 改ページ
% \item 改行
% \item オブジェクトの出力順序
% \item トンボ
% \item 脚注マクロ
% \item 相互参照
% \item 疑似タイプ入力
% \item tabbing環境
% \item 用語集の出力
% \item 時分を示すカウンタ
% \end{itemize}
%
%
% \section{コード}
%
% このファイルの内容は、p\LaTeXe{}のコア部分です。
%    \begin{macrocode}
%<*plcore>
%    \end{macrocode}
%
% \subsection{プリアンブルコマンド}
% 文書ファイルが必要とするフォーマットファイルの指定をするコマンドを
% 拡張子、p\LaTeXe{}フォーマットファイルも認識するようにします。
%
% \begin{macro}{\NeedsTeXFormat}
% \begin{macro}{\@needsPformat}
% \begin{macro}{\@needsPf@rmat}
% |\NeedsTeXFormats|に``pLaTeX2e''を指定すると、
% ``LaTeX2e''フォーマットを必要とする英語版のクラスファイルや
% パッケージファイルなどが使えなくなってしまうために再定義します。
% このコマンドは\file{ltclass.dtx}で定義されています。
%    \begin{macrocode}
\def\NeedsTeXFormat#1{%
   \def\reserved@a{#1}%
   \ifx\reserved@a\pfmtname
     \expandafter\@needsPformat
   \else
     \ifx\reserved@a\fmtname
       \expandafter\expandafter\expandafter\@needsformat
     \else
       \@latex@error{This file needs format `\reserved@a'%
          \MessageBreak but this is `\pfmtname'}{%
          The current input file will not be processed
          further,\MessageBreak
          because it was written for some other flavor of
          TeX.\MessageBreak\@ehd}%
       \endinput
     \fi
   \fi}
%
\def\@needsPformat{\@ifnextchar[\@needsPf@rmat{}}
%
\def\@needsPf@rmat[#1]{%
    \@ifl@t@r\pfmtversion{#1}{}%
    {\@latex@warning@no@line
        {You have requested release `#1' of pLaTeX,\MessageBreak
         but only release `\pfmtversion' is available}}}
%
\@onlypreamble\@needsPformat
\@onlypreamble\@needsPf@rmat
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\documentstyle}
% |\documentclass|の代わりに|\documentstyle|が使われると、
% \LaTeX~2.09互換モードに入ります。このとき、
% オリジナルの\LaTeX{}では\file{latex209.def}を読み込みますが、
% p\LaTeXe{}では\file{pl209.def}を読み込みます。
% このコマンドは\file{ltclass.dtx}で定義されています。
%    \begin{macrocode}
\def\documentstyle{%
  \makeatletter\input{pl209.def}\makeatother
  \documentclass}
%    \end{macrocode}
% \end{macro}
%
%
%
% \subsection{改ページ}
% 縦組のとき、改ページ後の内容が偶数ページ（右ページ）からはじまるようにします。
% 横組のときには、奇数ページ（右ページ）からはじまります。
%
% \begin{macro}{\cleardoublepage}
% このコマンドによって出力される、白ページのページスタイルを
% \pstyle{empty}にし、ヘッダとフッタが入らないようにしています。
% \file{ltoutput.dtx}の定義を、縦組、横組に合わせて、定義しなおしたものです。
%    \begin{macrocode}
\def\cleardoublepage{\clearpage\if@twoside
  \ifodd\c@page
    \iftdir
      \hbox{}\thispagestyle{empty}\newpage
      \if@twocolumn\hbox{}\newpage\fi
    \fi
  \else
    \ifydir
      \hbox{}\thispagestyle{empty}\newpage
      \if@twocolumn\hbox{}\newpage\fi
    \fi
  \fi\fi}
%    \end{macrocode}
% \end{macro}
%
% \subsection{改行}
%
% \begin{macro}{\@gnewline}
% \changes{v1.1c}{1995/08/25}{行頭禁則文字の直前での改行での不具合の修正}
% 日本語\TeX{}の行頭禁則処理は、禁則対象文字の直前に、
% |\prebreakpenalty|で指定されたペナルティの値を挿入することで
% 行なっています。
% ところが、改行コマンドは負のペナルティの値を挿入することで改行を行ないます。
% そのために、禁則ペナルティの値が$10000$の文字の直後では、ペナルティの値が
% 相殺され、改行することができません。
%
%\begin{verbatim}
% あいうえお\\
% ！かきくけこ
%\end{verbatim}
%
% したがって、|\newline|マクロに|\mbox{}|を入れることによって、
% |\newline|マクロのペナルティ$-10000$と行頭文字のペナルティ$10000$が
% 加算されないようにします。|\\|は|\newline|マクロを呼び出しています。
%
% なお、|\newline|マクロは\file{ltspaces.dtx}で定義されています。
%
% \changes{v1.1j}{1999/04/05}{オプションを付けた場合に、余計な空白
%    が入ってしまうのを修正。ありがとう、鈴木隆志＠京都大学さん。}
% \changes{v1.1h}{1997/06/25}{\LaTeX\ の改行マクロの変更に対応。
%    ありがとう、奥村さん。}
% \LaTeX\ \texttt{<1996/12/01>}で改行マクロが変更され、|\\|が
% |\newline|を呼び出さなくなったため、変更された改行マクロに対応しまし
% た。|\null|の挿入位置は同じです。
% \file{ltspace.dtx}の定義を上記に合わせて、定義しなおしました。
%
% \emph{日本語\TeX{}開発コミュニティによる補足}：
% アスキーによるp\LaTeX{}では、行頭禁則文字の直前で|\\|による強制改行を
% 行えるようにするという目的で
% |\null|を|\@gnewline|マクロ内に挿入していました。
% しかし、これでは|\\\par|と書いた場合にUnderfull警告が出なくなって
% います（|tests/newline_par.tex|を\texttt{latex}と\texttt{platex}で
% 処理してみてください）。
%
% もし|\null|の代わりに|\hskip\z@|を挿入すれば、\LaTeX{}と同様に
% Underfull警告を出すことができます。
% ただし、|\null|を挿入した場合と異なり、強制改行後の行頭に
% JFMグル―が入らなくなります。これはむしろ、奥村さんのjsclassesで
% 行頭を天ツキに直しているのと同じですが、p\LaTeX{}としては挙動が
% 変化してしまいますので、現時点では|\null|→|\hskip\z@|への変更を
% 見送っています。
% \changes{v1.2n}{2017/04/23}{ドキュメントの追加}
%
%    \begin{macrocode}
\def\@gnewline #1{%
  \ifvmode
    \@nolnerr
  \else
    \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null
    \ignorespaces
  \fi}
%</plcore>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@no@lnbk}
% \emph{日本語\TeX{}開発コミュニティによる追加}：
% さらに、|\\|だけでなく|\linebreak|についても同様の対処をします。
% \LaTeX{}の定義のままではマクロによるペナルティ$-10000$と
% 行頭文字のペナルティ$10000$が加算されてしまうため、
% |\hskip\z@\relax|を入れておきます。なお、|\linebreak|を発行して
% 行分割が起きた場合、新しい行頭のJFMグル―は消えるという従来の
% p\LaTeX{}の挙動も維持しています。
% \changes{v1.2o}{2017/05/03}{行頭禁則文字の直前でも改行するようにした}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2017/05/05}{\@no@lnbk}
%<platexrelease>                   {Break before prebreakpenalty}%
%<*plcore|platexrelease>
\def\@no@lnbk #1[#2]{%
  \ifvmode
    \@nolnerr
  \else
    \@tempskipa\lastskip
    \unskip
    \penalty #1\@getpen{#2}%
    \hskip\z@\relax %% added (2017/05/03)
    \ifdim\@tempskipa>\z@
      \hskip\@tempskipa
      \ignorespaces
    \fi
  \fi}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\@no@lnbk}
%<platexrelease>                   {Break before prebreakpenalty}%
%<platexrelease>\def\@no@lnbk #1[#2]{%
%<platexrelease>  \ifvmode
%<platexrelease>    \@nolnerr
%<platexrelease>  \else
%<platexrelease>    \@tempskipa\lastskip
%<platexrelease>    \unskip
%<platexrelease>    \penalty #1\@getpen{#2}%
%<platexrelease>    \ifdim\@tempskipa>\z@
%<platexrelease>      \hskip\@tempskipa
%<platexrelease>      \ignorespaces
%<platexrelease>    \fi
%<platexrelease>  \fi}
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% なお、\LaTeX{}用の命令である|\\|と|\linebreak|には上記のような
% 禁則文字への対策を入れていますが、plain \TeX{}互換のシンプルな
% 命令である|\break|や|\nobreak|には、対策を行いません。
%
% \subsection{オブジェクトの出力順序}
% オリジナルの\LaTeX{}は、トップフロート、本文、脚注、ボトムフロート
% の順番で出力しますけれども、日本語組版では、トップフロート、本文、
% ボトムフロート、脚注という順番の方が一般的ですので、
% このような順番になるよう修正をします。
%
% したがって、文書ファイルによっては\LaTeX{}の組版結果と異なる場合が
% ありますので、注意をしてください。
%
% 2014年に\LaTeX{}に\file{fltrace}パッケージが追加されましたので、
% そのp\LaTeX{}版として\file{pfltrace}パッケージを追加します。
% この\file{pfltrace}パッケージは\LaTeX{}の\file{fltrace}パッケージに
% 依存します。
% \changes{v1.2e}{2016/05/20}{\file{fltrace}パッケージのp\LaTeX{}版
%    として\file{pfltrace}パッケージを新設}
%    \begin{macrocode}
%<*fltrace>
\NeedsTeXFormat{pLaTeX2e}
\ProvidesPackage{pfltrace}
     [2016/05/20 v1.2e Standard pLaTeX package (float tracing)]
\RequirePackageWithOptions{fltrace}
%</fltrace>
%    \end{macrocode}
%
% \begin{macro}{\@makecol}
% このマクロが組み立てる部分の中心となります。
% \file{ltoutput.dtx}で定義されているものです。
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2017/04/08}{\@makecol}{\@makecol}%
%<*plcore|platexrelease>
\gdef\@makecol{%
   \setbox\@outputbox\box\@cclv%
   \let\@elt\relax % added on LaTeX (ltoutput.dtx 2003/12/16 v1.2k)
   \xdef\@freelist{\@freelist\@midlist}%
   \global \let \@midlist \@empty
   \@combinefloats
%    \end{macrocode}
% オリジナルの\LaTeX{}は、トップフロート、本文、脚注、ボトムフロートの順番で
% 出力します。一方p\LaTeX{}は、トップフロート、本文、ボトムフロート、脚注の
% 順番で出力します。ところが、アスキー版のコードは順番を入れ替えるだけでなく、
% 版面全体の垂直位置が（特に縦組で顕著に）ずれてしまっていました。
% これは補正量|\dp\@outputbox|の取得が早すぎたためですので、コミュニティ版
% p\LaTeX{}ではこの問題に対処してあります。結果的に、fnposパッケージ(yafoot)の
% |\makeFNbottom|かつ|\makeFNbelow|な状態と完全に等価になりました。
% \changes{v1.2l}{2017/02/25}{脚注とボトムフロートの順序を入れ替えたことで
%    版面全体の垂直位置がずれていたのを修正(Issue 32)}
%    \begin{macrocode}
   \let\pltx@textbottom\@textbottom % save (pLaTeX 2017/02/25)
   \ifvoid\footins\else % changed (pLaTeX 2017/02/25)
     \setbox\@outputbox \vbox {%
       \boxmaxdepth \@maxdepth
       \unvbox \@outputbox
       \@textbottom % inserted here (pLaTeX 2017/02/25)
       \vskip \skip\footins
       \color@begingroup
         \normalcolor
         \footnoterule
         \unvbox \footins
       \color@endgroup
       }%
       \let\@textbottom\relax % disable temporarily (pLaTeX 2017/02/25)
   \fi
   \ifvbox\@kludgeins
     \@makespecialcolbox
   \else
     \setbox\@outputbox \vbox to\@colht {%
%       \boxmaxdepth \@maxdepth    % comment out on LaTeX 1997/12/01
       \@texttop
       \dimen@ \dp\@outputbox
       \unvbox \@outputbox
%    \end{macrocode}
% 縦組の際に|\@outputbox|の内容が空のボックスだけの場合に、|\wd\@outputbox|が
% 0ptになってしまい、結果としてフッタの位置がくるってしまっていた。
% 0の|\hskip|を発生させると|\wd\@outputbox|の値が期待したものとなるので、
% 縦組の場合はその方法で対処する。
%
% ただし、0の|\hskip|を発生させるとき、水平モードに入ってしまうと、たとえば
% longtableパッケージを使用して表組途中で改ページするときに|\par -> {\vskip}|の
% 無限ループが起きてしまいます。そこで、|\vbox|の中で発生させます。
% \changes{v1.1j}{2001/05/10}{\cs{@makecol}で組み立てられる
%    \cs{@outputbox}の大きさが、縦組で中身が空のボックスだけの場合も適正になる
%    ように修正}
% \changes{v1.2b}{2016/01/26}{\cs{@outputbox}の深さが他のものの位置に影響を与えない
%    ようにする\texttt{\cs{vskip}~-\cs{dimen@}}が縦組モードでは無効になっていたので修正}
% \changes{v1.2h}{2016/09/01}{縦組でlongtableパッケージを使って表組の途中で改ページ
%    するとき無限ループが起こる問題に対処(Issue 21)}
%    \begin{macrocode}
       \iftdir\vbox{\hskip\z@}\fi
       \vskip -\dimen@
       \@textbottom
       }%
   \fi
   \let\@textbottom\pltx@textbottom % restore (pLaTeX 2017/02/25)
   \global \maxdepth \@maxdepth
}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2016/09/03}{\@makecol}{\@makecol}%
%<platexrelease>\gdef\@makecol{%
%<platexrelease>   \setbox\@outputbox\box\@cclv%
%<platexrelease>   \xdef\@freelist{\@freelist\@midlist}%
%<platexrelease>   \global \let \@midlist \@empty
%<platexrelease>   \@combinefloats
%<platexrelease>   \ifvbox\@kludgeins
%<platexrelease>     \@makespecialcolbox
%<platexrelease>   \else
%<platexrelease>     \setbox\@outputbox \vbox to\@colht {%
%<platexrelease>%       \boxmaxdepth \@maxdepth    % comment out on LaTeX 1997/12/01
%<platexrelease>       \@texttop
%<platexrelease>       \dimen@ \dp\@outputbox
%<platexrelease>       \unvbox \@outputbox
%<platexrelease>       \iftdir\vbox{\hskip\z@}\fi
%<platexrelease>       \vskip -\dimen@
%<platexrelease>       \@textbottom
%<platexrelease>       \ifvoid\footins\else % for pLaTeX
%<platexrelease>         \vskip \skip\footins
%<platexrelease>         \color@begingroup
%<platexrelease>            \normalcolor
%<platexrelease>            \footnoterule
%<platexrelease>            \unvbox \footins
%<platexrelease>         \color@endgroup
%<platexrelease>       \fi
%<platexrelease>       }%
%<platexrelease>   \fi
%<platexrelease>   \global \maxdepth \@maxdepth
%<platexrelease>}
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2016/04/17}{\@makecol}{\@makecol}%
%<platexrelease>\gdef\@makecol{%
%<platexrelease>   \setbox\@outputbox\box\@cclv%
%<platexrelease>   \xdef\@freelist{\@freelist\@midlist}%
%<platexrelease>   \global \let \@midlist \@empty
%<platexrelease>   \@combinefloats
%<platexrelease>   \ifvbox\@kludgeins
%<platexrelease>     \@makespecialcolbox
%<platexrelease>   \else
%<platexrelease>     \setbox\@outputbox \vbox to\@colht {%
%<platexrelease>%       \boxmaxdepth \@maxdepth    % comment out on LaTeX 1997/12/01
%<platexrelease>       \@texttop
%<platexrelease>       \dimen@ \dp\@outputbox
%<platexrelease>       \unvbox \@outputbox
%<platexrelease>       \iftdir\hskip\z@\fi
%<platexrelease>       \vskip -\dimen@
%<platexrelease>       \@textbottom
%<platexrelease>       \ifvoid\footins\else % for pLaTeX
%<platexrelease>         \vskip \skip\footins
%<platexrelease>         \color@begingroup
%<platexrelease>            \normalcolor
%<platexrelease>            \footnoterule
%<platexrelease>            \unvbox \footins
%<platexrelease>         \color@endgroup
%<platexrelease>       \fi
%<platexrelease>       }%
%<platexrelease>   \fi
%<platexrelease>   \global \maxdepth \@maxdepth
%<platexrelease>}
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\@makecol}{\@makecol}%
%<platexrelease>\gdef\@makecol{%
%<platexrelease>   \setbox\@outputbox\box\@cclv%
%<platexrelease>   \xdef\@freelist{\@freelist\@midlist}%
%<platexrelease>   \global \let \@midlist \@empty
%<platexrelease>   \@combinefloats
%<platexrelease>   \ifvbox\@kludgeins
%<platexrelease>     \@makespecialcolbox
%<platexrelease>   \else
%<platexrelease>     \setbox\@outputbox \vbox to\@colht {%
%<platexrelease>%       \boxmaxdepth \@maxdepth    % comment out on LaTeX 1997/12/01
%<platexrelease>       \@texttop
%<platexrelease>       \dimen@ \dp\@outputbox
%<platexrelease>       \unvbox \@outputbox
%<platexrelease>       \iftdir\hskip\z@
%<platexrelease>       \else\vskip -\dimen@\fi
%<platexrelease>       \@textbottom
%<platexrelease>       \ifvoid\footins\else % for pLaTeX
%<platexrelease>         \vskip \skip\footins
%<platexrelease>         \color@begingroup
%<platexrelease>            \normalcolor
%<platexrelease>            \footnoterule
%<platexrelease>            \unvbox \footins
%<platexrelease>         \color@endgroup
%<platexrelease>       \fi
%<platexrelease>       }%
%<platexrelease>   \fi
%<platexrelease>   \global \maxdepth \@maxdepth
%<platexrelease>}
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@makespecialcolbox}
% 本文（あるいはボトムフロート）と脚注の間に|\@textbottom|を入れたいので、
% |\@makespecialcolbox|コマンドも修正をします。
% やはり、\file{ltoutput.dtx}で定義されているものです。
%
% このマクロは、|\enlargethispage|が使われたときに、
% |\@makecol|マクロから呼び出されます。
%
% \noindent\emph{日本語\TeX{}開発コミュニティによる補足(2017/02/25)}：
% 2016/11/29以前のp\LaTeX{}では、|\@makecol|はボトムフロートを挿入した後、
% すぐに|\@kludgeins|が空かどうか判定し
% \begin{itemize}
% \item 空の場合は、残りすべての処理を|\@makespecialcolbox|に任せる
% \item 空でない場合は、|\@makecol|自身で残りすべての処理を行う
% \end{itemize}
% としていました。しかし2017/04/08以降のp\LaTeX{}では、|\@makecol|はボトム
% フロートと脚注を挿入してから|\@kludgeins|の判定に移るようにしています。
% したがって、新しい|\@makecol|から以下に記す|\@makespecialcolbox|が呼び
% 出される場合は、|\ifvoid\footins|（二箇所）の判定は常に真となるはずです。
% 要するに「つぎの部分がp\LaTeX{}用の修正です。」という二箇所のコードは
% 実質的に不要となりました。
%
% しかし、だからといって消してしまうと、古いp\LaTeX{}の|\@makecol|を
% ベースに作られた外部パッケージから|\@makespecialcolbox|が呼び出される
% 場合に脚注が消滅するおそれがあります。このため、|\@makespecialcolbox|は
% 従来のコードのまま維持してあります（害はありません）。
% \changes{v1.2l}{2017/02/25}{\cs{@makecol}を変更したのに
%    \cs{@makespecialcolbox}を変更しない、という判断について明文化}
%    \begin{macrocode}
%<*plcore|fltrace>
\gdef\@makespecialcolbox{%
%<*trace>
   \fl@trace{Krudgeins ht \the\ht\@kludgeins\space
                       dp \the\dp\@kludgeins\space
                       wd \the\wd\@kludgeins}%
%</trace>
   \setbox\@outputbox \vbox {%
     \@texttop
     \dimen@ \dp\@outputbox
     \unvbox\@outputbox
     \vskip-\dimen@
     }%
   \@tempdima \@colht
   \ifdim \wd\@kludgeins>\z@
     \advance \@tempdima -\ht\@outputbox
     \advance \@tempdima \pageshrink
%<*trace>
     \fl@trace {Natural ht of col: \the\ht\@outputbox}%
     \fl@trace {\string \@colht: \the\@colht}%
     \fl@trace {Pageshrink added: \the\pageshrink}%
     \fl@trace {Hence, space added: \the\@tempdima}%
%</trace>
     \setbox\@outputbox \vbox to \@colht {%
%       \boxmaxdepth \maxdepth
       \unvbox\@outputbox
       \vskip \@tempdima
       \@textbottom
%    \end{macrocode}
% つぎの部分がp\LaTeX{}用の修正です。
% \changes{v1.2}{2001/09/04}{本文と\cs{footnoterule}が重なってしまうのを修正}
%    \begin{macrocode}
       \ifvoid\footins\else % for pLaTeX
         \vskip\skip\footins
         \color@begingroup
            \normalcolor
            \footnoterule
            \unvbox \footins
         \color@endgroup
       \fi
     }%
   \else
     \advance \@tempdima -\ht\@kludgeins
%<*trace>
     \fl@trace {Natural ht of col: \the\ht\@outputbox}%
     \fl@trace {\string \@colht: \the\@colht}%
     \fl@trace {Extra size added: -\the \ht \@kludgeins}%
     \fl@trace {Hence, height of inner box: \the\@tempdima}%
     \fl@trace {Max? pageshrink available: \the\pageshrink}%
%</trace>
     \setbox \@outputbox \vbox to \@colht {%
       \vbox to \@tempdima {%
         \unvbox\@outputbox
         \@textbottom
%    \end{macrocode}
% つぎの部分がp\LaTeX{}用の修正です。
% 脚注があれば、ここでそれを出力します。
% \changes{v1.2}{2001/09/04}{本文と\cs{footnoterule}が重なってしまうのを修正}
%    \begin{macrocode}
         \ifvoid\footins\else % for pLaTeX
           \vskip\skip\footins
           \color@begingroup
              \normalcolor
              \footnoterule
              \unvbox \footins
           \color@endgroup
         \fi
       }\vss}%
   \fi
   {\setbox \@tempboxa \box \@kludgeins}%
%<*trace>
     \fl@trace {kludgeins box made void}%
%</trace>
}
%</plcore|fltrace>
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@reinserts}
% このマクロは、|\@specialoutput|マクロから呼び出されます。
% ボックス|footins|が組み立てられたモードに合わせて
% 縦モードか横モードで|\unvbox|をします。
%    \begin{macrocode}
%<*plcore>
\def\@reinserts{%
  \ifvoid\footins\else\insert\footins{%
    \iftbox\footins\tate\else\yoko\fi
    \unvbox\footins}\fi
  \ifvbox\@kludgeins\insert\@kludgeins{\unvbox\@kludgeins}\fi
}
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{トンボ}
% ここではトンボを出力するためのマクロを定義しています。
%
% \begin{macro}{\iftombow}
% \begin{macro}{\iftombowdate}
% |\iftombow|はトンボを出力するかどうか、|\iftombowdate|はDVIを作成した
% 日付をトンボの脇に出力するかどうかを示すために用います。
%    \begin{macrocode}
\newif\iftombow \tombowfalse
\newif\iftombowdate \tombowdatetrue
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@tombowwidth}
% |\@tombowwidth|には、トンボ用罫線の太さを指定します。
% デフォルトは0.1ポイントです。
% この値を変更し、|\maketombowbox|コマンドを実行することにより、トンボの
% 罫線太さを変更して出力することができます。通常の使い方では、
% トンボの罫線を変更する必要はありません。DVIをフィルムに面付け出力する
% とき、トンボをつけずに位置はそのままにする必要があるときに、この太さを
% ゼロポイントにします。
%    \begin{macrocode}
\newdimen\@tombowwidth
\setlength{\@tombowwidth}{.1\p@}
%    \end{macrocode}
% \end{macro}
%
% トンボ用の罫線を定義します。
%
% \begin{macro}{\@TL}
% \begin{macro}{\@Tl}
% \begin{macro}{\@TC}
% \begin{macro}{\@TR}
% \begin{macro}{\@Tr}
% |\@TL|と|\@Tl|はページ上部の左側、
% |\@TC|はページ上部の中央、
% |\@TR|と|\@Tr|はページ上部の左側のトンボとなるボックスです。
%    \begin{macrocode}
\newbox\@TL\newbox\@Tl
\newbox\@TC
\newbox\@TR\newbox\@Tr
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@BL}
% \begin{macro}{\@Bl}
% \begin{macro}{\@BC}
% \begin{macro}{\@BR}
% \begin{macro}{\@Br}
% |\@BL|と|\@Bl|はページ下部の左側、
% |\@BC|はページ下部の中央、
% |\@BR|と|\@Br|はページ下部の左側のトンボとなるボックスです。
%    \begin{macrocode}
\newbox\@BL\newbox\@Bl
\newbox\@BC
\newbox\@BR\newbox\@Br
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@CL}
% \begin{macro}{\@CR}
% |\@CL|はページ左側の中央、|\@CR|はページ右側の中央のトンボとなる
% ボックスです。
%    \begin{macrocode}
\newbox\@CL
\newbox\@CR
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@bannertoken}
% \begin{macro}{\@bannerfont}
% |\@bannertoken|トークンは、トンボの横に出力する文字列を入れます。
% デフォルトでは何も出力しません。
% |\@bannerfont|フォントは、その文字列を出力するためのフォントです。
% 9ポイントのタイプライタ体としています。
% \changes{v1.1f}{1996/09/03}{Add \cs{@bannerbox}.}
%    \begin{macrocode}
\font\@bannerfont=cmtt9
\newtoks\@bannertoken
\@bannertoken{}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\maketombowbox}
% |\maketombow|コマンドは、トンボとなるボックスを作るために用います。
% このコマンドは、トンボとなるボックスを作るだけで、それらのボックスを
% 出力するのではないことに注意をしてください。
%    \begin{macrocode}
\def\maketombowbox{%
  \setbox\@TL\hbox to\z@{\yoko\hss
      \vrule width13mm height\@tombowwidth depth\z@
      \vrule height10mm width\@tombowwidth depth\z@
%    \end{macrocode}
% \changes{v1.0f}{1996/07/10}{トンボの横にDVIファイルの作成日を出力する
%    ようにした。}
% \changes{v1.0g}{1997/01/23}{作成日の出力をするかどうかをフラグで指定する
%    ようにした。}
%    \begin{macrocode}
      \iftombowdate
        \raise4pt\hbox to\z@{\hskip5mm\@bannerfont\the\@bannertoken\hss}%
      \fi}%
  \setbox\@Tl\hbox to\z@{\yoko\hss
      \vrule width10mm height\@tombowwidth depth\z@
      \vrule height13mm width\@tombowwidth depth\z@}%
  \setbox\@TC\hbox{\yoko
      \vrule width10mm height\@tombowwidth depth\z@
      \vrule height10mm width\@tombowwidth depth\z@
      \vrule width10mm height\@tombowwidth depth\z@}%
  \setbox\@TR\hbox to\z@{\yoko
      \vrule height10mm width\@tombowwidth depth\z@
      \vrule width13mm height\@tombowwidth depth\z@\hss}%
  \setbox\@Tr\hbox to\z@{\yoko
      \vrule height13mm width\@tombowwidth depth\z@
      \vrule width10mm height\@tombowwidth depth\z@\hss}%
%
  \setbox\@BL\hbox to\z@{\yoko\hss
      \vrule width13mm depth\@tombowwidth height\z@
      \vrule depth10mm width\@tombowwidth height\z@}%
  \setbox\@Bl\hbox to\z@{\yoko\hss
      \vrule width10mm depth\@tombowwidth height\z@
      \vrule depth13mm width\@tombowwidth height\z@}%
  \setbox\@BC\hbox{\yoko
      \vrule width10mm depth\@tombowwidth height\z@
      \vrule depth10mm width\@tombowwidth height\z@
      \vrule width10mm depth\@tombowwidth height\z@}%
  \setbox\@BR\hbox to\z@{\yoko
      \vrule depth10mm width\@tombowwidth height\z@
      \vrule width13mm depth\@tombowwidth height\z@\hss}%
  \setbox\@Br\hbox to\z@{\yoko
      \vrule depth13mm width\@tombowwidth height\z@
      \vrule width10mm depth\@tombowwidth height\z@\hss}%
%
  \setbox\@CL\hbox to\z@{\yoko\hss
      \vrule width10mm height.5\@tombowwidth depth.5\@tombowwidth
      \vrule height10mm depth10mm width\@tombowwidth}%
  \setbox\@CR\hbox to\z@{\yoko
      \vrule height10mm depth10mm width\@tombowwidth
      \vrule height.5\@tombowwidth depth.5\@tombowwidth width10mm\hss}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@outputtombow}
% |\@outputtombow|コマンドは、トンボを出力するのに用います。
% \changes{v1.2d}{2016/04/01}{multicolパッケージを使うとトンボの下端が縮む問題を修正}
%    \begin{macrocode}
%</plcore>
%<platexrelease>\plIncludeInRelease{2016/04/17}{\@outputtombow}{\@outputtombow}%
%<*plcore|platexrelease>
\def\@outputtombow{%
  \iftombow
  \vbox to\z@{\kern-13mm\relax
    \boxmaxdepth\maxdimen%% Added (Apr 1, 2016)
    \moveleft3mm\vbox to\@@paperheight{%
      \hbox to\@@paperwidth{\hskip3mm\relax
         \copy\@TL\hfill\copy\@TC\hfill\copy\@TR\hskip3mm}%
      \kern-10mm
      \hbox to\@@paperwidth{\copy\@Tl\hfill\copy\@Tr}%
      \vfill
      \hbox to\@@paperwidth{\copy\@CL\hfill\copy\@CR}%
      \vfill
      \hbox to\@@paperwidth{\copy\@Bl\hfill\copy\@Br}%
      \kern-10mm
      \hbox to\@@paperwidth{\hskip3mm\relax
         \copy\@BL\hfill\copy\@BC\hfill\copy\@BR\hskip3mm}%
    }\vss
  }%
  \fi
}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\@outputtombow}{\@outputtombow}%
%<platexrelease>\def\@outputtombow{%
%<platexrelease>  \iftombow
%<platexrelease>  \vbox to\z@{\kern-13mm\relax
%<platexrelease>    \moveleft3mm\vbox to\@@paperheight{%
%<platexrelease>      \hbox to\@@paperwidth{\hskip3mm\relax
%<platexrelease>         \copy\@TL\hfill\copy\@TC\hfill\copy\@TR\hskip3mm}%
%<platexrelease>      \kern-10mm
%<platexrelease>      \hbox to\@@paperwidth{\copy\@Tl\hfill\copy\@Tr}%
%<platexrelease>      \vfill
%<platexrelease>      \hbox to\@@paperwidth{\copy\@CL\hfill\copy\@CR}%
%<platexrelease>      \vfill
%<platexrelease>      \hbox to\@@paperwidth{\copy\@Bl\hfill\copy\@Br}%
%<platexrelease>      \kern-10mm
%<platexrelease>      \hbox to\@@paperwidth{\hskip3mm\relax
%<platexrelease>         \copy\@BL\hfill\copy\@BC\hfill\copy\@BR\hskip3mm}%
%<platexrelease>    }\vss
%<platexrelease>  }%
%<platexrelease>  \fi
%<platexrelease>}
%<platexrelease>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@paperheight}
% \begin{macro}{\@@paperwidth}
% \begin{macro}{\@@topmargin}
% |\@@pageheight|は、用紙の縦の長さにトンボの長さを加えた長さになります。
%
% |\@@pagewidth|は、用紙の横の長さにトンボの長さを加えた長さになります。
%
% |\@@topmargin|は、現在のトップマージンに1インチ加えた長さになります。
%    \begin{macrocode}
\newdimen\@@paperheight
\newdimen\@@paperwidth
\newdimen\@@topmargin
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
%  \begin{macro}{\@shipoutsetup}
% \changes{v1.1i}{1998/02/03}{Command removed}
% |\@outputpage|内に挿入したので削除しました。
%  \end{macro}
%
% \begin{macro}{\@outputpage}
% |\textwidth|と|\textheight|の交換は、|\@shipoutsetup|内では行ないません。
% なぜなら、|\@shipoutsetup|マクロが実行されるときは、
% |\shipout|されるvboxの中であり、このときは横組モードですので、
% つねに|\iftdir|は偽と判断され、縦と横のサイズを交換できないからです。
%
% なお、この変更をローカルなものにするために、
% |\begingroup|と|\endgroup|で囲みます。
% \changes{v1.2a}{2001/09/26}{\LaTeX\ \texttt{!<2001/06/01!>}に対応}
%    \begin{macrocode}
%</plcore>
%<platexrelease>\plIncludeInRelease{2017/04/08}{\@outputpage}
%<platexrelease>                   {Reset language for hyphenation}%
%<*plcore|platexrelease>
\def\@outputpage{%
\begingroup % the \endgroup is put in by \aftergroup
  \iftdir
    \dimen\z@\textwidth \textwidth\textheight \textheight\dimen\z@
  \fi
  \let \protect \noexpand
%    \end{macrocode}
% \LaTeXe\ 2017-04-15ではverbatim環境内でハイフネーションが起きないように
% 修正されましたが、verbatim環境の途中で改ページが起きた場合にヘッダで
% ハイフネーションが抑制されるのは正しくないので、|\language|を
% |\begin{document}|での値にリセットします（参考：latex2e svn r1407）。
% プリアンブルで特別に設定されればその値、設定されなければ0です（万が一
% |\document|の定義が古い場合\footnote{\LaTeXe\ 2017/01/01以前を使って
% p\LaTeXe{}のフォーマットを作成した場合や、dinbrief.clsのように独自の
% 再定義を行うクラスやパッケージを使った場合に起こるかもしれません。}は
% $-1$になりますが、これは0と同じはたらきをするので問題は起きません）。
% \changes{v1.2m}{2017/03/19}{\cs{language}をリセット
%    (sync with ltoutput.dtx 2017/03/10 v1.3c)}
%    \begin{macrocode}
  \language\document@default@language
  \@resetactivechars
  \global\let\@@if@newlist\if@newlist
  \global\@newlistfalse
  \@parboxrestore
  \shipout\vbox{\yoko
    \set@typeset@protect
    \aftergroup\endgroup
    \aftergroup\set@typeset@protect
%    \end{macrocode}
% \changes{v1.1g}{1998/02/03}{\cs{@shipoutsetup}を\cs{@outputpage}内に入れた}
% ここから|\@shipoutsetup|の内容。
%    \begin{macrocode}
     \if@specialpage
       \global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
     \fi
%    \end{macrocode}
% \changes{v1.1c}{1995/02/05}{\cs{oddsidemargin}と\cs{evensidemargin}が
%    逆だったのを修正}
%    \begin{macrocode}
     \if@twoside
       \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
          \iftdir\let\@themargin\evensidemargin
          \else\let\@themargin\oddsidemargin\fi
       \else \let\@thehead\@evenhead
          \let\@thefoot\@evenfoot
           \iftdir\let\@themargin\oddsidemargin
           \else\let\@themargin\evensidemargin\fi
     \fi\fi
%    \end{macrocode}
% トンボ出力オプションが指定されている場合、ここで用紙サイズを再設定します。
% \TeX の加える左と上部の1インチは、トンボの内側に入ります。
% \changes{v1.1a}{1995/11/10}{\cs{topmargin}が反映されないバグを修正}
%    \begin{macrocode}
     \@@topmargin\topmargin
     \iftombow
       \@@paperwidth\paperwidth \advance\@@paperwidth 6mm\relax
       \@@paperheight\paperheight \advance\@@paperheight 16mm\relax
       \advance\@@topmargin 1in\relax \advance\@themargin 1in\relax
     \fi
     \reset@font
     \normalsize
     \normalsfcodes
     \let\label\@gobble
     \let\index\@gobble
     \let\glossary\@gobble
     \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@
%    \end{macrocode}
% ここまでが|\@shipoutsetup|の内容。
%    \begin{macrocode}
    \@begindvi
    \@outputtombow
    \vskip \@@topmargin
    \moveright\@themargin\vbox{%
      \setbox\@tempboxa \vbox to\headheight{%
        \vfil
        \color@hbox
          \normalcolor
          \hb@xt@\textwidth{\@thehead}%
        \color@endbox
      }%                        %% 22 Feb 87
      \dp\@tempboxa \z@
      \box\@tempboxa
      \vskip \headsep
      \box\@outputbox
      \baselineskip \footskip
      \color@hbox
        \normalcolor
        \hb@xt@\textwidth{\@thefoot}%
      \color@endbox
    }%
  }%
%  \endgroup now inserted by \aftergroup
%    \end{macrocode}
% |\if@newlist|を初期化。
%    \begin{macrocode}
  \global\let\if@newlist\@@if@newlist
  \global \@colht \textheight
  \stepcounter{page}%
  \let\firstmark\botmark
}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\@outputpage}
%<platexrelease>                   {Reset language for hyphenation}%
%<platexrelease>\def\@outputpage{%
%<platexrelease>\begingroup % the \endgroup is put in by \aftergroup
%<platexrelease>  \iftdir
%<platexrelease>    \dimen\z@\textwidth \textwidth\textheight \textheight\dimen\z@
%<platexrelease>  \fi
%<platexrelease>  \let \protect \noexpand
%<platexrelease>  \@resetactivechars
%<platexrelease>  \global\let\@@if@newlist\if@newlist
%<platexrelease>  \global\@newlistfalse
%<platexrelease>  \@parboxrestore
%<platexrelease>  \shipout\vbox{\yoko
%<platexrelease>    \set@typeset@protect
%<platexrelease>    \aftergroup\endgroup
%<platexrelease>    \aftergroup\set@typeset@protect
%<platexrelease>     \if@specialpage
%<platexrelease>       \global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
%<platexrelease>     \fi
%<platexrelease>     \if@twoside
%<platexrelease>       \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
%<platexrelease>          \iftdir\let\@themargin\evensidemargin
%<platexrelease>          \else\let\@themargin\oddsidemargin\fi
%<platexrelease>       \else \let\@thehead\@evenhead
%<platexrelease>          \let\@thefoot\@evenfoot
%<platexrelease>           \iftdir\let\@themargin\oddsidemargin
%<platexrelease>           \else\let\@themargin\evensidemargin\fi
%<platexrelease>     \fi\fi
%<platexrelease>     \@@topmargin\topmargin
%<platexrelease>     \iftombow
%<platexrelease>       \@@paperwidth\paperwidth \advance\@@paperwidth 6mm\relax
%<platexrelease>       \@@paperheight\paperheight \advance\@@paperheight 16mm\relax
%<platexrelease>       \advance\@@topmargin 1in\relax \advance\@themargin 1in\relax
%<platexrelease>     \fi
%<platexrelease>     \reset@font
%<platexrelease>     \normalsize
%<platexrelease>     \normalsfcodes
%<platexrelease>     \let\label\@gobble
%<platexrelease>     \let\index\@gobble
%<platexrelease>     \let\glossary\@gobble
%<platexrelease>     \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@
%<platexrelease>    \@begindvi
%<platexrelease>    \@outputtombow
%<platexrelease>    \vskip \@@topmargin
%<platexrelease>    \moveright\@themargin\vbox{%
%<platexrelease>      \setbox\@tempboxa \vbox to\headheight{%
%<platexrelease>        \vfil
%<platexrelease>        \color@hbox
%<platexrelease>          \normalcolor
%<platexrelease>          \hb@xt@\textwidth{\@thehead}%
%<platexrelease>        \color@endbox
%<platexrelease>      }%                        %% 22 Feb 87
%<platexrelease>      \dp\@tempboxa \z@
%<platexrelease>      \box\@tempboxa
%<platexrelease>      \vskip \headsep
%<platexrelease>      \box\@outputbox
%<platexrelease>      \baselineskip \footskip
%<platexrelease>      \color@hbox
%<platexrelease>        \normalcolor
%<platexrelease>        \hb@xt@\textwidth{\@thefoot}%
%<platexrelease>      \color@endbox
%<platexrelease>    }%
%<platexrelease>  }%
%<platexrelease>  \global\let\if@newlist\@@if@newlist
%<platexrelease>  \global \@colht \textheight
%<platexrelease>  \stepcounter{page}%
%<platexrelease>  \let\firstmark\botmark
%<platexrelease>}
%<platexrelease>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\AtBeginDvi}
% p\LaTeX{}の出力ルーチンの|\@outputpage|では、|\shipout|するvboxの中身に
% |\yoko|を指定しています。このため、|\AtBeginDocument{\AtBeginDvi{}}|という
% コードを書くと\texttt{Incompatible direction list can't be unboxed.}という
% エラーが出てしまいます。
%
% そこで、コミュニティ版p\LaTeX{}では「|\shipout|で|\yoko|が指定されている」
% ことを根拠として
% \begin{center}
% |\@begindvibox|は（空でない限り）常に横組でなければならない
% \end{center}
% と仮定します。この仮定に従い、|\AtBeginDvi|を再定義します。
% \changes{v1.2f}{2016/06/30}{\cs{@begindvibox}を常に横組に}
%    \begin{macrocode}
%</plcore>
%<platexrelease>\plIncludeInRelease{2016/07/01}{\AtBeginDvi}
%<platexrelease>                   {Fix for incompatible direction}%
%<*plcore|platexrelease>
\def \AtBeginDvi #1{%
  \global \setbox \@begindvibox
    \vbox{\yoko \unvbox \@begindvibox #1}%
}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\AtBeginDvi}
%<platexrelease>                   {Fix for incompatible direction}%
%<platexrelease>\def \AtBeginDvi #1{%
%<platexrelease>  \global \setbox \@begindvibox
%<platexrelease>    \vbox{\unvbox \@begindvibox #1}%
%<platexrelease>}
%<platexrelease>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{脚注マクロ}
% 脚注を組み立てる部分のマクロを再定義します。
% 主な修正点は、縦組モードでの動作の追加です。
%
% これらのマクロは、\file{ltfloat.dtx}で定義されていたものです。
%
% \begin{macro}{\thempfn}
% 本文で使われる脚注記号です。
%
% |\@footnotemark|で縦横の判断をするようにしたため、削除。
%
% \changes{v1.0a}{1995/04/12}{Removed \texttt{\protect\bslash thempfn}}
%    \begin{macrocode}
%\def\thempfn{%
%  \ifydir\thefootnote\else\hbox{\yoko\thefootnote}\fi}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\thempfootnote}
% minipage環境で使われる脚注記号です。
%
% \changes{v1.0a}{1995/04/12}{Removed \texttt{\protect\bslash thempfootnote}}
%    \begin{macrocode}
%\def\thempfootnote{%
%  \ifydir\alph{mpfootnote}\else\hbox{\yoko\alph{mpfootnote}}\fi}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@makefnmark}
% 脚注記号を作成するマクロです。
%
% \changes{v1.0a}{1995/04/12}{縦組でも上付き数字を使うように修正}
% \changes{v1.1b}{1996/01/26}{脚注マークの後ろに余計なスペースが入るのを修正}
% \changes{v1.1g}{1997/02/14}{縦組時に脚注マークの書体が正しくないのを修正}
% \changes{v1.2b}{2016/01/26}{2013年以降のp\TeX\ (r28720)で脚注番号の前後の和文文字
%    との間にxkanjiskipが入ってしまう問題に対応}
%    \begin{macrocode}
%</plcore>
%<platexrelease>\plIncludeInRelease{2016/04/17}{\@makefnmark}
%<platexrelease>                   {Remove extra \xkanjiskip}%
%<*plcore|platexrelease>
\renewcommand\@makefnmark{%
  \ifydir \hbox{}\hbox{\@textsuperscript{\normalfont\@thefnmark}}\hbox{}%
  \else\hbox{\yoko\@textsuperscript{\normalfont\@thefnmark}}\fi}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\@makefnmark}
%<platexrelease>                   {Remove extra \xkanjiskip}%
%<platexrelease>\renewcommand\@makefnmark{\hbox{%
%<platexrelease>  \ifydir \@textsuperscript{\normalfont\@thefnmark}%
%<platexrelease>  \else\hbox{\yoko\@textsuperscript{\normalfont\@thefnmark}}\fi}}
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\pltx@foot@penalty}
% 開き括弧類の直後に|\footnotetext|が続いた場合、|\footnotetext|の前での改行は
% 望ましくありません。このような場合に対処するために、|\pltx@foot@penalty|という
% カウンタを用意しました。|\footnotetext|の最初で「直前のペナルティ値」
% としてこのカウンタが初期化されます。
% |\footnotemark|,~|\footnote|では使わないので0に設定しています。
% \changes{v1.2g}{2016/08/25}{カウンタ\cs{pltx@foot@penalty}を追加}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2016/09/03}{\pltx@foot@penalty}
%<platexrelease>                   {Add new counter \pltx@foot@penalty}%
%<*plcore|platexrelease>
\ifx\@undefined\pltx@foot@penalty \newcount\pltx@foot@penalty \fi
\pltx@foot@penalty\z@
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\pltx@foot@penalty}
%<platexrelease>                   {Add new counter \pltx@foot@penalty}%
%<platexrelease>\let\pltx@foot@penalty\@undefined
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\footnotemark}
% \begin{macro}{\footnote}
% また、合印の前の文字と合印の間は原則ベタ組です（但し、JIS~X~4051には例外有り）。
% そのため、合印を出力する|\footnotemark|,~|\footnote|の最初で|\inhibitglue|を
% 実行しておくことにします（|\@makefnmark|の中に置いても効力がありません）。
% \changes{v1.2g}{2016/08/25}{合印の前の文字と合印の間をベタ組に}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2016/09/03}{\footnote}
%<platexrelease>                   {Append \inhibitglue in \footnotemark}%
%<*plcore|platexrelease>
%    \end{macrocode}
%    \begin{macrocode}
\def\footnote{\inhibitglue
     \@ifnextchar[\@xfootnote{\stepcounter\@mpfn
     \protected@xdef\@thefnmark{\thempfn}%
     \@footnotemark\@footnotetext}}
\def\footnotemark{\inhibitglue
   \@ifnextchar[\@xfootnotemark
     {\stepcounter{footnote}%
      \protected@xdef\@thefnmark{\thefootnote}%
      \@footnotemark}}
%    \end{macrocode}
%    \begin{macrocode}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\footnote}
%<platexrelease>                   {Append \inhibitglue in \footnotemark}%
%<platexrelease>\def\footnote{\@ifnextchar[\@xfootnote{\stepcounter\@mpfn
%<platexrelease>     \protected@xdef\@thefnmark{\thempfn}%
%<platexrelease>     \@footnotemark\@footnotetext}}
%<platexrelease>\def\footnotemark{%
%<platexrelease>   \@ifnextchar[\@xfootnotemark
%<platexrelease>     {\stepcounter{footnote}%
%<platexrelease>      \protected@xdef\@thefnmark{\thefootnote}%
%<platexrelease>      \@footnotemark}}
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\footnotetext}
% |\footnotetext|の直前のペナルティ値を保持します。
% \changes{v1.2g}{2016/08/25}{閉じ括弧類の直後に\cs{footnotetext}が続く
%    場合に改行が起きることがある問題に対処}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2016/09/03}{\footnotetext}
%<platexrelease>                   {Preserve penalty before \footnotetext}%
%<*plcore|platexrelease>
%    \end{macrocode}
%    \begin{macrocode}
\def\footnotetext{%
  \ifhmode\pltx@foot@penalty\lastpenalty\unpenalty\fi%
  \@ifnextchar [\@xfootnotenext
    {\protected@xdef\@thefnmark{\thempfn}%
     \@footnotetext}}
%    \end{macrocode}
%    \begin{macrocode}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\footnotetext}
%<platexrelease>                   {Preserve penalty before \footnotetext}%
%<platexrelease>\def\footnotetext{%
%<platexrelease>     \@ifnextchar [\@xfootnotenext
%<platexrelease>       {\protected@xdef\@thefnmark{\thempfn}%
%<platexrelease>    \@footnotetext}}
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@footnotetext}
% インサートボックス|\footins|に脚注のテキストを入れます。
% コミュニティ版p\LaTeX{}では|\footnotetext|,~|\footnote|の直後で
% 改行を可能にします。jsclassesではこの変更に加え、脚注で|\verb|が
% 使えるように再定義されます。
%
% \changes{v1.0a}{1995/04/07}{組方向の判定をボックスの外でするようにした}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2016/09/08}{\@footnotetext}
%<platexrelease>                   {Allow break after \footnote (more fix)}%
%<*plcore|platexrelease>
%    \end{macrocode}
%    \begin{macrocode}
\long\def\@footnotetext#1{%
  \ifydir\def\@tempa{\yoko}\else\def\@tempa{\tate}\fi
  \insert\footins{\@tempa%
    \reset@font\footnotesize
    \interlinepenalty\interfootnotelinepenalty
    \splittopskip\footnotesep
    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
    \hsize\columnwidth \@parboxrestore
    \protected@edef\@currentlabel{%
       \csname p@footnote\endcsname\@thefnmark
    }%
    \color@begingroup
      \@makefntext{%
        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
%    \end{macrocode}
%
% p\TeX{}では|\insert|の直後に和文文字が来た場合、そこでの改行は許されない
% という挙動になっています。このため、従来は脚注番号（合印）の直後の改行が
% 抑制されていました。しかし、|\hbox|の直後に和文文字が来た場合は、そこで
% の改行は許されますから、最後に|\null|を追加します。
% また、|\pltx@foot@penalty|の値が0ではなかった場合、
% 脚注の前にペナルティがあったということですから、復活させておきます。
% \changes{v1.2g}{2016/08/25}{脚注の合印直後での改行が禁止されてしまう
%    問題に対処}
% \changes{v1.2i}{2016/09/08}{v1.2gの修正で入れた\cs{null}がまずかったので
%    水平モードのときだけ発行することにした(Issue 23)}
%    \begin{macrocode}
    \color@endgroup}\ifhmode\null\fi
    \ifnum\pltx@foot@penalty=\z@\else
      \penalty\pltx@foot@penalty
      \pltx@foot@penalty\z@
    \fi}
%    \end{macrocode}
%    \begin{macrocode}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2016/09/03}{\@footnotetext}
%<platexrelease>                   {Allow break after \footnote}%
%<platexrelease>\long\def\@footnotetext#1{%
%<platexrelease>  \ifydir\def\@tempa{\yoko}\else\def\@tempa{\tate}\fi
%<platexrelease>  \insert\footins{\@tempa%
%<platexrelease>    \reset@font\footnotesize
%<platexrelease>    \interlinepenalty\interfootnotelinepenalty
%<platexrelease>    \splittopskip\footnotesep
%<platexrelease>    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
%<platexrelease>    \hsize\columnwidth \@parboxrestore
%<platexrelease>    \protected@edef\@currentlabel{%
%<platexrelease>       \csname p@footnote\endcsname\@thefnmark
%<platexrelease>    }%
%<platexrelease>    \color@begingroup
%<platexrelease>      \@makefntext{%
%<platexrelease>        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
%<platexrelease>    \color@endgroup}\null
%<platexrelease>    \ifnum\pltx@foot@penalty=\z@\else
%<platexrelease>      \penalty\pltx@foot@penalty
%<platexrelease>      \pltx@foot@penalty\z@
%<platexrelease>    \fi}
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\@footnotetext}
%<platexrelease>                   {Allow break after \footnote}%
%<platexrelease>\long\def\@footnotetext#1{%
%<platexrelease>  \ifydir\def\@tempa{\yoko}\else\def\@tempa{\tate}\fi
%<platexrelease>  \insert\footins{\@tempa%
%<platexrelease>    \reset@font\footnotesize
%<platexrelease>    \interlinepenalty\interfootnotelinepenalty
%<platexrelease>    \splittopskip\footnotesep
%<platexrelease>    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
%<platexrelease>    \hsize\columnwidth \@parboxrestore
%<platexrelease>    \protected@edef\@currentlabel{%
%<platexrelease>       \csname p@footnote\endcsname\@thefnmark
%<platexrelease>    }%
%<platexrelease>    \color@begingroup
%<platexrelease>      \@makefntext{%
%<platexrelease>        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
%<platexrelease>    \color@endgroup}}
%<platexrelease>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@footnotemark}
% \changes{v1.0a}{1995/04/12}{脚注記号の出力位置の調整}
% \changes{v1.1g}{1997/02/14}{縦組時の位置調整を2\cs{ch}から.9zhに変更}
% 脚注記号を出力します。
%    \begin{macrocode}
\def\@footnotemark{\leavevmode
  \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
  \ifydir\@makefnmark
  \else\hbox to\z@{\hskip-.25zw\raise.9zh\@makefnmark\hss}\fi
  \ifhmode\spacefactor\@x@sf\fi\relax}
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{相互参照}
%
% \begin{macro}{\@setref}
% \changes{v1.1c}{1995/09/07}{change \cs{null} to \cs{relax} in \cs{@setref}.}
% \changes{v1.2k}{2017/02/20}{目次で\cs{ref}を使った場合に後ろの空白が消える
%    現象に対処するため、\cs{relax}のあとに\{\}を追加}
% |\ref|コマンドや|\pageref|コマンドで参照したとき、これらのコマンドに
% よって出力された番号と続く２バイト文字との間に|\xkanjiskip|が入りません。
% これは、|\null|が|\hbox{}|と定義されているためです。
% そこで|\null|を取り除きます。
% このコマンドは、\file{ltxref.dtx}で定義されているものです。
%
% しかし、単に|\null|を|\relax|に置き換えるだけでは、|\section|のような
% 「動く引数」で|\ref|などを使った場合に、目次で後ろの空白が消えてしまいます。
% そこで、|\relax|のあとに|{}|を追加しました。従来も|\protect\ref|のように使えば
% 問題ありませんでしたが、\LaTeX{}では展開されても問題が起きないrobustな実装に
% なっていますので、これに従います。
%    \begin{macrocode}
%</plcore>
%<platexrelease>\plIncludeInRelease{2017/04/08}{\@setref}
%<platexrelease>                   {Spacing after \ref in moving arguments}%
%<*plcore|platexrelease>
\def\@setref#1#2#3{%
  \ifx#1\relax
    \protect\G@refundefinedtrue
    \nfss@text{\reset@font\bfseries ??}%
    \@latex@warning{Reference `#3' on page \thepage \space
              undefined}%
  \else
    \expandafter#2#1\relax{}% change \null to \relax{}
  \fi}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\@setref}
%<platexrelease>                   {Spacing after \ref in moving arguments}%
%<platexrelease>\def\@setref#1#2#3{%
%<platexrelease>  \ifx#1\relax
%<platexrelease>    \protect\G@refundefinedtrue
%<platexrelease>    \nfss@text{\reset@font\bfseries ??}%
%<platexrelease>    \@latex@warning{Reference `#3' on page \thepage \space
%<platexrelease>              undefined}%
%<platexrelease>  \else
%<platexrelease>    \expandafter#2#1\relax% change \null to \relax
%<platexrelease>  \fi}
%<platexrelease>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{疑似タイプ入力}
%
% \begin{macro}{\verb}
% \changes{v1.1b}{1995/04/05}{互換モードのときは、pl209.defの定義を使う}
% \changes{v1.1g}{1997/01/16}
%    {\cs{verb}コマンドを\LaTeX\ \texttt{!<1996/06/01!>}に合わせて修正}
% \LaTeX{}の|\verb|コマンドでは、数式モードでないときは、
% |\leavevmode|で水平モードに入ったあと、|\null|を出力しています。
% マクロ|\null|は|\hbox{}|として定義されていますので、
% ここには和欧文間スペース（|\xkanjiskip|）が入りません。
% そこで、|\null|を出力しないようマクロを修正します。
% このマクロは、\file{ltmiscen.dtx}で定義されています。
%    \begin{macrocode}
%</plcore>
%<platexrelease>\plIncludeInRelease{2017/04/08}{\verb}
%<platexrelease>                   {Disable hyphenation in verb}%
%<*plcore|platexrelease>
\if@compatibility\else
\def\verb{\relax\ifmmode\hbox\else\leavevmode\fi
  \bgroup
    \verb@eol@error \let\do\@makeother \dospecials
    \verbatim@font\@noligs
%    \end{macrocode}
% \LaTeXe\ 2017-04-15に追随して、|\verb|の途中でハイフネーションが起きない
% ように|\language|を設定します（参考：latex2e svn r1405）。
% \changes{v1.2m}{2017/03/19}{\cs{verb}の途中でハイフネーションが起きない
%    ように\cs{language}を設定(sync with ltmiscen.dtx 2017/03/09 v1.1m)}
%    \begin{macrocode}
    \language\l@nohyphenation
    \@ifstar\@sverb\@verb}
\fi
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\verb}
%<platexrelease>                   {Disable hyphenation in verb}%
%<platexrelease>\if@compatibility\else
%<platexrelease>\def\verb{\relax\ifmmode\hbox\else\leavevmode\fi
%<platexrelease>  \bgroup
%<platexrelease>    \verb@eol@error \let\do\@makeother \dospecials
%<platexrelease>    \verbatim@font\@noligs
%<platexrelease>    \@ifstar\@sverb\@verb}
%<platexrelease>\fi
%<platexrelease>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{tabbing環境}
%
% \begin{macro}{\@stopfield}
% \changes{v1.1d}{1996/03/12}{\cs{=}の後ろに和欧文間スペースが入るのを修正}
% 相互参照や疑似タイプ入力では、和欧文間スペースが入らないので、|\null|を
% 取り除きましたが、|tabbing|環境では、逆に|\null|がないため、
% 和欧文間スペースが入ってしまうので、それを追加します。
% \file{lttab.dtx}で定義されているものです。
%    \begin{macrocode}
\gdef\@stopfield{\null\color@endgroup\egroup}
%    \end{macrocode}
% \end{macro}
%
% \subsection{用語集の出力}
% \LaTeX{}には、なぜか用語集を出力するためのコマンドがありませんので、
% 追加をします。
% \changes{v1.1e}{1996/02/17}{\cs{printglossary}を追加}
%
% \begin{macro}{\printglossary}
% \cs{printglossary}コマンドは、単に拡張子が\texttt{gls}のファイルを
% 読み込むだけです。このファイルの生成には、mendexなどを用います。
%    \begin{macrocode}
\newcommand\printglossary{\@input@{\jobname.gls}}
%    \end{macrocode}
% \end{macro}
%
% \subsection{時分を示すカウンタ}
% \TeX には、年月日を示す数値を保持しているカウンタとして、それぞれ
% |\year|, |\month|, |\day|がプリミティブとして存在します。しかし、
% 時分については、深夜の零時からの経過時間を示す|\time|カウンタしか存在
% していません。そこで、p\LaTeXe{}では、時分を示すためのカウンタ|\hour|と
% |\minute|を作成しています。
%
% \begin{macro}{\hour}
% \begin{macro}{\minute}
% 何時か（|\hour|）を得るには、|\time|を60で割った商をそのまま用います。
% 何分か（|\minute|）は、|\hour|に60を掛けた値を|\time|から引いて算出します。
% ここではカウンタを宣言するだけです。実際の計算は、クラスやパッケージの中
% で行なっています。
%    \begin{macrocode}
\newcount\hour
\newcount\minute
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \subsection{tabular環境など}
% \changes{v1.2c}{2016/02/28}{1.2bと同様の修正を
%     tabular環境、\cs{parbox}命令、\cs{underline}命令にも行った}
% \LaTeXe{}のカーネルのコードをそのまま使うと、p\TeX{}の|\xkanjiskip|由来の
% アキが前後に入ってしまうことがありました。そうした命令にパッチをあてます。
% \begin{macro}{\@tabular}
% tabular環境の内部命令です。もとは\file{lttab.dtx}で定義されています。
%    \begin{macrocode}
%</plcore>
%<platexrelease>\plIncludeInRelease{2016/04/17}{\@tabular}
%<platexrelease>                   {Remove extra \xkanjiskip}%
%<*plcore|platexrelease>
\def\@tabular{\leavevmode \null\hbox \bgroup $\let\@acol\@tabacol
   \let\@classz\@tabclassz
   \let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\@tabular}
%<platexrelease>                   {Remove extra \xkanjiskip}%
%<platexrelease>\def\@tabular{\leavevmode \hbox \bgroup $\let\@acol\@tabacol
%<platexrelease>   \let\@classz\@tabclassz
%<platexrelease>   \let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray}
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\endtabular}
% \begin{macro}{\endtabular*}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2016/04/17}{\endtabular}
%<platexrelease>                   {Remove extra \xkanjiskip}%
%<*plcore|platexrelease>
\def\endtabular{\crcr\egroup\egroup $\egroup\null}
\expandafter \let \csname endtabular*\endcsname = \endtabular
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\endtabular}
%<platexrelease>                   {Remove extra \xkanjiskip}%
%<platexrelease>\def\endtabular{\crcr\egroup\egroup $\egroup}
%<platexrelease>\expandafter \let \csname endtabular*\endcsname = \endtabular
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@iiiparbox}
% |\parbox|の内部命令です。もとは\file{ltboxes.dtx}で定義されています。
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2016/04/17}{\@iiiparbox}
%<platexrelease>                   {Remove extra \xkanjiskip}%
%<*plcore|platexrelease>
\let\@parboxto\@empty
\long\def\@iiiparbox#1#2[#3]#4#5{%
  \leavevmode
  \@pboxswfalse
  \setlength\@tempdima{#4}%
  \@begin@tempboxa\vbox{\hsize\@tempdima\@parboxrestore#5\@@par}%
    \ifx\relax#2\else
      \setlength\@tempdimb{#2}%
      \edef\@parboxto{to\the\@tempdimb}%
    \fi
    \if#1b\vbox
    \else\if #1t\vtop
    \else\ifmmode\vcenter
    \else\@pboxswtrue\null$\vcenter% !!!
    \fi\fi\fi
    \@parboxto{\let\hss\vss\let\unhbox\unvbox
       \csname bm@#3\endcsname}%
    \if@pboxsw \m@th$\null\fi% !!!
  \@end@tempboxa}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\@iiiparbox}
%<platexrelease>                   {Remove extra \xkanjiskip}%
%<platexrelease>\let\@parboxto\@empty
%<platexrelease>\long\def\@iiiparbox#1#2[#3]#4#5{%
%<platexrelease>  \leavevmode
%<platexrelease>  \@pboxswfalse
%<platexrelease>  \setlength\@tempdima{#4}%
%<platexrelease>  \@begin@tempboxa\vbox{\hsize\@tempdima\@parboxrestore#5\@@par}%
%<platexrelease>    \ifx\relax#2\else
%<platexrelease>      \setlength\@tempdimb{#2}%
%<platexrelease>      \edef\@parboxto{to\the\@tempdimb}%
%<platexrelease>    \fi
%<platexrelease>    \if#1b\vbox
%<platexrelease>    \else\if #1t\vtop
%<platexrelease>    \else\ifmmode\vcenter
%<platexrelease>    \else\@pboxswtrue $\vcenter
%<platexrelease>    \fi\fi\fi
%<platexrelease>    \@parboxto{\let\hss\vss\let\unhbox\unvbox
%<platexrelease>       \csname bm@#3\endcsname}%
%<platexrelease>    \if@pboxsw \m@th$\fi
%<platexrelease>  \@end@tempboxa}
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\underline}
% 下線を引く命令です。もとは\file{ltboxes.dtx}で定義されています。
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2016/04/17}{\underline}
%<platexrelease>                   {Remove extra \xkanjiskip}%
%<*plcore|platexrelease>
\def\underline#1{%
  \relax
  \ifmmode\@@underline{#1}%
  \else \leavevmode\null$\@@underline{\hbox{#1}}\m@th$\null\relax\fi}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\underline}
%<platexrelease>                   {Remove extra \xkanjiskip}%
%<platexrelease>\def\underline#1{%
%<platexrelease>  \relax
%<platexrelease>  \ifmmode\@@underline{#1}%
%<platexrelease>  \else $\@@underline{\hbox{#1}}\m@th$\relax\fi}
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
%
% \section{e-p\TeX{}でのFAM256パッチの利用}
%
% \begin{macro}{\e@alloc@chardef}
% \begin{macro}{\e@alloc@top}
% \LaTeXe\ 2015/01/01以降、拡張レジスタがあれば利用するようになっています
% ので、e-p\TeX{}の拡張レジスタを利用できるように設定します。
% \changes{v1.2j}{2016/11/09}{FAM256パッチ適用e-p\TeX{}に対応}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2016/11/29}%
%<platexrelease>                   {\e@alloc@chardef}{Extended Allocation (FAM256)}%
%<*plcore|platexrelease>
%    \end{macrocode}
%    \begin{macrocode}
\ifx\omathchar\@undefined
  \ifx\widowpenalties\@undefined
%    \end{macrocode}
% オリジナルの\TeX{}の場合（拡張なしのアスキーp\TeX{}の場合）。
%    \begin{macrocode}
    \mathchardef\e@alloc@top=255
    \let\e@alloc@chardef\chardef
  \else
%    \end{macrocode}
% e-\TeX{}拡張で$2^{15}$個のレジスタが利用できます。
% ^^A 「FAM256なしのe-(u)p\TeX{}」は事実上存在しないはず。
% ^^A ただし、たとえばe-(u)p\TeX{}をベースにした
% ^^A p\TeX{}-ng (Asiatic pTeX)はe-\TeX{}拡張を持っていて、
% ^^A FAM256パッチは適用されていないため、ここに該当する。
% ^^A   cf: https://github.com/clerkma/ptex-ng
% ^^A なお、p\TeX{}-ngはe-p\TeX{}と同様にpdf\TeX{}拡張の
% ^^A 一部（e-p\TeX{}と範囲が一致しない）を持っていること、
% ^^A また|\lastnodechar|などのe-p\TeX{}独自のプリミティブを
% ^^A 持っていないことにも注意。
%    \begin{macrocode}
    \mathchardef\e@alloc@top=32767
    \let\e@alloc@chardef\mathchardef
  \fi
\else
%    \end{macrocode}
% FAM256パッチが適用されたe-p\TeX{}の場合は、$2^{16}$個のレジスタが利用できます。
%    \begin{macrocode}
  \ifx\enablecjktoken\@undefined % pTeX
    \omathchardef\e@alloc@top=65535
    \let\e@alloc@chardef\omathchardef
  \else                          % upTeX
    \chardef\e@alloc@top=65535
    \let\e@alloc@chardef\chardef
  \fi
\fi
%    \end{macrocode}
%    \begin{macrocode}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2015/01/01}%
%<platexrelease>                   {\e@alloc@chardef}{Extended Allocation (FAM256)}%
%<platexrelease>\ifx\widowpenalties\@undefined
%<platexrelease>  \mathchardef\e@alloc@top=255
%<platexrelease>  \let\e@alloc@chardef\chardef
%<platexrelease>\else
%<platexrelease>  \mathchardef\e@alloc@top=32767
%<platexrelease>  \let\e@alloc@chardef\mathchardef
%<platexrelease>\fi
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}%
%<platexrelease>                   {\e@alloc@chardef}{Extended Allocation (FAM256)}%
%<platexrelease>\let\e@alloc@top\@undefined
%<platexrelease>\let\e@alloc@chardef\@undefined
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\e@mathgroup@top}
% 2015/01/01以降の\LaTeXe{}カーネルは、Xe\TeX{}とLua\TeX{}に対して数式famの
% 上限を16から256に増やしています（|\Umathcode| で判定）。
% FAM256パッチが適用されたe-p\TeX{}でも同様に上限を16から256に増やします。
% これで
%\begin{verbatim}
%  ! LaTeX Error: Too many math alphabets used in version normal.
%\end{verbatim}
% が出にくくなるはずです。
% \changes{v1.2j}{2016/11/09}{FAM256パッチ適用e-p\TeX{}に対応}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2016/11/29}%
%<platexrelease>                   {\e@mathgroup@top}{Extended Allocation (FAM256)}%
%<*plcore|platexrelease>
%    \end{macrocode}
%    \begin{macrocode}
\ifx\omathchar\@undefined
  \chardef\e@mathgroup@top=16 % LaTeX2e kernel standard
\else
  \mathchardef\e@mathgroup@top=256 % for e-pTeX FAM256 patched
\fi
%    \end{macrocode}
%    \begin{macrocode}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2015/01/01}%
%<platexrelease>                   {\e@mathgroup@top}{Extended Allocation (FAM256)}%
%<platexrelease>\chardef\e@mathgroup@top=16
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}%
%<platexrelease>                   {\e@mathgroup@top}{Extended Allocation (FAM256)}%
%<platexrelease>\let\e@mathgroup@top\@undefined
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \Finale
\endinput
