% \iffalse meta-comment
%% File: plext.dtx
%
%  Copyright 2001 ASCII Corporation.
%  Copyright (c) 2010 ASCII MEDIA WORKS
%  Copyright (c) 2016-2022 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.1a}{1995/03/11}{縦組マクロ実装}
% \changes{v1.1b}{1995/04/01}{互換モード部分を別ファイルに移動}
% \changes{v1.1c}{1995/08/25}{\cs{newline}, \cs{strut}の修正}
% \changes{v1.1d}{1995/11/10}{オリジナルとのコマンド名バッティングをやめた}
% \changes{v1.1d}{1995/11/21}{\cs{Rensuji}, \cs{prensuji}を作成}
% \changes{v1.1e}{1995/11/21}{プリアンブルコマンドを\file{plcore}に移動}
% \changes{v1.1f}{1996/01/09}{縦組に依存しないコマンドを分離し、このファイルを
%     拡張パッケージとした}
% \changes{v1.1g}{1996/01/12}{minipage環境の中で\cs{parbox}を回転オプション
%   付きで使用するとエラーとなるバグを修正}
% \changes{v1.1h}{1996/01/30}{キャプション拡張マクロを追加}
% \changes{v1.1i}{2001/05/10}{縦組でzを指定するとエラーになるのを修正。
%    ありがとう、大石さん}
% \changes{v1.2}{2001/09/26}{タグ名をplcoreからpackageに変更した}
% \changes{v1.2a}{2016/08/20}{tabular環境前の余分な\cs{xkanjiskip}を削除}
% \changes{v1.2a}{2016/08/20}{tabular環境後の余分な\cs{xkanjiskip}を削除}
% \changes{v1.2a}{2016/08/20}{\cs{parbox}前後の余分な\cs{xkanjiskip}を削除}
% \changes{v1.2a}{2016/08/20}{横組で\texttt{<t>}を指定した場合に
%    \cs{@arstrutbox}を余計に\cs{hbox}に入れていたのを修正}
% \changes{v1.2b}{2016/11/07}{横組で段落の頭に\cs{rensuji}を使える
%    ように\cs{leavevmode}を追加して修正}
% \changes{v1.2c}{2016/11/19}{Use \cs{setlength}, so that
%           calc extensions apply (sync with lttab.dtx v1.1j)}
% \changes{v1.2c}{2016/11/19}{Use \cs{@setminpage}
%                             (sync with ltboxes v1.1a)}
% \changes{v1.2c}{2016/11/19}{put \cs{global} into definition
%    of \cs{@minipagefalse} (sync with ltboxes v1.0z)}
% \changes{v1.2c}{2016/11/19}{Changed \cs{endgraf} to
%    \cs{@@par} (sync with ltboxes.dtx v1.0y)}
% \changes{v1.2c}{2016/11/19}{Changed \cs{@empty} to \cs{relax} as
%    flag for natural width: pr/2975 (sync with ltboxes.dtx v1.1f)}
% \changes{v1.2c}{2016/11/19}{Ensure \cs{@parboxto} holds the value
%    of \cs{@tempdimb} not the register itself (pr/3867)
%    (sync with ltboxes.dtx v1.1g)}
% \changes{v1.2d}{2017/02/04}{\cs{Kanji}の引数だけでなく後に連続する
%    数字も漢数字になってしまうバグを修正}
% \changes{v1.2e}{2017/03/02}{Make \cs{parbox} Robust
%    (sync with ltboxes 2015/01/08 v1.1h)}
% \changes{v1.2f}{2017/03/28}{表と周囲との揃え位置を修正}
% \changes{v1.2f}{2017/03/28}{段落の箱と周囲との揃え位置を修正}
% \changes{v1.2g}{2017/05/04}{Make \cs{pbox} Robust}
% \changes{v1.2g}{2017/05/04}{Use \cs{setlength}, so that
%           calc extensions apply}
% \changes{v1.2h}{2017/07/21}{表と周囲との揃え位置をさらに修正}
% \changes{v1.2i}{2018/09/09}{Made caption an error outside a float: latex/2815
%    (sync with ltfloat 1999/04/19 v1.1u)}
% \changes{v1.2i}{2018/09/09}{縦数式ディレクションの連数字}
% \changes{v1.2i}{2018/09/09}{Moved the code associated with
%    \cs{@mkpream} into the group provided by the box,
%    for robustness (latex/2183)
%    (sync with lttab.dtx 1996/10/21 v1.1i)}
% \changes{v1.2i}{2018/09/09}{Use \cs{set@typeset@protect}
%    (sync with lttab.dtx 1996/10/21 v1.1i)}
% \changes{v1.2i}{2018/09/09}{Check for hmode to see if something
%     went wrong during parsing (pr/2884)
%    (sync with lttab.dtx 1998/11/13 v1.1m)}
% \changes{v1.2i}{2018/09/09}{安全のため、\cs{DeclareLayoutCaption}で
%    定義する内部命令を\cs{...@layoutcaption}から
%    \cs{...@layoutc@ption}へ変更}
% \changes{v1.2j}{2018/09/20}{Change \cs{@stabular} to \cs{p@stabular},
%           to avoid conflict with \textsf{stabular} package}
% \changes{v1.2k}{2018/10/07}{キャプションのデフォルトの組方向をyからnへ
%    変更 (forum:2506, issue~76)}
% \changes{v1.2k}{2018/10/07}{キャプションの組み方向が基本組の組み方向と
%    直交する場合に、深さを忘れていたバグ修正 (forum:2506, issue~76)}
% \changes{v1.2l}{2019/09/29}{Make \cs{bou} robust}
% \changes{v1.2l}{2019/09/29}{Make \cs{kasen} robust}
% \changes{v1.2m}{2020/10/07}{マクロ追加}
% \changes{v1.2m}{2020/10/07}{Use \cs{@defaultunitsset} (gh/372)
%    (sync with ltpictur.dtx 2020/08/14 v1.2a)}
% \fi
%
% \iffalse
\NeedsTeXFormat{pLaTeX2e}
%<*driver>
\ProvidesFile{plext.dtx}
%</driver>
%<package>\ProvidesPackage{plext}
   [2020/10/07 v1.2m pLaTeX package file (community edition)]
%<*driver>
\RequirePackage{plautopatch}
\documentclass[dvipdfmx,a4paper]{jltxdoc}
\usepackage{plext}
\GetFileInfo{plext.dtx}
\title{p\LaTeXe{}拡張パッケージ\space\fileversion}
\author{Ken Nakano}
\date{作成日：\filedate}
\begin{document}
   \maketitle
   \tableofcontents
   \DocInput{\filename}
\end{document}
%</driver>
% \fi
%
%
% \section{概要}\label{plext:intro}
% このパッケージは、以下の項目に関する機能を拡張するものです。
%
% \begin{itemize}
% \item 表組環境
% \item フロートとキャプションの出力位置
% \item 段落ボックス環境
% \item 作図環境
% \item 連数字、漢数字、傍点、下線
% \item 参照番号
% \end{itemize}
%
% このパッケージは縦組用クラス（tarticle, tbook, treport）のときには、
% 自動的に読み込まれます。横組用クラス（jarticle, jbook, jreport）で
% 拡張機能を使いたい場合は、文書ファイルのプリアンブルに以下の一行を
% 記述してください。
%
%\begin{verbatim}
%     \usepackage{plext}
%\end{verbatim}
% 
% \section{組方向オプションについて}
% つぎの環境やコマンドは、組方向オプションが追加され、拡張されています。
%
% \begin{itemize}
% \item tabular環境、array環境
% \item |\layoutcaption|コマンド
% \item minipage環境、|\parbox|コマンド、|\pbox|コマンド
% \item picture環境
% \end{itemize}
%
% 組方向オプションは、コマンド名や環境の後ろで|<|と|>|で囲って、
% ``y'', ``t'', ``z''のいずれかを指定します。
% それぞれのオプションの意味はつぎのとおりです。
% デフォルトの組み方向は、横組のときは``y''、縦組のときは``t''です。
%
% \medskip
% \DeleteShortVerb{\|}
% \begin{center}
% \begin{tabular}{c|l}
% \emph{オプション} & \emph{意味}\\\hline
% \texttt{y}& 横組で出力（横組モードでは何もしない）\\
% \texttt{t}& 縦組で出力（縦組モードでは何もしない）\\
% \texttt{z}& 90度回転して出力（横組モードでは何もしない）\\
% \end{tabular}
% \end{center}
% \MakeShortVerb{\|}
%
% 組方向オプションを用いたサンプルを図\ref{fig:diroption}に示します。
% 左から、``y'', ``t'', ``z''オプションを指定してあります。
%
% \begin{figure}[htb]
% \begin{small}
% \begin{tsample}{10zw}
% \vfil
%  \parbox<z>{10zw}{たとえば、これはいったい何、いったいどうして、
%   などと思えるようなことが世の中にはたくさんあります！}\par
% \vfil
%  \parbox<t>{10zw}{たとえば、これはいったい何、いったいどうして、
%   などと思えるようなことが世の中にはたくさんあります？}\par
% \vfil
%  \parbox<y>{10zw}{たとえば、これはいったい何、いったいどうして、
%   などと思えるようなことが世の中にはたくさんあります。}
% \vfil
% \end{tsample}
% \end{small}
% \caption{組方向オプションの使用例\label{fig:diroption}}
% \end{figure}
%
%
% \section{コード}
%
% \begin{macro}{\if@rotsw}
% このスイッチは、縦組モードで90度回転させるかどうかを示すのに使います。
%    \begin{macrocode}
%<*package>
\newif\if@rotsw
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{表組環境}
% tabular環境とarray環境は、組方向を指定するオプションを追加しました。
% これらのコマンドは、\file{lttab.dtx}で定義されています。
%
% \begin{macro}{\array}
% \begin{macro}{\tabular}
% \begin{macro}{\tabular*}
% array環境とtabular環境を開始するコマンドです。
% tabular環境にはアスタリスク形式があります。
%    \begin{macrocode}
\def\array{\let\@acol\@arrayacol \let\@classz\@arrayclassz
  \let\@classiv\@arrayclassiv
  \let\\\@arraycr\let\@halignto\@empty\X@tabarray}
