% \iffalse meta-comment
%% File: plfonts.dtx
%
%  Copyright 1994-2006 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
%
% \iffalse
%<*driver>
\ifx\JAPANESEtrue\undefined
  \expandafter\newif\csname ifJAPANESE\endcsname
  \JAPANESEtrue
\fi
\def\eTeX{$\varepsilon$-\TeX}
\def\pTeX{p\kern-.15em\TeX}
\def\epTeX{$\varepsilon$-\pTeX}
\def\pLaTeX{p\kern-.05em\LaTeX}
\def\pLaTeXe{p\kern-.05em\LaTeXe}
%</driver>
% \fi
%
% \setcounter{StandardModuleDepth}{1}
% \StopEventually{}
%
% \iffalse
% \changes{v1.0}{1994/09/16}{first edition}
% \changes{v1.1}{1995/02/21}{\cs{selectfont}アルゴリズム変更}
% \changes{v1.1b}{1995/04/25}{\cs{selectfont}修正}
% \changes{v1.1c}{1995/08/22}{縦横フォント同時切り替え}
% \changes{v1.2}{1995/11/09}{\cs{DeclareFixedFont}の日本語化}
% \changes{v1.3}{1996/03/25}{数式ファミリの定義変更}
% \changes{v1.3a}{1997/01/25}{\LaTeX\ \texttt{!<1996/12/01!>に対応}}
% \changes{v1.3b}{1997/01/28}{\cs{textmc}, \cs{textgt}の動作修正}
% \changes{v1.3c}{1997/04/08}{和文エンコード関連の修正}
% \changes{v1.3d}{1997/06/25}{\cs{em},\cs{emph}で和文を強調書体に}
% \changes{v1.3e}{1997/07/10}{fdファイル名の小文字化が効いていなかったのを修正}
% \changes{v1.3f}{1998/08/10}{\cs{DeclareFixedCommand}を\cs{@onlypreamble}に
%    してしまっていたのを修正}
% \changes{v1.3g}{1999/04/05}{plpatch.ltxの内容を反映}
% \changes{v1.3h}{1999/08/09}{\cs{strut}の改善}
% \changes{v1.3i}{2000/07/13}{\cs{text..}コマンドの左側に\cs{xkanjiskip}が
%    入らないのを修正}
% \changes{v1.3j}{2000/10/24}{\cs{adjustbaseline}で余分なアキが入らない
%    ようにした}
% \changes{v1.3k}{2001/05/10}{欧文書体の基準を再び`/`から`M'に変更}
% \changes{v1.3l}{2002/04/05}{\cs{adjustbaseline}でフォントの基準値が縦書き
%    以外では設定されないのを修正}
% \changes{v1.3m}{2004/06/14}{\cs{fontfamily}コマンド内部フラグ変更}
% \changes{v1.3n}{2004/08/10}{和文エンコーディングの切り替えを有効化}
% \changes{v1.3o}{2005/01/04}{\cs{fontfamily}中のフラグ修正}
% \changes{v1.3p}{2006/01/04}{\cs{DeclareFontEncoding@}中で
%    \cs{LastDeclaredEncodeng}の再定義が抜けていたので追加}
% \changes{v1.4}{2006/06/27}{\cs{reDeclareMathAlphabet}を修正。
%    ありがとう、ymtさん。}
% \changes{v1.5}{2006/11/10}{\cs{reDeclareMathAlphabet}を修正。
%    ありがとう、ymtさん。}
% \changes{v1.6}{2016/02/01}{\LaTeX\ \texttt{!<2015/01/01!>}での\cs{em}の
%    定義変更に対応。\cs{eminnershape}を追加。}
% \changes{v1.6a}{2016/04/01}{ベースライン補正量が0でないときに
%    \cs{AA}など一部の合成文字がおかしくなることへの対応。}
% \changes{v1.6b}{2016/04/30}{ptrace.styの冒頭でtracefnt.styを
%    \cs{RequirePackageWithOptions}するようにした}
% \changes{v1.6c}{2016/06/06}{v1.6aでの修正で\'e など全てのアクセント付き文字で
%    周囲に\cs{xkanjiskip}が入らなくなっていたのを修正。}
% \changes{v1.6d}{2016/06/19}{アクセント付き文字をさらに修正(forum:1951)}
% \changes{v1.6e}{2016/06/26}{v1.6a以降の修正で全てのアクセント付き文字で
%    トラブルが相次いだため、いったんパッチを除去。}
% \changes{v1.6f}{2017/02/20}{ptrace.styのplatexrelease対応}
% \changes{v1.6f}{2017/02/20}{\cs{ystrutbox}を追加}
% \changes{v1.6f}{2017/02/20}{\cs{strutbox}を縦横両対応に}
% \changes{v1.6f}{2017/02/20}{\cs{strutbox}の代わりに\cs{ystrutbox}を使用}
% \changes{v1.6f}{2017/02/20}{\cs{ystrut}を追加}
% \changes{v1.6f}{2017/02/20}{\cs{ystrutbox}を組み立てるように}
% \changes{v1.6g}{2017/03/07}{ベースライン補正量を修正}
% \changes{v1.6h}{2017/08/05}{和文書体の基準を全角空白から「漢」に変更}
% \changes{v1.6h}{2017/08/05}{traceのコードの\texttt{\%}忘れを修正}
% \changes{v1.6i}{2017/09/24}{2010年のp\TeX{}本体の修正により、v1.3iで入れた
%    対処が不要になっていたので削除}
% \changes{v1.6i}{2017/09/24}{\cs{<}が段落頭でも効くようにした}
% \changes{v1.6j}{2017/11/06}{\cs{cy@encoding}と\cs{ct@encoding}を
%    具体的な値ではなく「空」で初期化}
% \changes{v1.6j}{2017/11/06}{縦横のエンコーディングのセット化を
%    plcoreからpldefsへ移動}
% \changes{v1.6k}{2017/12/05}{デフォルト設定ファイルの読み込みを
%    \file{plcore.ltx}から\file{platex.ltx}へ移動}
% \changes{v1.6l}{2018/02/04}{和文スケール値を明文化}
% \changes{v1.6m}{2018/03/31}{\file{utf8.def}由来のコードを追加}
% \changes{v1.6n}{2018/04/06}{\cs{UseRawInputEncoding}で使われる
%    \cs{DeclareFontEncoding@}の保存版も定義
%    (sync with ltfinal.dtx 2018/04/06 v2.1b)}
% \changes{v1.6o}{2018/04/08}{Delay full UTF-8 handling to \cs{everyjob}
%    (sync with ltfinal.dtx 2018/04/08 v2.1d)}
% \changes{v1.6p}{2018/04/09}{v1.6oで加えた対策を削除。
%    参考：plvers.dtx 2018/04/09 v1.1lの\cs{everyjob}}
% \changes{v1.6q}{2018/07/03}{シリーズbがbxと等価になるように宣言}
% \changes{v1.6r}{2018/07/25}{PDFのしおりにアクセント文字が含まれる場合に対応}
% \changes{v1.6r}{2018/07/25}{\cs{[no]fixcompositeaccent}マクロ追加}
% \changes{v1.6r}{2018/07/25}{コード整理}
% \changes{v1.6s}{2019/08/13}{\cs{DeclareErrorKanjiFont}:
%    Don't set any \cs{k@...} macros
%    (sync with ltfssbas.dtx 2019/07/09 v3.2c)}
% \changes{v1.6s}{2019/08/13}{Explicitly set some defaults
%    after \cs{DeclareErrorKanjiFont} change
%    (sync with ltfssini.dtx 2019/07/09 v3.1c)}
% \changes{v1.6t}{2019/09/16}{Make \cs{strut}, \cs{tstrut} etc. robust
%    (sync with ltdefns.dtx 2019/08/27 v1.5f)}
% \changes{v1.6t}{2019/09/16}{Make \cs{usefont} etc. robust
%    (sync with ltfssbas.dtx 2019/08/27 v3.2d)}
% \changes{v1.6u}{2019/09/29}{Make \cs{userelfont} robust}
% \changes{v1.6u}{2019/09/29}{Make \cs{adjustbaseline} robust}
% \changes{v1.6v}{2020/02/01}{New commands \cs{fontseriesforce} etc.
%    (sync with ltfssaxes.dtx 2019/12/16 v1.0a)}
% \changes{v1.6v}{2020/02/01}{New commands \cs{fontshapeforce} etc.
%    (sync with ltfssaxes.dtx 2019/12/16 v1.0a)}
% \changes{v1.6v}{2020/02/01}{Don't call \cs{fontseries} or \cs{fontshape}
%    (sync with ltfssbas.dtx 2019/12/17 v3.2e)}
% \changes{v1.6v}{2020/02/01}{\LaTeX{}がmweightsパッケージを基にした
%    シリーズのカスタム設定を導入したので、これをサポート
%    (sync with ltfssini.dtx 2019/12/17 v3.1e)}
% \changes{v1.6v}{2020/02/01}{Support \cs{emph} sequences
%    (sync with ltfssini.dtx 2019/12/17 v3.1e)}
% \changes{v1.6v}{2020/02/01}{定義をpldefsからplcoreへ移動}
% \changes{v1.6v}{2020/02/01}{Set \cs{kanjishapedefault} explicitly to ``n''
%    (sync with fontdef.dtx 2019/12/17 v3.0e)}
% \changes{v1.6w}{2020/02/03}{巻き戻しのバグ修正}
% \changes{v1.6x}{2020/02/05}{一時コマンドの名前を統一
%    (sync with ltfssaxes.dtx 2020/02/05 v1.0b and ltfssini.dtx 2020/02/05 v3.1g)}
% \changes{v1.6y}{2020/02/24}{Switch \cs{if@forced@series} added
%    (sync with ltfssaxes.dtx 2020/02/18 v1.0c)}
% \changes{v1.6y}{2020/02/24}{Make the \cs{ifx} selection outside of
%    \cs{fontseries} argument so that it is not done several times
%    (sync with ltfssini.dtx 2020/02/18 v3.1i)}
% \changes{v1.6y}{2020/02/24}{No series auto-update when forced
%    (sync with ltfssini.dtx 2020/02/18 v3.1i)}
% \changes{v1.6y}{2020/02/24}{Recognize current family if it is not a
%    ``meta'' family and auto-update series using \cs{bfdefault}
%    (sync with ltfssini.dtx 2020/02/18 v3.1i)}
% \changes{v1.6z}{2020/02/28}{\cs{series@maybe@drop@one@m}の存在確認}
% \changes{v1.6z}{2020/02/28}{Drop ``m'' only in a specific set of values
%    (sync with ltfssaxes.dtx 2020/02/27 v1.0d)}
% \changes{v1.6z}{2020/02/28}{Drop surplus ``m'' from \cs{target@series@value}
%    (sync with ltfssini.dtx 2020/02/25 v3.1j)}
% \changes{v1.7}{2020/03/05}{\cs{series@maybe@drop@one@m@x}の存在確認}
% \changes{v1.7}{2020/03/05}{引数・リストとも\cs{detokenize}によって文字列化}
% \changes{v1.7}{2020/03/05}{\cs{do@subst@correction}の日本語化}
% \changes{v1.7a}{2020/03/06}{\cs{@defaultfamilyhook}を活用
%    (sync with ltfssini.dtx 2020/02/10 v3.1h)}
% \changes{v1.7b}{2020/03/14}{古い\LaTeXe{}でもフォーマット生成が通るように}
% \changes{v1.7c}{2020/03/15}{\cs{fontshape}/\cs{fontshapeforce}が
%    和文シェイプ未定義の場合は\cs{k@shape}を更新しないように変更}
% \changes{v1.7d}{2020/03/23}{ドキュメント改良}
% \changes{v1.7e}{2020/03/26}{縦横エンコーディングのセット化確認}
% \changes{v1.7e}{2020/03/26}{\cs{wrong@fontshape}の和文対応}
% \changes{v1.7e}{2020/03/26}{\cs{default@k@...}を使用}
% \changes{v1.7f}{2020/04/07}{Support legacy use of \cs{bfdefault}
%    and \cs{mddefault}, use \cs{@setYYseriesdefaultshook}
%    (sync with ltfssini.dtx 2020/03/19 v3.1k and 2020/04/06 v3.1m)}
% \changes{v1.7g}{2020/04/14}{Small update for speed.
%    (sync with ltfssdcl.dtx 2020/04/13 v3.0v)}
% \changes{v1.7h}{2020/09/28}{Handling \cs{seriesdefault} changes
%    (sync with ltfssini.dtx 2020/04/13 v3.1n)}
% \changes{v1.7h}{2020/09/28}{New hook management interface
%    (sync with ltfssini.dtx 2020/08/21 v3.2b)}
% \changes{v1.7i}{2020/10/07}{フックシステムの有無判定を改良}
% \changes{v1.7j}{2020/12/29}{Drop ``m'' for latex2e issue 453
%    (sync with ltfssbas.dtx 2020/12/10 v3.2h)}
% \changes{v1.7k}{2021/01/10}{Distangle series and shape update (latex2e/444)
%    (sync with ltfssaxes.dtx 2020/12/22 v1.0h)}
% \changes{v1.7k}{2021/01/10}{Execute delayed series and shape updates (latex2e/444)
%    (sync with ltfsstrc.dtx 2020/12/22 v3.0n)}
% \changes{v1.7k}{2021/01/10}{Adjust start values for series and shape (latex2e/444)
%    (sync with ltfssini.dtx 2020/12/06 v3.2f)}
% \changes{v1.7l}{2021/05/23}{Unconditionally switch to the requested
%    font face (latex2e/444)
%    (sync with ltfssbas.dtx 2021/04/26 v3.2i)}
% \changes{v1.7l}{2021/05/23}{Unconditionally switch to the requested
%    font face (latex2e/444)
%    (sync with ltfssini.dtx 2021/04/26 v3.2h)}
% \changes{v1.7l}{2021/05/23}{Unset the forced series boolean when reaching
%    \cs{selectfont} (latex2e/444)
%    (sync with ltfsstrc.dtx 2021/04/26 v3.0o)}
% \changes{v1.7m}{2021/06/04}{latex2e/444対応：\cs{@shape@roman@kanji}フラグ
%    を\cs{delayed@k@adjustment}の中で変更/復帰する}
% \changes{v1.7n}{2021/06/27}{従属欧文のシリーズとシェープ更新を
%    反映するように修正}
% \changes{v1.7n}{2021/06/27}{和欧文のforced@seriesフラグを分離}
% \fi
%
% \iffalse
%<*driver>
\NeedsTeXFormat{pLaTeX2e}
% \fi
\ProvidesFile{plfonts.dtx}[2021/06/27 v1.7n pLaTeX New Font Selection Scheme]
% \iffalse
\RequirePackage{plautopatch}
\documentclass[dvipdfmx,a4paper]{jltxdoc}
\GetFileInfo{plfonts.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{plfonts:intro}
% ここでは、和文書体を\NFSS2のインターフェイスで選択するための
% コマンドやマクロについて説明をしています。
% また、フォント定義ファイルや初期設定ファイルなどの説明もしています。
% 新しいフォント選択コマンドの使い方については、\file{fntguide.tex}や
% \file{usrguide.tex}を参照してください。
%
% \begin{description}
% \item[第\ref{plfonts:intro}節] この節です。このファイルの概要と
%    \dst{}プログラムのためのオプションを示しています。
% \item[第\ref{plfonts:codes}節] 実際のコードの部分です。
% \item[第\ref{plfonts:pldefs}節] プリロードフォントやエラーフォントなどの
%  初期設定について説明をしています。
% \item[第\ref{plfonts:fontdef}節] フォント定義ファイルについて
%    説明をしています。
% \end{description}
%
%
% \subsection{\dst{}プログラムのためのオプション}
% \dst{}プログラムのためのオプションを次に示します。
%
% \DeleteShortVerb{\|}
% \begin{center}
% \begin{tabular}{l|p{0.7\linewidth}}
% \emph{オプション} & \emph{意味}\\\hline
% plcore & \file{plcore.ltx}の断片を生成します。\\
% trace  & \file{ptrace.sty}を生成します。\\
% JY1mc  & 横組用、明朝体のフォント定義ファイルを生成します。\\
% JY1gt  & 横組用、ゴシック体のフォント定義ファイルを生成します。\\
% JT1mc  & 縦組用、明朝体のフォント定義ファイルを生成します。\\
% JT1gt  & 縦組用、ゴシック体のフォント定義ファイルを生成します。\\
% pldefs & \file{pldefs.ltx}を生成します。次の４つのオプションを付加する
%          ことで、プリロードするフォントを選択することができます。
%          デフォルトは10ptです。\\
% xpt    & 10pt プリロード\\
% xipt   & 11pt プリロード\\
% xiipt  & 12pt プリロード\\
% ori    & \file{plfonts.tex}に似たプリロード\\
% \end{tabular}
% \end{center}
% \MakeShortVerb{\|}
%
%
% \subsection{拡張コマンド}
% \pLaTeXe{}は、以下の新しいコマンドを定義します。
%
% \DeleteShortVerb{\|}
% \MakeShortVerb{\+}
% \begin{center}
% \begin{tabular}{l|l}
% \emph{コマンド} & \emph{意味}\\\hline
% +\Declare{Yoko|Tate}KanjiEncoding+ & 和文エンコードの宣言\\
% +\DeclareKanjiEncodingDefaults+ &
%        デフォルトの和文エンコードの宣言\\
% +\KanjiEncodingPair+ & 和文エンコードのセット化\\
% +\DeclareKanjiFamily+ & ファミリの宣言\\
% +\DeclareKanjiSubstitution+ & 和文の代用フォントの宣言\\
% +\DeclareErrorKanjiFont+ & 和文のエラーフォントの宣言 \\
% +\reDeclareMathAlphabet+ & 和欧文を同時に切り替えるコマンド宣言\\
% +\{Declare|Set}RelationFont+ & 従属書体の宣言\\
% +\userelfont+ & 欧文書体を従属書体にする\\
% +\adjustbaseline+ & ベースラインシフト量の設定\\
% +\{roman|kanji}encoding+ & エンコードの指定\\
% +\{roman|kanji}family+ & ファミリの指定\\
% +\{roman|kanji}series[force]+ & シリーズの指定\\
% +\{roman|kanji}shape[force]+ & シェイプの指定\\
% +\use{roman|kanji}+ & 書体の切り替え\\
% +\mcfamily+, +\gtfamily+ & 和文書体を明朝体、ゴシック体にする\\
% \end{tabular}
% \end{center}
% \DeleteShortVerb{\+}
% \MakeShortVerb{\|}
%
% さらに、オリジナルの\LaTeXe{}の以下のコマンドを再定義します。
%
% \DeleteShortVerb{\|}
% \MakeShortVerb{\+}
% \begin{center}
% \begin{tabular}{l|l}
% \emph{コマンド} & \emph{意味}\\\hline
% +\DeclareFontEncoding+ & エンコードの宣言\\
% +\DeclareFontFamily+ & ファミリの宣言\\
% +\DeclareFixedFont+ & フォントの名前の宣言 \\
% +\selectfont+ & フォントを切り替える\\
% +\set@fontsize+ & フォントサイズの変更\\
% +\fontencoding+ & エンコードの指定\\
% +\fontfamily+ & ファミリの指定\\
% +\fontseries[force]+ & シリーズの指定\\
% +\fontshape[force]+ & シェイプの指定\\
% +\usefont+ & 書体の切り替え\\
% +\normalfont+ & デフォルト値の設定に切り替える\\
% +\bfseries+, +\mdseries+ & シリーズを太字、中字にする\\
% \end{tabular}
% \end{center}
% \DeleteShortVerb{\+}
% \MakeShortVerb{\|}
%
%
% \section{コード}\label{plfonts:codes}
% この節で、実際のコードを説明します。
%
% \subsection{準備}
% \NFSS2を拡張するための準備です。
% 和文フォントの属性を格納するオブジェクトや長さ変数、
% 属性を切替える際の判断材料として使うリストなどを定義しています。
%
% \LaTeX{}の\file{tracefnt}パッケージに相当するデバッグ機能は、
% \pLaTeX{}では\file{ptrace}パッケージで提供します。
% 以前（アスキー版）では\file{ptrace}の前に\file{tracefnt}を
% 手動で|\usepackage|する必要がありましたが、
% コミュニティ版では\file{ptrace}が自動で\file{tracefnt}を
% 読み込むように改良してあります。
% \changes{v1.6b}{2016/04/30}{ptrace.styの冒頭でtracefnt.styを
%    \cs{RequirePackageWithOptions}するようにした}
%    \begin{macrocode}
%<*trace>
\NeedsTeXFormat{pLaTeX2e}
\ProvidesPackage{ptrace}
     [2021/06/27 v1.7n Standard pLaTeX package (font tracing)]
\RequirePackageWithOptions{tracefnt}
%</trace>
%    \end{macrocode}
%
% \subsubsection{和文フォント属性}
% ここでは、和文フォントの属性を格納するためのオブジェクトについて
% 説明をしています。
% 
% \begin{macro}{\k@encoding}
% \begin{macro}{\ck@encoding}
% \begin{macro}{\cy@encoding}
% \begin{macro}{\ct@encoding}
% 和文エンコードを示すオブジェクトです。
% |\ck@encoding|は、最後に選択された和文エンコード名を示しています。
% |\cy@encoding|と|\ct@encoding|はそれぞれ、最後に選択された、
% 横組用と縦組用の和文エンコード名を示しています。
%
% ここでは単に「空」に初期化するだけにしています。
% \iffalse
% アスキー版はJY1やJT1という具体的な値で初期化していたが、これらの値は
% \file{pldefs.ltx}で定義するものであるから、\file{plcore.ltx}で
% それを使うのはおかしい。
% \fi
% \changes{v1.6j}{2017/11/06}{\cs{cy@encoding}と\cs{ct@encoding}を
%    具体的な値ではなく「空」で初期化}
%    \begin{macrocode}
%<*plcore>
\let\k@encoding\@empty
\let\ck@encoding\@empty
\let\cy@encoding\@empty
\let\ct@encoding\@empty
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\k@family}
% 和文書体のファミリを示すオブジェクトです。
%    \begin{macrocode}
\let\k@family\@empty
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\k@series}
% 和文書体のシリーズを示すオブジェクトです。
%    \begin{macrocode}
\let\k@series\@empty
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\k@shape}
% 和文書体のシェイプを示すオブジェクトです。
%    \begin{macrocode}
\let\k@shape\@empty
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\curr@kfontshape}
% 現在の和文フォント名を示すオブジェクトです。
%    \begin{macrocode}
\def\curr@kfontshape{\k@encoding/\k@family/\k@series/\k@shape}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rel@fontshape}
% 関連付けされたフォント名を示すオブジェクトです。
%    \begin{macrocode}
\def\rel@fontshape{\f@encoding/\f@family/\f@series/\f@shape}
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{長さ変数}
% ここでは、和文フォントの幅や高さなどを格納する変数について説明をしています。
%
% 頭文字が大文字の変数は、ノーマルサイズの書体の大きさで、基準値となります。
% これらは、\file{jart10.clo}などの補助クラスファイルで設定されます。
%
% 小文字だけからなる変数は、
% フォントが変更されたときに（|\selectfont|内で）更新されます。
%
% \begin{macro}{\Cht}
% \begin{macro}{\cht}
% |\Cht|は基準となる和文フォントの文字の高さを示します。
% |\cht|は現在の和文フォントの文字の高さを示します。
% なお、この``高さ''はベースラインより上の長さです。
%    \begin{macrocode}
\newdimen\Cht
\newdimen\cht
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\Cdp}
% \begin{macro}{\cdp}
% |\Cdp|は基準となる和文フォントの文字の深さを示します。
% |\cdp|は現在の和文フォントの文字の深さを示します。
% なお、この``深さ''はベースラインより下の長さです。
%    \begin{macrocode}
\newdimen\Cdp
\newdimen\cdp
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\Cwd}
% \begin{macro}{\cwd}
% |\Cwd|は基準となる和文フォントの文字の幅を示します。
% |\cwd|は現在の和文フォントの文字の幅を示します。
%    \begin{macrocode}
\newdimen\Cwd
\newdimen\cwd
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\Cvs}
% \begin{macro}{\cvs}
% |\Cvs|は基準となる行送りを示します。
% ノーマルサイズの|\baselineskip|と同値です。
% |\cvs|は現在の行送りを示します。
%    \begin{macrocode}
\newdimen\Cvs
\newdimen\cvs
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\Chs}
% \begin{macro}{\chs}
% |\Chs|は基準となる字送りを示します。|\Cwd|と同値です。
% |\chs|は現在の字送りを示します。
%    \begin{macrocode}
\newdimen\Chs
\newdimen\chs
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\cHT}
% |\cHT|は、現在のフォントの高さに深さを加えた長さを示します。
% |\set@fontsize|コマンド（実際は|\size@update|）で更新されます。
%    \begin{macrocode}
\newdimen\cHT
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{一時コマンド}\label{afont-ascii}
%
% \begin{macro}{\afont}
% \LaTeX{}内部の|\do@subst@correction|マクロでは、
% |\fontname\font|で返される外部フォント名を用いて、
% \LaTeX{}フォント名を定義しています。したがって、|\font|をそのまま使うと、
% 和文フォント名に欧文の外部フォントが登録されたり、
% 縦組フォント名に横組用の外部フォントが割り付けられたりしますので、
% |\jfont|か|\tfont|を用いるようにします。
% |\afont|は、|\font|コマンドの保存用です。
%    \begin{macrocode}
\let\afont\font
%    \end{macrocode}
% \end{macro}
%
%
% \subsubsection{フォントリスト}
% ここでは、フォントのエンコードやファミリの名前を登録するリストについて
% 説明をしています。
%
% p\LaTeXe{}の\NFSS2では、一つのコマンドで和文か欧文のいずれか、あるいは両方を
% 変更するため、コマンドに指定された引数が何を示すのかを判断しなくては
% なりません。この判断材料として、リストを用います。
%
% このときの具体的な判断手順については、エンコード選択コマンドや
% ファミリ選択コマンドなどの定義を参照してください。
% 
% \begin{macro}{\inlist@}
% 次のコマンドは、エンコードやファミリのリスト内に第二引数で指定された文字列
% があるかどうかを調べるマクロです。結果は\cs{ifin@}に格納されます。
% 第二引数はリストそのもの（リストが格納されたマクロではなく）を指定することになります。
% 典型的には以下のように呼び出します。
%\begin{verbatim}
% \edef\tmp@item{{\k@encoding}}%
% \expandafter\expandafter\expandafter
% \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}
%\end{verbatim}
%
% |\do@subst@correction|の日本語化に必要なので、
% \pLaTeXe~2020-04-12以降では比較時に
% 引数・リストとも\cs{detokenize}によって文字列化するようにしました。
% \changes{v1.7}{2020/03/05}{引数・リストとも\cs{detokenize}によって文字列化}
%    \begin{macrocode}
%</plcore>
%<platexrelease>\plIncludeInRelease{2020/04/12}{\inlist@}
%<platexrelease>                   {Detokenize}%
%<*plcore|platexrelease>
\def\inlist@#1#2{%
  \edef\reserved@a{%
    \unexpanded{\def\in@@##1<}%
    \detokenize{#1}%
    \unexpanded{>##2##3\in@@{\ifx\in@##2\in@false\else\in@true\fi}\in@@}%
    \detokenize{#2}%
    \unexpanded{<}%
    \detokenize{#1}%
    \unexpanded{>\in@\in@@}}%
  \reserved@a}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\inlist@}
%<platexrelease>                   {ASCII Corporation original}%
%<platexrelease>\def\inlist@#1#2{%
%<platexrelease>  \def\in@@##1<#1>##2##3\in@@{%
%<platexrelease>    \ifx\in@##2\in@false\else\in@true\fi}%
%<platexrelease>  \in@@#2<#1>\in@\in@@}
%<platexrelease>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\enc@elt}
% \begin{macro}{\fam@elt}
% |\enc@elt|と|\fam@elt|は、登録されているエンコードに対して、
% なんらかの処理を逐次的に行ないたいときに使用することができます。
%    \begin{macrocode}
\def\fam@elt{\noexpand\fam@elt}
\def\enc@elt{\noexpand\enc@elt}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\fenc@list}
% \begin{macro}{\kenc@list}
% \begin{macro}{\kyenc@list}
% \begin{macro}{\ktenc@list}
% |\fenc@list|には、|\DeclareFontEncoding|コマンドで宣言されたエンコード名が
% 格納されていきます。
%
% |\kyenc@list|には、|\DeclareYokoKanjiEncoding|コマンドで宣言された
% エンコード名が格納されていきます。
% |\ktenc@list|には、|\DeclareTateKanjiEncoding|コマンドで宣言された
% エンコード名が格納されていきます。
%
% \changes{v1.1b}{1995/03/28}{リストの初期値を変更}
% \changes{v1.1b}{1995/05/10}{リスト内の空白を削除}
%
% ここで、これらのリストに具体的な値を入れて初期化をするのは、
% リストにエンコードの登録をするように|\DeclareFontEncoding|を再定義
% する前に、欧文エンコードが宣言されるため、リストに登録されないからです。
% \changes{v1.1}{1997/01/25}{Add TS1 encoding to the starting member of
%     \cs{fenc@list}.}
%    \begin{macrocode}
\def\fenc@list{\enc@elt<OML>\enc@elt<T1>\enc@elt<OT1>\enc@elt<OMS>%
               \enc@elt<OMX>\enc@elt<TS1>\enc@elt<U>}
\let\kenc@list\@empty
\let\kyenc@list\@empty
\let\ktenc@list\@empty
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\kfam@list}
% \begin{macro}{\ffam@list}
% \begin{macro}{\notkfam@list}
% \begin{macro}{\notffam@list}
% |\kfam@list|には、|\DeclareKanjiFamily|コマンドで宣言されたファミリ名が
% 格納されていきます。
%
% |\ffam@list|には、|\DeclareFontFamily|コマンドで宣言されたファミリ名が
% 格納されていきます。
%
% |\notkfam@list|には、和文ファミリではないと推測されたファミリ名が
% 格納されていきます。このリストは|\fontfamily|コマンドで作成されます。
%
% |\notffam@list|には欧文ファミリではないと推測されたファミリ名が
% 格納されていきます。このリストは|\fontfamily|コマンドで作成されます。
%
% \changes{v1.1b}{1995/03/28}{リストの初期値を変更}
% \changes{v1.1b}{1995/05/10}{リスト内の空白を削除}
%
% ここで、これらのリストに具体的な値を入れて初期化をするのは、
% リストにファミリの登録をするように、|\DeclareFontFamily|が
% 再定義される前に、このコマンドが使用されるため、
% リストに登録されないからです。
%    \begin{macrocode}
\def\kfam@list{\fam@elt<mc>\fam@elt<gt>}
\def\ffam@list{\fam@elt<cmr>\fam@elt<cmss>\fam@elt<cmtt>%
               \fam@elt<cmm>\fam@elt<cmsy>\fam@elt<cmex>}
%    \end{macrocode}
% \changes{v1.1c}{1996/03/06}{\cs{notkfam@list}と\cs{notffam@list}の
%       初期値を変更}
% つぎの二つのリストの初期値として、上記の値を用います。
% これらのファミリ名は、和文でないこと、欧文でないことがはっきりしています。
%    \begin{macrocode}
\let\notkfam@list\ffam@list
\let\notffam@list\kfam@list
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
% \subsubsection{支柱}
% 行間の調整などに用いる支柱です。
% 支柱のもととなるボックスの大きさは、フォントサイズが変更されるたびに、
% |\set@fontsize|コマンドによって更新されます。
%
% コミュニティ版\pLaTeXe~2017/04/08での変更：
% 従来、横組ボックス用の支柱は|\strutbox|で、高さと深さが7対3となっていました。
% これはp\LaTeX{}単体では問題になりませんでしたが、海外製の\LaTeX{}パッケージを
% 縦組で使用した場合に、意図しない幅や高さが取得されることがありました。
% この不都合を回避するため、コミュニティ版p\LaTeX{}では次の方法をとります。
% \begin{itemize}
% \item |\ystrutbox|（新設）：高さと深さが7対3の横組用の支柱ボックスレジスタ
% \item |\tstrutbox|：高さと深さが5対5の縦組用の支柱ボックスレジスタ
% \item |\zstrutbox|：高さと深さが7対3の縦組用の支柱ボックスレジスタ
% \item |\strutbox|（仕様変更）：縦横のディレクションに応じて
%                     |\tstrutbox|または|\ystrutbox|に展開される\emph{マクロ}
% \end{itemize}
% すなわち、従来のp\LaTeX{}における|\strutbox|と同じ挙動を示すのが、
% 新設された|\ystrutbox|ということになります。
%
% \begin{macro}{\tstrutbox}
% \begin{macro}{\zstrutbox}
% |\tstrutbox|は高さと深さが5対5、
% |\zstrutbox|は高さと深さが7対3の支柱ボックスとなります。
% これらは縦組ボックスの行間の調整などに使います。
%    \begin{macrocode}
\newbox\tstrutbox
\newbox\zstrutbox
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\ystrutbox}
% |\ystrutbox|は高さと深さが7対3の横組用の支柱ボックスです。
% \changes{v1.6f}{2017/02/20}{\cs{ystrutbox}を追加}
%    \begin{macrocode}
%</plcore>
%<platexrelease>\plIncludeInRelease{2017/04/08}{\ystrutbox}
%<platexrelease>                   {Add \ystrutbox}%
%<*plcore|platexrelease>
\newbox\ystrutbox
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\ystrutbox}
%<platexrelease>                   {Add \ystrutbox}%
%<platexrelease>\let\ystrutbox\@undefined
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\strutbox}
% |\strutbox|は縦横両対応です。
% \changes{v1.6f}{2017/02/20}{\cs{strutbox}を縦横両対応に}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2017/04/08}{\strutbox}
%<platexrelease>                   {Macro definition of \strutbox}%
%<*plcore|platexrelease>
\def\strutbox{\iftdir\tstrutbox\else\ystrutbox\fi}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\strutbox}
%<platexrelease>                   {LaTeX2e original}%
%<platexrelease>\newbox\strutbox % emulation purpose only
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\strut}
% ディレクションに応じて|\ystrutbox|と|\tstrutbox|を使い分けます。
% ^^A |\strutbox|は|\yoko|ディレクションで組まれていますので、
% ^^A 縦組ボックス内で|\unhcopy|をするとエラーとなります。
% オリジナルの\LaTeX{}では\file{ltplain.dtx}で定義されていますが、
% \LaTeXe\ 2019-10-01以降ではさらに\file{ltdefns.dtx}で
% |\MakeRobust|を前置されるため、robustになります。
%
% \changes{v1.1c}{1995/08/24}{``\cs{centerling}~\cs{strut}''の幅がゼロに
% なってしまうのを修正}
% \changes{v1.3h}{1999/08/09}{縦組のとき、幅のあるボックスになってしまう
% のを修正}
% \changes{v1.6f}{2017/02/20}{\cs{strutbox}の代わりに\cs{ystrutbox}を使用}
% \changes{v1.6t}{2019/09/16}{Make \cs{strut}, \cs{tstrut} etc. robust
%    (sync with ltdefns.dtx 2019/08/27 v1.5f)}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2019/10/01}{\strut}
%<platexrelease>                   {Make robust}%
%<*plcore|platexrelease>
\DeclareRobustCommand\strut{\relax
  \iftdir
    \ifmmode\copy\tstrutbox\else\unhcopy\tstrutbox\fi
  \else
    \ifmmode\copy\ystrutbox\else\unhcopy\ystrutbox\fi
  \fi}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2017/04/08}{\strut}
%<platexrelease>                   {Use \ystrutbox}%
%<platexrelease>\def\strut{\relax
%<platexrelease>  \ifydir
%<platexrelease>    \ifmmode\copy\ystrutbox\else\unhcopy\ystrutbox\fi
%<platexrelease>  \else
%<platexrelease>    \ifmmode\copy\tstrutbox\else\unhcopy\tstrutbox\fi
%<platexrelease>  \fi}
%<platexrelease>\expandafter \let \csname strut \endcsname \@undefined
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\strut}
%<platexrelease>                   {ASCII Corporation original}%
%<platexrelease>\def\strut{\relax
%<platexrelease>  \ifydir
%<platexrelease>    \ifmmode\copy\strutbox\else\unhcopy\strutbox\fi
%<platexrelease>  \else
%<platexrelease>    \ifmmode\copy\tstrutbox\else\unhcopy\tstrutbox\fi
%<platexrelease>  \fi}
%<platexrelease>\expandafter \let \csname strut \endcsname \@undefined
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\tstrut}
% \begin{macro}{\zstrut}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2019/10/01}{\tstrut}
%<platexrelease>                   {Make robust}%
%<*plcore|platexrelease>
\DeclareRobustCommand\tstrut{\relax\hbox{\tate
   \ifmmode\copy\tstrutbox\else\unhcopy\tstrutbox\fi}}
\DeclareRobustCommand\zstrut{\relax\hbox{\tate
   \ifmmode\copy\zstrutbox\else\unhcopy\zstrutbox\fi}}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\tstrut}
%<platexrelease>                   {ASCII Corporation original}%
%<platexrelease>\def\tstrut{\relax\hbox{\tate
%<platexrelease>   \ifmmode\copy\tstrutbox\else\unhcopy\tstrutbox\fi}}
%<platexrelease>\def\zstrut{\relax\hbox{\tate
%<platexrelease>   \ifmmode\copy\zstrutbox\else\unhcopy\zstrutbox\fi}}
%<platexrelease>\expandafter \let \csname tstrut \endcsname \@undefined
%<platexrelease>\expandafter \let \csname zstrut \endcsname \@undefined
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\ystrut}
% \changes{v1.6f}{2017/02/20}{\cs{ystrut}を追加}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2019/10/01}{\ystrut}
%<platexrelease>                   {Make robust}%
%<*plcore|platexrelease>
\DeclareRobustCommand\ystrut{\relax\hbox{\yoko
    \ifmmode\copy\ystrutbox\else\unhcopy\ystrutbox\fi}}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2017/04/08}{\ystrut}
%<platexrelease>                   {Add \ystrut}%
%<platexrelease>\def\ystrut{\relax\hbox{\yoko
%<platexrelease>    \ifmmode\copy\ystrutbox\else\unhcopy\ystrutbox\fi}}
%<platexrelease>\expandafter \let \csname ystrut \endcsname \@undefined
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\ystrut}
%<platexrelease>                   {Add \ystrut}%
%<platexrelease>\let\ystrut\@undefined
%<platexrelease>\expandafter \let \csname ystrut \endcsname \@undefined
%<platexrelease>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
%
%
%
% \subsection{\NFSS2の拡張コマンド}
% \NFSS2の拡張コマンドを定義します。
%
% \subsubsection{エンコードの宣言}
% \begin{macro}{\DeclareFontEncoding}
% \begin{macro}{\DeclareFontEncoding@}
% 欧文エンコードを宣言するためのコマンドです。
% \file{ltfssbas.dtx}で定義されているものを、
% |\fenc@list|を作るように再定義をしています。
% \changes{v1.3p}{2006/01/04}{\break\cs{DeclareFontEncoding@}中で
%    \cs{LastDeclaredEncodeng}の再定義が抜けていたので追加}
%    \begin{macrocode}
\def\DeclareFontEncoding{%
  \begingroup
  \nfss@catcodes
  \expandafter\endgroup
  \DeclareFontEncoding@}
%</plcore>
%<platexrelease>\plIncludeInRelease{2018/04/01}{\DeclareFontEncoding@}
%<platexrelease>                   {UTF-8 Encoding}%
%<*plcore|platexrelease>
%    \end{macrocode}
%
% まず、\LaTeXe\ 2017-04-15以前の場合のコードです。このコードは、
% |\UseRawInputEncoding|の内部でも使われます。
% \changes{v1.6n}{2018/04/06}{\cs{UseRawInputEncoding}で使われる
%    \cs{DeclareFontEncoding@}の保存版（従来の定義）を準備
%    (sync with ltfinal.dtx 2018/04/06 v2.1b)}
%    \begin{macrocode}
% for compatibility with LaTeX2e 2017-04-15 or earlier.
% this code is used if MLTeX is enabled
\def\DeclareFontEncoding@#1#2#3{%
  \expandafter
  \ifx\csname T@#1\endcsname\relax
     \def\cdp@elt{\noexpand\cdp@elt}%
     \xdef\cdp@list{\cdp@list\cdp@elt{#1}%
                    {\default@family}{\default@series}%
                    {\default@shape}}%
     \expandafter\let\csname#1-cmd\endcsname\@changed@cmd
%    \end{macrocode}
% 以下の2行がp\LaTeXe{}による追加部分です。
%    \begin{macrocode}
     \def\enc@elt{\noexpand\enc@elt}%
     \xdef\fenc@list{\fenc@list\enc@elt<#1>}%
%    \end{macrocode}
%    \begin{macrocode}
  \else
     \@font@info{Redeclaring font encoding #1}%
  \fi
  \global\@namedef{T@#1}{#2}%
  \global\@namedef{M@#1}{\default@M#3}%
  \xdef\LastDeclaredEncoding{#1}%
  }
\let\DeclareFontEncoding@saved\DeclareFontEncoding@
%    \end{macrocode}
%
% 次に、\LaTeXe\ 2018-04-01以降の場合のコードです。
%    \begin{macrocode}
\ifx\IeC\@undefined\else
% for LaTeX2e with UTF-8 input.
\def\DeclareFontEncoding@#1#2#3{%
  \expandafter
  \ifx\csname T@#1\endcsname\relax
     \def\cdp@elt{\noexpand\cdp@elt}%
     \xdef\cdp@list{\cdp@list\cdp@elt{#1}%
                    {\default@family}{\default@series}%
                    {\default@shape}}%
     \expandafter\let\csname#1-cmd\endcsname\@changed@cmd
%    \end{macrocode}
% \LaTeXe\ 2018-04-01で、既定の欧文入力エンコーディングが
% UTF-8になりました。これは、\file{latex.ltx}が\file{utf8.def}（従来は
% \LaTeX{}ソースに |\usepackage[utf8]{inputenc}| と書いたときに
% 読み込まれていたもの）を読み込むことで実現されています。
% \file{utf8.def}は |\DeclareFontEncoding@| を再定義するので、
% これに合わせるためのコードを追加します。
% \changes{v1.6m}{2018/03/31}{\file{utf8.def}由来のコードを追加}
%    \begin{macrocode}
     \begingroup
       \wlog{Now handling font encoding #1 ...}%
       \lowercase{%
         \InputIfFileExists{#1enc.dfu}}%
            {\wlog{... processing UTF-8 mapping file for font %
                       encoding #1}}%
            {\wlog{... no UTF-8 mapping file for font encoding #1}}%
     \endgroup
%    \end{macrocode}
% 以下の2行がp\LaTeXe{}による追加部分です。
%    \begin{macrocode}
     \def\enc@elt{\noexpand\enc@elt}%
     \xdef\fenc@list{\fenc@list\enc@elt<#1>}%
%    \end{macrocode}
%    \begin{macrocode}
  \else
     \@font@info{Redeclaring font encoding #1}%
  \fi
  \global\@namedef{T@#1}{#2}%
  \global\@namedef{M@#1}{\default@M#3}%
  \xdef\LastDeclaredEncoding{#1}%
  }
%    \end{macrocode}
% ^^A pLaTeX2e <2018-04-01>+1では一時的に、この場所で
% ^^A \LaTeXe\ 2018-04-01 Patch level 2で導入された
% ^^A 「コマンドライン引数にUnicode文字が使われた場合への対処」
% ^^A への対策を実行していましたが、
% ^^A pLaTeX2e <2018-04-01>+2を以って、\file{plvers.dtx}側が
% ^^A 対応完了したため削除しました。
% \changes{v1.6o}{2018/04/08}{Delay full UTF-8 handling to \cs{everyjob}
%    (sync with ltfinal.dtx 2018/04/08 v2.1d)}
% \changes{v1.6p}{2018/04/09}{v1.6oで加えた対策を削除。
%    参考：plvers.dtx 2018/04/09 v1.1lの\cs{everyjob}}
%    \begin{macrocode}
\fi
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\DeclareFontEncoding@}
%<platexrelease>                   {ASCII Corporation original}%
%<platexrelease>\def\DeclareFontEncoding@#1#2#3{%
%<platexrelease>  \expandafter
%<platexrelease>  \ifx\csname T@#1\endcsname\relax
%<platexrelease>     \def\cdp@elt{\noexpand\cdp@elt}%
%<platexrelease>     \xdef\cdp@list{\cdp@list\cdp@elt{#1}%
%<platexrelease>                    {\default@family}{\default@series}%
%<platexrelease>                    {\default@shape}}%
%<platexrelease>     \expandafter\let\csname#1-cmd\endcsname\@changed@cmd
%<platexrelease>     \def\enc@elt{\noexpand\enc@elt}%
%<platexrelease>     \xdef\fenc@list{\fenc@list\enc@elt<#1>}%
%<platexrelease>  \else
%<platexrelease>     \@font@info{Redeclaring font encoding #1}%
%<platexrelease>  \fi
%<platexrelease>  \global\@namedef{T@#1}{#2}%
%<platexrelease>  \global\@namedef{M@#1}{\default@M#3}%
%<platexrelease>  \xdef\LastDeclaredEncoding{#1}%
%<platexrelease>  }
%<platexrelease>\let\DeclareFontEncoding@saved\@undefined
%<platexrelease>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
%
% \begin{macro}{\DeclareKanjiEncoding}
% \begin{macro}{\DeclareYokoKanjiEncoding}
% \begin{macro}{\DeclareYokoKanjiEncoding@}
% \begin{macro}{\DeclareTateKanjiEncoding}
% \begin{macro}{\DeclareTateKanjiEncoding@}
% 和文エンコードの宣言をするコマンドです。
% \changes{v1.3c}{1997/04/08}{和文エンコード宣言コマンドを縦組用と横組用で
%     分けるようにした。}
%    \begin{macrocode}
\def\DeclareKanjiEncoding#1{%
  \@latex@warning{%
     The \string\DeclareKanjiEncoding\space is obsoleted command.  Please use
     \MessageBreak
     the \string\DeclareTateKanjiEncoding\space for `Tate-kumi' encoding, and
     \MessageBreak
     the \string\DeclareYokoKanjiEncoding\space for `Yoko-kumi' encoding.
     \MessageBreak
     I treat the `#1' encoding as `Yoko-kumi'.}
  \DeclareYokoKanjiEncoding{#1}%
}
\def\DeclareYokoKanjiEncoding{%
  \begingroup
  \nfss@catcodes
  \expandafter\endgroup
  \DeclareYokoKanjiEncoding@}
%
\def\DeclareYokoKanjiEncoding@#1#2#3{%
  \expandafter
  \ifx\csname T@#1\endcsname\relax
    \def\cdp@elt{\noexpand\cdp@elt}%
    \xdef\cdp@list{\cdp@list\cdp@elt{#1}%
                    {\default@k@family}{\default@k@series}%
                    {\default@k@shape}}%
    \expandafter\let\csname#1-cmd\endcsname\@changed@kcmd
    \def\enc@elt{\noexpand\enc@elt}%
    \xdef\kyenc@list{\kyenc@list\enc@elt<#1>}%
    \xdef\kenc@list{\kenc@list\enc@elt<#1>}%
  \else
    \@font@info{Redeclaring KANJI (yoko) font encoding #1}%
  \fi
  \global\@namedef{T@#1}{#2}%
  \global\@namedef{M@#1}{\default@KM#3}%
  }
%
\def\DeclareTateKanjiEncoding{%
  \begingroup
  \nfss@catcodes
  \expandafter\endgroup
  \DeclareTateKanjiEncoding@}
%
\def\DeclareTateKanjiEncoding@#1#2#3{%
  \expandafter
  \ifx\csname T@#1\endcsname\relax
    \def\cdp@elt{\noexpand\cdp@elt}%
    \xdef\cdp@list{\cdp@list\cdp@elt{#1}%
                    {\default@k@family}{\default@k@series}%
                    {\default@k@shape}}%
    \expandafter\let\csname#1-cmd\endcsname\@changed@kcmd
    \def\enc@elt{\noexpand\enc@elt}%
    \xdef\ktenc@list{\ktenc@list\enc@elt<#1>}%
    \xdef\kenc@list{\kenc@list\enc@elt<#1>}%
  \else
    \@font@info{Redeclaring KANJI (tate) font encoding #1}%
  \fi
  \global\@namedef{T@#1}{#2}%
  \global\@namedef{M@#1}{\default@KM#3}%
  }
%
\@onlypreamble\DeclareKanjiEncoding
\@onlypreamble\DeclareYokoKanjiEncoding
\@onlypreamble\DeclareYokoKanjiEncoding@
\@onlypreamble\DeclareTateKanjiEncoding
\@onlypreamble\DeclareTateKanjiEncoding@
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
% \begin{macro}{\DeclareKanjiEncodingDefaults}
% 和文エンコードのデフォルト値を宣言するコマンドです。
% |\DeclareFontEncodingDefaults|に相当します。
%    \begin{macrocode}
\def\DeclareKanjiEncodingDefaults#1#2{%
  \ifx\relax#1\else
    \ifx\default@KT\@empty\else
      \@font@info{Overwriting KANJI encoding scheme text defaults}%
    \fi
    \gdef\default@KT{#1}%
  \fi
  \ifx\relax#2\else
    \ifx\default@KM\@empty\else
      \@font@info{Overwriting KANJI encoding scheme math defaults}%
    \fi
    \gdef\default@KM{#2}%
  \fi}
\let\default@KT\@empty
\let\default@KM\@empty
\@onlypreamble\DeclareKanjiEncodingDefaults
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\KanjiEncodingPair}
% 和文の縦横のエンコーディングはそれぞれ対にして扱うため、セット化するための
% コマンドを定義します。
% 第一引数が横組用、第二引数が縦組用です。
% \changes{v1.3n}{2004/08/10}{和文エンコーディングの切り替えを有効化}
%    \begin{macrocode}
\def\KanjiEncodingPair#1#2{\@namedef{t@enc@#1}{#2}\@namedef{y@enc@#2}{#1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ensure@KanjiEncodingPair}
% 横書きと縦書きのエンコーディングは必ず|\KanjiEncodingPair|で
% セット化しないと使えません。もしセット化されていなければ、
% 明快なエラーで知らせます。
% ^^A 最近の\file{plfonts.dtx}の変更(2017/11/06 v1.6j)で、
% ^^A u\pLaTeX{}と\pLaTeX{}のソース共通化の一環として
% ^^A 実行コード|\KanjiEncodingPair{JY1}{JT1}|を
% ^^A \file{plcore.ltx}から\file{pldefs.ltx}へ移動したので、
% ^^A 万が一古い\file{pldefs.cfg}が読み込まれた場合に実行されない可能性がある。
% \changes{v1.7e}{2020/03/26}{縦横エンコーディングのセット化確認}
%    \begin{macrocode}
%</plcore>
%<platexrelease>\plIncludeInRelease{2020/04/12}{\ensure@KanjiEncodingPair}
%<platexrelease>                   {Check \KanjiEncodingPair}%
%<*plcore|platexrelease>
\def\ensure@KanjiEncodingPair#1{%
  \edef\reserved@a{\csname #1@enc@\k@encoding\endcsname}%
  \edef\reserved@b{\csname c#1@encoding\endcsname}%
%    \end{macrocode}
% |\reserved@a|は、セット化が有効ならエンコードを表す文字トークン列、
% 無効なら|\relax|と同義の制御綴に展開されるマクロです。
% ここで、|\ifcat|（展開不能トークンが現れるまで展開してから比較）を使います。
% ^^A 文字トークン列は複数文字から成り得るが、
% ^^A |\relax|と先頭一文字の比較は必ず偽となり、残りの文字は読み飛ばされる。
% ^^A 制御綴の場合は必ずトークン1個であり、|\relax|との比較で真になる。
%    \begin{macrocode}
  \ifcat\relax\reserved@a
    \@latex@error
      {KANJI Encoding pair for `\k@encoding' undefined}%
      {Use \string\KanjiEncodingPair, falling back to `\reserved@b'...}%
    \expandafter\edef\reserved@a{\reserved@b}%
  \fi}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\ensure@KanjiEncodingPair}
%<platexrelease>                   {ASCII Corporation original}%
%<platexrelease>\let\ensure@KanjiEncodingPair\@undefined
%<platexrelease>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
%
%
% \subsubsection{ファミリの宣言}
% \begin{macro}{\DeclareFontFamily}
% 欧文ファミリを宣言するためのコマンドです。
% |\ffam@list|を作るように再定義をします。
%    \begin{macrocode}
\def\DeclareFontFamily#1#2#3{%
 \@ifundefined{T@#1}%
    {\@latex@error{Encoding scheme `#1' unknown}\@eha}%
    {\edef\tmp@item{{#2}}%
     \expandafter\expandafter\expandafter
     \inlist@\expandafter\tmp@item\expandafter{\ffam@list}%
     \ifin@ \else
        \def\fam@elt{\noexpand\fam@elt}%
        \xdef\ffam@list{\ffam@list\fam@elt<#2>}%
     \fi
     \def\reserved@a{#3}%
     \global
     \expandafter\let\csname #1+#2\expandafter\endcsname
            \ifx \reserved@a\@empty
              \@empty
            \else \reserved@a
            \fi
    }%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DeclareKanjiFamily}
% 和文ファミリを宣言するためのコマンドです。
%    \begin{macrocode}
\def\DeclareKanjiFamily#1#2#3{%
 \@ifundefined{T@#1}%
    {\@latex@error{KANJI Encoding scheme `#1' unknown}\@eha}%
    {\edef\tmp@item{{#2}}%
     \expandafter\expandafter\expandafter
     \inlist@\expandafter\tmp@item\expandafter{\kfam@list}%
     \ifin@ \else
        \def\fam@elt{\noexpand\fam@elt}%
        \xdef\kfam@list{\kfam@list\fam@elt<#2>}%
     \fi
     \def\reserved@a{#3}%
     \global
     \expandafter\let\csname #1+#2\expandafter\endcsname
            \ifx \reserved@a\@empty
              \@empty
            \else \reserved@a
            \fi
     }%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DeclareKanjiSubstitution}
% 目的の和文フォントが見つからなかったときに使う代用書体の
% 宣言をするコマンドです。
% |\DeclareFontSubstitution|に相当します。
% \changes{v1.7e}{2020/03/26}{\cs{default@k@...}を使用}
%    \begin{macrocode}
%</plcore>
%<platexrelease>\plIncludeInRelease{2020/04/12}{\DeclareKanjiSubstitution}
%<platexrelease>                   {Use \default@k@family etc.}%
%<*plcore|platexrelease>
\def\DeclareKanjiSubstitution#1#2#3#4{%
  \expandafter\ifx\csname T@#1\endcsname\relax
    \@latex@error{KANJI Encoding scheme `#1' unknown}\@eha
  \else
    \begingroup
       \def\reserved@a{#1}%
       \toks@{}%
       \def\cdp@elt##1##2##3##4{%
         \def\reserved@b{##1}%
         \ifx\reserved@a\reserved@b
           \addto@hook\toks@{\cdp@elt{#1}{#2}{#3}{#4}}%
         \else
           \addto@hook\toks@{\cdp@elt{##1}{##2}{##3}{##4}}%
         \fi}%
       \cdp@list
       \xdef\cdp@list{\the\toks@}%
    \endgroup
    \global\@namedef{D@#1}{\def\default@k@family{#2}% !!!
                           \def\default@k@series{#3}% !!!
                           \def\default@k@shape{#4}}% !!!
  \fi}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\DeclareKanjiSubstitution}
%<platexrelease>                   {ASCII Corporation original}%
%<platexrelease>\def\DeclareKanjiSubstitution#1#2#3#4{%
%<platexrelease>  \expandafter\ifx\csname T@#1\endcsname\relax
%<platexrelease>    \@latex@error{KANJI Encoding scheme `#1' unknown}\@eha
%<platexrelease>  \else
%<platexrelease>    \begingroup
%<platexrelease>       \def\reserved@a{#1}%
%<platexrelease>       \toks@{}%
%<platexrelease>       \def\cdp@elt##1##2##3##4{%
%<platexrelease>         \def\reserved@b{##1}%
%<platexrelease>         \ifx\reserved@a\reserved@b
%<platexrelease>           \addto@hook\toks@{\cdp@elt{#1}{#2}{#3}{#4}}%
%<platexrelease>         \else
%<platexrelease>           \addto@hook\toks@{\cdp@elt{##1}{##2}{##3}{##4}}%
%<platexrelease>         \fi}%
%<platexrelease>       \cdp@list
%<platexrelease>       \xdef\cdp@list{\the\toks@}%
%<platexrelease>    \endgroup
%<platexrelease>    \global\@namedef{D@#1}{\def\default@family{#2}%
%<platexrelease>                           \def\default@series{#3}%
%<platexrelease>                           \def\default@shape{#4}}%
%<platexrelease>  \fi}
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>% !!! Special case BEGIN
%<platexrelease>% required for any emulation date
%<platexrelease>% copied from (u)pldefs.ltx
%<platexrelease>\def\pltx@tempa{JY1}\ifx\pltx@tempa\k@encoding
%<platexrelease>\DeclareKanjiSubstitution{JY1}{mc}{m}{n}
%<platexrelease>\DeclareKanjiSubstitution{JT1}{mc}{m}{n}
%<platexrelease>\else\def\pltx@tempa{JY2}\ifx\pltx@tempa\k@encoding
%<platexrelease>\DeclareKanjiSubstitution{JY2}{mc}{m}{n}
%<platexrelease>\DeclareKanjiSubstitution{JT2}{mc}{m}{n}
%<platexrelease>\fi\fi
%<platexrelease>% emulate execution of \enc@update in \selectfont
%<platexrelease>% before (u)pldefs.ltx is loaded
%<platexrelease>\csname D@\f@encoding\endcsname
%<platexrelease>% emulate execution of \kenc@update in \selectfont
%<platexrelease>% inside (u)pldefs.ltx
%<platexrelease>\csname D@\k@encoding\endcsname
%<platexrelease>% !!! Special case END
%<*plcore>
\@onlypreamble\DeclareKanjiSubstitution
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DeclareErrorKanjiFont}
% |\DeclareErrorFont|に対応するコマンドです。
% 代用書体で示された書体も見つからなかったときに
% 最後の手段として使われるエラー書体を定義します。
% \changes{v1.6s}{2019/08/13}{\cs{DeclareErrorKanjiFont}:
%    Don't set any \cs{k@...} macros
%    (sync with ltfssbas.dtx 2019/07/09 v3.2c)}
%    \begin{macrocode}
%</plcore>
%<platexrelease>\plIncludeInRelease{2019/10/01}{\DeclareErrorKanjiFont}
%<platexrelease>                   {No side effects please}%
%<*plcore|platexrelease>
\def\DeclareErrorKanjiFont#1#2#3#4#5{%
   \xdef\error@kfontshape{%
      \noexpand\expandafter\noexpand\split@name\noexpand\string
      \expandafter\noexpand\csname#1/#2/#3/#4/#5\endcsname
      \noexpand\@nil}%
   \gdef\default@k@family{#2}%
   \gdef\default@k@series{#3}%
   \gdef\default@k@shape{#4}%
   }
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\DeclareErrorKanjiFont}
%<platexrelease>                   {ASCII Corporation original}%
%<platexrelease>\def\DeclareErrorKanjiFont#1#2#3#4#5{%
%<platexrelease>   \xdef\error@kfontshape{%
%<platexrelease>      \noexpand\expandafter\noexpand\split@name\noexpand\string
%<platexrelease>      \expandafter\noexpand\csname#1/#2/#3/#4/#5\endcsname
%<platexrelease>      \noexpand\@nil}%
%<platexrelease>   \gdef\default@k@family{#2}%
%<platexrelease>   \gdef\default@k@series{#3}%
%<platexrelease>   \gdef\default@k@shape{#4}%
%<platexrelease>   \global\let\k@family\default@k@family
%<platexrelease>   \global\let\k@series\default@k@series
%<platexrelease>   \global\let\k@shape\default@k@shape
%<platexrelease>   \gdef\f@size{#5}%
%<platexrelease>   \gdef\f@baselineskip{#5pt}}
%<platexrelease>\plEndIncludeInRelease
%<*plcore>
\@onlypreamble\DeclareErrorKanjiFont
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\wrong@fontshape}
% \begin{macro}{\wrong@al@fontshape}
% \begin{macro}{\wrong@ja@fontshape}
% |\wrong@fontshape|を和文対応にします。
% |\DeclareKanjiSubstitution|で|\default@k@...|を使用する改良と
% 同時でなければなりません。
% \changes{v1.7e}{2020/03/26}{\cs{wrong@fontshape}の和文対応}
%
% オリジナルの\LaTeX{}の定義は、欧文用として使います。
%    \begin{macrocode}
%</plcore>
%<platexrelease>\plIncludeInRelease{2020/04/12}{\wrong@fontshape}
%<platexrelease>                   {Japanese \wrong@fontshape}%
%<*plcore|platexrelease>
\def\wrong@al@fontshape{%
    \csname D@\f@encoding\endcsname   % install defaults if in math
    \edef\reserved@a{\csname\curr@fontshape\endcsname}%
  \ifx\last@fontshape\reserved@a
     \errmessage{Corrupted NFSS tables}%
     \error@fontshape
  \else
    \let\f@shape\default@shape
    \expandafter\ifx\csname\curr@fontshape\endcsname\relax
       \let\f@series\default@series
        \expandafter
          \ifx\csname\curr@fontshape\endcsname\relax
           \let\f@family\default@family
           \begingroup
              \try@load@fontshape
           \endgroup
        \fi \fi
  \fi
     \@font@warning{Font shape `\expandafter\string\reserved@a'
                     \expandafter\@gobble\string\@undefined\MessageBreak
                   using `\curr@fontshape' instead\@wrong@font@char}%
    \global\let\last@fontshape\reserved@a
    \gdef\@defaultsubs{%
      \@font@warning{Some font shapes were not available, defaults
                      substituted.\@gobbletwo}}%
    \global\expandafter\expandafter\expandafter\let
       \expandafter\reserved@a
           \csname\curr@fontshape\endcsname
    \xdef\font@name{%
      \csname\curr@fontshape/\f@size\endcsname}%
    \pickup@font}
%    \end{macrocode}
% 和文用の定義です。
%    \begin{macrocode}
\def\wrong@ja@fontshape{%
    \csname D@\f@encoding\endcsname   % install defaults if in math
    \edef\reserved@a{\csname\curr@fontshape\endcsname}%
  \ifx\last@fontshape\reserved@a
     \errmessage{Corrupted NFSS tables}%
     \error@fontshape
  \else
    \let\f@shape\default@k@shape % !!!
    \expandafter\ifx\csname\curr@fontshape\endcsname\relax
       \let\f@series\default@k@series % !!!
        \expandafter
          \ifx\csname\curr@fontshape\endcsname\relax
           \let\f@family\default@k@family % !!!
           \begingroup
              \try@load@fontshape
           \endgroup
        \fi \fi
  \fi
     \@font@warning{Font shape `\expandafter\string\reserved@a'
                     \expandafter\@gobble\string\@undefined\MessageBreak
                   using `\curr@fontshape' instead\@wrong@font@char}%
    \global\let\last@fontshape\reserved@a
    \gdef\@defaultsubs{%
      \@font@warning{Some font shapes were not available, defaults
                      substituted.\@gobbletwo}}%
    \global\expandafter\expandafter\expandafter\let
       \expandafter\reserved@a
           \csname\curr@fontshape\endcsname
    \xdef\font@name{%
      \csname\curr@fontshape/\f@size\endcsname}%
    \pickup@font}
%    \end{macrocode}
% そして、エンコーディングに応じて欧文用と和文用を使い分けます。
%    \begin{macrocode}
\def\wrong@fontshape{%
  \edef\tmp@item{{\f@encoding}}%
  \expandafter\expandafter\expandafter
  \inlist@\expandafter\tmp@item\expandafter{\kenc@list}%
  \ifin@
    \wrong@ja@fontshape
  \else
    \wrong@al@fontshape
  \fi
}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2015/01/01}{\wrong@fontshape}
%<platexrelease>                   {LaTeX2e original (2015)}%
%<platexrelease>\def\wrong@fontshape{%
%<platexrelease>    \csname D@\f@encoding\endcsname   % install defaults if in math
%<platexrelease>    \edef\reserved@a{\csname\curr@fontshape\endcsname}%
%<platexrelease>  \ifx\last@fontshape\reserved@a
%<platexrelease>     \errmessage{Corrupted NFSS tables}%
%<platexrelease>     \error@fontshape
%<platexrelease>  \else
%<platexrelease>    \let\f@shape\default@shape
%<platexrelease>    \expandafter\ifx\csname\curr@fontshape\endcsname\relax
%<platexrelease>       \let\f@series\default@series
%<platexrelease>        \expandafter
%<platexrelease>          \ifx\csname\curr@fontshape\endcsname\relax
%<platexrelease>           \let\f@family\default@family
%<platexrelease>           \begingroup
%<platexrelease>              \try@load@fontshape
%<platexrelease>           \endgroup
%<platexrelease>        \fi \fi
%<platexrelease>  \fi
%<platexrelease>     \@font@warning{Font shape `\expandafter\string\reserved@a'
%<platexrelease>                     \expandafter\@gobble\string\@undefined\MessageBreak
%<platexrelease>                   using `\curr@fontshape' instead\@wrong@font@char}%
%<platexrelease>    \global\let\last@fontshape\reserved@a
%<platexrelease>    \gdef\@defaultsubs{%
%<platexrelease>      \@font@warning{Some font shapes were not available, defaults
%<platexrelease>                      substituted.\@gobbletwo}}%
%<platexrelease>    \global\expandafter\expandafter\expandafter\let
%<platexrelease>       \expandafter\reserved@a
%<platexrelease>           \csname\curr@fontshape\endcsname
%<platexrelease>    \xdef\font@name{%
%<platexrelease>      \csname\curr@fontshape/\f@size\endcsname}%
%<platexrelease>    \pickup@font}
%<platexrelease>\let\wrong@al@fontshape\@undefined
%<platexrelease>\let\wrong@ja@fontshape\@undefined
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\wrong@fontshape}
%<platexrelease>                   {LaTeX2e original (old)}%
%<platexrelease>\def\wrong@fontshape{%
%<platexrelease>    \csname D@\f@encoding\endcsname
%<platexrelease>    \edef\reserved@a{\csname\curr@fontshape\endcsname}%
%<platexrelease>  \ifx\last@fontshape\reserved@a
%<platexrelease>     \errmessage{Corrupted NFSS tables}%
%<platexrelease>     \error@fontshape
%<platexrelease>  \else
%<platexrelease>    \let\f@shape\default@shape
%<platexrelease>    \expandafter\ifx\csname\curr@fontshape\endcsname\relax
%<platexrelease>       \let\f@series\default@series
%<platexrelease>        \expandafter
%<platexrelease>          \ifx\csname\curr@fontshape\endcsname\relax
%<platexrelease>           \let\f@family\default@family
%<platexrelease>        \fi \fi
%<platexrelease>  \fi
%<platexrelease>     \@font@warning{Font shape
%<platexrelease>            `\expandafter\string\reserved@a'
%<platexrelease>            \expandafter\@gobble\string\@undefined
%<platexrelease>            \MessageBreak
%<platexrelease>            using `\curr@fontshape' instead\@wrong@font@char}%
%<platexrelease>    \global\let\last@fontshape\reserved@a
%<platexrelease>    \gdef\@defaultsubs{%
%<platexrelease>      \@font@warning{Some font shapes were not available,
%<platexrelease>                       defaults substituted.\@gobbletwo}}%
%<platexrelease>    \global\expandafter\expandafter\expandafter\let
%<platexrelease>       \expandafter\reserved@a
%<platexrelease>           \csname\curr@fontshape\endcsname
%<platexrelease>    \xdef\font@name{%
%<platexrelease>      \csname\curr@fontshape/\f@size\endcsname}%
%<platexrelease>    \pickup@font}
%<platexrelease>\let\wrong@al@fontshape\@undefined
%<platexrelease>\let\wrong@ja@fontshape\@undefined
%<platexrelease>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\DeclareFixedFont}
% フォント名を宣言するコマンドです。
% エンコード／ファミリ／シリーズ／シェイプ／サイズの5つの属性を
% 一度に切り替えるためのコマンドを定義できます。
% \changes{v1.2}{1995/11/09}{\break\cs{DeclareFixedFont}の日本語化}
% \changes{v1.3c}{1997/04/09}{縦横エンコード・リストの分離による拡張}
% \changes{v1.3f}{1998/08/10}{プリアンブル・コマンドにしてしまっていたのを解除}
%    \begin{macrocode}
\def\DeclareFixedFont#1#2#3#4#5#6{%
   \begingroup
      \let\afont\font
      \math@fontsfalse
      \every@math@size{}%
      \fontsize{#6}\z@
      \edef\tmp@item{{#2}}%
      \expandafter\expandafter\expandafter
      \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
      \ifin@
        \usekanji{#2}{#3}{#4}{#5}%
        \let\font\jfont
      \else
        \expandafter\expandafter\expandafter
        \inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
        \ifin@
          \usekanji{#2}{#3}{#4}{#5}%
          \let\font\tfont
        \else
          \useroman{#2}{#3}{#4}{#5}%
          \let\font\afont
        \fi
      \fi
      \global\expandafter\let\expandafter#1\the\font
      \let\font\afont
   \endgroup
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\do@subst@correction}
% \begin{macro}{\pltx@do@subst@correction@al}
% \begin{macro}{\pltx@do@subst@correction@yoko}
% \begin{macro}{\pltx@do@subst@correction@tate}
% |\font|は欧文フォントを返すため、\LaTeX{}の元の|\do@subst@correction|は
% 和文フォントに対して使えませんので、和文に対応させます
% \footnote{\pLaTeXe~2020-04-12で対応。元のアスキー版の文書にも
% 第\ref{afont-ascii}節で\cs{do@subst@correction}を日本語対応させた旨が
% 書かれていましたが、実際にはこの命令は
% \begin{itemize}
% \item \cs{selectfont}内の\cs{pickup@font}から呼ばれる場合
% \item \cs{getanddefine@fonts}内の\cs{pickup@font}から呼ばれる場合
% \end{itemize}
% の2通りがあるようです。前者は\cs{let}\cs{font}\cs{jfont}によって
% 対処できていましたが、後者は未対策だったため、例えば
% 和文数式フォントを定義した状態でbmパッケージを使った場合に
% 問題が起きていました（参考：texjporg/jsclasses\#53）。}。
% \changes{v1.7}{2020/03/05}{\cs{do@subst@correction}の日本語化}
% \changes{v1.7d}{2020/03/23}{ドキュメント改良}
%
% オリジナルの\LaTeX{}の定義は、欧文用として使います。
%    \begin{macrocode}
%</plcore>
%<platexrelease>\plIncludeInRelease{2020/04/12}{\do@subst@correction}
%<platexrelease>                   {Japanese font substitution}%
%<*plcore|platexrelease>
\def\pltx@do@subst@correction@al{%
       \xdef\subst@correction{%
          \font@name
          \global\expandafter\font
            \csname \curr@fontshape/\f@size\endcsname
            \noexpand\fontname\font
           \relax}%
       \aftergroup\subst@correction
}
%    \end{macrocode}
% 和文横組用と和文縦組用の定義では、それぞれ|\jfont|と|\tfont|を使います。
%    \begin{macrocode}
\def\pltx@do@subst@correction@yoko{%
       \xdef\subst@correction{%
          \font@name
          \global\expandafter\jfont
            \csname \curr@fontshape/\f@size\endcsname
            \noexpand\fontname\jfont
           \relax}%
       \aftergroup\subst@correction
}
\def\pltx@do@subst@correction@tate{%
       \xdef\subst@correction{%
          \font@name
          \global\expandafter\tfont
            \csname \curr@fontshape/\f@size\endcsname
            \noexpand\fontname\tfont
           \relax}%
       \aftergroup\subst@correction
}
%    \end{macrocode}
% そして、エンコーディングに応じて3つの命令を使い分けます。
%    \begin{macrocode}
\def\do@subst@correction{%
  \edef\tmp@item{{\f@encoding}}%
  \expandafter\expandafter\expandafter
  \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
  \ifin@\pltx@do@subst@correction@yoko
  \else
    \expandafter\expandafter\expandafter
    \inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
    \ifin@\pltx@do@subst@correction@tate\else
      \pltx@do@subst@correction@al
    \fi
  \fi
}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\do@subst@correction}
%<platexrelease>                   {LaTeX2e original}%
%<platexrelease>\def\do@subst@correction{%
%<platexrelease>       \xdef\subst@correction{%
%<platexrelease>          \font@name
%<platexrelease>          \global\expandafter\font
%<platexrelease>            \csname \curr@fontshape/\f@size\endcsname
%<platexrelease>            \noexpand\fontname\font
%<platexrelease>           \relax}%
%<platexrelease>       \aftergroup\subst@correction
%<platexrelease>}
%<platexrelease>\let\pltx@do@subst@correction@al\@undefined
%<platexrelease>\let\pltx@do@subst@correction@yoko\@undefined
%<platexrelease>\let\pltx@do@subst@correction@tate\@undefined
%<platexrelease>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
% \subsubsection{数式用フォント}
% \begin{macro}{\reDeclareMathAlphabet}
% \changes{v1.0}{1997/01/30}{\break\cs{reDeclareMathAlphabet}を追加。
%    ありがとう、ymtさん。}
% \changes{v1.4}{2006/06/27}{\break\cs{reDeclareMathAlphabet}を修正。
%    ありがとう、ymtさん。}
% \changes{v1.5}{2006/11/10}{\break\cs{reDeclareMathAlphabet}を修正。
%    ありがとう、ymtさん。}
% 数式モード内で、数式文字用の和欧文フォントを同時に切り替えるコマンドです。
%
% p\LaTeXe{}には、本来の動作モードと2.09互換モードの二つがあり、
% 両モードで数式文字を変更するコマンドや動作が異なります。
% 本来の動作モードでは、|\mathrm{...}|のように|\math??|に引数を指定して
% 使います。このときは引数にだけ影響します。2.09互換モードでは、|\rm|の
% ような二文字コマンドを使います。このコマンドには引数を取らず、書体は
% グルーピングの範囲で反映されます。二文字コマンドは、ネイティブモード
% でも使えるようになっていて、動作も2.09互換モードのコマンドと同じです。
%
% しかし、内部的には|\math??|という一つのコマンドがすべての動作を受け持ち、
% |\math??|コマンドや|\??|コマンドから呼び出された状態に応じて、動作を変え
% ています。したがって、欧文フォントと和文フォントの両方を一度に変更する、
% 数式文字変更コマンドを作るとき、それぞれの状態に合った動作で動くように
% フォント切り替えコマンドを実行させる必要があります。
%
%   \textbf{使い方}
%\begin{verbatim}
% usage: \reDeclareMathAlphabet{\mathAA}{\mathBB}{\mathCC}
%\end{verbatim}
%   欧文・和文両用の数式文字変更コマンド |\mathAA| を(再)定義します。
%   欧文用のコマンド |\mathBB| と、和文用の |\mathCC| を (p)\LaTeX{} 標準の
%   方法で定義しておいた後、上のように記述します。なお、|{\mathBB}{\mathCC}|
%   の部分については |{\@mathBB}{\@mathCC}| のように @ をつけた記述
%   をしてもかまいません(互換性のため)。上のような命令を発行すると、
%   |\mathAA| が、欧文に対しては |\mathBB|、 和文に対しては |\mathCC| の意味を
%   持つようになります。
%   通常は、|\reDeclareMathAlphabet{\mathrm}{\mathrm}{\mathmc}| のように
%   |AA=BB| として用います。また、|\mathrm| は \LaTeX{} kernel において
%   標準のコマンドとして既に定義されているので、この場合は |\mathrm| の
%   再定義となります。native mode での |\rm| のような two letter command
%   (old font command) に対しても同様なことが引きおこります。つまり、
%   数式モードにおいて、新たな |\rm| は、\LaTeX{} original の |\rm| と |\mc|
%   (正確に言えば |\mathrm| と |\mathmc| であるが)の意味を合わせ持つように
%   なります。
%
%   \textbf{補足}
% \begin{itemize}
% \item
%   |\mathAA| を再定義する他の命令(|\DeclareSymbolFontAlphabet| を用いる
%     パッケージの使用等)との衝突を避けるためには、|\AtBeginDocument| を併用
%     するなどして展開位置の制御を行ってください。
% \item
%   テキストモード時のエラー表示用に |\mathBB| のみを用いることを除いて、
%     |\mathBB| と |\mathCC| の順は実際には意味を持ちません。和文、欧文の順に
%     定義しても問題はありません。
% \item
%   第2,3引き数には |{\@mathBB}{\@mathCC}| のように |@| をつけた記述も
%     行えます。ただし、形式は統一してください。判断は第2引き数で行って
%     いるため、 |{\@mathBB}{\mathCC}| のような記述ではうまく動作しません。
%     また、|\makeatletter| な状態で |{\@mathBB }{\@mathCC  }| のような |@| と
%     余分なスペースをつけた場合には無限ループを引き起こすことがあります。
%     このような記述は避けるようにして下さい。
% \item
%   |\reDeclareMathAlphabet| を実行する際には、|\mathBB|, |\mathCC| が定義
%     されている必要はありません。実際に |\mathAA| を用いる際にはこれらの
%     |\mathBB|, |\mathCC| が (p)\LaTeX{}標準の方法で定義されている必要があります。
% \item
%   他の部分で |\mathAA| を全く定義しない場合を除き、|\mathAA| は
%     |\reDeclareMathAlphabet| を実行する以前で (p)\LaTeX{}標準の方法で定義され
%     ている必要があります(|\mathrm| や |\mathbf| の標準的なコマンドは、
%     \LaTeX{} kernel で既に定義されています)。
%     |\DeclareMathAlphabet| の場合には、|\reDeclareMathAlphabet| よりも前で1度
%     |\mathAA| を定義してあれば、|\reDeclareMathAlphabet| の後ろで再度
%     |\DeclareMathAlphabet| を用いて |\mathAA| の内部の定義内容を変更すること
%     には問題ありません。
%     |\DeclareSymbolFontAlphabet| の場合、再定義においても |\mathAA| が直接
%     定義されるので、|\mathAA| に対する最後の |\DeclareSymbolFontAlphabet| の
%     さらに後で |\reDeclareMathAlphabet| を実行しなければ有効とはなりません。
% \item
%   |\documentstyle| の互換モードの場合、|\rm| 等の two letter command
%     (old font command) は、|\reDeclareMathAlphabet| とは関連することのない
%     別個のコマンドとして定義されます。従って、この場合には
%     |\reDeclareMathAlphabet| を用いても |\rm| 等は数式モードにおいて
%     欧文・和文両用のものとはなりません。
% \end{itemize}
%    \begin{macrocode}
\def\reDeclareMathAlphabet#1#2#3{%
  \edef#1{\noexpand\protect\expandafter\noexpand\csname%
    \expandafter\@gobble\string#1\space\space\endcsname}%
  \edef\@tempa{\expandafter\@gobble\string#2}%
  \edef\@tempb{\expandafter\@gobble\string#3}%
  \edef\@tempc{\string @\expandafter\@gobbletwo\string#2}%
  \ifx\@tempc\@tempa%
    \edef\@tempa{\expandafter\@gobbletwo\string#2}%
    \edef\@tempb{\expandafter\@gobbletwo\string#3}%
  \fi
  \expandafter\edef\csname\expandafter\@gobble\string#1\space\space\endcsname%
    {\noexpand\DualLang@mathalph@bet%
      {\expandafter\noexpand\csname\@tempa\space\endcsname}%
      {\expandafter\noexpand\csname\@tempb\space\endcsname}%
  }%
}
\@onlypreamble\reDeclareMathAlphabet
\def\DualLang@mathalph@bet#1#2{%
  \relax\ifmmode
    \ifx\math@bgroup\bgroup%     2e normal style     (\mathrm{...})
      \bgroup\let\DualLang@Mfontsw\DLMfontsw@standard
    \else
      \ifx\math@bgroup\relax%    2e two letter style (\rm->\mathrm)
        \let\DualLang@Mfontsw\DLMfontsw@oldstyle
      \else
        \ifx\math@bgroup\@empty% 2.09 oldlfont style ({\mathrm ...})
          \let\DualLang@Mfontsw\DLMfontsw@oldlfont
        \else%                   panic! assume 2e normal style
          \bgroup\let\DualLang@Mfontsw\DLMfontsw@standard
        \fi
      \fi
    \fi
  \else
    \let\DualLang@Mfontsw\@firstoftwo
  \fi
  \DualLang@Mfontsw{#1}{#2}%
}
\def\DLMfontsw@standard#1#2#3{#1{#2{#3}}\egroup}
\def\DLMfontsw@oldstyle#1#2{#1\relax\@fontswitch\relax{#2}}
\def\DLMfontsw@oldlfont#1#2{#1\relax#2\relax}
%    \end{macrocode}
% \end{macro}
%
%
% \subsubsection{従属書体の宣言}
% \begin{macro}{\DeclareRelationFont}
% \begin{macro}{\SetRelationFont}
% 和文書体に対する従属書体を宣言するコマンドです。\emph{従属書体}とは、
% ある和文書体とペアになる欧文書体のことです。
% 主に多書体パッケージ|skfonts|を用いるための仕組みです。
%
% |\DeclareRelationFont|コマンドの最初の4つの引数の組が和文書体の属性、
% その後の4つの引数の組が従属書体の属性です。
%\begin{verbatim}
%    \DeclareRelationFont{JY1}{mc}{m}{n}{OT1}{cmr}{m}{n}
%    \DeclareRelationFont{JY1}{gt}{m}{n}{OT1}{cmr}{bx}{n}
%\end{verbatim}
% 上記の例は、明朝体の従属書体としてコンピュータモダンローマン、
% ゴシック体の従属書体としてコンピュータモダンボールドを宣言しています。
% カレント和文書体が|\JY1/mc/m/n|となると、
% 自動的に欧文書体が|\OT1/cmr/m/n|になります。
% また、和文書体が|\JY1/gt/m/n|になったときは、
% 欧文書体が|\OT1/cmr/bx/n|になります。
%
% 和文書体のシェイプ指定を省略するとエンコード／ファミリ／シリーズの組合せで
% 従属書体が使われます。このときは、|\selectfont|が呼び出された時点での
% シェイプ（|\f@shape|）の値が使われます。
%
% |\DeclareRelationFont|の設定値はグローバルに有効です。
% |\SetRelationFont|の設定値はローカルに有効です。
% フォント定義ファイルで宣言をする場合は、
% |\DeclareRelationFont|を使ってください。
%    \begin{macrocode}
\def\all@shape{all}%
\def\DeclareRelationFont#1#2#3#4#5#6#7#8{%
  \def\rel@shape{#4}%
  \ifx\rel@shape\@empty
     \global
     \expandafter\def\csname rel@#1/#2/#3/all\endcsname{%
       \romanencoding{#5}\romanfamily{#6}%
       \romanseries{#7}}%
  \else
     \global
     \expandafter\def\csname rel@#1/#2/#3/#4\endcsname{%
       \romanencoding{#5}\romanfamily{#6}%
       \romanseries{#7}\romanshape{#8}}%
  \fi
}
\def\SetRelationFont#1#2#3#4#5#6#7#8{%
  \def\rel@shape{#4}%
  \ifx\rel@shape\@empty
     \expandafter\def\csname rel@#1/#2/#3/all\endcsname{%
       \romanencoding{#5}\romanfamily{#6}%
       \romanseries{#7}}%
  \else
     \expandafter\def\csname rel@#1/#2/#3/#4\endcsname{%
       \romanencoding{#5}\romanfamily{#6}%
       \romanseries{#7}\romanshape{#8}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
%
% \begin{macro}{\if@knjcmd}
% |\if@knjcmd|は欧文書体を従属書体にするかどうかのフラグです。
% このフラグが真になると、欧文書体に従属書体が使われます。
%    \begin{macrocode}
\newif\if@knjcmd
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\userelfont}
% |\if@knjcmd|フラグは|\userelfont|コマンドによって、\emph{真}となります。
% そして|\selectfont|実行後には\emph{偽}に初期化されます。
% \changes{v1.6u}{2019/09/29}{Make \cs{userelfont} robust}
%    \begin{macrocode}
%</plcore>
%<platexrelease>\plIncludeInRelease{2019/10/01}{\userelfont}
%<platexrelease>                   {Make robust}%
%<*plcore|platexrelease>
\DeclareRobustCommand\userelfont{\@knjcmdtrue}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\userelfont}
%<platexrelease>                   {ASCII Corporation original}%
%<platexrelease>\def\userelfont{\@knjcmdtrue}
%<platexrelease>\expandafter \let \csname userelfont \endcsname \@undefined
%<platexrelease>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{フォントの選択}
% \begin{macro}{\selectfont}
% |\selectfont|のオリジナルからの変更部分は、次の3点です。
% \begin{itemize}
% \item 和文書体を変更する部分
% \item 従属書体に変更する部分
% \item 和欧文のベースラインを調整する部分
% \end{itemize}
%
% \changes{v1.0c}{1995/08/22}{縦横両方のフォントを切り替えるようにした}
% \changes{v1.2}{1995/11/22}{エラーフォントに対応した}
% \changes{v1.3n}{2004/08/10}{和文エンコーディングの切り替えを有効化}
% \changes{v1.7e}{2020/03/26}{縦横エンコーディングのセット化確認}
%    \begin{macrocode}
%</plcore>
%<platexrelease|trace>\plIncludeInRelease{2020/04/12}{\selectfont}
%<platexrelease|trace>                   {Check \KanjiEncodingPair}%
%<*plcore|platexrelease|trace>
\ifx\delayed@f@adjustment\@undefined % --- for <= 2020-10-01 BEGIN
%%
\DeclareRobustCommand\selectfont{%
  \let\tmp@error@fontshape\error@fontshape
  \let\error@fontshape\error@kfontshape
  \edef\tmp@item{{\k@encoding}}%
  \expandafter\expandafter\expandafter
  \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
  \ifin@
    \let\cy@encoding\k@encoding
    \ensure@KanjiEncodingPair{t}%
    \edef\ct@encoding{\csname t@enc@\k@encoding\endcsname}%
  \else
    \expandafter\expandafter\expandafter
    \inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
    \ifin@
      \let\ct@encoding\k@encoding
      \ensure@KanjiEncodingPair{y}%
      \edef\cy@encoding{\csname y@enc@\k@encoding\endcsname}%
    \else
      \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha
    \fi
  \fi
  \let\font\tfont
  \let\k@encoding\ct@encoding
  \xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
  \pickup@font
  \font@name
  \let\font\jfont
  \let\k@encoding\cy@encoding
  \xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
  \pickup@font
  \font@name
  \expandafter\def\expandafter\k@encoding\tmp@item
  \kenc@update
  \let\error@fontshape\tmp@error@fontshape
  \if@knjcmd \@knjcmdfalse
    \expandafter\ifx
    \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname\relax
      \expandafter\ifx
         \csname rel@\k@encoding/\k@family/\k@series/all\endcsname\relax
      \else
         \csname rel@\k@encoding/\k@family/\k@series/all\endcsname
      \fi
    \else
       \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname
    \fi
  \fi
  \let\font\afont
  \xdef\font@name{\csname\curr@fontshape/\f@size\endcsname}%
  \pickup@font
  \font@name
%<trace>  \ifnum \tracingfonts>\tw@
%<trace>    \@font@info{Roman:Switching to \font@name}\fi
  \enc@update
  \ifx\f@linespread\baselinestretch \else
    \set@fontsize\baselinestretch\f@size\f@baselineskip
  \fi
  \size@update}
%%
\else        % --- for <= 2020-10-01 END & for >= 2021-06-01 BEGIN
%%
\DeclareRobustCommand\selectfont{%
%    \end{macrocode}
% 最初に和文の処理を完了させてから、欧文（従属欧文かもしれません）の
% 処理に入る必要があります。それぞれで「遅らせていたシリーズ・シェイプの
% 値更新→フォントの切り替え」を行います。
% \changes{v1.7k}{2021/01/10}{Execute delayed series and shape updates (latex2e/444)
%    (sync with ltfsstrc.dtx 2020/12/22 v3.0n)}
% \changes{v1.7l}{2021/05/23}{Unset the forced series boolean when reaching
%    \cs{selectfont} (latex2e/444)
%    (sync with ltfsstrc.dtx 2021/04/26 v3.0o)}
%
% 和文：遅らせていたシリーズ・シェイプの値更新。
%    \begin{macrocode}
  % !! sync with ltfsstrc.dtx 2021/04/26 v3.0o BEGIN
  \ifx\delayed@k@adjustment\@empty
  \else
    \let\k@shape@saved\k@shape
    \let\k@series@saved\k@series
    \delayed@k@adjustment
    \begingroup\let\f@encoding\k@encoding\let\f@family\k@family
      \maybe@load@fontshape\endgroup
    \ifcsname \k@encoding/\k@family/\k@series/\k@shape \endcsname
    \else
      \let\k@shape\k@shape@saved
      \let\k@series\k@series@saved
      \let\delayed@merge@kanji@shape\merge@kanji@shape
      \let\delayed@merge@kanji@series\merge@kanji@series
      \delayed@k@adjustment
      \let\delayed@merge@kanji@shape\merge@kanji@shape@without@substitution
      \let\delayed@merge@kanji@series\merge@kanji@series@without@substitution
    \fi
    \let\delayed@k@adjustment\@empty
  \fi
  \@forced@series@kanjifalse
  % !! sync with ltfsstrc.dtx 2021/04/26 v3.0o END
%    \end{macrocode}
% 和文：フォントの切り替え。
%    \begin{macrocode}
  \let\tmp@error@fontshape\error@fontshape
  \let\error@fontshape\error@kfontshape
  \edef\tmp@item{{\k@encoding}}%
  \expandafter\expandafter\expandafter
  \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
  \ifin@
    \let\cy@encoding\k@encoding
    \ensure@KanjiEncodingPair{t}%
    \edef\ct@encoding{\csname t@enc@\k@encoding\endcsname}%
  \else
    \expandafter\expandafter\expandafter
    \inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
    \ifin@
      \let\ct@encoding\k@encoding
      \ensure@KanjiEncodingPair{y}%
      \edef\cy@encoding{\csname y@enc@\k@encoding\endcsname}%
    \else
      \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha
    \fi
  \fi
  \let\font\tfont
  \let\k@encoding\ct@encoding
  \xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
  \pickup@font
  \font@name
  \let\font\jfont
  \let\k@encoding\cy@encoding
  \xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
  \pickup@font
  \font@name
  \expandafter\def\expandafter\k@encoding\tmp@item
  \kenc@update
  \let\error@fontshape\tmp@error@fontshape
%    \end{macrocode}
% 以上で、和文の処理が完了。
%
% 従属欧文を使う（|\if@knjcmd|が真の）場合は、和文書体が確定した
% この段階で「関連付けされた欧文書体」に値を更新します。
% |\rel@../../../..| で |\romanseries| と |\romanshape| が実行
% される（すなわち |\delayed@f@adjustment| に追加が入る）ことに
% 注意してください。
% なお、|\if@knjcmd|フラグは|\userelfont|コマンドによって
% \emph{真}となり、以下で再び\emph{偽}にリセットされます。
% \changes{v1.7n}{2021/06/27}{従属欧文のシリーズとシェープ更新を
%    反映するように修正}
%    \begin{macrocode}
  \if@knjcmd \@knjcmdfalse
    \expandafter\ifx
    \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname\relax
      \expandafter\ifx
         \csname rel@\k@encoding/\k@family/\k@series/all\endcsname\relax
      \else
         \csname rel@\k@encoding/\k@family/\k@series/all\endcsname
      \fi
    \else
       \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname
    \fi
  \fi
%    \end{macrocode}
% 欧文：遅らせていたシリーズ・シェイプの値更新。
%    \begin{macrocode}
  % !! sync with ltfsstrc.dtx 2021/04/26 v3.0o BEGIN
  \ifx\delayed@f@adjustment\@empty
  \else
    \let\f@shape@saved\f@shape
    \let\f@series@saved\f@series
    \delayed@f@adjustment
    \maybe@load@fontshape
    \ifcsname \f@encoding/\f@family/\f@series/\f@shape \endcsname
    \else
      \let\f@shape\f@shape@saved
      \let\f@series\f@series@saved
      \let\delayed@merge@font@shape\merge@font@shape
      \let\delayed@merge@font@series\merge@font@series
      \delayed@f@adjustment
      \let\delayed@merge@font@shape\merge@font@shape@without@substitution
      \let\delayed@merge@font@series\merge@font@series@without@substitution
    \fi
    \let\delayed@f@adjustment\@empty
  \fi
  \@forced@seriesfalse
  % !! sync with ltfsstrc.dtx 2021/04/26 v3.0o END
%    \end{macrocode}
% 欧文：フォントの切り替え。
%    \begin{macrocode}
  \let\font\afont
  \xdef\font@name{\csname\curr@fontshape/\f@size\endcsname}%
  \pickup@font
  \font@name
  \UseHook{selectfont}% since LaTeX2e 2021-06-01
  \enc@update
%    \end{macrocode}
% 最後に、サイズが変更されていれば、ベースラインの調整などを行ないます。
% 英語版の|\selectfont|では最初に行なっていますが、
% p\LaTeXe{}ではベースラインシフトの調整をするために、
% 書体を確定しなければならないため、一番最後に行ないます
% \changes{v1.1b}{1995/04/26}{ベースラインの調整をサイズ変更時に
%       行なうようにした}
%    \begin{macrocode}
  \ifx\f@linespread\baselinestretch \else
    \set@fontsize\baselinestretch\f@size\f@baselineskip
  \fi
  \size@update}
%%
\fi          % --- for >= 2021-06-01 END
%</plcore|platexrelease|trace>
%<platexrelease|trace>\plEndIncludeInRelease
%<platexrelease|trace>\plIncludeInRelease{0000/00/00}{\selectfont}
%<platexrelease|trace>                   {ASCII Corporation original}%
%<platexrelease|trace>\DeclareRobustCommand\selectfont{%
%<platexrelease|trace>  \let\tmp@error@fontshape\error@fontshape
%<platexrelease|trace>  \let\error@fontshape\error@kfontshape
%<platexrelease|trace>  \edef\tmp@item{{\k@encoding}}%
%<platexrelease|trace>  \expandafter\expandafter\expandafter
%<platexrelease|trace>  \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
%<platexrelease|trace>  \ifin@
%<platexrelease|trace>    \let\cy@encoding\k@encoding
%<platexrelease|trace>    \edef\ct@encoding{\csname t@enc@\k@encoding\endcsname}%
%<platexrelease|trace>  \else
%<platexrelease|trace>    \expandafter\expandafter\expandafter
%<platexrelease|trace>    \inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
%<platexrelease|trace>    \ifin@
%<platexrelease|trace>      \let\ct@encoding\k@encoding
%<platexrelease|trace>      \edef\cy@encoding{\csname y@enc@\k@encoding\endcsname}%
%<platexrelease|trace>    \else
%<platexrelease|trace>      \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha
%<platexrelease|trace>    \fi
%<platexrelease|trace>  \fi
%<platexrelease|trace>  \let\font\tfont
%<platexrelease|trace>  \let\k@encoding\ct@encoding
%<platexrelease|trace>  \xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
%<platexrelease|trace>  \pickup@font
%<platexrelease|trace>  \font@name
%<platexrelease|trace>  \let\font\jfont
%<platexrelease|trace>  \let\k@encoding\cy@encoding
%<platexrelease|trace>  \xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
%<platexrelease|trace>  \pickup@font
%<platexrelease|trace>  \font@name
%<platexrelease|trace>  \expandafter\def\expandafter\k@encoding\tmp@item
%<platexrelease|trace>  \kenc@update
%<platexrelease|trace>  \let\error@fontshape\tmp@error@fontshape
%<platexrelease|trace>  \if@knjcmd \@knjcmdfalse
%<platexrelease|trace>    \expandafter\ifx
%<platexrelease|trace>    \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname\relax
%<platexrelease|trace>      \expandafter\ifx
%<platexrelease|trace>         \csname rel@\k@encoding/\k@family/\k@series/all\endcsname\relax
%<platexrelease|trace>      \else
%<platexrelease|trace>         \csname rel@\k@encoding/\k@family/\k@series/all\endcsname
%<platexrelease|trace>      \fi
%<platexrelease|trace>    \else
%<platexrelease|trace>       \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname
%<platexrelease|trace>    \fi
%<platexrelease|trace>  \fi
%<platexrelease|trace>  \let\font\afont
%<platexrelease|trace>  \xdef\font@name{\csname\curr@fontshape/\f@size\endcsname}%
%<platexrelease|trace>  \pickup@font
%<platexrelease|trace>  \font@name
%<*trace>
%<platexrelease|trace>  \ifnum \tracingfonts>\tw@
%<platexrelease|trace>    \@font@info{Roman:Switching to \font@name}\fi
%</trace>
%<platexrelease|trace>  \enc@update
%<platexrelease|trace>  \ifx\f@linespread\baselinestretch \else
%<platexrelease|trace>    \set@fontsize\baselinestretch\f@size\f@baselineskip
%<platexrelease|trace>  \fi
%<platexrelease|trace>  \size@update}
%<platexrelease|trace>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\set@fontsize}
% |\fontsize|コマンドの内部形式です。
% ベースラインの設定と、支柱の設定を行ないます。
%    \begin{macrocode}
%</plcore>
%<platexrelease|trace>\plIncludeInRelease{2017/04/08}{\set@fontsize}
%<platexrelease|trace>                   {Construct \ystrutbox}%
%<*plcore|platexrelease|trace>
\def\set@fontsize#1#2#3{%
    \@defaultunits\@tempdimb#2pt\relax\@nnil
    \edef\f@size{\strip@pt\@tempdimb}%
    \@defaultunits\@tempskipa#3pt\relax\@nnil
    \edef\f@baselineskip{\the\@tempskipa}%
    \edef\f@linespread{#1}%
    \let\baselinestretch\f@linespread
    \def\size@update{%
      \baselineskip\f@baselineskip\relax
      \baselineskip\f@linespread\baselineskip
      \normalbaselineskip\baselineskip
%    \end{macrocode}
% ここで、ベースラインシフトの調整と支柱を組み立てます。
% \changes{v1.6f}{2017/02/20}{\cs{ystrutbox}を組み立てるように}
%    \begin{macrocode}
      \adjustbaseline
      \setbox\ystrutbox\hbox{\yoko
          \vrule\@width\z@
                \@height.7\baselineskip \@depth.3\baselineskip}%
      \setbox\tstrutbox\hbox{\tate
          \vrule\@width\z@
                \@height.5\baselineskip \@depth.5\baselineskip}%
      \setbox\zstrutbox\hbox{\tate
          \vrule\@width\z@
                \@height.7\baselineskip \@depth.3\baselineskip}%
%    \end{macrocode}
% フォントサイズとベースラインに関する診断情報を出力します。
%    \begin{macrocode}
%<*trace>
    \ifnum \tracingfonts>\tw@
      \ifx\f@linespread\@empty
        \let\reserved@a\@empty
      \else
        \def\reserved@a{\f@linespread x}%
      \fi
      \@font@info{Changing size to\space
            \f@size/\reserved@a \f@baselineskip}%
      \aftergroup\type@restoreinfo
    \fi
%</trace>
        \let\size@update\relax}}
%</plcore|platexrelease|trace>
%<platexrelease|trace>\plEndIncludeInRelease
%<platexrelease|trace>\plIncludeInRelease{0000/00/00}{\set@fontsize}
%<platexrelease|trace>                   {ASCII Corporation original}%
%<platexrelease|trace>\def\set@fontsize#1#2#3{%
%<platexrelease|trace>    \@defaultunits\@tempdimb#2pt\relax\@nnil
%<platexrelease|trace>    \edef\f@size{\strip@pt\@tempdimb}%
%<platexrelease|trace>    \@defaultunits\@tempskipa#3pt\relax\@nnil
%<platexrelease|trace>    \edef\f@baselineskip{\the\@tempskipa}%
%<platexrelease|trace>    \edef\f@linespread{#1}%
%<platexrelease|trace>    \let\baselinestretch\f@linespread
%<platexrelease|trace>    \def\size@update{%
%<platexrelease|trace>      \baselineskip\f@baselineskip\relax
%<platexrelease|trace>      \baselineskip\f@linespread\baselineskip
%<platexrelease|trace>      \normalbaselineskip\baselineskip
%<platexrelease|trace>      \adjustbaseline
%<platexrelease|trace>      \setbox\strutbox\hbox{\yoko
%<platexrelease|trace>          \vrule\@width\z@
%<platexrelease|trace>                \@height.7\baselineskip \@depth.3\baselineskip}%
%<platexrelease|trace>      \setbox\tstrutbox\hbox{\tate
%<platexrelease|trace>          \vrule\@width\z@
%<platexrelease|trace>                \@height.5\baselineskip \@depth.5\baselineskip}%
%<platexrelease|trace>      \setbox\zstrutbox\hbox{\tate
%<platexrelease|trace>          \vrule\@width\z@
%<platexrelease|trace>                \@height.7\baselineskip \@depth.3\baselineskip}%
%<*trace>
%<platexrelease|trace>    \ifnum \tracingfonts>\tw@
%<platexrelease|trace>      \ifx\f@linespread\@empty
%<platexrelease|trace>        \let\reserved@a\@empty
%<platexrelease|trace>      \else
%<platexrelease|trace>        \def\reserved@a{\f@linespread x}%
%<platexrelease|trace>      \fi
%<platexrelease|trace>      \@font@info{Changing size to\space
%<platexrelease|trace>            \f@size/\reserved@a \f@baselineskip}%
%<platexrelease|trace>      \aftergroup\type@restoreinfo
%<platexrelease|trace>    \fi
%</trace>
%<platexrelease|trace>        \let\size@update\relax}}
%<platexrelease|trace>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\adjustbaseline}
% 現在の和文フォントの空白（EUCコード\texttt{0xA1A1}）の中央に
% 現在の欧文フォントの``/''の中央がくるようにベースラインシフトを設定します。
% \changes{v1.0c}{1995/08/31}{欧文書体の基準を`M'から`/'に変更}
% \changes{v1.2}{1995/11/21}{縦組時のみ調整するようにした}
%
% 当初はまずベースラインシフト量をゼロにしていましたが、
% \cs{tbaselineshift}を連続して変更した後に鈎括弧類を使うと余計なアキが
% でる問題が起こるため、\cs{tbaselineshift}をゼロクリアする処理を削除し
% ました。
% \changes{v1.3j}{2000/10/24}{文頭に鈎括弧などがあるときに余計なアキがで
%    る問題に対処}
%
% しかし、それではベースラインシフトを調整済みの欧文ボックスと比較して
% しまうため、計算した値が大きくなってしまいます。そこで、このボックス
% の中でゼロにするようにしました。また、``/''と比較していたのを``M''に 
% しました。
% \changes{v1.3k}{2001/05/10}{欧文書体の基準を再び`/`から`M'に変更}
% \changes{v1.3l}{2002/04/05}{\cs{adjustbaseline}でフォントの基準値が縦書き
%    以外では設定されないのを修正}
%
% 全角空白（EUCコード\texttt{0xA1A1}）はJFMで特殊なタイプに分類される可能性
% があるため、和文書体の基準を「漢」（JISコード\texttt{0x3441}）へ変更しました。
% \changes{v1.6h}{2017/08/05}{和文書体の基準を全角空白から「漢」に変更}
% \changes{v1.6u}{2019/09/29}{Make \cs{adjustbaseline} robust}
%    \begin{macrocode}
\newbox\adjust@box
\newdimen\adjust@dimen
%    \end{macrocode}
%
%    \begin{macrocode}
%</plcore>
%<platexrelease|trace>\plIncludeInRelease{2019/10/01}{\adjustbaseline}
%<platexrelease|trace>                   {Make robust}%
%<*plcore|platexrelease|trace>
\DeclareRobustCommand\adjustbaseline{%
%    \end{macrocode}
% 和文フォントの基準値を設定します。
%    \begin{macrocode}
    \setbox\adjust@box\hbox{\char\jis"3441}%"
    \cht\ht\adjust@box
    \cdp\dp\adjust@box
    \cwd\wd\adjust@box
    \cvs\normalbaselineskip
    \chs\cwd
    \cHT\cht \advance\cHT\cdp
%    \end{macrocode}
% 基準となる欧文フォントの文字を含んだボックスを作成し、
% ベースラインシフト量の計算を行ないます。
% 計算式は次のとおりです。
%
% \begin{eqnarray*}
% \textmc{ベースラインシフト量} &=&
%   \{ (\textmc{漢の深さ}) - (\textmc{Mの深さ}) \} \\
%       &&- \frac{(\textmc{漢の高さ$+$深さ})
%              - (\textmc{Mの高さ$+$深さ})}{2}
% \end{eqnarray*}
% \changes{v1.6h}{2017/08/05}{traceのコードの\texttt{\%}忘れを修正}
%
%    \begin{macrocode}
  \iftdir
    \setbox\adjust@box\hbox{\tbaselineshift\z@ M}%
    \adjust@dimen\ht\adjust@box
    \advance\adjust@dimen\dp\adjust@box
    \advance\adjust@dimen-\cHT
    \divide\adjust@dimen\tw@
    \advance\adjust@dimen\cdp
    \advance\adjust@dimen-\dp\adjust@box
    \tbaselineshift\adjust@dimen
%<trace>    \ifnum \tracingfonts>\tw@
%<trace>      \typeout{baselineshift:\the\tbaselineshift}%
%<trace>    \fi
  \fi}
%</plcore|platexrelease|trace>
%<platexrelease|trace>\plEndIncludeInRelease
%<platexrelease|trace>\plIncludeInRelease{2017/07/29}{\adjustbaseline}
%<platexrelease|trace>                   {Change zenkaku reference}%
%<platexrelease|trace>\def\adjustbaseline{%
%<platexrelease|trace>    \setbox\adjust@box\hbox{\char\jis"3441}%"
%<platexrelease|trace>    \cht\ht\adjust@box
%<platexrelease|trace>    \cdp\dp\adjust@box
%<platexrelease|trace>    \cwd\wd\adjust@box
%<platexrelease|trace>    \cvs\normalbaselineskip
%<platexrelease|trace>    \chs\cwd
%<platexrelease|trace>    \cHT\cht \advance\cHT\cdp
%<platexrelease|trace>  \iftdir
%<platexrelease|trace>    \setbox\adjust@box\hbox{\tbaselineshift\z@ M}%
%<platexrelease|trace>    \adjust@dimen\ht\adjust@box
%<platexrelease|trace>    \advance\adjust@dimen\dp\adjust@box
%<platexrelease|trace>    \advance\adjust@dimen-\cHT
%<platexrelease|trace>    \divide\adjust@dimen\tw@
%<platexrelease|trace>    \advance\adjust@dimen\cdp
%<platexrelease|trace>    \advance\adjust@dimen-\dp\adjust@box
%<platexrelease|trace>    \tbaselineshift\adjust@dimen
%<*trace>
%<platexrelease|trace>    \ifnum \tracingfonts>\tw@
%<platexrelease|trace>      \typeout{baselineshift:\the\tbaselineshift}%
%<platexrelease|trace>    \fi
%</trace>
%<platexrelease|trace>  \fi}
%<platexrelease|trace>\expandafter \let \csname adjustbaseline \endcsname \@undefined
%<platexrelease|trace>\plEndIncludeInRelease
%<platexrelease|trace>\plIncludeInRelease{0000/00/00}{\adjustbaseline}
%<platexrelease|trace>                   {ASCII Corporation original}%
%<platexrelease|trace>\def\adjustbaseline{%
%<platexrelease|trace>    \setbox\adjust@box\hbox{\char\euc"A1A1}%"
%<platexrelease|trace>    \cht\ht\adjust@box
%<platexrelease|trace>    \cdp\dp\adjust@box
%<platexrelease|trace>    \cwd\wd\adjust@box
%<platexrelease|trace>    \cvs\normalbaselineskip
%<platexrelease|trace>    \chs\cwd
%<platexrelease|trace>    \cHT\cht \advance\cHT\cdp
%<platexrelease|trace>  \iftdir
%<platexrelease|trace>    \setbox\adjust@box\hbox{\tbaselineshift\z@ M}%
%<platexrelease|trace>    \adjust@dimen\ht\adjust@box
%<platexrelease|trace>    \advance\adjust@dimen\dp\adjust@box
%<platexrelease|trace>    \advance\adjust@dimen-\cHT
%<platexrelease|trace>    \divide\adjust@dimen\tw@
%<platexrelease|trace>    \advance\adjust@dimen\cdp
%<platexrelease|trace>    \advance\adjust@dimen-\dp\adjust@box
%<platexrelease|trace>    \tbaselineshift\adjust@dimen
%<*trace>
%<platexrelease|trace>    \ifnum \tracingfonts>\tw@
%<platexrelease|trace>      \typeout{baselineshift:\the\tbaselineshift}
%<platexrelease|trace>    \fi
%</trace>
%<platexrelease|trace>  \fi}
%<platexrelease|trace>\expandafter \let \csname adjustbaseline \endcsname \@undefined
%<platexrelease|trace>\plEndIncludeInRelease
%<*plcore>
%    \end{macrocode}
% \end{macro}
%
%
% \subsubsection{エンコードの指定}
% \begin{macro}{\romanencoding}
% \begin{macro}{\kanjiencoding}
% \begin{macro}{\fontencoding}
% 書体のエンコードを指定するコマンドです。
% |\fontencoding|コマンドは和欧文のどちらかに影響します。
% |\DeclareKanjiEncoding|で指定されたエンコードは和文エンコードとして、
% |\DeclareFontEncoding|で指定されたエンコードは欧文エンコードとして
% 認識されます。
%
% |\kanjiencoding|と|\romanencoding|は与えられた引数が、
% エンコードとして登録されているかどうかだけを確認し、
% それが和文か欧文かのチェックは行なっていません。
% そのため、高速に動作をしますが、|\kanjiencoding|に欧文エンコードを指定したり、
% 逆に|\romanencoding|に和文エンコードを指定した場合はエラーとなります。
%    \begin{macrocode}
\DeclareRobustCommand\romanencoding[1]{%
    \expandafter\ifx\csname T@#1\endcsname\relax
      \@latex@error{Encoding scheme `#1' unknown}\@eha
    \else
      \edef\f@encoding{#1}%
      \ifx\cf@encoding\f@encoding
        \let\enc@update\relax
      \else
        \let\enc@update\@@enc@update
      \fi
    \fi
}
\DeclareRobustCommand\kanjiencoding[1]{%
    \expandafter\ifx\csname T@#1\endcsname\relax
      \@latex@error{KANJI Encoding scheme `#1' unknown}\@eha
    \else
      \edef\k@encoding{#1}%
      \ifx\ck@encoding\k@encoding
         \let\kenc@update\relax
      \else
         \let\kenc@update\@@kenc@update
      \fi
    \fi
}
\DeclareRobustCommand\fontencoding[1]{%
  \edef\tmp@item{{#1}}%
  \expandafter\expandafter\expandafter
  \inlist@\expandafter\tmp@item\expandafter{\kenc@list}%
  \ifin@ \kanjiencoding{#1}\else\romanencoding{#1}\fi}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@@kenc@update}
% |\kanjiencoding|コマンドのコードからもわかるように、
% |\ck@encoding|と|\k@encoding|が異なる場合、
% |\kenc@update|コマンドは|\@@kenc@update|コマンドと等しくなります。
%
% |\@@kenc@update|コマンドは、そのエンコードでのデフォルト値を設定するための
% コマンドです。欧文用の|\@@enc@update|コマンドでは、
% \mlineplus{2}行目と\mlineplus{3}行目のような代入もしていますが、
% 和文用にはコメントにしてあります。
% これらは|\DeclareTextCommand|や|\ProvideTextCommand|などで
% エンコードごとに設定されるコマンドを使うための仕組みです。
% しかし、和文エンコードに依存するようなコマンドやマクロを作成することは、
% 現時点では、ないと思います。
%
% \changes{v1.0c}{1995/08/22}{縦横用エンコードの保存}
%    \begin{macrocode}
\def\@@kenc@update{%
%  \expandafter\let\csname\ck@encoding -cmd\endcsname\@changed@kcmd
%  \expandafter\let\csname\k@encoding-cmd\endcsname\@current@cmd
  \default@KT
  \csname T@\k@encoding\endcsname
  \csname D@\k@encoding\endcsname
  \let\kenc@update\relax
  \let\ck@encoding\k@encoding
  \edef\tmp@item{{\k@encoding}}%
  \expandafter\expandafter\expandafter
  \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
  \ifin@ \let\cy@encoding\k@encoding
  \else
    \expandafter\expandafter\expandafter
    \inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
    \ifin@ \let\ct@encoding\k@encoding
    \else
      \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha
    \fi
  \fi
}
\let\kenc@update\relax
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@changed@kcmd}
% |\@changed@cmd|の和文エンコーディングバージョン。
% \changes{v1.3n}{2004/08/10}{和文エンコーディングの切り替えを有効化}
%    \begin{macrocode}
\def\@changed@kcmd#1#2{%
   \ifx\protect\@typeset@protect
      \@inmathwarn#1%
      \expandafter\ifx\csname\ck@encoding\string#1\endcsname\relax
         \expandafter\ifx\csname ?\string#1\endcsname\relax
            \expandafter\def\csname ?\string#1\endcsname{%
               \TextSymbolUnavailable#1%
            }%
         \fi
         \global\expandafter\let
               \csname\cf@encoding \string#1\expandafter\endcsname
               \csname ?\string#1\endcsname
      \fi
      \csname\ck@encoding\string#1%
         \expandafter\endcsname
   \else
      \noexpand#1%
   \fi}
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{ファミリの指定}
% \begin{macro}{\@notkfam}
% \begin{macro}{\@notffam}
% |\fontfamily|コマンド内で使用するフラグです。
% |@notkfam|フラグは和文ファミリでなかったことを、
% |@notffam|フラグは欧文ファミリでなかったことを示します。
%
% \changes{v1.2}{1995/11/21}{\cs{fontfamily}コマンド用のフラグ追加}
%    \begin{macrocode}
\newif\if@notkfam
\newif\if@notffam
%    \end{macrocode}
% \changes{v1.3m}{2004/06/14}{\cs{fontfamily}コマンド内部フラグ変更}
%    \begin{macrocode}
\newif\if@tempswz
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
%
% \begin{macro}{\romanfamily}
% \begin{macro}{\kanjifamily}
% \begin{macro}{\fontfamily}
% 書体のファミリを指定するコマンドです。
%
% |\kanjifamily|と|\romanfamily|は与えられた引数が、
% 和文あるいは欧文のファミリとして正しいかのチェックは行なっていません。
% そのため、高速に動作をしますが、|\kanjifamily|に欧文ファミリを指定したり、
% 逆に|\romanfamily|に和文ファミリを指定した場合は、エラーとなり、
% 代用フォントかエラーフォントが使われます。
%    \begin{macrocode}
\DeclareRobustCommand\romanfamily[1]{\edef\f@family{#1}}
\DeclareRobustCommand\kanjifamily[1]{\edef\k@family{#1}}
%    \end{macrocode}
%
% |\fontfamily|は、指定された値によって、和文ファミリか欧文ファミリ、
% \emph{あるいは両方}のファミリを切り替えます。
% 和欧文ともに無効なファミリ名が指定された場合は、和欧文ともに代替書体が
% 使用されます。
%
% 引数が|\rmfamily|のような名前で与えられる可能性があるため、
% まず、これを展開したものを作ります。
%
% また、和文ファミリと欧文ファミリのそれぞれになかったことを示すフラグを
% 偽にセットします。
%
% \changes{v1.2}{1995/11/21}{代用フォントが使われないバグを修正}
% \changes{v1.3m}{2004/06/14}{\cs{fontfamily}コマンド内部フラグ変更}
% \changes{v1.3o}{2005/01/04}{\cs{fontfamily}中のフラグ修正}
%    \begin{macrocode}
\DeclareRobustCommand\fontfamily[1]{%
  \edef\tmp@item{{#1}}%
  \@notkfamfalse
  \@notffamfalse
%    \end{macrocode}
% 次に、この引数が|\kfam@list|に登録されているかどうかを調べます。
% 登録されていれば、|\k@family|にその値を入れます。
%    \begin{macrocode}
  \expandafter\expandafter\expandafter
  \inlist@\expandafter\tmp@item\expandafter{\kfam@list}%
  \ifin@ \edef\k@family{#1}%
%    \end{macrocode}
% そうでないときは、|\notkfam@list|に登録されているかどうかを調べます。
% 登録されていれば、この引数は和文ファミリではありませんので、
% |\@notkfam|フラグを真にして、欧文ファミリのルーチンに移ります。
%
% このとき、|\ffam@list|を調べるのではないことに注意をしてください。
% |\ffam@list|を調べ、これにないファミリを和文ファミリであるとすると、
% たとえば、欧文ナールファミリが定義されているけれども、和文ナールファミリ
% が未定義の場合、|\fontfamily{nar}|という指定は、|nar|が|\ffam@list|にだけ、
% 登録されているため、和文書体をナールにすることができません。
%
% 逆に、|\kfam@list|に登録されていないからといって、|\k@family|に|nar|を設定
% すると、|cmr|のようなファミリも|\k@family|に設定される可能性があります。
% したがって、「欧文でない」を明示的に示す|\notkfam@list|を見る必要があります。
%    \begin{macrocode}
  \else
    \expandafter\expandafter\expandafter
    \inlist@\expandafter\tmp@item\expandafter{\notkfam@list}%
    \ifin@ \@notkfamtrue
%    \end{macrocode}
% |\notkfam@list|に登録されていない場合は、
% フォント定義ファイルが存在するかどうかを調べます。
% ファイルが存在する場合は、|\k@family|を変更します。
% ファイルが存在しない場合は、|\notkfam@list|に登録します。
%
% |\kenc@list|に登録されているエンコードと、指定された和文ファミリの
% 組合せのフォント定義ファイルが存在する場合は、|\k@family|に指定された
% 値を入れます。
% \changes{v1.3c}{1997/04/24}%
%    {フォント定義ファイル名を小文字に変換してから探すようにした。}
% \changes{v1.3e}{1997/07/10}{fdファイル名の小文字化が効いていなかったのを
%    修正。ありがとう、大岩さん}
%    \begin{macrocode}
    \else
      \@tempswzfalse
      \def\fam@elt{\noexpand\fam@elt}%
      \message{(I search kanjifont definition file:}%
      \def\enc@elt<##1>{\message{.}%
        \edef\reserved@a{\lowercase{\noexpand\IfFileExists{##1#1.fd}}}%
        \reserved@a{\@tempswztrue}{}\relax}%
      \kenc@list
      \message{)}%
      \if@tempswz
        \edef\k@family{#1}%
%    \end{macrocode}
% つぎの部分が実行されるのは、和文ファミリとして認識できなかった場合です。
% この場合は、|\@notkfam|フラグを真にして、|\notkfam@list|に登録します。
% \changes{v1.1b}{1995/05/10}{\cs{notkfam@list}に、
%   エンコードごとに登録されてしまうのを修正した。欧文についても同様。}
%    \begin{macrocode}
      \else
        \@notkfamtrue
        \xdef\notkfam@list{\notkfam@list\fam@elt<#1>}%
      \fi
%    \end{macrocode}
% |\kfam@list|と|\notkfam@list|に登録されているかどうかを
% 調べた|\ifin@|を閉じます。
%    \begin{macrocode}
  \fi\fi
%    \end{macrocode}
% 欧文ファミリの場合も、和文ファミリと同様の方法で確認をします。
% \changes{v1.3e}{1997/07/10}{fdファイル名の小文字化が効いていなかったのを修正}
%    \begin{macrocode}
  \expandafter\expandafter\expandafter
  \inlist@\expandafter\tmp@item\expandafter{\ffam@list}%
  \ifin@ \edef\f@family{#1}\else
    \expandafter\expandafter\expandafter
    \inlist@\expandafter\tmp@item\expandafter{\notffam@list}%
    \ifin@ \@notffamtrue \else
      \@tempswzfalse
      \def\fam@elt{\noexpand\fam@elt}%
      \message{(I search font definition file:}%
      \def\enc@elt<##1>{\message{.}%
        \edef\reserved@a{\lowercase{\noexpand\IfFileExists{##1#1.fd}}}%
        \reserved@a{\@tempswztrue}{}\relax}%
      \fenc@list
      \message{)}%
      \if@tempswz
        \edef\f@family{#1}%
      \else
        \@notffamtrue
        \xdef\notffam@list{\notffam@list\fam@elt<#1>}%
      \fi
  \fi\fi
%    \end{macrocode}
% 最後に、指定された文字列が、和文ファミリと欧文ファミリのいずれか、
% あるいは両方として認識されたかどうかを確認します。
%
% どちらとも認識されていない場合は、ファミリの指定ミスですので、
% 代用フォントを使うために、故意に指定された文字列をファミリに
% 入れます。
%    \begin{macrocode}
  \if@notkfam\if@notffam
      \edef\k@family{#1}\edef\f@family{#1}%
  \fi\fi}
%</plcore>
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
% \subsubsection{シリーズの指定（新NFSS対応）}
% \begin{macro}{\pltx@latex@level}
% コミュニティ版\pLaTeXe~2020-02-02での変更：ここから
% \LaTeXe~2020-02-02で拡張された新しいNFSSへの対応コードが始まります。
% \pLaTeXe{}のコードを本家\LaTeXe{}の機能に応じて切り替えます。
%
% \LaTeXe~2020-02-02のうち、
% patch level~2には |latex3/latex2e#277| のバグがあり、
% ^^A    →対策として |\if@forced@series| が追加された
% patch level~4には |latex3/latex2e#293| のバグがありました。
% ^^A    →対策として |\series@maybe@drop@one@m| が追加された
% さらに開発版\LaTeXe{}では |latex3/latex2e#291| の対策も施されています。
% ^^A    →対策として |\series@maybe@drop@one@m@x| が追加された
% \changes{v1.6z}{2020/02/28}{\cs{series@maybe@drop@one@m}の存在確認}
% \changes{v1.7}{2020/03/05}{\cs{series@maybe@drop@one@m@x}の存在確認}
%    \begin{macrocode}
%<*plcore|platexrelease>
\ifx\fontseriesforce\@undefined      % old
        \def\pltx@latex@level{0}
\else                                % 2020-02-02
  \ifx\@forced@seriestrue\@undefined
    \ifnum\patch@level<1\relax                  % patch level 0
        \def\pltx@latex@level{1}% use \@reserveda
    \else                                       % patch level 1, 2
        \def\pltx@latex@level{2}
    \fi
  \else
    \ifx\series@maybe@drop@one@m\@undefined     % patch level 3, 4
        \def\pltx@latex@level{3}
    \else
      \ifx\series@maybe@drop@one@m@x\@undefined % patch level 5
        \def\pltx@latex@level{4}
        % anticipating LaTeX2e 'develop' branch (after 23b7244)
        % this temporary code will be removed in the future
        %\let\series@maybe@drop@one@m@x\series@maybe@drop@one@m
        %\def\series@maybe@drop@one@m#1{%
        %  \expandafter\series@maybe@drop@one@m@x\expandafter{#1}}
      \else
        \def\pltx@latex@level{5}
      \fi
    \fi
  \fi
\fi
%    \end{macrocode}
% ここでは、最低限どのバージョンの\LaTeXe{}上でもフォーマット生成が
% 成功するように|\catcode|トリックを使います。
% ^^A    → |\if@forced@series|フラグを隠す必要があるため面倒
% 現在の主要なコードは
% \begin{itemize}
%  \item \LaTeXe~2019-10-01 patch level~3以前（従来の\NFSS2）
%  \item \LaTeXe{}の開発版（最新のdevelopブランチ）
% \end{itemize}
% 向けに最適化しており、他のバージョンへの対処は後回しにします。
% ^^A    → 将来的に削除しやすいように
%    \begin{macrocode}
\edef\pltx@reset@catcode@trick{\catcode`\noexpand\~=\the\catcode`\~\relax}
\def\pltx@temp@catcode@ix{\catcode`\~=9\relax}
\def\pltx@temp@catcode@xiv{\catcode`\~=14\relax}
\ifnum\pltx@latex@level<3\relax
  \pltx@temp@catcode@xiv % hide if-tokens
\else
  \pltx@temp@catcode@ix  % reveal if-tokens
\fi
%</plcore|platexrelease>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\delayed@k@adjustment}
% \LaTeXe~2021-06-01で追加された|\delayed@f@adjustment|の和文版です。
% \changes{v1.7k}{2021/01/10}{Distangle series and shape update (latex2e/444)
%    (sync with ltfssaxes.dtx 2020/12/22 v1.0h)}
%    \begin{macrocode}
%<*plcore|platexrelease>
\ifx\delayed@f@adjustment\@undefined   % old
  \let\delayed@k@adjustment\@undefined
\else                                  % 2021-06-01
  \let\delayed@k@adjustment\@empty
\fi
%</plcore|platexrelease>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\if@forced@series@kanji}
% \LaTeXe~2020-02-02 PL3で追加された|\if@forced@series|フラグの和文版です。
% \changes{v1.7n}{2021/06/27}{和欧文のforced@seriesフラグを分離}
%    \begin{macrocode}
%<*plcore|platexrelease>
\ifx\@forced@seriestrue\@undefined % old
  \let\@forced@series@kanjifalse\@undefined
  \let\@forced@series@kanjitrue\@undefined
\else                              % 2020-02-02 PL3 or later
  \expandafter\newif\csname if@forced@series@kanji\endcsname
\fi
%</plcore|platexrelease>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\romanseries}
% \begin{macro}{\kanjiseries}
% \begin{macro}{\fontseries}
% 書体のシリーズを指定するコマンドです。
% |\fontseries|コマンドは和欧文の両方に影響します。
%
% 2019年までは無条件に指定されたとおりのシリーズを選択していましたが、
% \LaTeXe~2020-02-02以降では、|\DeclareFontSeriesChangeRule|によって
% 宣言された「シリーズ更新規則」に基づきシリーズを選択します。
%
% \LaTeXe~2021-06-01以降では、シリーズの更新を|\selectfont|まで遅らせます。
% \changes{v1.7k}{2021/01/10}{Distangle series and shape update (latex2e/444)
%    (sync with ltfssaxes.dtx 2020/12/22 v1.0h)}
%    \begin{macrocode}
%<*plcore|platexrelease>
\ifx\fontseriesforce\@undefined  % old
\DeclareRobustCommand\romanseries[1]{\edef\f@series{#1}}
\DeclareRobustCommand\kanjiseries[1]{\edef\k@series{#1}}
\DeclareRobustCommand\fontseries[1]{\kanjiseries{#1}\romanseries{#1}}
\else                            % 2020-02-02
\ifx\delayed@f@adjustment\@undefined % --- for <= 2020-10-01 BEGIN
\DeclareRobustCommand\romanseries[1]{\@forced@seriesfalse\merge@font@series{#1}}
\DeclareRobustCommand\kanjiseries[1]{\@forced@series@kanjifalse\merge@kanji@series{#1}}
\DeclareRobustCommand\fontseries[1]{\kanjiseries{#1}\romanseries{#1}}
\else        % --- for <= 2020-10-01 END & for >= 2021-06-01 BEGIN
\DeclareRobustCommand\romanseries[1]{\@forced@seriesfalse
    \expandafter\def\expandafter\delayed@f@adjustment\expandafter
        {\delayed@f@adjustment\delayed@merge@font@series{#1}}}
\DeclareRobustCommand\kanjiseries[1]{\@forced@series@kanjifalse
    \expandafter\def\expandafter\delayed@k@adjustment\expandafter
        {\delayed@k@adjustment\delayed@merge@kanji@series{#1}}}
\DeclareRobustCommand\fontseries[1]{\kanjiseries{#1}\romanseries{#1}}
\fi          % --- for >= 2021-06-01 END
\fi
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\romanseriesforce}
% \begin{macro}{\kanjiseriesforce}
% \begin{macro}{\fontseriesforce}
% 無条件にシリーズを変更します。
% \changes{v1.6v}{2020/02/01}{New commands \cs{fontseriesforce} etc.
%    (sync with ltfssaxes.dtx 2019/12/16 v1.0a)}
% \changes{v1.6y}{2020/02/24}{Switch \cs{if@forced@series} added
%    (sync with ltfssaxes.dtx 2020/02/18 v1.0c)}
%    \begin{macrocode}
\ifx\fontseriesforce\@undefined  % old
\let\romanseriesforce\@undefined
\let\kanjiseriesforce\@undefined
\else                            % 2020-02-02
\ifx\delayed@f@adjustment\@undefined % --- for <= 2020-10-01 BEGIN
\DeclareRobustCommand\romanseriesforce[1]{\@forced@seriestrue\edef\f@series{#1}}
\DeclareRobustCommand\kanjiseriesforce[1]{\@forced@series@kanjitrue\edef\k@series{#1}}
\DeclareRobustCommand\fontseriesforce[1]{\kanjiseriesforce{#1}\romanseriesforce{#1}}
\else        % --- for <= 2020-10-01 END & for >= 2021-06-01 BEGIN
\DeclareRobustCommand\romanseriesforce[1]{\@forced@seriestrue
    \expandafter\def\expandafter\delayed@f@adjustment\expandafter
      {\delayed@f@adjustment\edef\f@series{#1}}}
\DeclareRobustCommand\kanjiseriesforce[1]{\@forced@series@kanjitrue
    \expandafter\def\expandafter\delayed@k@adjustment\expandafter
      {\delayed@k@adjustment\edef\k@series{#1}}}
\DeclareRobustCommand\fontseriesforce[1]{\kanjiseriesforce{#1}\romanseriesforce{#1}}
\fi          % --- for >= 2021-06-01 END
\fi
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\merge@kanji@series}
% \begin{macro}{\merge@kanji@series@}
% \begin{macro}{\set@target@series@kanji}
% \cs{merge@font@series}の和文版です。
% \changes{v1.6z}{2020/02/28}{Drop ``m'' only in a specific set of values
%    (sync with ltfssaxes.dtx 2020/02/27 v1.0d)}
%    \begin{macrocode}
\ifx\fontseriesforce\@undefined  % old
\let\merge@kanji@series\@undefined
\let\merge@kanji@series@\@undefined
\let\set@target@series@kanji\@undefined
\else                            % 2020-02-02
\def\merge@kanji@series#1{%
  \expandafter\expandafter\expandafter
  \merge@kanji@series@
    \csname series@\k@series @#1\endcsname
    {#1}%
    \@nil
}
\def\merge@kanji@series@#1#2#3\@nil{%
  \def\reserved@a{#3}%
  \ifx\reserved@a\@empty
%    \end{macrocode}
% シリーズ更新規則がない場合：|#2|が要求シリーズであり、これを使う。
%    \begin{macrocode}
    \set@target@series@kanji{#2}%
  \else
%^^A [TODO] BEGIN
%^^A   LaTeX2e 2021-06-01 では |\maybe@load@fontshape| は削除される。
%^^A     理由：処理が |\selectfont| まで遅れるので不要とのこと。
%^^A   しかし、なぜか ltfssaxes.dtx で rollback の対処が無いような？
    \begingroup\let\f@encoding\k@encoding\let\f@family\k@family
      \maybe@load@fontshape\endgroup
%^^A [TODO] END
    \edef\reserved@a{\k@encoding /\k@family /#1/\k@shape}%
     \ifcsname \reserved@a \endcsname
%    \end{macrocode}
% シリーズ更新規則に基づく新シリーズ |#1| が利用可能：
%    \begin{macrocode}
       \set@target@series@kanji{#1}%
    \else
       \ifcsname \k@encoding /\k@family /#2/\k@shape \endcsname
%    \end{macrocode}
% シリーズ更新規則に基づく代替シリーズ |#2| が利用可能：
%    \begin{macrocode}
         \set@target@series@kanji{#2}%
         {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}%
       \else
%    \end{macrocode}
% いずれも利用不可：要求シリーズ |#3| を使う。
%    \begin{macrocode}
         \set@target@series@kanji{#3}%
         {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}%
       \fi
    \fi
  \fi
}
\def\set@target@series@kanji#1{%
    \edef\k@series{#1}%
    \series@maybe@drop@one@m\k@series\k@series
}
\fi
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\merge@kanji@series@without@substitution}
% \begin{macro}{\merge@kanji@series@without@substitution@}
% \begin{macro}{\delayed@merge@kanji@series}
% \cs{merge@font@series@without@substitution}の和文版です。
% \changes{v1.7k}{2021/01/10}{Distangle series and shape update (latex2e/444)
%    (sync with ltfssaxes.dtx 2020/12/22 v1.0h)}
%    \begin{macrocode}
\ifx\merge@font@series@without@substitution\@undefined % old
\let\merge@kanji@series@without@substitution\@undefined
\let\merge@kanji@series@without@substitution@\@undefined
\let\delayed@merge@kanji@series\@undefined
\else                                                  % 2021-06-01
\def\merge@kanji@series@without@substitution#1{%
  \expandafter\expandafter\expandafter
  \merge@kanji@series@without@substitution@
    \csname series@\k@series @#1\endcsname
    {#1}%
    \@nil
}
\def\merge@kanji@series@without@substitution@#1#2#3\@nil{%
  \def\reserved@a{#3}%
  \ifx\reserved@a\@empty
    \set@target@series@kanji{#2}%
  \else
    \set@target@series@kanji{#1}%
  \fi
}
\let\delayed@merge@kanji@series\merge@kanji@series@without@substitution
\fi
%</plcore|platexrelease>
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
% \subsubsection{シェイプの指定（新NFSS対応）}
% コミュニティ版\pLaTeXe~2020-04-12での変更：
% 従来は、|\itshape|などの命令を実行すると
%\begin{verbatim}
% LaTeX Font Warning: Font shape `JT1/mc/m/it' undefined
% (Font)              using `JT1/mc/m/n' instead on input line 4.
% LaTeX Font Warning: Font shape `JY1/mc/m/it' undefined
% (Font)              using `JY1/mc/m/n' instead on input line 4.
%\end{verbatim}
% のような警告を発していました。これは以下の理由によります。
% \begin{itemize}
%  \item \LaTeXe{}が定義する|\itshape|などのシェイプ変更命令は
%    内部で|\fontshape|を呼び出す。
%  \item \pLaTeXe{}では、|\fontshape|を欧文書体だけでなく
%    和文書体も変更するように再定義する。
%  \item しかし、和文書体のシェイプはほとんど``n''しか用いられず、
%    |\DeclareFontShape|での定義も``n''しか与えられないことが多い。
%  \item 結果的に、欧文書体のシェイプを変更するつもりでも
%    「和文書体のシェイプが未定義」という警告が出てしまう。
% \end{itemize}
% そこで、和文書体のシェイプが未定義の場合は
% |\fontshape|及び|\fontshapeforce|が和文書体には影響せず、
% 欧文書体のシェイプのみを変更するように改良します。
%
% \begin{macro}{\if@shape@roman@kanji}
% 和欧文の両方に影響しようとする|\fontshape|コマンド実行中に
% 真になるフラグです。|\fontshapeforce|は実装が単純なので、
% このフラグは使っていません。
% \changes{v1.7c}{2020/03/15}{\cs{fontshape}/\cs{fontshapeforce}が
%    和文シェイプ未定義の場合は\cs{k@shape}を更新しないように変更}
%    \begin{macrocode}
%<*plcore|platexrelease>
\ifx\@shape@roman@kanjitrue\@undefined % just in case
  \expandafter\newif\csname if@shape@roman@kanji\endcsname
\fi
%</plcore|platexrelease>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\romanshape}
% \begin{macro}{\kanjishape}
% \begin{macro}{\fontshape}
% 書体のシェイプを指定するコマンドです。
% |\fontshape|コマンドは和欧文の両方に影響します。
%
% 2019年までは無条件に指定されたとおりのシェイプを選択していましたが、
% \LaTeXe~2020-02-02以降では、|\DeclareFontShapeChangeRule|によって
% 宣言された「シェイプ更新規則」に基づきシェイプを選択します。
%
% \LaTeXe~2021-06-01以降では、シェイプの更新を|\selectfont|まで遅らせます。
% \changes{v1.7k}{2021/01/10}{Distangle series and shape update (latex2e/444)
%    (sync with ltfssaxes.dtx 2020/12/22 v1.0h)}
% \changes{v1.7m}{2021/06/04}{latex2e/444対応：\cs{@shape@roman@kanji}フラグ
%    を\cs{delayed@k@adjustment}の中で変更/復帰する}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2020/04/12}{\fontshape}
%<platexrelease>                   {No \k@shape update if unavailable}%
%<*plcore|platexrelease>
\ifx\fontshapeforce\@undefined   % old
\DeclareRobustCommand\romanshape[1]{\edef\f@shape{#1}}
\DeclareRobustCommand\kanjishape[1]{\edef\k@shape{#1}}
\DeclareRobustCommand\fontshape[1]{%
  \set@safe@kanji@shape{#1}{}%
  \edef\f@shape{#1}%
}
\else                            % 2020-02-02
\ifx\delayed@f@adjustment\@undefined % --- for <= 2020-10-01 BEGIN
\DeclareRobustCommand\romanshape[1]{\merge@font@shape{#1}}
\DeclareRobustCommand\kanjishape[1]{\merge@kanji@shape{#1}}
\DeclareRobustCommand\fontshape[1]{%
  \@shape@roman@kanjitrue
  \kanjishape{#1}\romanshape{#1}%
  \@shape@roman@kanjifalse}
\else        % --- for <= 2020-10-01 END & for >= 2021-06-01 BEGIN
\DeclareRobustCommand\romanshape[1]{%
    \expandafter\def\expandafter\delayed@f@adjustment\expandafter
        {\delayed@f@adjustment\delayed@merge@font@shape{#1}}}
\DeclareRobustCommand\kanjishape[1]{%
    \expandafter\def\expandafter\delayed@k@adjustment\expandafter
        {\delayed@k@adjustment\delayed@merge@kanji@shape{#1}}}
\DeclareRobustCommand\fontshape[1]{%
    \romanshape{#1}%
    \expandafter\def\expandafter\delayed@k@adjustment\expandafter
        {\delayed@k@adjustment\@shape@roman@kanjitrue
         \delayed@merge@kanji@shape{#1}\@shape@roman@kanjifalse}}
\fi          % --- for >= 2021-06-01 END
\fi
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\fontshape}
%<platexrelease>                   {ASCII Corporation / TeXJP original}%
%<platexrelease>\ifx\fontshapeforce\@undefined   % old
%<platexrelease>\DeclareRobustCommand\romanshape[1]{\edef\f@shape{#1}}
%<platexrelease>\DeclareRobustCommand\kanjishape[1]{\edef\k@shape{#1}}
%<platexrelease>\DeclareRobustCommand\fontshape[1]{\kanjishape{#1}\romanshape{#1}}
%<platexrelease>\else                            % 2020-02-02
%<platexrelease>\DeclareRobustCommand\romanshape[1]{\merge@font@shape{#1}}
%<platexrelease>\DeclareRobustCommand\kanjishape[1]{\merge@kanji@shape{#1}}
%<platexrelease>\DeclareRobustCommand\fontshape[1]{\kanjishape{#1}\romanshape{#1}}
%<platexrelease>\fi
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\romanshapeforce}
% \begin{macro}{\kanjishapeforce}
% \begin{macro}{\fontshapeforce}
% 無条件にシェイプを変更します。
% \changes{v1.6v}{2020/02/01}{New commands \cs{fontshapeforce} etc.
%    (sync with ltfssaxes.dtx 2019/12/16 v1.0a)}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2020/04/12}{\fontshapeforce}
%<platexrelease>                   {No \k@shape update if unavailable}%
%<*plcore|platexrelease>
\ifx\fontshapeforce\@undefined   % old
\let\romanshapeforce\@undefined
\let\kanjishapeforce\@undefined
\else                            % 2020-02-02
\ifx\delayed@f@adjustment\@undefined % --- for <= 2020-10-01 BEGIN
\DeclareRobustCommand\romanshapeforce[1]{\edef\f@shape{#1}}
\DeclareRobustCommand\kanjishapeforce[1]{\edef\k@shape{#1}}
\DeclareRobustCommand\fontshapeforce[1]{%
  \set@safe@kanji@shape{#1}{}%
  \edef\f@shape{#1}%
}
\else        % --- for <= 2020-10-01 END & for >= 2021-06-01 BEGIN
\DeclareRobustCommand\romanshapeforce[1]{%
    \expandafter\def\expandafter\delayed@f@adjustment\expandafter
        {\delayed@f@adjustment\edef\f@shape{#1}}}
\DeclareRobustCommand\kanjishapeforce[1]{%
    \expandafter\def\expandafter\delayed@k@adjustment\expandafter
        {\delayed@k@adjustment\edef\k@shape{#1}}}
\DeclareRobustCommand\fontshapeforce[1]{%
    \expandafter\def\expandafter\delayed@k@adjustment\expandafter
        {\delayed@k@adjustment\set@safe@kanji@shape{#1}{}}%
    \expandafter\def\expandafter\delayed@f@adjustment\expandafter
        {\delayed@f@adjustment\edef\f@shape{#1}}%
}
\fi          % --- for >= 2021-06-01 END
\fi
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\fontshapeforce}
%<platexrelease>                   {ASCII Corporation / TeXJP original}%
%<platexrelease>\ifx\fontshapeforce\@undefined   % old
%<platexrelease>\let\romanshapeforce\@undefined
%<platexrelease>\let\kanjishapeforce\@undefined
%<platexrelease>\else                            % 2020-02-02
%<platexrelease>\DeclareRobustCommand\romanshapeforce[1]{\edef\f@shape{#1}}
%<platexrelease>\DeclareRobustCommand\kanjishapeforce[1]{\edef\k@shape{#1}}
%<platexrelease>\DeclareRobustCommand\fontshapeforce[1]{\kanjishapeforce{#1}\romanshapeforce{#1}}
%<platexrelease>\fi
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\merge@kanji@shape}
% \begin{macro}{\merge@kanji@shape@}
% \cs{merge@font@shape}の和文版です。
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2020/04/12}{\merge@kanji@shape@}
%<platexrelease>                   {No \k@shape update if unavailable}%
%<*plcore|platexrelease>
\ifx\fontseriesforce\@undefined  % old
\let\merge@kanji@shape\@undefined
\let\merge@kanji@shape@\@undefined
\else                            % 2020-02-02
\def\merge@kanji@shape#1{%
  \expandafter\expandafter\expandafter
  \merge@kanji@shape@
    \csname shape@\k@shape @#1\endcsname
    {#1}%
    \@nil
}
\def\merge@kanji@shape@#1#2#3\@nil{%
  \def\reserved@a{#3}%
  \ifx\reserved@a\@empty
%    \end{macrocode}
% シェイプ更新規則がない場合：|#2|が要求シェイプである。\\
% |\fontshape|の下請けなら、|#2|が利用可能かどうか予めチェックする。\\
% |\kanjishape|の下請けなら、|#2|を使う。
%    \begin{macrocode}
   \if@shape@roman@kanji
    \set@safe@kanji@shape{#2}{}%
   \else
    \edef\k@shape{#2}%
   \fi
  \else
%^^A [TODO] BEGIN
%^^A   LaTeX2e 2021-06-01 では |\maybe@load@fontshape| は削除される。
%^^A     理由：処理が |\selectfont| まで遅れるので不要とのこと。
%^^A   しかし、なぜか ltfssaxes.dtx で rollback の対処が無いような？
    \begingroup\let\f@encoding\k@encoding\let\f@family\k@family
      \maybe@load@fontshape\endgroup
%^^A [TODO] END
    \edef\reserved@a{\k@encoding /\k@family /\k@series/#1}%
     \ifcsname \reserved@a\endcsname
%    \end{macrocode}
% シェイプ更新規則に基づく新シェイプ |#1| が利用可能：
%    \begin{macrocode}
       \edef\k@shape{#1}%
    \else
       \ifcsname \k@encoding /\k@family /\k@series/#2\endcsname
%    \end{macrocode}
% シェイプ更新規則に基づく代替シェイプ |#2| が利用可能：
%    \begin{macrocode}
         \edef\k@shape{#2}%
         {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}%
       \else
%    \end{macrocode}
% いずれも利用不可：要求シェイプ |#3| について\\
% |\fontshape|の下請けなら、|#3|が利用可能かどうか予めチェックする。\\
% |\kanjishape|の下請けなら、|#3|を使う。
%    \begin{macrocode}
        \if@shape@roman@kanji
         \set@safe@kanji@shape{#3}%
         {{\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}}%
        \else
         \edef\k@shape{#3}%
         {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}%
        \fi
       \fi
    \fi
  \fi
}
\fi
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\merge@kanji@shape@}
%<platexrelease>                   {ASCII Corporation / TeXJP original}%
%<platexrelease>\ifx\fontseriesforce\@undefined  % old
%<platexrelease>\let\merge@kanji@shape\@undefined
%<platexrelease>\let\merge@kanji@shape@\@undefined
%<platexrelease>\else                            % 2020-02-02
%<platexrelease>\def\merge@kanji@shape#1{%
%<platexrelease>  \expandafter\expandafter\expandafter
%<platexrelease>  \merge@kanji@shape@
%<platexrelease>    \csname shape@\k@shape @#1\endcsname
%<platexrelease>    {#1}%
%<platexrelease>    \@nil
%<platexrelease>}
%<platexrelease>\def\merge@kanji@shape@#1#2#3\@nil{%
%<platexrelease>  \def\reserved@a{#3}%
%<platexrelease>  \ifx\reserved@a\@empty
%<platexrelease>    \edef\k@shape{#2}%
%<platexrelease>  \else
%<platexrelease>    \begingroup\let\f@encoding\k@encoding\let\f@family\k@family
%<platexrelease>      \maybe@load@fontshape\endgroup
%<platexrelease>    \edef\reserved@a{\k@encoding /\k@family /\k@series/#1}%
%<platexrelease>     \ifcsname \reserved@a\endcsname
%<platexrelease>       \edef\k@shape{#1}%
%<platexrelease>    \else
%<platexrelease>       \ifcsname \k@encoding /\k@family /\k@series/#2\endcsname
%<platexrelease>         \edef\k@shape{#2}%
%<platexrelease>         {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}%
%<platexrelease>       \else
%<platexrelease>         \edef\k@shape{#3}%
%<platexrelease>         {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}%
%<platexrelease>       \fi
%<platexrelease>    \fi
%<platexrelease>  \fi
%<platexrelease>}
%<platexrelease>\fi
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\merge@kanji@shape@without@substitution}
% \begin{macro}{\merge@kanji@shape@without@substitution@}
% \begin{macro}{\delayed@merge@kanji@shape}
% \cs{merge@font@shape@without@substitution}の和文版です。
% \changes{v1.7k}{2021/01/10}{Distangle series and shape update (latex2e/444)
%    (sync with ltfssaxes.dtx 2020/12/22 v1.0h)}
%    \begin{macrocode}
%<*plcore|platexrelease>
\ifx\merge@font@shape@without@substitution\@undefined  % old
\let\merge@kanji@shape@without@substitution\@undefined
\let\merge@kanji@shape@without@substitution@\@undefined
\let\delayed@merge@kanji@shape\@undefined
\else                                                  % 2021-06-01
\def\merge@kanji@shape@without@substitution#1{%
  \expandafter\expandafter\expandafter
  \merge@kanji@shape@without@substitution@
    \csname shape@\k@shape @#1\endcsname
    {#1}%
    \@nil
}
\def\merge@kanji@shape@without@substitution@#1#2#3\@nil{%
  \def\reserved@a{#3}%
  \ifx\reserved@a\@empty
    \edef\k@shape{#2}%
  \else
    \edef\k@shape{#1}%
  \fi
}
\let\delayed@merge@kanji@shape\merge@kanji@shape@without@substitution
\fi
%</plcore|platexrelease>
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\set@safe@kanji@shape}
% \begin{macro}{\@kanji@shape@nochange@info}
% 和文シェープが利用可能かどうか予めチェックしてから設定します。
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2020/04/12}{\set@safe@kanji@shape}
%<platexrelease>                   {No \k@shape update if unavailable}%
%<*plcore|platexrelease>
\def\set@safe@kanji@shape#1#2{%
  \edef\reserved@b{\k@encoding /\k@family /\k@series/#1}%
   \ifcsname \reserved@b\endcsname
     \edef\k@shape{#1}%
     #2%
  \else
    \@kanji@shape@nochange@info{\reserved@b}%
  \fi
}
\def\@kanji@shape@nochange@info#1{%
    \@font@info{Kanji font shape `#1' undefined\MessageBreak
                No change}%
}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\set@safe@kanji@shape}
%<platexrelease>                   {ASCII Corporation original}%
%<platexrelease>\let\set@safe@kanji@shape\@undefined
%<platexrelease>\let\@kanji@shape@nochange@info\@undefined
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
%
% \subsubsection{書体の切り替え（新NFSS対応）}
% \begin{macro}{\usekanji}
% \begin{macro}{\useroman}
% \begin{macro}{\usefont}
% 書体属性を一度に指定するコマンドです。
% 和文書体には|\usekanji|を、欧文書体には|\useroman|を指定してください。
%
% |\usefont|コマンドは、第一引数で指定されるエンコードによって、
% 和文または欧文フォントを切り替えます。
% \changes{v1.6t}{2019/09/16}{Make \cs{usefont} etc. robust
%    (sync with ltfssbas.dtx 2019/08/27 v3.2d)}
% \changes{v1.6v}{2020/02/01}{Don't call \cs{fontseries} or \cs{fontshape}
%    (sync with ltfssbas.dtx 2019/12/17 v3.2e)}
% \changes{v1.7j}{2020/12/29}{Drop ``m'' for latex2e issue 453
%    (sync with ltfssbas.dtx 2020/12/10 v3.2h)}
% \changes{v1.7l}{2021/05/23}{Unconditionally switch to the requested
%    font face (latex2e/444)
%    (sync with ltfssbas.dtx 2021/04/26 v3.2i)}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2020/02/02}{\usefont}
%<platexrelease>                   {Don't call \fontseries or \fontshape}%
%<*plcore|platexrelease>
\ifx\set@target@series\@undefined    % old
\DeclareRobustCommand\usekanji[4]{\kanjiencoding{#1}%
    \edef\k@family{#2}%
    \edef\k@series{#3}%
    \edef\k@shape{#4}\selectfont
    \ignorespaces}
\DeclareRobustCommand\useroman[4]{\romanencoding{#1}%
    \edef\f@family{#2}%
    \edef\f@series{#3}%
    \edef\f@shape{#4}\selectfont
    \ignorespaces}
\else                                % 2020-02-02
\ifx\delayed@f@adjustment\@undefined % --- for <= 2020-10-01 BEGIN
\DeclareRobustCommand\usekanji[4]{\kanjiencoding{#1}%
    \edef\k@family{#2}%
    \set@target@series@kanji{#3}%
    \edef\k@shape{#4}\selectfont
    \ignorespaces}
\DeclareRobustCommand\useroman[4]{\romanencoding{#1}%
    \edef\f@family{#2}%
    \set@target@series{#3}%
    \edef\f@shape{#4}\selectfont
    \ignorespaces}
\else        % --- for <= 2020-10-01 END & for >= 2021-06-01 BEGIN
\DeclareRobustCommand\usekanji[4]{\kanjiencoding{#1}%
    \edef\k@family{#2}%
    \set@target@series@kanji{#3}%
    \edef\k@shape{#4}%
    \let\delayed@k@adjustment\@empty
    \selectfont
    \ignorespaces}
\DeclareRobustCommand\useroman[4]{\romanencoding{#1}%
    \edef\f@family{#2}%
    \set@target@series{#3}%
    \edef\f@shape{#4}%
    \let\delayed@f@adjustment\@empty
    \selectfont
    \ignorespaces}
\fi          % --- for >= 2021-06-01 END
\fi                                  % done
\DeclareRobustCommand\usefont[4]{%
  \edef\tmp@item{{#1}}%
  \expandafter\expandafter\expandafter
  \inlist@\expandafter\tmp@item\expandafter{\kenc@list}%
  \ifin@ \usekanji{#1}{#2}{#3}{#4}%
  \else\useroman{#1}{#2}{#3}{#4}%
  \fi}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2019/10/01}{\usefont}
%<platexrelease>                   {Make robust}%
%<platexrelease>\DeclareRobustCommand\usekanji[4]{%
%<platexrelease>    \kanjiencoding{#1}\kanjifamily{#2}\kanjiseries{#3}\kanjishape{#4}%
%<platexrelease>    \selectfont\ignorespaces}
%<platexrelease>\DeclareRobustCommand\useroman[4]{%
%<platexrelease>    \romanencoding{#1}\romanfamily{#2}\romanseries{#3}\romanshape{#4}%
%<platexrelease>    \selectfont\ignorespaces}
%<platexrelease>\DeclareRobustCommand\usefont[4]{%
%<platexrelease>  \edef\tmp@item{{#1}}%
%<platexrelease>  \expandafter\expandafter\expandafter
%<platexrelease>  \inlist@\expandafter\tmp@item\expandafter{\kenc@list}%
%<platexrelease>  \ifin@ \usekanji{#1}{#2}{#3}{#4}%
%<platexrelease>  \else\useroman{#1}{#2}{#3}{#4}%
%<platexrelease>  \fi}
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\usefont}
%<platexrelease>                   {ASCII Corporation original}%
%<platexrelease>\def\usekanji#1#2#3#4{%
%<platexrelease>    \kanjiencoding{#1}\kanjifamily{#2}\kanjiseries{#3}\kanjishape{#4}%
%<platexrelease>    \selectfont\ignorespaces}
%<platexrelease>\def\useroman#1#2#3#4{%
%<platexrelease>    \romanencoding{#1}\romanfamily{#2}\romanseries{#3}\romanshape{#4}%
%<platexrelease>    \selectfont\ignorespaces}
%<platexrelease>\def\usefont#1#2#3#4{%
%<platexrelease>  \edef\tmp@item{{#1}}%
%<platexrelease>  \expandafter\expandafter\expandafter
%<platexrelease>  \inlist@\expandafter\tmp@item\expandafter{\kenc@list}%
%<platexrelease>  \ifin@ \usekanji{#1}{#2}{#3}{#4}%
%<platexrelease>  \else\useroman{#1}{#2}{#3}{#4}%
%<platexrelease>  \fi}
%<platexrelease>\expandafter \let \csname usekanji \endcsname \@undefined
%<platexrelease>\expandafter \let \csname useroman \endcsname \@undefined
%<platexrelease>\expandafter \let \csname usefont \endcsname \@undefined
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
% \begin{macro}{\normalfont}
% 書体をデフォルト値にするコマンドです。
% 和文書体もデフォルト値になるように再定義しています。
% ただし高速化のため、|\usekanji|と|\useroman|を展開し、
% |\selectfont|を一度しか呼び出さないようにしています。
%
% \LaTeXe~2020-02-02 patch level~2で新設されたフック
% |\@defaultfamilyhook|を使うことで、元の定義を上書きする必要が
% なくなりました。（注意：アスキー版の末尾にあった
% |\ignorespaces|を削除することで、元の\LaTeXe{}と互換に
% なりました。ltfssini.dtx 1995/10/16 v3.0fの変更も参考。）
% \changes{v1.7a}{2020/03/06}{\cs{@defaultfamilyhook}を活用
%    (sync with ltfssini.dtx 2020/02/10 v3.1h)}
%
% \LaTeXe~2020-10-01では|\AddToHook|が使えます。
% \changes{v1.7h}{2020/09/28}{New hook management interface
%    (sync with ltfssini.dtx 2020/08/21 v3.2b)}
% \changes{v1.7i}{2020/10/07}{フックシステムの有無判定を改良}
% \changes{v1.7l}{2021/05/23}{Unconditionally switch to the requested
%    font face (latex2e/444)
%    (sync with ltfssini.dtx 2021/04/26 v3.2h)}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2020/04/12}{\normalfont}
%<platexrelease>                   {Use \@defaultfamilyhook}%
%<*plcore|platexrelease>
\ifnum\pltx@newhook@avail=\z@ % --- for <= 2020-02-02 BEGIN
\ifx\@defaultfamilyhook\@undefined  % old
\DeclareRobustCommand\normalfont{%
    \kanjiencoding{\kanjiencodingdefault}%
    \edef\k@family{\kanjifamilydefault}%
    \edef\k@series{\kanjiseriesdefault}%
    \edef\k@shape{\kanjishapedefault}%
    \romanencoding{\encodingdefault}%
    \edef\f@family{\familydefault}%
    \edef\f@series{\seriesdefault}%
    \edef\f@shape{\shapedefault}%
    \selectfont}
\else                               % 2020-02-02 PL2
%<platexrelease>\DeclareRobustCommand\normalfont{%
%<platexrelease>   \fontencoding\encodingdefault
%<platexrelease>   \edef\f@family{\familydefault}%
%<platexrelease>   \edef\f@series{\seriesdefault}%
%<platexrelease>   \edef\f@shape{\shapedefault}%
%<platexrelease>   \@defaultfamilyhook
%<platexrelease>   \selectfont}
\g@addto@macro\@defaultfamilyhook{%
    \kanjiencoding{\kanjiencodingdefault}%
    \edef\k@family{\kanjifamilydefault}%
    \edef\k@series{\kanjiseriesdefault}%
    \edef\k@shape{\kanjishapedefault}%
}
\fi                                 % done
\else % --- for <= 2020-02-02 END & for >= 2020-10-01 BEGIN
\ifx\delayed@f@adjustment\@undefined % --- for == 2020-10-01 BEGIN
%<platexrelease>\DeclareRobustCommand\normalfont{%
%<platexrelease>   \fontencoding\encodingdefault
%<platexrelease>   \edef\f@family{\familydefault}%
%<platexrelease>   \edef\f@series{\seriesdefault}%
%<platexrelease>   \edef\f@shape{\shapedefault}%
%<platexrelease>   \UseHook{normalfont}%
%<platexrelease>   \@defaultfamilyhook % hookname from 2020/02 will vanish
%<platexrelease>   \selectfont}
\AddToHook{normalfont}{%
    \kanjiencoding{\kanjiencodingdefault}%
    \edef\k@family{\kanjifamilydefault}%
    \edef\k@series{\kanjiseriesdefault}%
    \edef\k@shape{\kanjishapedefault}%
}
\else        % --- for == 2020-10-01 END & for >= 2021-06-01 BEGIN
%<platexrelease>\DeclareRobustCommand\normalfont{%
%<platexrelease>   \fontencoding\encodingdefault
%<platexrelease>   \edef\f@family{\familydefault}%
%<platexrelease>   \edef\f@series{\seriesdefault}%
%<platexrelease>   \edef\f@shape{\shapedefault}%
%<platexrelease>   \let\delayed@f@adjustment\@empty
%<platexrelease>   \UseHook{normalfont}%
%<platexrelease>   \@defaultfamilyhook % hookname from 2020/02 will vanish
%<platexrelease>   \selectfont}
\AddToHook{normalfont}{%
    \kanjiencoding{\kanjiencodingdefault}%
    \edef\k@family{\kanjifamilydefault}%
    \edef\k@series{\kanjiseriesdefault}%
    \edef\k@shape{\kanjishapedefault}%
    \let\delayed@k@adjustment\@empty
}
\fi          % --- for >= 2021-06-01 END
\fi   % --- for >= 2020-10-01 END
\adjustbaseline
\let\reset@font\normalfont
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2020/02/02}{\normalfont}
%<platexrelease>                   {Don't call \fontseries or \fontshape}%
%<platexrelease>\DeclareRobustCommand\normalfont{%
%<platexrelease>    \kanjiencoding{\kanjiencodingdefault}%
%<platexrelease>    \edef\k@family{\kanjifamilydefault}%
%<platexrelease>    \edef\k@series{\kanjiseriesdefault}%
%<platexrelease>    \edef\k@shape{\kanjishapedefault}%
%<platexrelease>    \romanencoding{\encodingdefault}%
%<platexrelease>    \edef\f@family{\familydefault}%
%<platexrelease>    \edef\f@series{\seriesdefault}%
%<platexrelease>    \edef\f@shape{\shapedefault}%
%<platexrelease>    \selectfont\ignorespaces}
%<platexrelease>\adjustbaseline
%<platexrelease>\let\reset@font\normalfont
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\normalfont}
%<platexrelease>                   {ASCII Corporation original}%
%<platexrelease>\DeclareRobustCommand\normalfont{%
%<platexrelease>    \kanjiencoding{\kanjiencodingdefault}%
%<platexrelease>    \kanjifamily{\kanjifamilydefault}%
%<platexrelease>    \kanjiseries{\kanjiseriesdefault}%
%<platexrelease>    \kanjishape{\kanjishapedefault}%
%<platexrelease>    \romanencoding{\encodingdefault}%
%<platexrelease>    \romanfamily{\familydefault}%
%<platexrelease>    \romanseries{\seriesdefault}%
%<platexrelease>    \romanshape{\shapedefault}%
%<platexrelease>    \selectfont\ignorespaces}
%<platexrelease>\adjustbaseline
%<platexrelease>\let\reset@font\normalfont
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\bfseries@mc}
% \begin{macro}{\bfseries@gt}
% \begin{macro}{\mdseries@mc}
% \begin{macro}{\mdseries@gt}
% \LaTeXe~2020-02-02では、欧文フォントについて
% 「ファミリごとの実際のシリーズ値を設定できる」
% という機能が導入されました（元はmweightsパッケージの機能）。
% また、同時に
% 「Computer ModernとLatin Modernの場合は互換性のため太字をbxに、
% それ以外の欧文ファミリの場合は太字をbにする」
% という仕様変更も入りました。
% これに合わせて、p\LaTeXe{}の和文フォントにも同等の機能を追加し、
% 和文ファミリの太字もbxではなくbに変更しました。
% \changes{v1.6v}{2020/02/01}{\LaTeX{}がmweightsパッケージを基にした
%    シリーズのカスタム設定を導入したので、これをサポート
%    (sync with ltfssini.dtx 2019/12/17 v3.1e)}
%    \begin{macrocode}
%<*plcore|platexrelease>
\ifx\bfseries@rm\@undefined  % old
\let\bfseries@mc\@undefined
\let\bfseries@gt\@undefined
\let\mdseries@mc\@undefined
\let\mdseries@gt\@undefined
\else                        % 2020-02-02
\edef\bfseries@mc{\bfdefault}% b
\edef\bfseries@gt{\bfdefault}% b
\edef\mdseries@mc{\mddefault}% m
\edef\mdseries@gt{\mddefault}% m
\fi
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\expand@font@defaults}
% ファミリのデフォルトを完全展開します。
% まず、オリジナルの\LaTeX{}の定義（ltfssini.dtx 2020/08/21 v3.2b以降）を
% 載せておきます。
%    \begin{macrocode}
%\def\expand@font@defaults{%
%  \edef\rmdef@ult{\rmdefault}%
%  \edef\sfdef@ult{\sfdefault}%
%  \edef\ttdef@ult{\ttdefault}%
%  \series@maybe@drop@one@m\bfdefault\bfdef@ult % !! changed 2020/02/25 v3.1j
%  \series@maybe@drop@one@m\mddefault\mddef@ult % !! changed 2020/02/25 v3.1j
% %\edef\famdef@ult{\familydefault}% !! deleted 2020/04/13 v3.1n
% %\@expandfontdefaultshook        % !! only in 2020/04/06 v3.1m
%  \UseHook{expand@font@defaults}%   !! new in 2020/08/21 v3.2b
%}
%    \end{macrocode}
% p\LaTeX{}では、以下のコードを末尾に追加します。
% \file{ltfssini.dtx} 2020/04/13 v3.1nで|latex3/latex2e#315|対策が
% 入りましたので、その前後で|\expand@font@defaults|および
% |\init@series@setup|への追加内容が変わります。
% ^^A  従来は |\init@series@setup| から呼び出される
% ^^A    |\expand@font@defaults| が |\famdef@ult| を設定していた。
% ^^A  新版は |\init@series@setup| からもはや
% ^^A    |\expand@font@defaults| は呼び出さず、代わりに
% ^^A    |\init@series@setup| で一度 |\reset@font| を実行し、
% ^^A    それに基づいて |\seriesdefault| を設定する。
% \changes{v1.7h}{2020/09/28}{New hook management interface
%    (sync with ltfssini.dtx 2020/08/21 v3.2b)}
% \changes{v1.7i}{2020/10/07}{フックシステムの有無判定を改良}
%    \begin{macrocode}
\ifx\expand@font@defaults\@undefined\else %<*2020-02-02|2020-10-01|.>
\ifnum\pltx@newhook@avail=\z@ % --- for == 2020-02-02 BEGIN
\g@addto@macro\expand@font@defaults{%
  \edef\mcdef@ult{\mcdefault}%
  \edef\gtdef@ult{\gtdefault}%
  \edef\kanjidef@ult{\kanjifamilydefault}%
}
\else % --- for == 2020-02-02 END & for >= 2020-10-01 BEGIN
\AddToHook{expand@font@defaults}{%
  \edef\mcdef@ult{\mcdefault}%
  \edef\gtdef@ult{\gtdefault}%
 %\edef\kanjidef@ult{\kanjifamilydefault}% !! sync with 2020/04/13 v3.1n
}
\fi   % --- for >= 2020-10-01 END
\fi %</2020-02-02|2020-10-01|.>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\bfseries}
% \begin{macro}{\mdseries}
% ファミリごとの設定値を参照します。
% まず、オリジナルの\LaTeX{}の定義（ltfssini.dtx 2020/09/30 v3.2d以降）を
% 載せておきます。
%    \begin{macrocode}
%\DeclareRobustCommand\bfseries{%
%  \not@math@alphabet\bfseries\mathbf
%  \expand@font@defaults
%  \ifx\bfdefault\bfdefault@previous\else % new in 2020/03/19 v3.1k
%    \expandafter\def\expandafter\bfdefault
%                    \expandafter{\bfdefault\@empty}%
%    \let\bfdefault@previous\bfdefault % bugfix in 2020/09/30 v3.2d
%    \let\bfseries@rm\bfdef@ult
%    \let\bfseries@sf\bfdef@ult
%    \let\bfseries@tt\bfdef@ult
%    %\@setbfseriesdefaultshook % !! only in 2020/04/06 v3.1m
%    \UseHook{bfseries/defaults}% !! new in 2020/08/21 v3.2b
%  \fi
%    \ifx\f@family\rmdef@ult      \fontseries\bfseries@rm
%    \else\ifx\f@family\sfdef@ult \fontseries\bfseries@sf
%    \else\ifx\f@family\ttdef@ult \fontseries\bfseries@tt
%    \else                        \fontseries\bfdefault
%    \fi\fi\fi
%  \UseHook{bfseries}% !! new in 2020/08/21 v3.2b
%  \selectfont
%}
%\DeclareRobustCommand\mdseries{%
%  \not@math@alphabet\mdseries\relax
%  \expand@font@defaults
%  \ifx\mddefault\mddefault@previous\else % new in 2020/03/19 v3.1k
%    \expandafter\def\expandafter\mddefault
%                    \expandafter{\mddefault\@empty}%
%    \let\mddefault@previous\mddefault % bugfix in 2020/09/30 v3.2d
%    \let\mdseries@rm\mddef@ult
%    \let\mdseries@sf\mddef@ult
%    \let\mdseries@tt\mddef@ult
%    %\@setmdseriesdefaultshook % !! only in 2020/04/06 v3.1m
%    \UseHook{mdseries/defaults}% !! new in 2020/08/21 v3.2b
%  \fi
%    \ifx\f@family\rmdef@ult      \fontseries\mdseries@rm
%    \else\ifx\f@family\sfdef@ult \fontseries\mdseries@sf
%    \else\ifx\f@family\ttdef@ult \fontseries\mdseries@tt
%    \else                        \fontseries\mddefault
%    \fi\fi\fi
%  \UseHook{mdseries}% !! new in 2020/08/21 v3.2b
%  \selectfont
%}
%    \end{macrocode}
% 以下でp\LaTeX{}用に再定義します。
% まず\LaTeXe~2020-02-02ベース。
% \changes{v1.6y}{2020/02/24}{Make the \cs{ifx} selection outside of
%    \cs{fontseries} argument so that it is not done several times
%    (sync with ltfssini.dtx 2020/02/18 v3.1i)}
% \changes{v1.7f}{2020/04/07}{Support legacy use of \cs{bfdefault}
%    and \cs{mddefault}, use \cs{@setYYseriesdefaultshook}
%    (sync with ltfssini.dtx 2020/03/19 v3.1k and 2020/04/06 v3.1m)}
%    \begin{macrocode}
\ifx\bfseries@rm\@undefined\else %<*2020-02-02|2020-10-01|.>
\ifnum\pltx@newhook@avail=\z@ % --- for == 2020-02-02 BEGIN
\DeclareRobustCommand\bfseries{%
  \not@math@alphabet\bfseries\mathbf
  \expand@font@defaults
  % changed \fontseries -> \romanseries
    \ifx\f@family\rmdef@ult      \romanseries\bfseries@rm
    \else\ifx\f@family\sfdef@ult \romanseries\bfseries@sf
    \else\ifx\f@family\ttdef@ult \romanseries\bfseries@tt
    \else                        \romanseries\bfdefault
    \fi\fi\fi
%    \end{macrocode}
% ここからがp\LaTeX{}による追加コードです。
%    \begin{macrocode}
  % changed \fontseries -> \kanjiseries
    \ifx\k@family\mcdef@ult      \kanjiseries\bfseries@mc
    \else\ifx\k@family\gtdef@ult \kanjiseries\bfseries@gt
    \else                        \kanjiseries\bfdefault
    \fi\fi
%    \end{macrocode}
% ここまで。
%    \begin{macrocode}
  \selectfont
}
\DeclareRobustCommand\mdseries{%
  \not@math@alphabet\mdseries\relax
  \expand@font@defaults
  % changed \fontseries -> \romanseries
    \ifx\f@family\rmdef@ult      \romanseries\mdseries@rm
    \else\ifx\f@family\sfdef@ult \romanseries\mdseries@sf
    \else\ifx\f@family\ttdef@ult \romanseries\mdseries@tt
    \else                        \romanseries\mddefault
    \fi\fi\fi
%    \end{macrocode}
% ここからがp\LaTeX{}による追加コードです。
%    \begin{macrocode}
  % changed \fontseries -> \kanjiseries
    \ifx\k@family\mcdef@ult      \kanjiseries\mdseries@mc
    \else\ifx\k@family\gtdef@ult \kanjiseries\mdseries@gt
    \else                        \kanjiseries\mddefault
    \fi\fi
%    \end{macrocode}
% ここまで。
%    \begin{macrocode}
  \selectfont
}
%    \end{macrocode}
% 次に\LaTeXe~2020-10-01ベース。|\AddToHook|で十分です。
% \changes{v1.7h}{2020/09/28}{New hook management interface
%    (sync with ltfssini.dtx 2020/08/21 v3.2b)}
% \changes{v1.7i}{2020/10/07}{フックシステムの有無判定を改良}
%    \begin{macrocode}
\else % --- for == 2020-02-02 END & for >= 2020-10-01 BEGIN
\AddToHook{bfseries/defaults}{%
    \let\bfseries@mc\bfdef@ult
    \let\bfseries@gt\bfdef@ult
}
\AddToHook{bfseries}{%
  % changed \fontseries -> \kanjiseries
    \ifx\k@family\mcdef@ult      \kanjiseries\bfseries@mc
    \else\ifx\k@family\gtdef@ult \kanjiseries\bfseries@gt
    \else                        \kanjiseries\bfdefault
    \fi\fi
}
\AddToHook{mdseries/defaults}{%
    \let\mdseries@mc\mddef@ult
    \let\mdseries@gt\mddef@ult
}
\AddToHook{mdseries}{%
  % changed \fontseries -> \kanjiseries
    \ifx\k@family\mcdef@ult      \kanjiseries\mdseries@mc
    \else\ifx\k@family\gtdef@ult \kanjiseries\mdseries@gt
    \else                        \kanjiseries\mddefault
    \fi\fi
}
\fi   % --- for >= 2020-10-01 END
\fi %</2020-02-02|2020-10-01|.>
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\prepare@family@series@update@kanji}
% \begin{macro}{\@meta@family@list@kanji}
% \begin{macro}{\update@series@target@value@kanji}
% |\prepare@family@series@update|の和文版です。
% \changes{v1.6y}{2020/02/24}{No series auto-update when forced
%    (sync with ltfssini.dtx 2020/02/18 v3.1i)}
% \changes{v1.6y}{2020/02/24}{Recognize current family if it is not a
%    ``meta'' family and auto-update series using \cs{bfdefault}
%    (sync with ltfssini.dtx 2020/02/18 v3.1i)}
% \changes{v1.6z}{2020/02/28}{Drop surplus ``m'' from \cs{target@series@value}
%    (sync with ltfssini.dtx 2020/02/25 v3.1j)}
%    \begin{macrocode}
\ifx\prepare@family@series@update\@undefined  % old
\let\prepare@family@series@update@kanji\@undefined
\let\@meta@family@list@kanji\@undefined
\let\update@series@target@value@kanji\@undefined
\else                                         % 2020-02-02
\def\prepare@family@series@update#1#2{%
~\if@forced@series
%<+debug> \series@change@debug{No series preparation (forced \f@series)\on@line}%
~  \romanfamily#2%   % changed \fontfamily -> \romanfamily
~\else
%<+debug> \series@change@debug{Prepearing for switching to #1 (#2)\on@line}%
   \expand@font@defaults
   \let\target@series@value\@empty
   \def\target@meta@family@value{#1}%
   \expandafter\edef\csname ??def@ult\endcsname{\f@family}%
   \let\@elt\update@series@target@value
      \@meta@family@list
      \@elt{??}%
   \let\@elt\relax
   \romanfamily#2%   % changed \fontfamily -> \romanfamily
   \ifx\target@series@value\@empty
%<+debug> \series@change@debug{Target series still empty ...}%
   \else
     \ifx \f@series\target@series@value
%<+debug> \series@change@debug{Target series unchanged:
%<+debug>                      \f@series \space = \target@series@value}%
     \else
       \maybe@load@fontshape
%<+debug> \series@change@debug{Target series:
%<+debug>                      \f@series \space -> \target@series@value}%
%      \let\f@series\target@series@value
       \series@maybe@drop@one@m\target@series@value\f@series
     \fi
   \fi
~\fi
}
\def\prepare@family@series@update@kanji#1#2{%
~\if@forced@series@kanji
%<+debug> \series@change@debug{No series preparation (forced \k@series)\on@line}%
~  \kanjifamily#2%
~\else
%<+debug> \series@change@debug{Prepearing for switching to #1 (#2)\on@line}%
   \expand@font@defaults
   \let\target@series@value\@empty
   \def\target@meta@family@value{#1}%
   \expandafter\edef\csname ??def@ult\endcsname{\k@family}%
   \let\@elt\update@series@target@value@kanji
      \@meta@family@list@kanji
      \@elt{??}%
   \let\@elt\relax
   \kanjifamily#2%
   \ifx\target@series@value\@empty
%<+debug> \series@change@debug{Target series still empty ...}%
   \else
     \ifx \k@series\target@series@value
%<+debug> \series@change@debug{Target series unchanged:
%<+debug>                      \k@series \space = \target@series@value}%
     \else
       \begingroup\let\f@encoding\k@encoding\let\f@family\k@family
         \maybe@load@fontshape\endgroup
%<+debug> \series@change@debug{Target series:
%<+debug>                      \k@series \space -> \target@series@value}%
%      \let\k@series\target@series@value
       \series@maybe@drop@one@m\target@series@value\k@series
     \fi
   \fi
~\fi
}
\def\@meta@family@list@kanji{\@elt{mc}\@elt{gt}}
\def\update@series@target@value@kanji#1{%
  \def\reserved@a{#1}%
  \ifx\target@meta@family@value\reserved@a   % rm -> rm do nothing
  \else
%<+debug> \series@change@debug{Trying to match #1: \csname#1def@ult\endcsname
%<+debug>                      \space = \k@family\space ?}%
    \expandafter\ifx\csname#1def@ult\endcsname\k@family
      \let\@elt\@gobble
      \expandafter\let\expandafter\reserved@b
                      \csname mdseries@\target@meta@family@value\endcsname
      \expandafter\let\expandafter\reserved@c
                      \csname bfseries@\target@meta@family@value\endcsname
%<+debug>\series@change@debug{Targets for mdseries and bfseries:
%<+debug>                     \reserved@b\space and \reserved@c}%
      \expandafter\series@maybe@drop@one@m
          \csname mdseries@#1\endcsname\reserved@d
      \ifx\reserved@d\k@series
%<+debug>   \series@change@debug{mdseries@#1 matched -> \reserved@b}%
                                      \let\target@series@value\reserved@b
      \else
        \expandafter\series@maybe@drop@one@m
           \csname bfseries@#1\endcsname\reserved@d
        \ifx\reserved@d\k@series
%<+debug>  \series@change@debug{bfseries@#1 matched -> \reserved@c}%
                                      \let\target@series@value\reserved@c
      \else\ifx\k@series\mddef@ult    \let\target@series@value\reserved@b
%<+debug>  \series@change@debug{mddef@ult matched -> \reserved@b}%
      \else\ifx\k@series\bfdef@ult    \let\target@series@value\reserved@c
%<+debug>  \series@change@debug{bfdef@ult matched -> \reserved@c}%
      \fi\fi\fi\fi
    \fi
  \fi
}
\fi
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\init@series@setup}
% |\begin{document}|で実行される初期化です。
% まず、オリジナルの\LaTeX{}の定義（ltfssini.dtx 2020/04/13 v3.1n以降）を
% 載せておきます。
%    \begin{macrocode}
%\def\init@series@setup{%
%  \ifx\bfseries@rm@kernel\bfseries@rm
%    \expandafter\in@\expandafter{\rmdefault}%
%                    {cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}%
%    \ifin@ \else \def\bfseries@rm{b}\fi\fi
%  \ifx\bfseries@sf@kernel\bfseries@sf
%    \expandafter\in@\expandafter{\sfdefault}%
%                    {cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}%
%    \ifin@ \else \def\bfseries@sf{b}\fi\fi
%  \ifx\bfseries@tt@kernel\bfseries@tt
%    \expandafter\in@\expandafter{\ttdefault}%
%                    {cmr,cmss,cmtt,lcmss,lcmtt,lmr,lmss,lmtt}%
%    \ifin@ \else \def\bfseries@tt{b}\fi\fi
% %\expand@font@defaults  % !! deleted in 2020/04/13 v3.1n BEGIN
% %\ifx\famdef@ult\rmdef@ult      \rmfamily           % !! CONT
% %\else\ifx\famdef@ult\sfdef@ult \sffamily           % !! CONT
% %\else\ifx\famdef@ult\ttdef@ult \ttfamily           % !! CONT
% %\fi\fi\fi              % !! deleted in 2020/04/13 v3.1n END
%  \reset@font     % !! added in 2020/04/13 v3.1n BEGIN
%  \ifx\seriesdefault\seriesdefault@kernel   % !! CONT
%    \mdseries                               % !! CONT
%    \let\seriesdefault\f@series             % !! CONT
%  \fi             % !! added in 2020/04/13 v3.1n END
%}%
%    \end{macrocode}
% ここからがp\LaTeX{}による追加コードです。
% \begin{itemize}
%   \item \LaTeXe~2019-10-01以前：未定義
%   \item \LaTeXe~2020-02-02以降：上のとおりの定義
%   \item ただし、latexreleaseで巻き戻し：|\relax|と同義
% \end{itemize}
% になることに注意します。
% \changes{v1.6w}{2020/02/03}{巻き戻しのバグ修正}
% \changes{v1.7h}{2020/09/28}{Handling \cs{seriesdefault} changes
%    (sync with ltfssini.dtx 2020/04/13 v3.1n)}
% \changes{v1.7i}{2020/10/07}{フックシステムの有無判定を改良}
%    \begin{macrocode}
\expandafter\ifx\csname init@series@setup\endcsname\relax
\else   %<*2020-02-02|2020-10-01|.>
\ifnum\pltx@newhook@avail=\z@ % --- for == 2020-02-02 BEGIN
\g@addto@macro\init@series@setup{%
  \ifx\kanjidef@ult\mcdef@ult      \mcfamily
  \else\ifx\kanjidef@ult\gtdef@ult \gtfamily
  \fi\fi
}%
\else % --- for == 2020-02-02 END & for >= 2020-10-01 BEGIN
\g@addto@macro\init@series@setup{%
  % !! sync with 2020/04/13 v3.1n BEGIN
  \ifx\kanjiseriesdefault\kanjiseriesdefault@kernel
    \mdseries
    \let\kanjiseriesdefault\k@series
  \fi
  % !! sync with 2020/04/13 v3.1n END
}%
\fi   % --- for >= 2020-10-01 END
\fi     %</2020-02-02|2020-10-01|.>
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\kanjiseriesdefault}
% \begin{macro}{\kanjiseriesdefault@kernel}
% |\kanjiseriesdefault|が\file{pldefs.ltx}または\file{pldefs.cfg}で
% 定義された後に、その末尾に|\@empty|を追加します。
% これは展開時に消滅しますが、文書のプリアンブルで別の値に
% 変更されたかどうか検知できるようになります。
% \changes{v1.7h}{2020/09/28}{Handling \cs{seriesdefault} changes
%    (sync with ltfssini.dtx 2020/04/13 v3.1n)}
% \changes{v1.7i}{2020/10/07}{フックシステムの有無判定を改良}
%    \begin{macrocode}
\ifnum\pltx@newhook@avail>\z@ % --- for >= 2020-10-01 BEGIN
\def\code@after@pldefs{%
\expandafter\def\expandafter\kanjiseriesdefault
  \expandafter{\kanjiseriesdefault\@empty}
\let\kanjiseriesdefault@kernel\kanjiseriesdefault}
\fi                           % --- for >= 2020-10-01 END
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
%
% \begin{macro}{\mcfamily}
% \begin{macro}{\gtfamily}
% 和文書体を明朝体にする|\mcfamily|とゴシック体にする|\gtfamily|を定義します。
% これらは、|\rmfamily|などに対応します。
% |\mathmc|と|\mathgt|は数式内で用いるときのコマンド名です。
%    \begin{macrocode}
\ifx\prepare@family@series@update@kanji\@undefined  % old
\DeclareRobustCommand\mcfamily
        {\not@math@alphabet\mcfamily\mathmc
         \kanjifamily\mcdefault\selectfont}
\DeclareRobustCommand\gtfamily
        {\not@math@alphabet\gtfamily\mathgt
         \kanjifamily\gtdefault\selectfont}
\else                                               % 2020-02-02
\DeclareRobustCommand\mcfamily
    {\not@math@alphabet\mcfamily\mathmc
     \prepare@family@series@update@kanji{mc}\mcdefault\selectfont}
\DeclareRobustCommand\gtfamily
    {\not@math@alphabet\gtfamily\mathgt
     \prepare@family@series@update@kanji{gt}\gtdefault\selectfont}
\fi
%</plcore|platexrelease>
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\textmc}
% \begin{macro}{\textgt}
% \changes{v1.3b}{1997/01/28}{\cs{textmc}, \cs{textgt}の動作修正}
% \changes{v1.6v}{2020/02/01}{定義をpldefsからplcoreへ移動}
% テキストファミリを切り替えるためのコマンドです。
% \file{ltfntcmd.dtx}で定義されている|\textrm|などに対応します。
%    \begin{macrocode}
%<*plcore>
\DeclareTextFontCommand{\textmc}{\mcfamily}
\DeclareTextFontCommand{\textgt}{\gtfamily}
%</plcore>
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% 後回しにしていた他のバージョンへの対処です。
% ここで新NFSS対応コードが終わりますので、|\catcode|トリックを元に戻します。
% \changes{v1.7b}{2020/03/14}{古い\LaTeXe{}でもフォーマット生成が通るように}
%    \begin{macrocode}
%<*plcore|platexrelease>
%%
\ifnum\pltx@latex@level>0\relax       % 2020-02-02
%
\ifnum\pltx@latex@level<3\relax       % 2020-02-02 patch level 0--2 (no flags)
\DeclareRobustCommand\romanseries[1]{\merge@font@series{#1}}
\DeclareRobustCommand\kanjiseries[1]{\merge@kanji@series{#1}}
\DeclareRobustCommand\fontseries[1]{\kanjiseries{#1}\romanseries{#1}}
\DeclareRobustCommand\romanseriesforce[1]{\edef\f@series{#1}}
\DeclareRobustCommand\kanjiseriesforce[1]{\edef\k@series{#1}}
\DeclareRobustCommand\fontseriesforce[1]{\kanjiseriesforce{#1}\romanseriesforce{#1}}
\fi
%
\ifnum\pltx@latex@level=1\relax       % 2020-02-02 patch level 0 (\@reserveda)
\def\merge@kanji@series@#1#2#3\@nil{%
  \def\@reserveda{#3}%
  \ifx\@reserveda\@empty
    \set@target@series@kanji{#2}%
  \else
    \begingroup\let\f@encoding\k@encoding\let\f@family\k@family
      \maybe@load@fontshape\endgroup
    \edef\@reserveda{\k@encoding /\k@family /#1/\k@shape}%
     \ifcsname \@reserveda \endcsname
       \set@target@series@kanji{#1}%
    \else
       \ifcsname \k@encoding /\k@family /#2/\k@shape \endcsname
         \set@target@series@kanji{#2}%
         {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}%
       \else
         \set@target@series@kanji{#3}%
         {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}%
       \fi
    \fi
  \fi
}
\def\merge@kanji@shape@#1#2#3\@nil{%
  \def\@reserveda{#3}%
  \ifx\@reserveda\@empty
    \edef\k@shape{#2}%
  \else
    \begingroup\let\f@encoding\k@encoding\let\f@family\k@family
      \maybe@load@fontshape\endgroup
    \edef\@reserveda{\k@encoding /\k@family /\k@series/#1}%
     \ifcsname \@reserveda\endcsname
       \edef\k@shape{#1}%
    \else
       \ifcsname \k@encoding /\k@family /\k@series/#2\endcsname
         \edef\k@shape{#2}%
         {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}%
       \else
         \edef\k@shape{#3}%
         {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}%
       \fi
    \fi
  \fi
}
\fi
%
\ifnum\pltx@latex@level<4\relax       % 2020-02-02 patch level 0--4 (drop m)
\def\set@target@series@kanji#1{%
    \edef\k@series{#1}%
    \edef\k@series{\expandafter\series@drop@one@m\k@series mm\series@drop@one@m}%
}
\else\ifnum\pltx@latex@level=4\relax  % 2020-02-02 patch level 5 (old syntax)
\def\set@target@series@kanji#1{%
    \edef\k@series{#1}%
    \expandafter\series@maybe@drop@one@m\expandafter{\k@series}\k@series
}
\fi\fi
%
\ifnum\pltx@latex@level<5\relax       % 2020-02-02 patch level 0--5
\def\prepare@family@series@update#1#2{%
~\if@forced@series
%<+debug> \series@change@debug{No series preparation (forced \f@series)\on@line}%
~  \romanfamily#2%   % changed \fontfamily -> \romanfamily
~\else
%<+debug> \series@change@debug{Prepearing for switching to #1 (#2)\on@line}%
   \expand@font@defaults
   \let\target@series@value\@empty
   \def\target@meta@family@value{#1}%
~  \expandafter\edef\csname ??def@ult\endcsname{\f@family}%
   \let\@elt\update@series@target@value
      \@meta@family@list
~     \@elt{??}%
   \let\@elt\relax
   \romanfamily#2%   % changed \fontfamily -> \romanfamily
   \ifx\target@series@value\@empty
%<+debug> \series@change@debug{Target series still empty ...}%
   \else
     \ifx \f@series\target@series@value
%<+debug> \series@change@debug{Target series unchanged:
%<+debug>                      \f@series \space = \target@series@value}%
     \else
       \maybe@load@fontshape
%<+debug> \series@change@debug{Target series:
%<+debug>                      \f@series \space -> \target@series@value}%
       \let\f@series\target@series@value
     \fi
   \fi
~\fi
}
\def\prepare@family@series@update@kanji#1#2{%
~\if@forced@series@kanji
%<+debug> \series@change@debug{No series preparation (forced \k@series)\on@line}%
~  \kanjifamily#2%
~\else
%<+debug> \series@change@debug{Prepearing for switching to #1 (#2)\on@line}%
   \expand@font@defaults
   \let\target@series@value\@empty
   \def\target@meta@family@value{#1}%
~  \expandafter\edef\csname ??def@ult\endcsname{\k@family}%
   \let\@elt\update@series@target@value@kanji
      \@meta@family@list@kanji
~     \@elt{??}%
   \let\@elt\relax
   \kanjifamily#2%
   \ifx\target@series@value\@empty
%<+debug> \series@change@debug{Target series still empty ...}%
   \else
     \ifx \k@series\target@series@value
%<+debug> \series@change@debug{Target series unchanged:
%<+debug>                      \k@series \space = \target@series@value}%
     \else
       \begingroup\let\f@encoding\k@encoding\let\f@family\k@family
         \maybe@load@fontshape\endgroup
%<+debug> \series@change@debug{Target series:
%<+debug>                      \k@series \space -> \target@series@value}%
       \let\k@series\target@series@value
     \fi
   \fi
~\fi
}
\def\@meta@family@list@kanji{\@elt{mc}\@elt{gt}}
\def\update@series@target@value@kanji#1{%
  \def\reserved@a{#1}%
  \ifx\target@meta@family@value\reserved@a   % rm -> rm do nothing
  \else
%<+debug> \series@change@debug{Trying to match #1: \csname#1def@ult\endcsname
%<+debug>                      \space = \k@family\space ?}%
    \expandafter\ifx\csname#1def@ult\endcsname\k@family
      \let\@elt\@gobble
      \expandafter\let\expandafter\reserved@b
                      \csname mdseries@\target@meta@family@value\endcsname
      \expandafter\let\expandafter\reserved@c
                      \csname bfseries@\target@meta@family@value\endcsname
%<+debug>\series@change@debug{Targets for mdseries and bfseries:
%<+debug>                     \reserved@b\space and \reserved@c}%
      \expandafter\ifx\csname mdseries@#1\endcsname\k@series
%<+debug>   \series@change@debug{mdseries@#1 matched -> \reserved@b}%
                                      \let\target@series@value\reserved@b
      \else\expandafter\ifx\csname bfseries@#1\endcsname\k@series
%<+debug>  \series@change@debug{bfseries@#1 matched -> \reserved@c}%
                                      \let\target@series@value\reserved@c
      \else\ifx\k@series\mddef@ult    \let\target@series@value\reserved@b
%<+debug>  \series@change@debug{mddef@ult matched -> \reserved@b}%
      \else\ifx\k@series\bfdef@ult    \let\target@series@value\reserved@c
%<+debug>  \series@change@debug{bfdef@ult matched -> \reserved@c}%
      \fi\fi\fi\fi
    \fi
  \fi
}
\fi
%
\fi
%%
\pltx@reset@catcode@trick
%</plcore|platexrelease>
%    \end{macrocode}
%
%
% \begin{macro}{\romanprocess@table}
% \begin{macro}{\kanjiprocess@table}
% \begin{macro}{\process@table}
% 文書の先頭で、和文デフォルトフォントの変更が反映されないのを修正します。
% \changes{v1.3g}{1999/04/05}{plpatch.ltxの内容を反映。
%    ありがとう、山本さん。}
% \changes{v1.7g}{2020/04/14}{Small update for speed.
%    (sync with ltfssdcl.dtx 2020/04/13 v3.0v)}
%    \begin{macrocode}
%<*plcore>
\let\romanprocess@table\process@table
\def\kanjiprocess@table{%
  \kanjiencoding\kanjiencodingdefault
  \edef\k@family{\kanjifamilydefault}%
  \edef\k@series{\kanjiseriesdefault}%
  \edef\k@shape{\kanjishapedefault}%
}
\def\process@table{%
  \romanprocess@table
  \kanjiprocess@table
}
\@onlypreamble\romanprocess@table
\@onlypreamble\kanjiprocess@table
%</plcore>
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
% \subsection{強調書体}
% \begin{macro}{\em}
% \begin{macro}{\emph}
% \begin{macro}{\eminnershape}
% \changes{v1.3d}{1997/06/25}{\cs{em},\cs{emph}で和文を強調書体に}
% 従来は|\em|, |\emph|で和文フォントの切り替えは行っていませんでしたが、
% 和文フォントも|\gtfamily|に切り替えるようにしました。
%
% [p\LaTeXe~2016/04/17]
% \LaTeX\ \texttt{<2015/01/01>}で追加された|\eminnershape|も取り入れ、
% 強調コマンドを入れ子にする場合の書体を自由に再定義できるようになりました。
% \changes{v1.6}{2016/02/01}{\LaTeX\ \texttt{!<2015/01/01!>}での\cs{em}の
%    定義変更に対応。\cs{eminnershape}を追加。}
%
% [p\LaTeXe~2020-02-02]
% \LaTeX\ \texttt{<2020-02-02>}で追加された|\DeclareEmphSequence|を
% サポートしました。
% \changes{v1.6v}{2020/02/01}{Support \cs{emph} sequences
%    (sync with ltfssini.dtx 2019/12/17 v3.1e)}
% \changes{v1.6v}{2020/02/01}{定義をpldefsからplcoreへ移動}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2020/02/02}{\DeclareEmphSequence}
%<platexrelease>                               {Nested emph}%
%<*plcore|platexrelease>
\ifx\DeclareEmphSequence\@undefined % old
\DeclareRobustCommand\em
        {\@nomath\em \ifdim \fontdimen\@ne\font >\z@
                       \eminnershape \else \gtfamily \itshape \fi}%
\else
\DeclareRobustCommand\em{%          % 2020-02-02
  \@nomath\em
  \ifx\emfontdeclare@clist\@empty
    \ifdim \fontdimen\@ne\font >\z@
      \eminnershape \else \gtfamily \itshape \fi
  \else
  \edef\em@currfont{\csname\curr@fontshape/\f@size\endcsname}%
    \expandafter\do@emfont@update\emfontdeclare@clist\do@emfont@update
  \fi
}
\fi
\def\eminnershape{\mcfamily \upshape}%
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2016/04/17}{\DeclareEmphSequence}
%<platexrelease>                               {Support \eminnershape}%
%<platexrelease>\DeclareRobustCommand\em
%<platexrelease>        {\@nomath\em \ifdim \fontdimen\@ne\font >\z@
%<platexrelease>                       \eminnershape \else \gtfamily \itshape \fi}%
%<platexrelease>\def\eminnershape{\mcfamily \upshape}%
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2015/01/01}{\DeclareEmphSequence}
%<platexrelease>                               {Non-supported \eminnershape}%
%<platexrelease>\DeclareRobustCommand\em
%<platexrelease>        {\@nomath\em \ifdim \fontdimen\@ne\font >\z@ 
%<platexrelease>                       \mcfamily \upshape \else \gtfamily \itshape \fi}
%<platexrelease>\def\eminnershape{\upshape}% defined by LaTeX, but not used by pLaTeX
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\DeclareEmphSequence}
%<platexrelease>                               {ASCII Corporation original}%
%<platexrelease>\DeclareRobustCommand\em
%<platexrelease>        {\@nomath\em \ifdim \fontdimen\@ne\font >\z@ 
%<platexrelease>                       \mcfamily \upshape \else \gtfamily \itshape \fi}
%<platexrelease>\let\eminnershape\@undefined
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
% \subsection{下線マクロ}
% \begin{macro}{\textunderscore}
% \changes{v1.1b}{1995/04/12}{下線マクロを追加}
% このコマンドはテキストモードで指定された|\_|の内部コマンドです。
% 縦組での位置を調整するように再定義をします。
% もとは\file{ltoutenc.dtx}で定義されています。
%
% なお、|\_|を数式モードで使うと|\mathunderscore|が実行されます。
%
% コミュニティ版では縦数式ディレクションでベースライン補正量が
% 変だったのを直しました。あわせて横ディレクションでもベースライン
% 補正に追随するようにしています。
% \changes{v1.6g}{2017/03/07}{ベースライン補正量を修正}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2017/04/08}{\textunderscore}
%<platexrelease>                   {Baseline shift for \textunderscore}%
%<*plcore|platexrelease>
\DeclareTextCommandDefault{\textunderscore}{%
  \leavevmode\kern.06em
  \raise-\iftdir\ifmdir\ybaselineshift
         \else\tbaselineshift\fi
         \else\ybaselineshift\fi
  \vbox{\hrule\@width.3em}}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\textunderscore}
%<platexrelease>                   {ASCII Corporation original}%
%<platexrelease>\DeclareTextCommandDefault{\textunderscore}{%
%<platexrelease>  \leavevmode\kern.06em
%<platexrelease>  \iftdir\raise-\tbaselineshift\fi
%<platexrelease>  \vbox{\hrule\@width.3em}}
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{合成文字}
% \LaTeXe{}のカーネルのコードをそのまま使うと、p\TeX{}のベースライン
% 補正量がゼロでないときに合成文字がおかしくなっていたため、対策します。
%
% \begin{macro}{\pltx@saved@oalign}
% |\b{...}|, |\c{...}|, |\d{...}|, |\k{...}|などの合成文字を修正するため、
% \file{ltplain.dtx}の|\oalign|を上書きします。
%    \begin{macrocode}
%<platexrelease>%\plIncludeInRelease{0000/00/00}{\pltx@saved@oalign}
%<platexrelease>%    {Special case! (This block is required for any emulation date)}%
%<*plcore|platexrelease>
%    \end{macrocode}
% まず、元の\LaTeX{}のコードをコピーしたものです。
% 接頭辞|\pltx@saved...|を付けておきます。
% \changes{v1.6r}{2018/07/25}{コード追加}
%    \begin{macrocode}
\def\pltx@saved@oalign#1{\leavevmode\vtop{\baselineskip\z@skip \lineskip.25ex%
  \ialign{##\crcr#1\crcr}}}
%</plcore|platexrelease>
%<platexrelease>%\plEndIncludeInRelease
%    \end{macrocode}
%  \end{macro}
%
% \begin{macro}{\pltx@oalign}
% 次に、\pLaTeX{}の新しいコードです。
% \changes{v1.6r}{2018/07/25}{コード追加}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2018/07/28}{\pltx@oalign}
%<platexrelease>                   {Fix for non-zero baselineshift}%
%<*plcore|platexrelease>
\def\pltx@oalign#1{\ifmmode
  \leavevmode\vtop{\baselineskip\z@skip \lineskip.25ex%
    \ialign{##\crcr#1\crcr}}%
\else
  \iftdir\ybaselineshift\tbaselineshift\fi
  \m@th$\hbox{\vtop{\baselineskip\z@skip \lineskip.25ex%
    \ialign{##\crcr#1\crcr}}}$%
\fi}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\pltx@oalign}
%<platexrelease>                   {Fix for non-zero baselineshift}%
%<platexrelease>\let\pltx@oalign\@undefined
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\pltx@saved@ltx@sh@ft}
% |\b{...}|と|\d{...}|の合成文字を修正するため、
% \file{ltplain.dtx}の|\ltx@sh@ft|を上書きします。
%    \begin{macrocode}
%<platexrelease>%\plIncludeInRelease{0000/00/00}{\pltx@saved@ltx@sh@ft}
%<platexrelease>%    {Special case! (This block is required for any emulation date)}%
%<*plcore|platexrelease>
%    \end{macrocode}
% まず、元の\LaTeX{}のコードをコピーしたものです。
% 接頭辞|\pltx@saved...|を付けておきます。
% \changes{v1.6r}{2018/07/25}{コード追加}
%    \begin{macrocode}
\def\pltx@saved@ltx@sh@ft #1{%
  \dimen@ #1%
  \kern \strip@pt
    \fontdimen1\font \dimen@
  } % kern by #1 times the current slant
%</plcore|platexrelease>
%<platexrelease>%\plEndIncludeInRelease
%    \end{macrocode}
%  \end{macro}
%
% \begin{macro}{\pltx@ltx@sh@ft}
% 次に、\pLaTeX{}の新しいコードです。
% \changes{v1.6r}{2018/07/25}{コード追加}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2018/07/28}{\pltx@ltx@sh@ft}
%<platexrelease>                   {Fix for non-zero baselineshift}%
%<*plcore|platexrelease>
\def\pltx@ltx@sh@ft #1{%
  \ybaselineshift\z@
  \dimen@ #1%
  \kern \strip@pt
    \fontdimen1\font \dimen@
  } % kern by #1 times the current slant
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\pltx@ltx@sh@ft}
%<platexrelease>                   {Fix for non-zero baselineshift}%
%<platexrelease>\let\pltx@ltx@sh@ft\@undefined
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\g@tlastchart@}
% \TeX\ Live 2015で追加された\cs{lastnodechar}を利用して、
% 「直前の文字」の符号位置を得るコードです。
% \cs{lastnodechar}が未定義の場合は$-1$が返ります。
% \changes{v1.6c}{2016/06/06}{マクロ追加}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2016/06/10}{\g@tlastchart@}
%<platexrelease>                   {Added \g@tlastchart@}%
%<*plcore|platexrelease>
\def\g@tlastchart@#1{#1\ifx\lastnodechar\@undefined\m@ne\else\lastnodechar\fi}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\g@tlastchart@}
%<platexrelease>                   {Added \g@tlastchart@}%
%<platexrelease>\let\g@tlastchart@\@undefined
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\pltx@isletter}
% 第一引数のマクロ(|#1|)の置換テキストが、カテゴリコード11か12の文字トークン1文字であった
% 場合に第二引数の内容に展開され、そうでない場合は第三引数の内容に展開されます。
% \changes{v1.6c}{2016/06/06}{マクロ追加}
% \changes{v1.6d}{2016/06/19}{アクセント付き文字をさらに修正(forum:1951)}
% \changes{v1.6r}{2018/07/25}{PDFのしおりにアクセント文字が含まれる場合に対応}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2018/07/28}{\pltx@isletter}
%<platexrelease>                   {Support PD1 encoding}%
%<*plcore|platexrelease>
\def\pltx@mark{\pltx@mark@}
\let\pltx@scanstop\relax
\long\def\pltx@cond#1\fi{%
  #1\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
\def\pltx@pdfencA{PD1}
\def\pltx@composite@chkenc{%
  \ifx\pltx@pdfencA\f@encoding
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi}
\long\def\pltx@isletter#1{%
  \expandafter\pltx@isletter@i#1\pltx@scanstop}
\long\def\pltx@isletter@i#1\pltx@scanstop{%
  \pltx@cond\ifx\pltx@mark#1\pltx@mark\fi{\@firstoftwo}%
    {\pltx@isletter@ii\pltx@scanstop#1\pltx@scanstop{}#1\pltx@mark}}
\long\def\pltx@isletter@ii#1\pltx@scanstop#{%
  \pltx@cond\ifx\pltx@mark#1\pltx@mark\fi%
    {\pltx@isletter@iii}{\pltx@isletter@iv}}
\long\def\pltx@isletter@iii#1\pltx@mark{\@secondoftwo}
\long\def\pltx@isletter@iv#1#2#3\pltx@mark{%
  \pltx@cond\ifx\pltx@mark#3\pltx@mark\fi{%
    \pltx@cond{\ifnum0\ifcat A\noexpand#21\fi\ifcat=\noexpand#21\fi>\z@}\fi
      {\@firstoftwo}{\pltx@composite@chkenc}%
  }{\pltx@composite@chkenc}}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2016/06/10}{\pltx@isletter}
%<platexrelease>                   {Added \pltx@isletter}%
%<platexrelease>\def\pltx@mark{\pltx@mark@}
%<platexrelease>\let\pltx@scanstop\relax
%<platexrelease>\long\def\pltx@cond#1\fi{%
%<platexrelease>  #1\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
%<platexrelease>\long\def\pltx@isletter#1{%
%<platexrelease>  \expandafter\pltx@isletter@i#1\pltx@scanstop}
%<platexrelease>\long\def\pltx@isletter@i#1\pltx@scanstop{%
%<platexrelease>  \pltx@cond\ifx\pltx@mark#1\pltx@mark\fi{\@firstoftwo}%
%<platexrelease>    {\pltx@isletter@ii\pltx@scanstop#1\pltx@scanstop{}#1\pltx@mark}}
%<platexrelease>\long\def\pltx@isletter@ii#1\pltx@scanstop#{%
%<platexrelease>  \pltx@cond\ifx\pltx@mark#1\pltx@mark\fi%
%<platexrelease>    {\pltx@isletter@iii}{\pltx@isletter@iv}}
%<platexrelease>\long\def\pltx@isletter@iii#1\pltx@mark{\@secondoftwo}
%<platexrelease>\long\def\pltx@isletter@iv#1#2#3\pltx@mark{%
%<platexrelease>  \pltx@cond\ifx\pltx@mark#3\pltx@mark\fi{%
%<platexrelease>    \pltx@cond{\ifnum0\ifcat A\noexpand#21\fi\ifcat=\noexpand#21\fi>\z@}\fi
%<platexrelease>      {\@firstoftwo}{\@secondoftwo}%
%<platexrelease>  }{\@secondoftwo}}
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\pltx@isletter}
%<platexrelease>                   {Added \pltx@isletter}%
%<platexrelease>\let\pltx@isletter\@undefined
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@text@composite}
% 合成文字の内部命令です。
% v1.6aで誤って\LaTeX{}の定義を上書きしてしまいましたが、v1.6cで外しました。
% \changes{v1.6a}{2016/04/01}{ベースライン補正量が0でないときに
%    \cs{AA}など一部の合成文字がおかしくなることに対応するため再定義}
% \changes{v1.6c}{2016/06/06}{v1.6aでの誤った再定義を削除(forum:1941)}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2016/06/10}{\@text@composite}
%<platexrelease>                   {Fix for non-zero baselineshift (revert)}%
%<platexrelease>\def\@text@composite#1#2#3\@text@composite{%
%<platexrelease>   \expandafter\@text@composite@x
%<platexrelease>      \csname\string#1-\string#2\endcsname}
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2016/04/17}{\@text@composite}
%<platexrelease>                   {Fix for non-zero baselineshift (wrong)}%
%<platexrelease>\def\@text@composite#1#2#3#{%
%<platexrelease>  \begingroup
%<platexrelease>  \setbox\z@=\hbox\bgroup%
%<platexrelease>  \ybaselineshift\z@\tbaselineshift\z@
%<platexrelease>  \expandafter\@text@composite@x
%<platexrelease>  \csname\string#1-\string#2\endcsname}
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\@text@composite}
%<platexrelease>                   {LaTeX2e original}%
%<platexrelease>\def\@text@composite#1#2#3\@text@composite{%
%<platexrelease>   \expandafter\@text@composite@x
%<platexrelease>      \csname\string#1-\string#2\endcsname}
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\pltx@saved@text@composite@x}
% 合成文字の内部命令|\@text@composite@x|のために、2通りの定義を準備します。
%    \begin{macrocode}
%<platexrelease>%\plIncludeInRelease{0000/00/00}{\pltx@saved@text@composite@x}
%<platexrelease>%    {Special case! (This block is required for any emulation date)}%
%<*plcore|platexrelease>
%    \end{macrocode}
% まず、元の\LaTeX{}のコードをコピーしたものです。
% 接頭辞|\pltx@saved...|を付けておきます。
% \changes{v1.6r}{2018/07/25}{コード整理}
%    \begin{macrocode}
\def\pltx@saved@text@composite@x#1{%
   \ifx#1\relax
      \expandafter\@secondoftwo
   \else
      \expandafter\@firstoftwo
   \fi
   #1}
%</plcore|platexrelease>
%<platexrelease>%\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\pltx@text@composite@x}
% 次に、\pLaTeX{}の新しいコードです。|\g@tlastchart@|と|\pltx@isletter|を使います。
% \changes{v1.6r}{2018/07/25}{コード整理}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2018/07/28}{\pltx@text@composite@x}
%<platexrelease>                   {Fix for non-zero baselineshift}%
%<*plcore|platexrelease>
\def\pltx@text@composite@x#1#2{%
  \ifx#1\relax
    #2%
  \else\pltx@isletter{#1}{#1}{%
    \begingroup
%    \end{macrocode}
% |#1|を実際に組んでみて、符号位置の取得を試みます。
% 結果は|\@tempcntb|に保存されます。取得に失敗した場合は$-1$です。
%    \begin{macrocode}
    \setbox\z@\hbox\bgroup
      \ybaselineshift\z@\tbaselineshift\z@
      #1%
      \g@tlastchart@\@tempcntb
      \xdef\pltx@composite@temp{\noexpand\@tempcntb=\the\@tempcntb\relax}%
      \aftergroup\pltx@composite@temp
    \egroup
%    \end{macrocode}
% アクセントが付く「本体の文字」が欧文文字と推測される場合には、
% 一旦数式モードに入ることによって|\xkanjiskip|が前後に入るようにします。
% ここでは、取得に失敗した場合も欧文文字であると仮定しています。
% また、符号位置の取得に成功していた場合は、その|\xspcode|の状態に応じて、
% 数式モードの前後に|\null|を補って|\xkanjiskip|の挿入を抑制します。
%    \begin{macrocode}
    \ifnum\@tempcntb<\@cclvi
      \ifnum\@tempcntb>\m@ne
        \ifodd\xspcode\@tempcntb\else\leavevmode\null\fi
      \fi
      \begingroup\m@th$%
        \ifx\textbaselineshiftfactor\@undefined\else
          \textbaselineshiftfactor\z@\fi
        \box\z@
      $\endgroup
      \ifnum\@tempcntb>\m@ne
        \ifnum\xspcode\@tempcntb<2\null\fi
      \fi
%    \end{macrocode}
% アクセントが付く「本体の文字」が和文文字と推測される場合には、
% ベースライン補正を行わずに出力します。
%    \begin{macrocode}
    \else
      {\ybaselineshift\z@\tbaselineshift\z@#1}%
    \fi
    \endgroup}%
  \fi
}
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2016/06/10}{\pltx@text@composite@x}
%<platexrelease>                   {Fix for non-zero baselineshift}%
%<platexrelease>\def\pltx@text@composite@x#1#2{%
%<platexrelease>  \ifx#1\relax
%<platexrelease>    #2%
%<platexrelease>  \else\pltx@isletter{#1}{#1}{%
%<platexrelease>    \begingroup
%<platexrelease>    \setbox\z@\hbox\bgroup%
%<platexrelease>      \ybaselineshift\z@\tbaselineshift\z@
%<platexrelease>      #1%
%<platexrelease>      \g@tlastchart@\@tempcntb
%<platexrelease>      \xdef\pltx@composite@temp{\noexpand\@tempcntb=\the\@tempcntb\relax}%
%<platexrelease>      \aftergroup\pltx@composite@temp
%<platexrelease>    \egroup
%<platexrelease>    \ifnum\@tempcntb<\z@
%<platexrelease>      \@tempdima=\iftdir
%<platexrelease>          \ifmdir
%<platexrelease>            \ifmmode\tbaselineshift\else\ybaselineshift\fi
%<platexrelease>          \else
%<platexrelease>            \tbaselineshift
%<platexrelease>          \fi
%<platexrelease>        \else
%<platexrelease>          \ybaselineshift
%<platexrelease>        \fi
%<platexrelease>      \@tempcntb=\@cclvi
%<platexrelease>    \else\@tempdima=\z@
%<platexrelease>    \fi
%<platexrelease>    \ifnum\@tempcntb<\@cclvi
%<platexrelease>      \ifnum\@tempcntb>\m@ne\ifnum\@tempcntb<\@cclvi
%<platexrelease>        \ifodd\xspcode\@tempcntb\else\leavevmode\hbox{}\fi
%<platexrelease>      \fi\fi
%<platexrelease>      \begingroup\mathsurround\z@$%
%<platexrelease>        \ifx\textbaselineshiftfactor\@undefined\else
%<platexrelease>          \textbaselineshiftfactor\z@\fi
%<platexrelease>        \box\z@
%<platexrelease>      $\endgroup%
%<platexrelease>      \ifnum\@tempcntb>\m@ne\ifnum\@tempcntb<\@cclvi
%<platexrelease>        \ifnum\xspcode\@tempcntb<2\hbox{}\fi
%<platexrelease>      \fi\fi
%<platexrelease>    \else
%<platexrelease>      \ifdim\@tempdima=\z@{\ybaselineshift\z@\tbaselineshift\z@#1}%
%<platexrelease>      \else\leavevmode\lower\@tempdima\box\z@\fi
%<platexrelease>    \fi
%<platexrelease>    \endgroup}%
%<platexrelease>  \fi
%<platexrelease>}
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2016/04/17}{\pltx@text@composite@x}
%<platexrelease>                   {Fix for non-zero baselineshift}%
%<platexrelease>\def\pltx@text@composite@x#1#2{%
%<platexrelease>  \ifx#1\relax
%<platexrelease>    \expandafter\@secondoftwo
%<platexrelease>  \else
%<platexrelease>    \expandafter\@firstoftwo
%<platexrelease>  \fi
%<platexrelease>  #1{#2}\egroup
%<platexrelease>  \leavevmode
%<platexrelease>  \expandafter\lower
%<platexrelease>    \iftdir
%<platexrelease>      \ifmdir
%<platexrelease>        \ifmmode\tbaselineshift\else\ybaselineshift\fi
%<platexrelease>      \else
%<platexrelease>        \tbaselineshift
%<platexrelease>      \fi
%<platexrelease>    \else
%<platexrelease>      \ybaselineshift
%<platexrelease>    \fi
%<platexrelease>    \box\z@
%<platexrelease>  \endgroup}
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\pltx@text@composite@x}
%<platexrelease>                   {Fix for non-zero baselineshift}%
%<platexrelease>\let\pltx@text@composite@x\@undefined
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\fixcompositeaccent}
% \begin{macro}{\nofixcompositeaccent}
% \begin{macro}{\@text@composite@x}
% 上記2通りの定義のうち、本当は\pLaTeX{}の定義を用いたいのですが、
% 想定外のエラーが発生するのを防ぐため、
% デフォルトでは\LaTeX{}の定義のままとしておきます。
% そして、|\fixcompositeaccent|が有効な時だけ\pLaTeX{}の定義を用います。
% |\nofixcompositeaccent|はこの否定です。
% \changes{v1.6r}{2018/07/25}{\cs{[no]fixcompositeaccent}マクロ追加}
%    \begin{macrocode}
%<platexrelease>%\plIncludeInRelease{0000/00/00}{\@text@composite@x}
%<platexrelease>%    {Special case! (This block is required for any emulation date)}%
%<*plcore|platexrelease>
\DeclareRobustCommand\fixcompositeaccent{%
  \let\oalign\pltx@oalign
  \let\ltx@sh@ft\pltx@ltx@sh@ft
  \let\@text@composite@x\pltx@text@composite@x
}
\DeclareRobustCommand\nofixcompositeaccent{%
  \let\oalign\pltx@saved@oalign
  \let\ltx@sh@ft\pltx@saved@ltx@sh@ft
  \let\@text@composite@x\pltx@saved@text@composite@x
}
\nofixcompositeaccent
%</plcore|platexrelease>
%<platexrelease>%\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@text@composite@x}
% エミュレーション専用のコードです。
% \changes{v1.6a}{2016/04/01}{ベースライン補正量が0でないときに
%    \cs{AA}など一部の合成文字がおかしくなることへの対応。}
% \changes{v1.6c}{2016/06/06}{v1.6aでの修正で\'e など全てのアクセント付き文字で
%    周囲に\cs{xkanjiskip}が入らなくなっていたのを修正。}
% \changes{v1.6e}{2016/06/26}{v1.6a以降の修正で全てのアクセント付き文字で
%    トラブルが相次いだため、いったんパッチを除去。}
% \changes{v1.6r}{2018/07/25}{コード整理}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2018/07/28}{\fixcompositeaccent}
%<platexrelease>                   {Fix for non-zero baselineshift}%
%<platexrelease>\nofixcompositeaccent % force LaTeX original (conditional default)
%<platexrelease>% other commands are actually defined for pLaTeX2e 2018-07-28
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2016/07/01}{\fixcompositeaccent}
%<platexrelease>                   {Fix for non-zero baselineshift}%
%<platexrelease>\nofixcompositeaccent % force LaTeX original (always)
%<platexrelease>\let\fixcompositeaccent\@undefined
%<platexrelease>\let\nofixcompositeaccent\@undefined
%<platexrelease>\let\pltx@saved@oalign\@undefined
%<platexrelease>\let\pltx@oalign\@undefined
%<platexrelease>\let\pltx@saved@ltx@sh@ft\@undefined
%<platexrelease>\let\pltx@ltx@sh@ft\@undefined
%<platexrelease>\let\pltx@saved@text@composite@x\@undefined
%<platexrelease>\let\pltx@text@composite@x\@undefined
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{2016/04/17}{\fixcompositeaccent}
%<platexrelease>                   {Fix for non-zero baselineshift}%
%<platexrelease>\fixcompositeaccent % force pLaTeX definition (always)
%<platexrelease>\let\oalign\pltx@saved@oalign % no fix at that time
%<platexrelease>\let\ltx@sh@ft\pltx@saved@ltx@sh@ft % no fix at that time
%<platexrelease>\let\fixcompositeaccent\@undefined
%<platexrelease>\let\nofixcompositeaccent\@undefined
%<platexrelease>\let\pltx@saved@oalign\@undefined
%<platexrelease>\let\pltx@oalign\@undefined
%<platexrelease>\let\pltx@saved@ltx@sh@ft\@undefined
%<platexrelease>\let\pltx@ltx@sh@ft\@undefined
%<platexrelease>\let\pltx@saved@text@composite@x\@undefined
%<platexrelease>\let\pltx@text@composite@x\@undefined
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\fixcompositeaccent}
%<platexrelease>                   {Fix for non-zero baselineshift}%
%<platexrelease>\nofixcompositeaccent % force LaTeX original (always)
%<platexrelease>\let\fixcompositeaccent\@undefined
%<platexrelease>\let\nofixcompositeaccent\@undefined
%<platexrelease>\let\pltx@saved@oalign\@undefined
%<platexrelease>\let\pltx@oalign\@undefined
%<platexrelease>\let\pltx@saved@ltx@sh@ft\@undefined
%<platexrelease>\let\pltx@ltx@sh@ft\@undefined
%<platexrelease>\let\pltx@saved@text@composite@x\@undefined
%<platexrelease>\let\pltx@text@composite@x\@undefined
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{イタリック補正と\cs{xkanjiskip}}
%
% \begin{macro}{\check@nocorr@}
% 「\verb|あ\texttt{abc}い|」としたとき、書体の変更を指定された欧文の左側に
% 和欧文間スペースが入らないのを修正します。
% \changes{v1.3i}{2000/07/13}{\cs{text..}コマンドの左側に\cs{xkanjiskip}が
%    入らないのを修正（ありがとう、乙部＠東大さん）}
%
% コミュニティ版の修正：p\TeX{}のバージョンp3.1.11以前は、イタリック補正
% （以下|\/|と記す）と|\xkanjiskip|の挿入が衝突\footnote{和文のイタリック
% 補正用kernが、通常のexplicitな（\cs{kern}による）kernと同じ扱いを受けて
% いたため。}し
% \begin{enumerate}
% \item 「欧文文字 → |\/|」の場合には|\/|を無視する
%       （つまり後に|\xkanjiskip|挿入可能）
% \item 「和文文字 → |\/|」の場合にはこの後に|\xkanjiskip|は挿入できない
% \end{enumerate}
% という挙動になっていました。p3.2（2010年）の修正で
% \begin{itemize}
% \item |\xkanjiskip|挿入時にはいかなる場合も|\/|を無視する
% \end{itemize}
% という挙動に変更されました。p\LaTeX{}カーネルの|\check@nocorr@|の修正は、
% p3.1.11以前の2.への対処でしたが、これは「|\text...{}|の左への|\/|挿入」を
% 無効化しているので、|\textit{f\textup{a}}|で本来入るべきイタリック補正が
% 入りませんでした。p3.2以降ではp\TeX{}の|\xkanjiskip|対策が不要になって
% いますので、コミュニティ版では削除しました。
% \changes{v1.6i}{2017/09/24}{2010年のp\TeX{}本体の修正により、v1.3iで入れた
%    対処が不要になっていたので削除}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2017/10/28}{\check@nocorr@}
%<platexrelease>                   {Italic correction before \textt...}%
%<platexrelease>\def \check@nocorr@ #1#2\nocorr#3\@nil {%
%<platexrelease>  \let \check@icl \maybe@ic
%<platexrelease>  \def \check@icr {\ifvmode \else \aftergroup \maybe@ic \fi}%
%<platexrelease>  \def \reserved@a {\nocorr}%
%<platexrelease>  \def \reserved@b {#1}%
%<platexrelease>  \def \reserved@c {#3}%
%<platexrelease>  \ifx \reserved@a \reserved@b
%<platexrelease>    \ifx \reserved@c \@empty
%<platexrelease>      \let \check@icl \@empty
%<platexrelease>    \else
%<platexrelease>      \let \check@icl \@empty
%<platexrelease>      \let \check@icr \@empty
%<platexrelease>    \fi
%<platexrelease>  \else
%<platexrelease>    \ifx \reserved@c \@empty
%<platexrelease>    \else
%<platexrelease>      \let \check@icr \@empty
%<platexrelease>    \fi
%<platexrelease>  \fi
%<platexrelease>}
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\check@nocorr@}
%<platexrelease>                   {ASCII Corporation original}%
%<platexrelease>\def \check@nocorr@ #1#2\nocorr#3\@nil {%
%<platexrelease>  \let \check@icl \relax % changed from \maybe@ic
%<platexrelease>  \def \check@icr {\ifvmode \else \aftergroup \maybe@ic \fi}%
%<platexrelease>  \def \reserved@a {\nocorr}%
%<platexrelease>  \def \reserved@b {#1}%
%<platexrelease>  \def \reserved@c {#3}%
%<platexrelease>  \ifx \reserved@a \reserved@b
%<platexrelease>    \ifx \reserved@c \@empty
%<platexrelease>      \let \check@icl \@empty
%<platexrelease>    \else
%<platexrelease>      \let \check@icl \@empty
%<platexrelease>      \let \check@icr \@empty
%<platexrelease>    \fi
%<platexrelease>  \else
%<platexrelease>    \ifx \reserved@c \@empty
%<platexrelease>    \else
%<platexrelease>      \let \check@icr \@empty
%<platexrelease>    \fi
%<platexrelease>  \fi
%<platexrelease>}
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\<}
% 最後に、|\inhibitglue|の簡略形を定義します。
% このコマンドは、和文フォントのメトリック情報から、自動的に挿入される
% グルーの挿入を禁止します。
%
% 2014年のp\TeX{}の|\inhibitglue|のバグ修正に伴い、
% |\inhibitglue|が垂直モードでは効かなくなりました。
% \LaTeX{}では垂直モードと水平モードの区別が隠されていますので、
% p\LaTeX{}の追加命令である|\<|は段落頭でも効くように修正します。
%
% |\DeclareRobustCommand|を使うと|\protect|の影響で前方の文字に対する
% |\inhibitglue|が効かなくなるので、e-\TeX{}の|\protected|が必要です。
% \changes{v1.6i}{2017/09/24}{\cs{<}が段落頭でも効くようにした}
% \changes{v1.6v}{2020/02/01}{定義をpldefsからplcoreへ移動}
%    \begin{macrocode}
%<platexrelease>\plIncludeInRelease{2017/10/28}{\<}
%<platexrelease>                   {\inhibitglue in vertical mode}%
%<*plcore|platexrelease>
\ifx\protected\@undefined
\def\<{\inhibitglue}
\else
\protected\def\<{\ifvmode\leavevmode\fi\inhibitglue}
\fi
%</plcore|platexrelease>
%<platexrelease>\plEndIncludeInRelease
%<platexrelease>\plIncludeInRelease{0000/00/00}{\<}
%<platexrelease>                   {ASCII Corporation original}%
%<platexrelease>\def\<{\inhibitglue}
%<platexrelease>\plEndIncludeInRelease
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{デフォルト設定ファイルの読み込み}
% デフォルト設定ファイル\file{pldefs.ltx}は、もともと\file{plcore.ltx}の途中で
% 読み込んでいましたが、2018年以降の新しいコミュニティ版\pLaTeX{}では
% \file{platex.ltx}から読み込むことにしました。
% 実際の中身については、第\ref{plfonts:pldefs}節を参照してください。
% \changes{v1.6k}{2017/12/05}{デフォルト設定ファイルの読み込みを
%    \file{plcore.ltx}から\file{platex.ltx}へ移動}
%
%
% \section{デフォルト設定ファイル}\label{plfonts:pldefs}
% ここでは、フォーマットファイルに読み込まれるデフォルト値を設定しています。
% この節での内容は\file{pldefs.ltx}に出力されます。
% このファイルの内容を\file{plcore.ltx}に含めてもよいのですが、
% デフォルトの設定を参照しやすいように、別ファイルにしてあります。
%
% プリロードサイズは、\dst{}プログラムのオプションで変更することができます。
% これ以外の設定を変更したい場合は、\file{pldefs.ltx}を
% 直接、修正するのではなく、このファイルを\file{pldefs.cfg}という名前で
% コピーをして、そのファイルに対して修正を加えるようにしてください。
%    \begin{macrocode}
%<*pldefs>
\ProvidesFile{pldefs.ltx}
      [2021/01/10 v1.7k pLaTeX Kernel (Default settings)]
%</pldefs>
%    \end{macrocode}
%
% \subsection{テキストフォント}
% テキストフォントのための属性やエラー書体などの宣言です。
% p\LaTeX{}のデフォルトの横組エンコードはJY1、縦組エンコードはJT1とします。
% \changes{v1.6s}{2019/08/13}{Explicitly set some defaults
%    after \cs{DeclareErrorKanjiFont} change
%    (sync with ltfssini.dtx 2019/07/09 v3.1c)}
% \changes{v1.7k}{2021/01/10}{Adjust start values for series and shape (latex2e/444)
%    (sync with ltfssini.dtx 2020/12/06 v3.2f)}
% \noindent
% 縦横エンコード共通：
%    \begin{macrocode}
%<*pldefs>
\DeclareKanjiEncodingDefaults{}{}
\DeclareErrorKanjiFont{JY1}{mc}{m}{n}{10}
\kanjifamily{mc}
\def\k@series{m}    % \kanjiseries{m}
\def\k@shape{n}     % \kanjishape{n}
\fontsize{10}{10}
%    \end{macrocode}
% 横組エンコード：
%    \begin{macrocode}
\DeclareYokoKanjiEncoding{JY1}{}{}
\DeclareKanjiSubstitution{JY1}{mc}{m}{n}
%    \end{macrocode}
% 縦組エンコード：
%    \begin{macrocode}
\DeclareTateKanjiEncoding{JT1}{}{}
\DeclareKanjiSubstitution{JT1}{mc}{m}{n}
%    \end{macrocode}
% 縦横のエンコーディングのセット化：
% \changes{v1.6j}{2017/11/06}{縦横のエンコーディングのセット化を
%    plcoreからpldefsへ移動}
%    \begin{macrocode}
\KanjiEncodingPair{JY1}{JT1}
%    \end{macrocode}
% フォント属性のデフォルト値：
% \LaTeXe~2019-10-01までは|\shapedefault|は|\updefault|でしたが、
% \LaTeXe~2020-02-02で|\updefault|が``n''から``up''へと修正されたことに
% 伴い、|\shapedefault|は明示的に``n''に設定されました。
% \changes{v1.6v}{2020/02/01}{Set \cs{kanjishapedefault} explicitly to ``n''
%    (sync with fontdef.dtx 2019/12/17 v3.0e)}
%    \begin{macrocode}
\newcommand\mcdefault{mc}
\newcommand\gtdefault{gt}
\newcommand\kanjiencodingdefault{JY1}
\newcommand\kanjifamilydefault{\mcdefault}
\newcommand\kanjiseriesdefault{\mddefault}
\newcommand\kanjishapedefault{n}% formerly \updefault
%    \end{macrocode}
% 和文エンコードの指定：
%    \begin{macrocode}
\kanjiencoding{JY1}
%    \end{macrocode}
% フォント定義：
% これらの具体的な内容は第\ref{plfonts:fontdef}節を参照してください。
% \changes{v1.3}{1997/01/24}{Rename font definition filename.}
%    \begin{macrocode}
\input{jy1mc.fd}
\input{jy1gt.fd}
\input{jt1mc.fd}
\input{jt1gt.fd}
%    \end{macrocode}
% フォントを有効にします。
%    \begin{macrocode}
\fontencoding{JT1}\selectfont
\fontencoding{JY1}\selectfont
%    \end{macrocode}
%
% \changes{v1.3b}{1997/01/30}{数式用フォントの宣言をクラスファイルに移動した}
%
%
% \subsection{プリロードフォント}
% あらかじめフォーマットファイルにロードされるフォントの宣言です。
% \dst{}プログラムのオプションでロードされるフォントのサイズを
% 変更することができます。\file{plfmt.ins}では|xpt|を指定しています。
%    \begin{macrocode}
%<*xpt>
\DeclarePreloadSizes{JY1}{mc}{m}{n}{5,7,10,12}
\DeclarePreloadSizes{JY1}{gt}{m}{n}{5,7,10,12}
\DeclarePreloadSizes{JT1}{mc}{m}{n}{5,7,10,12}
\DeclarePreloadSizes{JT1}{gt}{m}{n}{5,7,10,12}
%</xpt>
%<*xipt>
\DeclarePreloadSizes{JY1}{mc}{m}{n}{5,7,10.95,12}
\DeclarePreloadSizes{JY1}{gt}{m}{n}{5,7,10.95,12}
\DeclarePreloadSizes{JT1}{mc}{m}{n}{5,7,10.95,12}
\DeclarePreloadSizes{JT1}{gt}{m}{n}{5,7,10.95,12}
%</xipt>
%<*xiipt>
\DeclarePreloadSizes{JY1}{mc}{m}{n}{7,9,12,14.4}
\DeclarePreloadSizes{JY1}{gt}{m}{n}{7,9,12,14.4}
\DeclarePreloadSizes{JT1}{mc}{m}{n}{7,9,12,14.4}
\DeclarePreloadSizes{JT1}{gt}{m}{n}{7,9,12,14.4}
%</xiipt>
%<*ori>
\DeclarePreloadSizes{JY1}{mc}{m}{n}
        {5,6,7,8,9,10,10.95,12,14.4,17.28,20.74,24.88}
\DeclarePreloadSizes{JY1}{gt}{m}{n}
        {5,6,7,8,9,10,10.95,12,14.4,17.28,20.74,24.88}
\DeclarePreloadSizes{JT1}{mc}{m}{n}
        {5,6,7,8,9,10,10.95,12,14.4,17.28,20.74,24.88}
\DeclarePreloadSizes{JT1}{gt}{m}{n}
        {5,6,7,8,9,10,10.95,12,14.4,17.28,20.74,24.88}
%</ori>
%    \end{macrocode}
%
%
% \subsection{組版パラメータ}
% 禁則パラメータや文字間へ挿入するスペースの設定などです。
% 実際の各文字への禁則パラメータおよびスペースの挿入の許可設定などは、
% \file{kinsoku.tex}で行なっています。
% 具体的な設定については、\file{kinsoku.dtx}を参照してください。
%    \begin{macrocode}
\InputIfFileExists{kinsoku.tex}%
  {\message{Loading kinsoku patterns for japanese.}}
  {\errhelp{The configuration for kinsoku is incorrectly installed.^^J%
            If you don't understand this error message you need
            to seek^^Jexpert advice.}%
   \errmessage{OOPS! I can't find any kinsoku patterns for japanese^^J%
               \space Think of getting some or the
               platex2e setup will never succeed}\@@end}
%    \end{macrocode}
%
% 組版パラメータの設定をします。
% |\kanjiskip|は、漢字と漢字の間に挿入されるグルーです。
% |\noautospacing|で、挿入を中止することができます。
% デフォルトは|\autospacing|です。
%    \begin{macrocode}
\kanjiskip=0pt plus .4pt minus .5pt
\autospacing
%    \end{macrocode}
% |\xkanjiskip|は、和欧文間に自動的に挿入されるグルーです。
% |\noautoxspacing|で、挿入を中止することができます。
% デフォルトは|\autoxspacing|です。
% \changes{v1.1c}{1995/09/12}{\cs{xkanjiskip}のデフォルト値}
%    \begin{macrocode}
\xkanjiskip=.25zw plus1pt minus1pt
\autoxspacing
%    \end{macrocode}
% |\jcharwidowpenalty|は、パラグラフに対する禁則です。
% パラグラフの最後の行が１文字だけにならないように調整するために使われます。
%    \begin{macrocode}
\jcharwidowpenalty=500
%    \end{macrocode}
%
% ここまでが、\file{pldefs.ltx}の内容です。
%    \begin{macrocode}
%</pldefs>
%    \end{macrocode}
%
%
%
% \section{フォント定義ファイル}\label{plfonts:fontdef}
% \changes{v1.3}{1997/01/24}{Rename provided font definition filename.}
% ここでは、フォント定義ファイルの設定をしています。フォント定義ファイルは、
% \LaTeX{}のフォント属性を\TeX{}フォントに置き換えるためのファイルです。
% 記述方法についての詳細は、|fntguide.tex|を参照してください。
%
% 欧文書体の設定については、
% \file{cmfonts.fdd}や\file{slides.fdd}などを参照してください。
% \file{skfonts.fdd}には、写研代用書体を使うためのパッケージと
% フォント定義が記述されています。
%    \begin{macrocode}
%<JY1mc>\ProvidesFile{jy1mc.fd}
%<JY1gt>\ProvidesFile{jy1gt.fd}
%<JT1mc>\ProvidesFile{jt1mc.fd}
%<JT1gt>\ProvidesFile{jt1gt.fd}
%<JY1mc,JY1gt,JT1mc,JT1gt>       [2018/07/03 v1.6q KANJI font defines]
%    \end{macrocode}
% 横組用、縦組用ともに、
% 明朝体のシリーズ|bx|がゴシック体となるように宣言しています。
% \changes{v1.2}{1995/11/24}{it, sl, scの宣言を外した}
% \changes{v1.3b}{1997/01/29}{フォント定義ファイルのサイズ指定の調整}
% \changes{v1.3b}{1997/03/11}{すべてのサイズをロード可能にした}
% また、シリーズ|b|は同じ書体の|bx|と等価になるように宣言します。
% \changes{v1.6q}{2018/07/03}{シリーズbがbxと等価になるように宣言}
%
% p\LaTeX{}では従属書体にOT1エンコーディングを指定しています。
% また、要求サイズ（指定されたフォントサイズ）が10ptのとき、
% 全角幅の実寸が9.62216ptとなるようにしますので、
% 和文スケール値（$1\,\mathrm{zw} \div \textmc{要求サイズ}$）は
% $9.62216\,\mathrm{pt}/10\,\mathrm{pt}=0.962216$です。
% min10系のメトリックは全角幅が9.62216ptでデザインされているので、
% これを1倍で読込みます。
% \changes{v1.6l}{2018/02/04}{和文スケール値を明文化}
%    \begin{macrocode}
%<*JY1mc>
\DeclareKanjiFamily{JY1}{mc}{}
\DeclareRelationFont{JY1}{mc}{m}{}{OT1}{cmr}{m}{}
\DeclareRelationFont{JY1}{mc}{bx}{}{OT1}{cmr}{bx}{}
\DeclareFontShape{JY1}{mc}{m}{n}{<5> <6> <7> <8> <9> <10> sgen*min
    <10.95><12><14.4><17.28><20.74><24.88> min10
    <-> min10
    }{}
\DeclareFontShape{JY1}{mc}{bx}{n}{<->ssub*gt/m/n}{}
\DeclareFontShape{JY1}{mc}{b}{n}{<->ssub*mc/bx/n}{}
%</JY1mc>
%<*JT1mc>
\DeclareKanjiFamily{JT1}{mc}{}
\DeclareRelationFont{JT1}{mc}{m}{}{OT1}{cmr}{m}{}
\DeclareRelationFont{JT1}{mc}{bx}{}{OT1}{cmr}{bx}{}
\DeclareFontShape{JT1}{mc}{m}{n}{<5> <6> <7> <8> <9> <10> sgen*tmin
    <10.95><12><14.4><17.28><20.74><24.88> tmin10
    <-> tmin10
    }{}
\DeclareFontShape{JT1}{mc}{bx}{n}{<->ssub*gt/m/n}{}
\DeclareFontShape{JT1}{mc}{b}{n}{<->ssub*mc/bx/n}{}
%</JT1mc>
%<*JY1gt>
\DeclareKanjiFamily{JY1}{gt}{}
\DeclareRelationFont{JY1}{gt}{m}{}{OT1}{cmr}{bx}{}
\DeclareFontShape{JY1}{gt}{m}{n}{<5> <6> <7> <8> <9> <10> sgen*goth
    <10.95><12><14.4><17.28><20.74><24.88> goth10
    <-> goth10
    }{}
\DeclareFontShape{JY1}{gt}{bx}{n}{<->ssub*gt/m/n}{}
\DeclareFontShape{JY1}{gt}{b}{n}{<->ssub*gt/bx/n}{}
%</JY1gt>
%<*JT1gt>
\DeclareKanjiFamily{JT1}{gt}{}
\DeclareRelationFont{JT1}{gt}{m}{}{OT1}{cmr}{bx}{}
\DeclareFontShape{JT1}{gt}{m}{n}{<5> <6> <7> <8> <9> <10> sgen*tgoth
    <10.95><12><14.4><17.28><20.74><24.88> tgoth10
    <-> tgoth10
    }{}
\DeclareFontShape{JT1}{gt}{bx}{n}{<->ssub*gt/m/n}{}
\DeclareFontShape{JT1}{gt}{b}{n}{<->ssub*gt/bx/n}{}
%</JT1gt>
%    \end{macrocode}
%
%
% \Finale
%
\endinput