%
\def\tabular{\let\@halignto\@empty\X@tabular}
\@namedef{tabular*}{\@ifnextchar<%>
   {\p@stabular}{\p@stabular<Z>}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\X@tabarray}
% \begin{macro}{\X@tabular}
% 組方向オプションを調べます。
% \changes{v1.1c}{1995/08/11}{\cs{tabarray}のタイプミス修正}
% \changes{v1.1d}{1995/11/10}{\cs{@tabarray} to \cs{p@tabarray}}
% \changes{v1.1d}{1995/11/10}{\cs{@tabular} to \cs{p@tabular}}
%    \begin{macrocode}
\def\X@tabarray{\@ifnextchar<%>
   {\p@tabarray}{\p@tabarray<Z>}}
\def\X@tabular{\@ifnextchar<%>
   {\p@tabular}{\p@tabular<Z>}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\p@stabular}
% \begin{macro}{\p@tabular}
% アスタリスク形式の場合は、組方向オプションの後ろに幅を指定します。
% \changes{v1.1d}{1995/11/10}{\cs{@tabular} to \cs{p@tabular}}
% \changes{v1.2a}{2016/08/20}{tabular環境前の余分な\cs{xkanjiskip}を削除}
% \changes{v1.2c}{2016/11/19}{Use \cs{setlength}, so that
%           calc extensions apply (sync with lttab.dtx v1.1j)}
% \changes{v1.2j}{2018/09/20}{Change \cs{@stabular} to \cs{p@stabular},
%           to avoid conflict with \textsf{stabular} package}
%    \begin{macrocode}
\def\p@stabular<#1>#2{%
   \setlength\dimen@{#2}%
   \edef\@halignto{to\the\dimen@}\p@tabular<#1>}
\def\p@tabular<#1>{\leavevmode \null\hbox \bgroup $\let\@acol\@tabacol
   \let\@classz\@tabclassz
   \let\@classiv\@tabclassiv \let\\\@tabularcr\p@tabarray<#1>}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\p@tabarray}
% 位置オプションを調べます。
% \changes{v1.1d}{1995/11/10}{\cs{@tabarray} to \cs{p@tabarray}}
%    \begin{macrocode}
\def\p@tabarray<#1>{\m@th\@ifnextchar[%]
   {\p@array<#1>}{\p@array<#1>[c]}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\p@array}
% tabular環境とarray環境の内部形式です。
% \changes{v1.1c}{1995/09/11}{Add \cs{adjustbaseline}.}
% \changes{v1.1d}{1995/11/10}{\cs{@array} to \cs{p@array}}
% \changes{v1.2a}{2016/08/20}{横組で\texttt{<t>}を指定した場合に
%    \cs{@arstrutbox}を余計に\cs{hbox}に入れていたのを修正}
% \changes{v1.2i}{2018/09/09}{Moved the code associated with
%    \cs{@mkpream} into the group provided by the box,
%    for robustness (latex/2183)
%    (sync with lttab.dtx 1996/10/21 v1.1i)}
%    \begin{macrocode}
\def\p@array<#1>[#2]#3{%
  \fork@array@option<#1>[#2]\@begin@alignbox
  \bgroup\box@dir\adjustbaseline
  \setbox\@arstrutbox\hbox{%
  \iftdir
    \if #1y\relax\yoko
       \vrule\@height\arraystretch\ht\strutbox
             \@depth\arraystretch\dp\strutbox \@width\z@
    \else\if #1z\relax\@rotswtrue
       \vrule\@height\arraystretch\ht\zstrutbox
             \@depth\arraystretch\dp\zstrutbox \@width\z@
    \else
       \vrule\@height\arraystretch\ht\tstrutbox
             \@depth\arraystretch\dp\tstrutbox \@width\z@
    \fi\fi
  \else
    \if #1t\relax\tate
       \vrule\@height\arraystretch\ht\tstrutbox
             \@depth\arraystretch\dp\tstrutbox \@width\z@
    \else
       \vrule\@height\arraystretch\ht\strutbox
             \@depth\arraystretch\dp\strutbox \@width\z@
    \fi
  \fi}%
  \@mkpream{#3}\edef\@preamble{\ialign \noexpand\@halignto
  \bgroup \tabskip\z@skip \@arstrut \@preamble \tabskip\z@skip \cr}%
  \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
  \let\tabularnewline\\%
%    \end{macrocode}
% \changes{v1.2i}{2018/09/09}{Use \cs{set@typeset@protect}
%    (sync with lttab.dtx 1996/10/21 v1.1i)}
%    \begin{macrocode}
    \let\par\@empty
    \let\@sharp##%
    \set@typeset@protect
    \lineskip\z@skip\baselineskip\z@skip
%    \end{macrocode}
% \changes{v1.2i}{2018/09/09}{Check for hmode to see if something
%     went wrong during parsing (pr/2884)
%    (sync with lttab.dtx 1998/11/13 v1.1m)}
%    \begin{macrocode}
    \ifhmode \@preamerr\z@ \@@par\fi
    \@preamble}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\endarray}
% \begin{macro}{\endtabular}
% array環境とtabular環境の終了コマンドです。
% |\@end@alignbox|は|\p@array|から呼び出される|\fork@array@option|によって
% 設定されます。
% \changes{v1.2a}{2016/08/20}{tabular環境後の余分な\cs{xkanjiskip}を削除}
%    \begin{macrocode}
\def\endarray{\crcr\egroup\egroup\@end@alignbox}
\def\endtabular{\crcr\egroup\egroup\@end@alignbox $\egroup\null}
\expandafter \let \csname endtabular*\endcsname = \endtabular
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
%
% \begin{macro}{\fork@array@option}
% array環境とtabular環境で与えられた
% 第一引数と第二引数の組合せの分岐を行ないます。
%
% コミュニティ版では、アスキー版で不自然だった表組（array環境およびtabular環境）と
% 周囲の本文との揃え位置を修正し、以下のように設計しました。
% \begin{itemize}
% \item 周囲の組方向が横組かつ組方向が|<y>|, |<z>|指定の場合
% \begin{itemize}
%   \item |[t]|指定のとき\\一行目のベースラインが周囲のそれと一致（罫線の場合は和文ベースラインの位置）
%   \item |[c]|指定のとき\\表組の中心が周囲の数式軸を通る（欧文ベースラインシフトの影響下）
%   \item |[b]|指定のとき\\最終行のベースラインが周囲のそれと一致（罫線の場合は和文ベースラインの位置）
% \end{itemize}
% \item 周囲の組方向が横組かつ組方向が|<t>|指定の場合
% \begin{itemize}
%   \item |[t]|指定のとき\\表組の上端が周囲の和文ベースラインと一致
%   \item |[c]|指定のとき\\表組の中心が周囲の数式軸を通る（欧文ベースラインシフトの影響下）
%   \item |[b]|指定のとき\\表組の下端が周囲の和文ベースラインと一致
% \end{itemize}
% \item 周囲の組方向が縦組かつ組方向が|<y>|指定の場合
% \begin{itemize}
%   \item |[t]|指定のとき\\表組の上端が周囲の和文ベースラインと一致
%   \item |[c]|指定のとき\\表組の中心が周囲の数式軸を通る（欧文ベースラインシフトの影響下）
%   \item |[b]|指定のとき\\表組の下端が周囲の和文ベースラインと一致
% \end{itemize}
% \item 周囲の組方向が縦組かつ組方向が|<t>|指定の場合
% \begin{itemize}
%   \item |[t]|指定のとき\\一行目のベースラインが周囲のそれと一致（罫線の場合は和文ベースラインの位置）
%   \item |[c]|指定のとき\\表組の中心が周囲の数式軸を通る（欧文ベースラインシフトの影響下）
%   \item |[b]|指定のとき\\最終行のベースラインが周囲のそれと一致（罫線の場合は和文ベースラインの位置）
% \end{itemize}
% \item 周囲の組方向が縦組かつ組方向が|<z>|指定の場合
% \begin{itemize}
%   \item |[t]|指定のとき\\一行目の欧文ベースラインが周囲のそれと一致
%   \item |[c]|指定のとき\\表組の中心が周囲の数式軸を通る（欧文ベースラインシフトの影響下）
%   \item |[b]|指定のとき\\最終行の欧文ベースラインが周囲のそれと一致
% \end{itemize}
% \end{itemize}
% \changes{v1.2f}{2017/03/28}{表と周囲との揃え位置を修正}
% \changes{v1.2h}{2017/07/21}{表と周囲との揃え位置をさらに修正}
%    \begin{macrocode}
\def\fork@array@option<#1>[#2]{%
\@rotswfalse
%    \end{macrocode}
% 縦組モードのとき：
%    \begin{macrocode}
\iftdir
\if #1y\relax\let\box@dir\yoko
  \if #2t\relax
     \def\@begin@alignbox{%
         \@tempdima=\tbaselineshift
         \advance\@tempdima-\ybaselineshift
         \raise\@tempdima\vtop\bgroup\kern\z@\vtop}%
     \let\@end@alignbox\egroup
  \else\if #2b\relax
     \def\@begin@alignbox{%
         \@tempdima=\tbaselineshift
         \advance\@tempdima-\ybaselineshift
         \raise\@tempdima\vbox\bgroup\vbox}%
     \def\@end@alignbox{\kern\z@\egroup}%
  \else
     \let\@begin@alignbox\vcenter
     \let\@end@alignbox\relax
  \fi\fi
\else\if #1z\relax\let\box@dir\relax\@rotswtrue
  \if #2t\relax
     \def\@begin@alignbox{%
         \@tempdima=\tbaselineshift
         \advance\@tempdima-\ybaselineshift
         \advance\@tempdima\ht\tstrutbox
         \raise\arraystretch\@tempdima\vtop\bgroup\kern\z@\vtop}%
     \let\@end@alignbox\egroup
  \else\if #2b\relax
     \def\@begin@alignbox{%
         \@tempdima=\tbaselineshift
         \advance\@tempdima-\ybaselineshift
         \advance\@tempdima-\dp\tstrutbox
         \raise\arraystretch\@tempdima\vbox\bgroup\vbox}%
     \def\@end@alignbox{\kern\z@\egroup}%
  \else
     \let\@begin@alignbox\vcenter
     \let\@end@alignbox\relax
  \fi\fi
\else\let\box@dir\tate
  \if #2t\relax
     \let\@begin@alignbox\vtop
     \let\@end@alignbox\relax
  \else\if #2b\relax
     \let\@begin@alignbox\vbox
     \let\@end@alignbox\relax
  \else
     \let\@begin@alignbox\vcenter
     \let\@end@alignbox\relax
  \fi\fi
\fi\fi
%    \end{macrocode}
% 横組モードのとき：
%    \begin{macrocode}
\else
\if #1t\relax\let\box@dir\tate
  \if #2t\relax
     \def\@begin@alignbox{\vtop\bgroup\kern\z@\vbox}%
     \let\@end@alignbox\egroup
  \else\if #2b\relax
     \def\@begin@alignbox{\vbox\bgroup\vbox}%
     \def\@end@alignbox{\kern\z@\egroup}%
  \else
     \let\@begin@alignbox\vcenter
     \let\@end@alignbox\relax
  \fi\fi
\else\let\box@dir\yoko
  \if #2t\relax
     \let\@begin@alignbox\vtop
     \let\@end@alignbox\relax
  \else\if #2b\relax
     \let\@begin@alignbox\vbox
     \let\@end@alignbox\relax
  \else
     \let\@begin@alignbox\vcenter
     \let\@end@alignbox\relax
  \fi\fi
\fi\fi}
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{フロートとキャプションの出力位置}
% キャプションとフロートは、
% 出力位置の指定や大きさの指定などができるように拡張しています。
% 詳細は、『日本語\LaTeXe{}ブック』を参照してください。
%
% |\layoutfloat|コマンドで作られるボックスです。
%    \begin{macrocode}
\newbox\@floatbox
%    \end{macrocode}
% フロートオブジェクトの幅と高さです。
%    \begin{macrocode}
\newdimen\floatwidth
\newdimen\floatheight
%    \end{macrocode}
% フロートオブジェクトのまわりに引かれる罫線の太さです。
%    \begin{macrocode}
\newdimen\floatruletick \floatruletick=0.4pt
%    \end{macrocode}
% フロートオブジェクトとキャプションの間のアキです。
%    \begin{macrocode}
\newdimen\captionfloatsep \captionfloatsep=10pt
%    \end{macrocode}
% |\caption@dir|には、キャプションを組む方向を示すオプションが格納されます。
% |\captiondir|は|\caption@dir|の値と現在の組み方向によって、
% |\yoko|, |\tate|, |\relax|のいずれかに設定されます。
%    \begin{macrocode}
\def\caption@dir{Z}
\let\captiondir\relax
%    \end{macrocode}
% キャプションの幅です。
%    \begin{macrocode}
\newdimen\captionwidth \captionwidth\z@
%    \end{macrocode}
% キャプションを付ける位置を指定します。
%    \begin{macrocode}
\def\caption@posa{Z}
\def\caption@posb{Z}
%    \end{macrocode}
% 組み立てられたキャプションが格納されるボックスです。
%    \begin{macrocode}
\newbox\@captionbox
%    \end{macrocode}
% キャプションに使われる文字です。
%    \begin{macrocode}
\def\captionfontsetup{\normalfont\normalsize}
%    \end{macrocode}
%
% \begin{macro}{\layoutfloat}
% \begin{macro}{\X@layoutfloat}
% \begin{macro}{\@layoutfloat}
% |\layoutfloat|は図表類の大きさと位置を指定するのに使います。
% 大きさを省略するか、負の値を指定すると、
% そのオブジェクトの自然な長さになります。このときは、罫が引かれません。
% 正の大きさを指定すると、|\floatruletick|の太さの罫で囲まれます。
%
% 位置指定を省略した場合、中央揃えになるようにしています。
%    \begin{macrocode}
\def\layoutfloat{\@ifnextchar(%)
   {\X@layoutfloat}{\X@layoutfloat(-5\p@,-5\p@)}}
%
\def\X@layoutfloat(#1,#2){\@ifnextchar[%]
   {\@layoutfloat(#1,#2)}{\@layoutfloat(#1,#2)[c]}}
%
\long\def\@layoutfloat(#1,#2)[#3]#4{%
  \setbox\z@\hbox{#4}%
  \floatwidth=#1 \floatheight=#2 \edef\float@pos{#3}%
  \ifdim\floatwidth<\z@
     \floatwidth\wd\z@\floatruletick\z@
  \fi
  \ifdim\floatheight<\z@
     \floatheight\ht\z@\advance\floatheight\dp\z@\relax
     \floatruletick\z@
  \fi
  \setbox\@floatbox\vbox to\floatheight{\offinterlineskip
    \hrule width\floatwidth height\floatruletick depth\z@
    \vss\hbox to\floatwidth{%
      \vrule width\floatruletick height\floatheight depth\z@
      \hss\vbox to\floatheight{\hsize\floatwidth\vss#4\vss}\hss
      \vrule width\floatruletick height\floatheight depth\z@
    }\hrule width\floatwidth height\floatruletick depth\z@}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\DeclareLayoutCaption}
% |\DeclareLayoutCaption|コマンドは、キャプションの組方向、付ける位置や幅の
% デフォルトをフロートのタイプごとに設定することができます。
% このコマンドでデフォルト値が設定されていないと、
% |\pcaption|コマンドでエラーが発せられます。
% このコマンドはプリアンブルでのみ、使用できます。
%
% |\DeclareLayoutCaption|\meta{type}^^A
%         |<|\meta{dir}|>(|\meta{width}|)[|\meta{pos1}\meta{pos2}|]|
%
% コマンド引数を省略することはできません。
% \meta{dir}には、`|y|', `|t|', `|z|', `|n|'のいずれかを指定します。
% `|n|'と指定をすると、本文の組み方向と同じ方向でキャプションが組まれます。
% これがデフォルトです。（補足：2018/09/20 v1.2jまでは、この説明に反して
% 実際のコードは`|y|'がデフォルトになっており、
% 「日本語\LaTeXe{}ブック」にも`|y|'と書かれていましたが、
% 後述の★のバグ修正に合わせ、2018/10/07 v1.2kで`|n|'に直しました。）
%
% \meta{width}には、キャプションを折り返す長さを指定します。
% `|(12zw)|'と指定をすると、漢字12文字分の長さで折り返されます。
% デフォルトは|(.8\linewidth)|です。
% ^^A （補足：2018/09/20 v1.2jまでは、ここの説明文だけ
% ^^A   `|(\floatwidth)|'がデフォルトと書かれていましたが、
% ^^A   実際のコード及び「日本語\LaTeXe{}ブック」に合わせました。）
% なお、キャプションの幅をフロートオブジェクトの幅に合わせる場合は
% `|(\floatwidth)|'と指定し、高さに合わせる場合は`|(\floatheight)|'と
% 指定します。
%
% \meta{pos1}と\meta{pos2}には、キャプションを出力する位置を指定します。
% \meta{pos1}は、`|c|', `|t|', `|b|'のいずれかです。
% \meta{pos2}は、`|u|', `|d|', `|l|', `|r|'のいずれかです。
% デフォルトは、|figure|タイプが`|cd|'、|table|タイプは`|cu|'です。
% \changes{v1.2i}{2018/09/09}{安全のため、\cs{DeclareLayoutCaption}で
%    定義する内部命令を\cs{...@layoutcaption}から
%    \cs{...@layoutc@ption}へ変更}
%    \begin{macrocode}
\def\DeclareLayoutCaption#1<#2>(#3)[#4#5]{%
  \expandafter
  \ifx\csname #1@layoutc@ption\endcsname\relax \else
    \@latex@info{Redeclaring capiton layout setting of '#1'}%
  \fi
  \expandafter
  \gdef\csname #1@layoutc@ption\endcsname{%
     \if Z\caption@dir\def\caption@dir{#2}\fi
     \ifdim\captionwidth=\z@ \captionwidth=#3\relax\fi
     \if Z\caption@posa\def\caption@posa{#4}\fi
     \if Z\caption@posb\def\caption@posb{#5}\fi}}
\@onlypreamble\DeclareLayoutCaption
%    \end{macrocode}
% \changes{v1.0h}{1996/03/13}{キャプション出力位置の初期値を設定}
% \changes{v1.2k}{2018/10/07}{キャプションのデフォルトの組方向をyからnへ
%    変更 (forum:2506, issue~76)}
%    \begin{macrocode}
\DeclareLayoutCaption{figure}<n>(.8\linewidth)[cd]
\DeclareLayoutCaption{table}<n>(.8\linewidth)[cu]
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\layoutcaption}
% \begin{macro}{\X@layoutcaption}
% \begin{macro}{\@ilayoutcaption}
% \begin{macro}{\@iilayoutcaption}
% |\DeclareLayoutCaption|コマンドで設定をした、デフォルト値とは異なる設定で
% 組みたい場合は、|\layoutcaption|コマンドを使用します。
% 
% |\layoutcaption<|\meta{dir}|>(|\meta{width}|)[|\meta{pos}|]|
%
% なお、|\layoutcaption|に組み方向オプションを付けましたので、
% |\captiondir|で組み方向を指定する必要はありません。
% また、|\captiondir|で指定をしても、その値は無視されます。
%    \begin{macrocode}
\def\layoutcaption{\def\caption@dir{Z}\captionwidth\z@
  \def\caption@posa{Z}\def\caption@posb{Z}%
  \@ifnextchar<\X@layoutcaption{%
    \@ifnextchar(\@ilayoutcaption{%
      \@ifnextchar[\@iilayoutcaption\relax}}}
%
\def\X@layoutcaption<#1>{\def\caption@dir{#1}%
  \@ifnextchar(\@ilayoutcaption{%
    \@ifnextchar[\@iilayoutcaption\relax}}
%
\def\@ilayoutcaption(#1){\setlength\captionwidth{#1}%
  \@ifnextchar[{\@iilayoutcaption}{\relax}}
%
\def\@iilayoutcaption[#1#2]{%
  \def\caption@posa{#1}\def\caption@posb{#2}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\pcaption}
% \begin{macro}{\@pcaption}
% キャプションを図表類の天地左右の指定箇所に付けるには|\pcaption|コマンドで
% 指定をします。位置の指定は|\layoutcaption|コマンドで行ないます。
% |\layoutcaption|コマンドが省略された場合は、|\DeclareLayoutCaption|コマンド
% で設定されているデフォルト値が使われます。
% \changes{v1.2i}{2018/09/09}{Made caption an error outside a float: latex/2815
%    (sync with ltfloat 1999/04/19 v1.1u)}
%    \begin{macrocode}
\def\pcaption{%
   \ifx\@captype\@undefined
     \@latex@error{\noexpand\pcaption outside float}\@ehd
     \expandafter\@gobble
   \else
     \refstepcounter\@captype
     \expandafter\@firstofone
   \fi
   {\@dblarg{\@pcaption\@captype}}%
}
%
\long\def\@pcaption#1[#2]#3{%
  \addcontentsline{\csname ext@#1\endcsname}{#1}{%
    \protect\numberline{\csname the#1\endcsname}{\ignorespaces#2}}%
  \ifvoid\@floatbox
     \@latex@error{Use \noexpand\pcaption with `\string\layoutfloat'}\@eha
  \fi
  \make@pcaptionbox{#3}%
  \@pboxswfalse
  \setbox\@tempboxa\vbox{\hbox to\hsize{\if l\float@pos\else\hss\fi
    \if l\caption@posb\box\@captionbox\kern\captionfloatsep\fi
    \if t\caption@posa\vtop
    \else\if b\caption@posa\vbox
    \else\@pboxswtrue $\vcenter \fi\fi
    {\if u\caption@posb\box\@captionbox\kern\captionfloatsep\fi
     \unvbox\@floatbox
     \if d\caption@posb\kern\captionfloatsep\box\@captionbox\fi}%
    \if@pboxsw \m@th$\fi
    \if r\caption@posb\kern\captionfloatsep\box\@captionbox\fi
    \if r\float@pos\else\hss\fi}}%
  \par\vskip.25\baselineskip
  \box\@tempboxa}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\make@pcaptionbox}
% キャプションを組み立て、|\@captionbox|を作成します。
%    \begin{macrocode}
\def\make@pcaptionbox#1{%
%    \end{macrocode}
% まず、デフォルトの設定がされているかを確認します。
% 設定されていない場合は、警告メッセージを出力し、
% 現在の組モードでのデフォルト値を使用します。
% 設定されていれば、そのデフォルト値にします。
%
% \changes{v1.1h}{1996/03/13}{typo: \cs{@latex@warning}.}
%    \begin{macrocode}
  \expandafter
  \ifx\csname\@captype @layoutc@ption\endcsname\relax
     \@latex@warning{Default caption layout of `\@captype' unknown}%
       \def\caption@dir{Z}\captionwidth\z@
       \def\caption@posa{Z}\def\caption@posb{Z}%
  \else
     \csname \@captype @layoutc@ption\endcsname
  \fi
%    \end{macrocode}
% 次に、組み方向を設定します。 
% 基本組の組み方向とキャプションの組み方向を変える場合には、
% |\@tempswa|を真とします。文字を回転させるときは|\@rotsw|を真にします。
%    \begin{macrocode}
  \@rotswfalse \@tempswafalse
  \iftdir\if y\caption@dir \let\captiondir\yoko \@tempswatrue
    \else\if z\caption@dir \let\captiondir\relax \@rotswtrue
    \else\let\captiondir\tate\fi\fi
  \else\if t\caption@dir\let\captiondir\tate \@tempswatrue
    \else\let\captiondir\yoko\fi
  \fi
%    \end{macrocode}
% キャプションを組み立てる前に、まず、キャプション文字列がどの程度の長さを
% 持っているのかを確認するために、|\hbox|に入れます。
%    \begin{macrocode}
  \setbox0\hbox{\if@rotsw $\fi\hbox{\captiondir
     \captionfontsetup\parindent\z@\inhibitglue
     \csname fnum@\@captype\endcsname\char\euc"A1A1\relax#1}%
  \if@rotsw \m@th$\fi}%
%    \end{macrocode}
% キャプションの幅に合わせるため、再び、ボックスを組み立てます。
%
% キャプションを折り返さなくてもよい場合、|\@tempdima|をキャプションの長さに
% します。ただし、キャプションの組み方向が基本組の組み方向と異なる場合
% （|\@tempswa|が真）は、ボックス0の幅ではなく、高さに設定をします
% （p\TeX{}では同じボックスでも、組方向によって |\wd| と |\ht|+|\wd| の
% 返す寸法が異なることに注意）。
% |\captionwidth|の値が、キャプションの幅よりも長い場合、
% 折り返さなくてはなりませんので、|\@tempdima|を|\captionwidth|にします。
%
% \noindent\emph{日本語\TeX{}開発コミュニティによる修正}：
% 2018/09/20 v1.2jまでは、キャプションの組方向が基本組の組み方向と
% 直交する場合に深さを考慮するのを忘れていたために、
% 本来は折り返さずに済むはずの短いキャプションが、必ず折り返されて
% しまうというバグ（★）がありました。2018/10/07 v1.2kでこのバグを
% 修正したため、組版結果が大きく変わる場合があります。
% \changes{v1.2k}{2018/10/07}{キャプションの組み方向が基本組の組み方向と
%    直交する場合に、深さを忘れていたバグ修正 (forum:2506, issue~76)}
%    \begin{macrocode}
  \if@tempswa \@tempdima\ht0 \advance\@tempdima\dp0
  \else \@tempdima\wd0 \fi
  \ifdim\@tempdima>\captionwidth \@tempdima\captionwidth \fi
  \@pboxswfalse
  \setbox0\hbox{\if@rotsw $\fi
    \if u\caption@posb\vbox
    \else\if d\caption@posb\vbox
    \else\if t\caption@posa\vtop
    \else\if b\caption@posa\vbox
    \else\ifmmode\vcenter\else\@pboxswtrue $\vcenter\fi
    \fi\fi\fi\fi
    {\hsize\@tempdima\kern\z@
    \vbox{\captiondir\hsize\@tempdima
      \captionfontsetup\parindent\z@\inhibitglue
      \csname fnum@\@captype\endcsname\char\euc"A1A1\relax#1}\kern\z@
    }\if@pboxsw \m@th$\fi \if@rotsw \m@th$\fi}%
%    \end{macrocode}
% 最後に|\@captionbox|を組み立てます。
%
% 位置2オプションが`|u|'か`|d|'の場合、
% このボックスの幅をフロートオブジェクトの幅と同じ長さにし、
% 位置1オプションでの揃えに組み立てます。
%
% 位置2オプションが`|l|'か`|r|'の場合は、キャプションの幅です。
% このときの位置1オプションの揃えは、この前の段階で準備をしておき、
% |\@pcaption|で最終的にフロートオブジェクトと組み合わせるときになされます。
%    \begin{macrocode}
  \let\to@captionboxwidth\relax
  \if l\caption@posb \else\if r\caption@posb\else
  \def\to@captionboxwidth{to\floatwidth}\fi\fi
  \setbox\@captionbox\hbox\to@captionboxwidth{%
     \if t\caption@posa\else\hss\fi
     \unhbox0\relax
     \if b\caption@posa\else\hss\fi}}
%    \end{macrocode}
% \end{macro}
%
%
%
% \subsection{段落ボックス環境}
% minipage環境と|\parbox|コマンドも、tabular環境と同じように、
% 組方向を指定するオプションを追加してあります。
% これらのコマンドは、\file{ltboxes.dtx}で定義されています。
%
% |\parbox|コマンドは幅だけでなく高さも指定できるようになっています。
% 新しい|\parbox|コマンドについての詳細は、\file{usrguide.tex}を参照
% してください。
%
% \subsubsection*{minipage環境}
%
% \begin{macro}{\minipage}
% 組方向オプションを調べます。
%    \begin{macrocode}
\def\minipage{\@ifnextchar<%>
   {\X@minipage}{\X@minipage<Z>}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\X@minipage}
% 位置オプションを調べます。
% \changes{v1.2c}{2016/11/19}{Changed \cs{@empty} to \cs{relax} as
%    flag for natural width: pr/2975 (sync with ltboxes.dtx v1.1f)}
%    \begin{macrocode}
\def\X@minipage<#1>{\@ifnextchar[%]
   {\@iminipage<#1>}{\@iiiminipage<#1>{c}\relax[s]}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@iminipage}
% 高さオプションを調べます。
% \changes{v1.2c}{2016/11/19}{Changed \cs{@empty} to \cs{relax} as
%    flag for natural width: pr/2975 (sync with ltboxes.dtx v1.1f)}
%    \begin{macrocode}
\def\@iminipage<#1>[#2]{\@ifnextchar[%]
   {\@iiminipage<#1>{#2}}{\@iiiminipage<#1>{#2}\relax[s]}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@iiminipage}
% 内部位置オプションを調べます。
%    \begin{macrocode}
\def\@iiminipage<#1>#2[#3]{\@ifnextchar[%]
   {\@iiiminipage<#1>{#2}{#3}}{\@iiiminipage<#1>{#2}{#3}[#2]}}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\@iiiminipage}
% minipage環境の内部形式です。
% \changes{v1.1g}{1996/01/12}{\break Grouping \cs{@iiiminipage}}
% \cs{leavevmode}の後の\cs{bgroup}は、
% 回転オプションが指定されたときのフラグ|\if@rotsw|が、このマクロの内部だけ
% で有効になるようにするためです。この括弧は、\cs{endminipage}コマンドで
% 閉じます。
%    \begin{macrocode}
\def\@iiiminipage<#1>#2#3[#4]#5{%
  \leavevmode\bgroup
  \setlength\@tempdima{#5}%
  \def\@mpargs{<#1>{#2}{#3}[#4]{#5}}%
  \@rotswfalse
  \iftdir
    \if #1y\relax\let\box@dir\yoko
    \else\if #1z\relax\@rotswtrue \let\box@dir\relax
    \else\let\box@dir\tate
    \fi\fi
  \else
    \if #1t\relax\let\box@dir\tate
    \else\let\box@dir\yoko
    \fi
  \fi
  \setbox\@tempboxa\vbox\bgroup\box@dir
    \if@rotsw \hsize\@tempdima\hbox\bgroup$\vbox\bgroup\fi
%    \end{macrocode}
% \changes{v1.1c}{1995/09/11}{Add \cs{adjustbaseline}.}
% \changes{v1.2c}{2016/11/19}{Use \cs{@setminpage}
%                             (sync with ltboxes v1.1a)}
%    \begin{macrocode}
    \adjustbaseline
    \color@begingroup
      \hsize\@tempdima
      \textwidth\hsize \columnwidth\hsize
      \@parboxrestore
      \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}%
      \c@mpfootnote\z@
      \let\@footnotetext\@mpfootnotetext
      \let\@listdepth\@mplistdepth \@mplistdepth\z@
      \@minipagerestore
      \@setminipage}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\endminipage}
% minipage環境の終了コマンドです。
% \changes{v1.2c}{2016/11/19}{put \cs{global} into definition
%    of \cs{@minipagefalse} (sync with ltboxes v1.0z)}
%    \begin{macrocode}
\def\endminipage{%
    \par
    \unskip
    \ifvoid\@mpfootins\else
      \vskip\skip\@mpfootins
      \normalcolor
      \footnoterule
      \unvbox\@mpfootins
    \fi
    \@minipagefalse   %% added 24 May 89
  \color@endgroup
  \if@rotsw \egroup\m@th$\egroup\fi
%    \end{macrocode}
% \cs{@iiiminipage}で開始したグループを閉じるための\cs{egroup}です。
%    \begin{macrocode}
  \egroup
  \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}\egroup}
%    \end{macrocode}
% \end{macro}
%
% \subsubsection*{\cs{parbox}コマンド}
%
% \begin{macro}{\parbox}
% 組方向オプションを調べます。
% \changes{v1.2e}{2017/03/02}{Make \cs{parbox} Robust
%    (sync with ltboxes 2015/01/08 v1.1h)}
%    \begin{macrocode}
\DeclareRobustCommand\parbox{\@ifnextchar<%>
   {\X@parbox}{\X@parbox<Z>}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\X@parbox}
% 位置オプションを調べます。
% \changes{v1.2c}{2016/11/19}{Changed \cs{@empty} to \cs{relax} as
%    flag for natural width: pr/2975 (sync with ltboxes.dtx v1.1f)}
%    \begin{macrocode}
\def\X@parbox<#1>{\@ifnextchar[%]
   {\@iparbox<#1>}{\@iiiparbox<#1>{c}\relax[s]}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@iparbox}
% 高さオプションを調べます。
% \changes{v1.2c}{2016/11/19}{Changed \cs{@empty} to \cs{relax} as
%    flag for natural width: pr/2975 (sync with ltboxes.dtx v1.1f)}
%    \begin{macrocode}
\def\@iparbox<#1>[#2]{\@ifnextchar[%]
   {\@iiparbox<#1>{#2}}{\@iiiparbox<#1>{#2}\relax[s]}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@iiparbox}
% 内部位置オプションを調べます。
%    \begin{macrocode}
\def\@iiparbox<#1>#2[#3]{\@ifnextchar[%]%
   {\@iiiparbox<#1>{#2}{#3}}{\@iiiparbox<#1>{#2}{#3}[#2]}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@iiiparbox}
% |parbox|の内部形式です。
% \changes{v1.1c}{1995/09/11}{Add \cs{adjustbaseline}.}
% \changes{v1.1c}{1995/10/24}{\break typo \cs{adjustbaesline}.}
% \changes{v1.1g}{1996/01/12}{\break Grouping \cs{@iiiparbox}}
% minipage環境と同じようにグルーピングをします。
% この括弧と対になるのは、このマクロの最後の\cs{egroup}です。
% \changes{v1.2a}{2016/08/20}{\cs{parbox}前後の余分な\cs{xkanjiskip}を削除}
% \changes{v1.2c}{2016/11/19}{Changed \cs{endgraf} to
%    \cs{@@par} (sync with ltboxes.dtx v1.0y)}
% \changes{v1.2c}{2016/11/19}{Changed \cs{@empty} to \cs{relax} as
%    flag for natural width: pr/2975 (sync with ltboxes.dtx v1.1f)}
% \changes{v1.2c}{2016/11/19}{Ensure \cs{@parboxto} holds the value
%    of \cs{@tempdimb} not the register itself (pr/3867)
%    (sync with ltboxes.dtx v1.1g)}
%    \begin{macrocode}
\long\def\@iiiparbox<#1>#2#3[#4]#5#6{%
  \leavevmode\null\bgroup
  \setlength\@tempdima{#5}%
  \fork@parbox@option<#1>[#2]%
\if@rotsw
  \@begin@tempboxa\vbox{\box@dir\hsize\@tempdima
    \hbox{$\vbox{\@parboxrestore\adjustbaseline#6\@@par}\m@th$}}%
\else
  \@begin@tempboxa\vbox{\box@dir
    \hsize\@tempdima\@parboxrestore\adjustbaseline#6\@@par}%
\fi
    \ifx\relax#3\relax\else
      \setlength\@tempdimb{#3}%
      \edef\@parboxto{to\the\@tempdimb}%
    \fi
    \@begin@parbox\@parboxto{\box@dir\adjustbaseline
       \let\hss\vss\let\unhbox\unvbox
       \csname bm@#4\endcsname}\@end@parbox
  \@end@tempboxa\egroup\null}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\fork@parbox@option}
% |\parbox|で与えられた第一引数と第二引数の組合せの分岐を行ないます。
%
% コミュニティ版では、アスキー版で不自然だった|\parbox|の箱と
% 周囲の本文との揃え位置を修正し、以下のように設計しました。
% \begin{itemize}
% \item 周囲の組方向が横組かつ組方向が|<y>|, |<z>|指定の場合
% \begin{itemize}
%   \item |[t]|指定のとき\\一行目のベースラインが周囲のそれと一致
%   \item |[c]|指定のとき\\箱の中心が周囲の数式軸を通る（欧文ベースラインシフトの影響下）
%   \item |[b]|指定のとき\\最終行のベースラインが周囲のそれと一致
% \end{itemize}
% \item 周囲の組方向が横組かつ組方向が|<t>|指定の場合
% \begin{itemize}
%   \item |[t]|指定のとき\\箱の上端が周囲の和文文字の高さと一致
%   \item |[c]|指定のとき\\箱の中心が周囲の数式軸を通る（欧文ベースラインシフトの影響下）
%   \item |[b]|指定のとき\\箱の下端が周囲の和文文字の深さと一致
% \end{itemize}
% \item 周囲の組方向が縦組かつ組方向が|<y>|指定の場合
% \begin{itemize}
%   \item |[t]|指定のとき\\箱の上端が周囲の和文文字の高さと一致
%   \item |[c]|指定のとき\\箱の中心が周囲の数式軸を通る（欧文ベースラインシフトの影響下）
%   \item |[b]|指定のとき\\箱の下端が周囲の和文文字の深さと一致
% \end{itemize}
% \item 周囲の組方向が縦組かつ組方向が|<t>|指定の場合
% \begin{itemize}
%   \item |[t]|指定のとき\\一行目のベースラインが周囲のそれと一致
%   \item |[c]|指定のとき\\箱の中心が周囲の数式軸を通る（欧文ベースラインシフトの影響下）
%   \item |[b]|指定のとき\\最終行のベースラインが周囲のそれと一致
% \end{itemize}
% \item 周囲の組方向が縦組かつ組方向が|<z>|指定の場合
% \begin{itemize}
%   \item |[t]|指定のとき\\箱の上端が周囲の和文文字の高さと一致
%   \item |[c]|指定のとき\\箱の中心が周囲の数式軸を通る（欧文ベースラインシフトの影響下）
%   \item |[b]|指定のとき\\箱の下端が周囲の和文文字の深さと一致
% \end{itemize}
% \end{itemize}
% \changes{v1.2f}{2017/03/28}{段落の箱と周囲との揃え位置を修正}
%    \begin{macrocode}
\def\fork@parbox@option<#1>[#2]{%
\@rotswfalse
%    \end{macrocode}
% 縦組モードのとき：
%    \begin{macrocode}
\iftdir
\if #1y\relax\let\box@dir\yoko
   \if #2t\relax
      \def\@begin@parbox{\raise\cht\vtop\bgroup\kern\z@\vtop}%
      \let\@end@parbox\egroup
   \else\if #2b\relax
      \def\@begin@parbox{\lower\cdp\vbox\bgroup\vbox}%
      \def\@end@parbox{\kern\z@\egroup}%
   \else\ifmmode
      \let\@begin@parbox\vcenter
      \let\@end@parbox\relax
   \else
      \def\@begin@parbox{$\vcenter}%
      \def\@end@parbox{\m@th$}%
   \fi\fi\fi
\else\if #1z\relax\@rotswtrue \let\box@dir\relax
   \if #2t\relax
      \def\@begin@parbox{\raise\cht\vtop\bgroup\kern\z@\vtop}%
      \let\@end@parbox\egroup
   \else\if #2b\relax
      \def\@begin@parbox{\lower\cdp\vbox\bgroup\vbox}%
      \def\@end@parbox{\kern\z@\egroup}%
   \else\ifmmode
      \let\@begin@parbox\vcenter
      \let\@end@parbox\relax
   \else
      \def\@begin@parbox{$\vcenter}%
      \def\@end@parbox{\m@th$}%
   \fi\fi\fi
\else\let\box@dir\tate
   \if #2t\relax
      \let\@begin@parbox\vtop
      \let\@end@parbox\relax
   \else\if #2b\relax
      \let\@begin@parbox\vbox
      \let\@end@parbox\relax
   \else\ifmmode
      \let\@begin@parbox\vcenter
      \let\@end@parbox\relax
   \else
      \def\@begin@parbox{$\vcenter}%
      \def\@end@parbox{\m@th$}%
   \fi\fi\fi
\fi\fi
%    \end{macrocode}
% 横組モードのとき：
%    \begin{macrocode}
\else
\if #1t\relax\let\box@dir\tate
   \if #2t\relax
      \def\@begin@parbox{\raise\cht\vtop\bgroup\kern\z@\vtop}%
      \let\@end@parbox\egroup
   \else\if #2b\relax
      \def\@begin@parbox{\lower\cdp\vbox\bgroup\vbox}%
      \def\@end@parbox{\kern\z@\egroup}%
   \else\ifmmode
      \let\@begin@parbox\vcenter
      \let\@end@parbox\relax
   \else
      \def\@begin@parbox{$\vcenter}%
      \def\@end@parbox{\m@th$}%
   \fi\fi\fi
\else\let\box@dir\yoko
   \if #2t\relax
      \let\@begin@parbox\vtop
      \let\@end@parbox\relax
   \else\if #2b\relax
      \let\@begin@parbox\vbox
      \let\@end@parbox\relax
   \else\ifmmode
      \let\@begin@parbox\vcenter
      \let\@end@parbox\relax
   \else
      \def\@begin@parbox{$\vcenter}%
      \def\@end@parbox{\m@th$}%
   \fi\fi\fi
\fi\fi}
%    \end{macrocode}
% \end{macro}
%
% \subsubsection*{\cs{pbox}コマンド}
%
% |\pbox|は組み方向を指定できるボックスコマンドです。
% 次のような構文となっています。
%
% |\pbox<|\meta{dir}|>[|\meta{width}|][|\meta{pos}|]{|\meta{obj}|}|
%
% \begin{macro}{\pbox}
% オプションを調べます。
% \changes{v1.2g}{2017/05/04}{Make \cs{pbox} Robust}
%    \begin{macrocode}
\DeclareRobustCommand\pbox{\leavevmode\@ifnextchar<{\X@makePbox}{\X@makePbox<Z>}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\X@makepbox}
% \begin{macro}{\@imakepbox}
%    \begin{macrocode}
\def\X@makePbox<#1>{%
  \@ifnextchar[{\@imakePbox<#1>}{\@imakePbox<#1>[-5\p@]}}
%
\def\@imakePbox<#1>[#2]{\@ifnextchar[%]
  {\@iimakePbox<#1>{#2}}{\@iimakePbox<#1>{#2}[c]}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@iimakePbox}
% |\pbox|の内部形式です。
% \changes{v1.1i}{2001/05/10}{縦組でzを指定するとエラーになるのを修正。}
% \changes{v1.2g}{2017/05/04}{Use \cs{setlength}, so that
%           calc extensions apply}
%    \begin{macrocode}
\def\@iimakePbox<#1>#2[#3]#4{%
  \bgroup \@rotswfalse \@pboxswfalse
  \iftdir
    \if #1y\relax\let\box@dir\yoko
    \else\if #1z\relax\@rotswtrue \let\box@dir\relax
    \else\let\box@dir\tate
    \fi\fi
  \else
    \if #1t\relax\let\box@dir\tate
    \else\let\box@dir\yoko
    \fi
  \fi
  \ifmmode\else\if@rotsw\@pboxswtrue\hbox\bgroup$\fi\fi
    \setlength{\@tempdima}{#2}%
    \ifdim\@tempdima<\z@ \hbox{\box@dir#4}\else
    \hb@xt@\@tempdima{\box@dir
               \if #3l\relax\else\hss\fi
               #4\relax
               \if #3r\relax\else\hss\fi}\fi
  \if@pboxsw \m@th$\egroup\fi\egroup}
%    \end{macrocode}
% \end{macro}
%
% \subsection{作図環境}
% picture環境も、組方向を指定するオプションを追加してあります。
% なお、これらのコマンドは、\file{ltpictur.dtx}で定義されています。
%
% \begin{macro}{\picture}
% 組方向オプションを調べます。
%    \begin{macrocode}
\def\picture{\@ifnextchar<%>
   {\X@picture}{\X@picture<Z>}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\X@picture}
% 図形領域オプションを調べます。
%    \begin{macrocode}
\def\X@picture<#1>(#2,#3){\@ifnextchar(%)
   {\@@picture<#1>(#2,#3)}{\@@picture<#1>(#2,#3)(0,0)}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@picture}
% picture環境の内部ではベースラインシフトの値をゼロにします。
% 以前に設定されていた値は、それぞれ保存され、終了時に、その値に戻されます。
%    \begin{macrocode}
\newdimen\save@ybaselineshift
\newdimen\save@tbaselineshift
\newdimen\@picwd
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\X@picture@dimens}
% 図形領域の寸法値を調整する命令を切り出しました。
% 基本組の組み方向と直交する場合は、高さと幅を入れ替えます。
% \changes{v1.2m}{2020/10/07}{マクロ追加}
%    \begin{macrocode}
\ifx\@defaultunitsset\@undefined     % old
  \def\X@picture@dimens#1#2#3#4{%
    \@picwd=#1\unitlength \@picht=#2\unitlength
    \@tempdima=#3\unitlength \@tempdimb=#4\unitlength
  }
\else                                % 2020-10-01
  \def\X@picture@dimens#1#2#3#4{%
    \@defaultunitsset\@picwd{#1}\unitlength
    \@defaultunitsset\@picht{#2}\unitlength
    \@defaultunitsset\@tempdima{#3}\unitlength
    \@defaultunitsset\@tempdimb{#4}\unitlength
  }
\fi
%    \end{macrocode}
% |\picture|の内部形式です。3組目の引数は、原点座標です。
% \changes{v1.2m}{2020/10/07}{Use \cs{@defaultunitsset} (gh/372)
%    (sync with ltpictur.dtx 2020/08/14 v1.2a)}
%    \begin{macrocode}
\def\@@picture<#1>(#2,#3)(#4,#5){%
  \save@ybaselineshift\ybaselineshift
  \save@tbaselineshift\tbaselineshift
  \iftdir
    \if#1y\let\box@dir\yoko
      \X@picture@dimens{#3}{#2}{#5}{#4}%
    \else\let\box@dir\tate
      \X@picture@dimens{#2}{#3}{#4}{#5}%
    \fi
  \else
    \if#1t\let\box@dir\tate
      \X@picture@dimens{#3}{#2}{#5}{#4}%
    \else\let\box@dir\yoko
      \X@picture@dimens{#2}{#3}{#4}{#5}%
    \fi
  \fi
  \setbox\@picbox\hb@xt@\@picwd\bgroup\box@dir
    \hskip-\@tempdima
    \lower\@tempdimb\hbox\bgroup
      \ybaselineshift\z@ \tbaselineshift\z@
      \ignorespaces}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\endpicture}
% 図形領域の幅と高さを指定の大きさにしてから、出力をします。
% そして、最後にベースラインシフトの値を元に戻します。
%    \begin{macrocode}
\def\endpicture{%
  \egroup\hss\egroup
  \ht\@picbox\@picht \wd\@picbox\@picwd \dp\@picbox\z@
  \mbox{\box\@picbox}%
  \ybaselineshift\save@ybaselineshift
  \tbaselineshift\save@tbaselineshift}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\put}
% \begin{macro}{\line}
% \begin{macro}{\vector}
% \begin{macro}{\dashbox}
% \begin{macro}{\oval}
% \begin{macro}{\circle}
% picture環境の内部で、フォントサイズ変更コマンドなどが使用された場合、
% ベースラインシフト量が新たに設定されてしまうため、
% これらのコマンドがベースラインシフトの影響を受けないように再定義をします。
% ベースラインシフトを有効にしたい場合は、|\pbox|コマンドを使用してください。
%    \begin{macrocode}
\let\org@put\put
\def\put{\ybaselineshift\z@\tbaselineshift\z@\org@put}
%
\let\org@line\line
\def\line{\ybaselineshift\z@\tbaselineshift\z@\org@line}
%
\let\org@vector\vector
\def\vector{\ybaselineshift\z@\tbaselineshift\z@\org@vector}
%
\let\org@dashbox\dashbox
\def\dashbox{\ybaselineshift\z@\tbaselineshift\z@\org@dashbox}
%
\let\org@oval\oval
\def\oval{\ybaselineshift\z@\tbaselineshift\z@\org@oval}
%
\let\org@circle\circle
\def\circle{\ybaselineshift\z@\tbaselineshift\z@\org@circle}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
%
% \subsection{連数字／漢数字／傍点／下線}
% ここでは、連数字、漢数字、傍点、下線について説明をしています。
%
% 連数字と漢数字、および傍点と下線についての詳細は、
% 『日本語\LaTeXe{}ブック』を参照してください。
% なお、傍点に使う文字は\file{pldefs.ltx}で定義されています。
%
% なお、連数字コマンドは3種類ありましたが、
% |\rensuji|コマンド一つにまとめました。
% 新しい連数字コマンドは次の構文となります。
%
% \medskip
% |\rensuji[|\meta{pos}|]|\meta{横に並べる半角文字}
%
% |\rensuji*[|\meta{pos}|]|\meta{横に並べる半角文字}
% \medskip
%
% アスタリスク形式の場合は、行間を連数字の幅に合わせて広げません。
% \meta{pos}は、連数字を揃える位置です。
% `|c|'（中央揃え）、`|r|'（右寄せ）、`|l|'（左寄せ）を指定できます。
% デフォルトでは、中央に揃えます。
%
% 次のフラグが真の場合には、連数字の幅に合わせて行間を広げ\emph{ません}。
% アスタリスク形式の場合に真になります。
%    \begin{macrocode}
\newif\ifnot@advanceline
%    \end{macrocode}
%
% |\rensujiskip|は連数字の前後に入るアキです。
% デフォルトは、現在の文字の幅の4分の1を基準にしています。
%    \begin{macrocode}
\newskip\rensujiskip
\rensujiskip=0.25\chs plus.25zw minus.25zw
%    \end{macrocode}
%
% \subsubsection*{連数字}
%
% \begin{macro}{\rensuji}
% \begin{macro}{\@rensuji}
% \begin{macro}{\@@rensuji}
% |\rensuji|は、|*|形式かどうかを調べます。
% |\@rensuji|は、位置オプションを調べます。
% |\@@rensuji|が|\rensuji|の内部形式です。
% \changes{v1.2b}{2016/11/07}{横組で段落の頭に\cs{rensuji}を使える
%    ように\cs{leavevmode}を追加して修正}
% \changes{v1.2i}{2018/09/09}{縦数式ディレクションの連数字}
%    \begin{macrocode}
\DeclareRobustCommand\rensuji{%
  \@ifstar{\not@advancelinetrue\@rensuji}{\@rensuji}}
\def\@rensuji{\@ifnextchar[{\@@rensuji}{\@@rensuji[c]}}
\def\@@rensuji[#1]#2{%
  \ifvmode\leavevmode\fi
 \iftdir\ifmdir\hbox{#2}\else
  \hskip\rensujiskip
  \ifnot@advanceline\not@advancelinefalse\else
    \setbox\z@\hbox{\yoko#2}%
    \@tempdima\ht\z@ \advance\@tempdima\dp\z@
    \if #1c\relax\vrule\@width\z@ \@height.5\@tempdima \@depth.5\@tempdima
    \else\if #1r\relax\vrule\@width\z@\@height\z@ \@depth\@tempdima
    \else\vrule\@width\z@ \@height\@tempdima \@depth\z@
    \fi\fi
  \fi
  \if #1c\relax\hbox to1zw{\yoko\hss#2\hss}%
  \else\if #1r\relax\vbox{\hbox to1zw{\yoko\hss#2}}%
  \else\vtop{\hbox to1zw{\yoko#2\hss}}%
  \fi\fi
  \hskip\rensujiskip
 \fi\else\hbox{#2}\fi
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\Rensuji}
% \begin{macro}{\prensuji}
% \changes{v1.1d}{1995/11/21}{\cs{Rensuji}, \cs{prensuji}を作成}
% |\Rensuji|コマンドと|\prensuji|コマンドは、|\rensuji|コマンドで代用でき
% ます。
%    \begin{macrocode}
\let\Rensuji\rensuji
\let\prensuji\rensuji
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
%
% \subsubsection*{漢数字}
%
% \begin{macro}{\Kanji}
% \begin{macro}{\@Kanji}
% \begin{macro}{\kanji}
% |\Kanji|コマンドを定義します。|\Kanji|コマンドは|\Alph|と同じように、
% カウンタに対してのみ使用することができます。
%
% |\kanji|コマンドは、後続の半角数字を漢数字にします。
% |\kanji 1989|のように指定をします。
% ただし、横組モードのときには、何もしません。
% つねに漢数字にしたい場合は、|\kansuji|プリミティブを使ってください。
%
% 後続の数字まで漢数字になってしまうバグを修正しました(Issue~\#33)。
% \changes{v1.0h}{1996/03/13}{\cs{@Kanji}を追加。英語版と同様にした。}
% \changes{v1.2d}{2017/02/04}{\cs{Kanji}の引数だけでなく後に連続する
%    数字も漢数字になってしまうバグを修正}
%    \begin{macrocode}
\def\Kanji#1{\expandafter\@Kanji\csname c@#1\endcsname}
\def\@Kanji#1{\kansuji #1}
\def\kanji{\iftdir\expandafter\kansuji\fi}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \subsubsection*{傍点}
%
% \begin{macro}{\boutenchar}
% \begin{macro}{\bou}
% |\bou|は、傍点を付けるコマンドです。
%
% 傍点として出力する文字は|\boutenchar|に指定します。
% この文字は、いつでも、横組用フォントが使われます。
% デフォルトは、EUCコード|A1A2|（\hbox{\yoko 、}）です。
%    \begin{macrocode}
\def\boutenchar{\char\euc"A1A2}
%    \end{macrocode}
%
% \changes{v1.2l}{2019/09/29}{Make \cs{bou} robust}
%    \begin{macrocode}
\DeclareRobustCommand\bou[1]{\ifvmode\leavevmode\fi\@bou#1\end}
\def\@bou#1{%
  \ifx#1\end \let\next=\relax
  \else
    \iftdir\if@rotsw
      \hbox to\z@{\vbox to\z@{\boxmaxdepth\maxdimen
        \vss\moveleft-0.2zw\hbox{\boutenchar}\nointerlineskip
        \hbox{\char\euc"A1A1}}\hss}\nobreak#1\relax
    \else
      \hbox to\z@{\vbox to\z@{\boxmaxdepth\maxdimen
        \vss\moveleft0.2zw\hbox{\yoko\boutenchar}\nointerlineskip
        \hbox{\char\euc"A1A1}}\hss}\nobreak#1\relax
    \fi\else
      \hbox to\z@{\vbox to\z@{%
        \vss\moveleft-0.2zw\hbox{\yoko\boutenchar}\nointerlineskip
        \hbox{\char\euc"A1A1}}\hss}\nobreak#1\relax
    \fi
    \let\next=\@bou
  \fi\next}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \subsubsection*{下線}
%
% \begin{macro}{\kasen}
% 下線を引くコマンドです。
% 横組モードのときは、引数を|\underline|に渡します。
% 縦組モードでも、回転モードの|\parbox|などで使われたときには、
% やはり引数を|\underline|に渡します。
% これ以外の場合は、引数の上に直線を引きます。
% \changes{v1.2l}{2019/09/29}{Make \cs{kasen} robust}
%    \begin{macrocode}
\DeclareRobustCommand\kasen[1]{%
  \ifydir\underline{#1}%
  \else\if@rotsw\underline{#1}\else
    \setbox\z@\hbox{#1}\leavevmode\raise.7zw
    \hbox to\z@{\vrule\@width\wd\z@ \@depth\z@ \@height.4\p@\hss}%
    \box\z@
  \fi\fi}
%    \end{macrocode}
% \end{macro}
%
%
%
% \subsection{参照番号}
% 参照番号の類を連数字で出力するように再定義します。
% itemize環境などのリスト型のラベルについては、jarticleなどの
% パッケージで定義しています。詳細は、\file{jclasses.dtx}を参照してください。
%
% \begin{macro}{\@eqnnum}
% \begin{macro}{\@thecounter}
% これらは|\equation|コマンドで作成された数式に付加される番号です。
% \file{ltmath.dtx}で定義されています。
%    \begin{macrocode}
\def\@eqnnum{{\reset@font\rmfamily \normalcolor
  \iftdir\raise.25zh\hbox{\yoko(\theequation)}%
  \else (\theequation)\fi}}
\def\@thecounter#1{\noexpand\rensuji{\noexpand\arabic{#1}}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@thmcounter}
% |\newtheorem|コマンドで作成した環境で参照されるラベルです。
% \file{ltthm.dtx}で定義されています。
%    \begin{macrocode}
\def\@thmcounter#1{\noexpand\rensuji{\noexpand\arabic{#1}}}
%</package>
%    \end{macrocode}
% \end{macro}
%
%
% \Finale
\endinput
