From c98e9ebef816f09dc54c52a01df4f978e1b210fc Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 13 Apr 2020 03:03:00 +0000 Subject: CTAN sync 202004130303 --- language/japanese/platex/Makefile | 3 +- language/japanese/platex/README.md | 4 +- language/japanese/platex/exppl2e.pdf | Bin 184087 -> 143281 bytes language/japanese/platex/exppl2e.sty | 100 +-- language/japanese/platex/platex-en.pdf | Bin 158659 -> 146951 bytes language/japanese/platex/platex.dtx | 21 +- language/japanese/platex/platex.pdf | Bin 298165 -> 250767 bytes language/japanese/platex/platexrelease.dtx | 31 +- language/japanese/platex/platexrelease.pdf | Bin 125169 -> 107343 bytes language/japanese/platex/plcore.dtx | 39 +- language/japanese/platex/pldoc.pdf | Bin 874153 -> 836874 bytes language/japanese/platex/plfonts.dtx | 1347 ++++++++++++++++++++++++---- language/japanese/platex/plnewsc14.tex | 209 +++++ language/japanese/platex/plvers.dtx | 180 ++-- 14 files changed, 1562 insertions(+), 372 deletions(-) create mode 100644 language/japanese/platex/plnewsc14.tex (limited to 'language') diff --git a/language/japanese/platex/Makefile b/language/japanese/platex/Makefile index ac45cee9c1..fdabfd5d4f 100644 --- a/language/japanese/platex/Makefile +++ b/language/japanese/platex/Makefile @@ -5,7 +5,8 @@ DOCTARGET = platex platexrelease pldoc exppl2e \ PDFTARGET = $(addsuffix .pdf,$(DOCTARGET)) DVITARGET = $(addsuffix .dvi,$(DOCTARGET)) KANJI = -kanji=jis -FONTMAP = -f ipaex.map -f ptex-ipaex.map +#FONTMAP = -f ipaex.map -f ptex-ipaex.map +FONTMAP = -f haranoaji.map -f ptex-haranoaji.map TEXMF = $(shell kpsewhich -var-value=TEXMFHOME) default: $(STRIPTARGET) $(DVITARGET) diff --git a/language/japanese/platex/README.md b/language/japanese/platex/README.md index 399aa67ca4..8b3ea2ba2a 100644 --- a/language/japanese/platex/README.md +++ b/language/japanese/platex/README.md @@ -15,7 +15,7 @@ If you have issues, please let us know from the above page. The original ASCII edition can be obtained from: -- https://ctan.org/pkg/ptex-texmf +- https://asciidwango.github.io/ptex/base/sources.html#platex ## Changes from the original ASCII edition @@ -64,6 +64,6 @@ the 3-clause BSD license (see [LICENSE](./LICENSE)). ## Release Date -2020-02-29+1 +2020-04-12 Japanese TeX Development Community diff --git a/language/japanese/platex/exppl2e.pdf b/language/japanese/platex/exppl2e.pdf index d680a92a45..c5bf43b742 100644 Binary files a/language/japanese/platex/exppl2e.pdf and b/language/japanese/platex/exppl2e.pdf differ diff --git a/language/japanese/platex/exppl2e.sty b/language/japanese/platex/exppl2e.sty index b28fa53dbb..b5fc0cc2f3 100644 --- a/language/japanese/platex/exppl2e.sty +++ b/language/japanese/platex/exppl2e.sty @@ -34,7 +34,7 @@ % case 1: This file must be a normal package \NeedsTeXFormat{pLaTeX2e} \ProvidesPackage{exppl2e} - [2020/02/09 v1.1f Experimental pLaTeX2e features] + [2020/02/10 v1.1g Experimental pLaTeX2e features] \PackageWarningNoLine{exppl2e}{% This is the unstable, experimental part of pLaTeX2e.\MessageBreak This package may contain:\MessageBreak @@ -332,107 +332,13 @@ % % \section{\cs{verb}先頭の合字抑制と\cs{xkanjiskip}} % -% \begin{macro}{\do@noligs} -% |>|などの一部の文字について、|\xspcode`\>=3|としたときに -% |\texttt{>}|では前後に|\xkanjiskip|由来のアキが入るのに、 -% |\verb+>+|では後ろにしかアキが入らないという現象に対処します。 -% -% 元の定義は\file{ltmiscen.dtx}を参照してください。 -% p\LaTeX{}では、|\kern\z@|を|\vadjust{}|に置き換えることで -% 「合字処理を抑止」かつ「和欧文間スペースの挿入処理は透過」を実現します。 -% (Issue \#87) -% \begin{macrocode} -\def\do@noligs#1{% - \catcode`#1\active - \begingroup - \lccode`\~`#1\relax - \lowercase{\endgroup\def~{\leavevmode\vadjust{}\char`#1}}} -% \end{macrocode} -% \end{macro} +% 2020/04/12に導入済み。 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \section{NFSSのsize functionの日本語化} % -% \begin{macro}{\inlist@} -% |\do@subst@correction|の日本語化に必要なので、 -% 比較する際に引数・リストとも\cs{detokenize}によって文字列化するようにしました。 -% \changes{v1.6x}{2020/02/05}{引数・リストとも\cs{detokenize}によって文字列化} -% \begin{macrocode} -\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} -% \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|は -% 和文フォントに対して使えませんので、和文に対応させます。 -% \changes{v1.6x}{2020/02/05}{\cs{do@subst@correction}の日本語化} -% -% オリジナルの\LaTeX{}の定義は、欧文用として使います。 -% \begin{macrocode} -\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 -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} +% 2020/04/12に導入済み。 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/language/japanese/platex/platex-en.pdf b/language/japanese/platex/platex-en.pdf index 56ae371546..4506439d35 100644 Binary files a/language/japanese/platex/platex-en.pdf and b/language/japanese/platex/platex-en.pdf differ diff --git a/language/japanese/platex/platex.dtx b/language/japanese/platex/platex.dtx index a7147374c5..fd595fe833 100644 --- a/language/japanese/platex/platex.dtx +++ b/language/japanese/platex/platex.dtx @@ -3,7 +3,7 @@ % % Copyright 1995,1996 ASCII Corporation. % Copyright (c) 2010 ASCII MEDIA WORKS -% Copyright (c) 2016-2019 Japanese TeX Development Community +% Copyright (c) 2016-2020 Japanese TeX Development Community % % This file is part of the pLaTeX2e system (community edition). % ------------------------------------------------------------- @@ -85,6 +85,7 @@ % \changes{v1.0x}{2018/09/03}{plautopatchに言及} % \changes{v1.0y}{2018/09/22}{最終更新日を\file{pldoc.pdf}に表示} % \changes{v1.0z}{2019/09/29}{タイポ修正} +% \changes{v1.1}{2020/03/24}{ドキュメントを更新} %\else % \changes{v1.0}{1995/05/08}{first edition} % \changes{v1.0a}{1995/08/25}{Added 'Compatibility', `Usage of \dst{}' @@ -128,6 +129,7 @@ % \changes{v1.0x}{2018/09/03}{Mention plautopatch.} % \changes{v1.0y}{2018/09/22}{Show last update info on \file{pldoc.pdf}} % \changes{v1.0z}{2019/09/29}{Fix typos in document.} +% \changes{v1.1}{2020/03/24}{Update document.} %\fi % \fi % @@ -135,7 +137,7 @@ %<*driver> \NeedsTeXFormat{pLaTeX2e} % \fi -\ProvidesFile{platex.dtx}[2019/09/29 v1.0z pLaTeX document file] +\ProvidesFile{platex.dtx}[2020/03/24 v1.1 pLaTeX document file] % \iffalse \documentclass{jltxdoc} \usepackage{plext} @@ -200,21 +202,22 @@ % \changes{v1.0q}{2017/11/29}{英語版ドキュメントを追加} % \changes{v1.0x}{2018/09/03}{ドキュメントを更新} % \changes{v1.0z}{2019/09/29}{タイポ修正} +% \changes{v1.1}{2020/03/24}{ドキュメントを更新} %\else % \changes{v1.0f}{2016/04/12}{Update document.} % \changes{v1.0k}{2016/05/21}{Print also changes.} % \changes{v1.0q}{2017/11/29}{New English documentation added!} % \changes{v1.0x}{2018/09/03}{Update document.} % \changes{v1.0z}{2019/09/29}{Fix typos in document.} +% \changes{v1.1}{2020/03/24}{Update document.} %\fi %\ifJAPANESE % \begin{chuui} +% \pLaTeXe{}は、\LaTeXe{}を日本語組版用に拡張・調整したものです。 % この文書では「コミュニティ版\pLaTeXe{}」について簡単に説明します。 -% 株式会社アスキー(現アスキー・メディアワークス -% \footnote{アスキー日本語\TeX{}(\pTeX{})、 -% \texttt{http://ascii.asciimw.jp/pb/ptex/}})が配布している -% \pLaTeXe{}(以下、アスキー版\pLaTeXe{})とは異なる内容ですので、 -% 注意してください。 +% 株式会社アスキーおよび株式会社アスキー・メディアワークスが +% 配布していた\pLaTeXe{}(以下、「アスキー版\pLaTeXe{}」)とは +% 異なりますので、注意してください。 % \end{chuui} %\else % ^^A \begin{chuui}[] @@ -877,7 +880,7 @@ % current \pLaTeXe\ and older versions or original \LaTeXe. % % \subsection{Compatibility with \LaTeXe} -% \pLaTeXe\ is in most part upper compatible with \LaTeXe, +% \pLaTeXe\ is in most part upward compatible with \LaTeXe, % but some parameters are adjusted to be suitable for Japanese. % Therefore, you should not expect identical output, even though % the same source can be processed on both \LaTeXe\ and \pLaTeXe. @@ -1436,7 +1439,7 @@ echo "" > ltxdoc.cfg % makeindexコマンドには、このオプションがありません。 %\else % Make the Change log and Glossary (Change History) using mendex. -% `Mendex' is a Japanese index processor, which is mostly upper +% `Mendex' is a Japanese index processor, which is mostly upward % compatible with `makeindex' and automatically handles readings % of Kanji words. % diff --git a/language/japanese/platex/platex.pdf b/language/japanese/platex/platex.pdf index 4ffb0b5b7b..04b14d242d 100644 Binary files a/language/japanese/platex/platex.pdf and b/language/japanese/platex/platex.pdf differ diff --git a/language/japanese/platex/platexrelease.dtx b/language/japanese/platex/platexrelease.dtx index d230ade5fd..c31d8c0d20 100644 --- a/language/japanese/platex/platexrelease.dtx +++ b/language/japanese/platex/platexrelease.dtx @@ -1,7 +1,7 @@ % \iffalse meta-comment %% File: platexrelease.dtx % -% Copyright (c) 2016-2019 Japanese TeX Development Community +% Copyright (c) 2016-2020 Japanese TeX Development Community % % This file is part of the pLaTeX2e system (community edition). % ------------------------------------------------------------- @@ -31,6 +31,7 @@ % \changes{v1.0m}{2018/05/22}{reset \cs{\requestedLaTeXdate} for % current and latest options % (sync with latexrelease.dtx 2018/05/08 v1.0k)} +% \changes{v1.0n}{2020/03/28}{先にlatexreleaseが読み込まれていたら警告} % \fi % % \iffalse @@ -40,7 +41,7 @@ \ProvidesFile{platexrelease.dtx} % %\ProvidesPackage{platexrelease} - [2018/05/22 v1.0m latexrelease support for pLaTeX Kernel + [2020/03/28 v1.0n latexrelease support for pLaTeX Kernel (including releases up to \platexreleaseversion)] %<*driver> \documentclass{jltxdoc} @@ -198,9 +199,25 @@ % % \section{コード} % -% 最初に\Lpack{latexrelease}パッケージを読み込みます。 +% \Lpack{platexrelease}パッケージが読み込まれましたので、 +% 効率化のため|\begin{document|での確認コードを無効化します。 +% (\file{plvers.dtx}の2020/03/28 v1.1u以降)。 % \begin{macrocode} %<*platexrelease> +\ifx\p@warn@latexrelease\@undefined\else +\let\p@warn@latexrelease\relax +\fi +% \end{macrocode} +% +% 最初に\Lpack{latexrelease}パッケージを読み込みます。 +% これより前にすでに読み込まれている場合は警告します。 +% \changes{v1.0n}{2020/03/28}{先にlatexreleaseが読み込まれていたら警告} +% \begin{macrocode} +\ifx\latexreleaseversion\@undefined\else + \PackageWarningNoLine{platexrelease}{% + Package `latexrelease' is already loaded;\MessageBreak + load `platexrelease' earlier} +\fi \RequirePackageWithOptions{latexrelease} % \end{macrocode} % @@ -300,7 +317,6 @@ of this package available from CTAN} % \begin{macrocode} \let\pfmtversion\requestedplpatchdate \let\currentpLaTeXdate\requestedpLaTeXdate -% % \end{macrocode} % % このあとは、p\LaTeXe{}のカーネルの変更点を示すコードが入ります。 @@ -323,6 +339,12 @@ of this package available from CTAN} some critical bugs. We advise you to\MessageBreak select another format date} \plIncludeInRelease{2017/10/28}{\PackageWarning}{pLaTeX Info}% + % * <2020-04-12> + % * <2020-02-02>+3 + % * <2020-02-02>+2 + % * <2020-02-02>+1 + % * <2020-02-02> + % * <2019-10-01>+1 % * <2019-10-01> % * <2019-04-06> % * <2018-12-01> @@ -377,6 +399,7 @@ of this package available from CTAN} \plIncludeInRelease{0000/00/00}{\PackageWarning}{pLaTeX Info}% % * <2006/11/10> \plEndIncludeInRelease +% % \end{macrocode} % % \Finale diff --git a/language/japanese/platex/platexrelease.pdf b/language/japanese/platex/platexrelease.pdf index 2dc9289fe0..a0f5965650 100644 Binary files a/language/japanese/platex/platexrelease.pdf and b/language/japanese/platex/platexrelease.pdf differ diff --git a/language/japanese/platex/plcore.dtx b/language/japanese/platex/plcore.dtx index f625ad2f1d..25f31fbe2c 100644 --- a/language/japanese/platex/plcore.dtx +++ b/language/japanese/platex/plcore.dtx @@ -3,7 +3,7 @@ % % Copyright 1994-2001 ASCII Corporation. % Copyright (c) 2010 ASCII MEDIA WORKS -% Copyright (c) 2016-2019 Japanese TeX Development Community +% Copyright (c) 2016-2020 Japanese TeX Development Community % % This file is part of the pLaTeX2e system (community edition). % ------------------------------------------------------------- @@ -123,13 +123,14 @@ % \changes{v1.3d}{2019/10/19}{判定順序を修正;extended modeかつ % FAM256拡張ありの場合に限りレジスタ数が65536個のため。} % \changes{v1.3d}{2019/10/19}{コピー忘れ} +% \changes{v1.3e}{2020/03/05}{合字処理を抑止しつつ\cs{xkanjiskip}は挿入} % \fi % % \iffalse %<*driver> \NeedsTeXFormat{pLaTeX2e} % \fi -\ProvidesFile{plcore.dtx}[2019/10/19 v1.3d pLaTeX core file] +\ProvidesFile{plcore.dtx}[2020/03/05 v1.3e pLaTeX core file] % \iffalse \documentclass{jltxdoc} \GetFileInfo{plcore.dtx} @@ -1876,6 +1877,40 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\do@noligs} +% |>|などの一部の文字について、|\xspcode`\>=3|としたときに +% |\texttt{>}|では前後に|\xkanjiskip|由来のアキが入るのに、 +% |\verb+>+|では後ろにしかアキが入らないという現象に対処します。 +% +% 元の定義は\file{ltmiscen.dtx}を参照してください。 +% p\LaTeX{}では、|\kern\z@|を|\vadjust{}|に置き換えることで +% 「合字処理を抑止」かつ「和欧文間スペースの挿入処理は透過」を実現します。 +% (Issue \#87) +% \changes{v1.3e}{2020/03/05}{合字処理を抑止しつつ\cs{xkanjiskip}は挿入} +% \begin{macrocode} +% +%\plIncludeInRelease{2020/04/12}{\do@noligs} +% {Allow \xkanjiskip while avoiding ligature}% +%<*plcore|platexrelease> +\def\do@noligs#1{% + \catcode`#1\active + \begingroup + \lccode`\~`#1\relax + \lowercase{\endgroup\def~{\leavevmode\vadjust{}\char`#1}}} +% +%\plEndIncludeInRelease +%\plIncludeInRelease{0000/00/00}{\do@noligs} +% {LaTeX2e original}% +%\def\do@noligs#1{% +% \catcode`#1\active +% \begingroup +% \lccode`\~`#1\relax +% \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1}}} +%\plEndIncludeInRelease +%<*plcore> +% \end{macrocode} +% \end{macro} +% % % \subsection{tabbing環境} % diff --git a/language/japanese/platex/pldoc.pdf b/language/japanese/platex/pldoc.pdf index b005e62239..c4041d1bfb 100644 Binary files a/language/japanese/platex/pldoc.pdf and b/language/japanese/platex/pldoc.pdf differ diff --git a/language/japanese/platex/plfonts.dtx b/language/japanese/platex/plfonts.dtx index 7163f9a564..12efc700e8 100644 --- a/language/japanese/platex/plfonts.dtx +++ b/language/japanese/platex/plfonts.dtx @@ -145,13 +145,28 @@ % (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)} % \fi % % \iffalse %<*driver> \NeedsTeXFormat{pLaTeX2e} % \fi -\ProvidesFile{plfonts.dtx}[2020/02/28 v1.6z pLaTeX New Font Selection Scheme] +\ProvidesFile{plfonts.dtx}[2020/04/07 v1.7f pLaTeX New Font Selection Scheme] % \iffalse \documentclass{jltxdoc} \GetFileInfo{plfonts.dtx} @@ -209,23 +224,82 @@ % \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} -% この節で、具体的に\NFSS2を拡張するコマンドやマクロの定義を行なっています。 +% この節で、実際のコードを説明します。 % % \subsection{準備} % \NFSS2を拡張するための準備です。 % 和文フォントの属性を格納するオブジェクトや長さ変数、 % 属性を切替える際の判断材料として使うリストなどを定義しています。 % -% \file{ptrace}パッケージは\LaTeX{}の\file{tracefnt}パッケージに依存します。 +% \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} - [2019/09/16 v1.6t Standard pLaTeX package (font tracing)] + [2020/03/26 v1.7e Standard pLaTeX package (font tracing)] \RequirePackageWithOptions{tracefnt} % % \end{macrocode} @@ -373,7 +447,7 @@ % \end{macrocode} % \end{macro} % -% \subsubsection{一時コマンド} +% \subsubsection{一時コマンド}\label{afont-ascii} % % \begin{macro}{\afont} % \LaTeX{}内部の|\do@subst@correction|マクロでは、 @@ -402,12 +476,44 @@ % % \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} +% +%\plIncludeInRelease{2020/04/12}{\inlist@} +% {Detokenize}% +%<*plcore|platexrelease> \def\inlist@#1#2{% - \def\in@@##1<#1>##2##3\in@@{% - \ifx\in@##2\in@false\else\in@true\fi}% - \in@@#2<#1>\in@\in@@} + \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} +% +%\plEndIncludeInRelease +%\plIncludeInRelease{0000/00/00}{\inlist@} +% {ASCII Corporation original}% +%\def\inlist@#1#2{% +% \def\in@@##1<#1>##2##3\in@@{% +% \ifx\in@##2\in@false\else\in@true\fi}% +% \in@@#2<#1>\in@\in@@} +%\plEndIncludeInRelease +%<*plcore> % \end{macrocode} % \end{macro} % @@ -499,20 +605,19 @@ % \subsubsection{支柱} % 行間の調整などに用いる支柱です。 % 支柱のもととなるボックスの大きさは、フォントサイズが変更されるたびに、 -% |\set@fontsize|コマンドによって変化します。 -% -% フォントサイズが変更されたときに、|\set@fontsize|コマンドで更新されます。 +% |\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 |\ystrutbox|(新設):高さと深さが7対3の横組用の支柱ボックスレジスタ +% \item |\tstrutbox|:高さと深さが5対5の縦組用の支柱ボックスレジスタ +% \item |\zstrutbox|:高さと深さが7対3の縦組用の支柱ボックスレジスタ % \item |\strutbox|(仕様変更):縦横のディレクションに応じて -% |\tstrutbox|または|\ystrutbox|に展開されるマクロ +% |\tstrutbox|または|\ystrutbox|に展開される\emph{マクロ} % \end{itemize} % すなわち、従来のp\LaTeX{}における|\strutbox|と同じ挙動を示すのが、 % 新設された|\ystrutbox|ということになります。 @@ -530,7 +635,7 @@ % \end{macro} % % \begin{macro}{\ystrutbox} -% |\ystrutbox|は高さと深さが7対3の横組ボックス用の支柱です。 +% |\ystrutbox|は高さと深さが7対3の横組用の支柱ボックスです。 % \changes{v1.6f}{2017/02/20}{\cs{ystrutbox}を追加} % \begin{macrocode} % @@ -666,41 +771,10 @@ % % % -% \subsection{コマンド} -% 次のコマンドの定義をしています。 -% -% \DeleteShortVerb{\|} -% \MakeShortVerb{\+} -% \begin{center} -% \begin{tabular}{l|l} -% \emph{コマンド} & \emph{意味}\\\hline -% +\Declare{Font|YokoKanji|TateKanji}Encoding+ & エンコードの宣言\\ -% +\Declare{Yoko|Tate}KanjiEncodingDefaults+ & -% デフォルトの和文エンコードの宣言\\ -% +\Declare{Font|Kanji}Family+ & ファミリの宣言\\ -% +\DeclareKanjiSubstitution+ & 和文の代用フォントの宣言\\ -% +\DeclareErrorKanjiFont+ & 和文のエラーフォントの宣言 \\ -% +\DeclareFixedFont+ & フォントの名前の宣言 \\ -% +\reDeclareMathAlphabet+ & 和欧文を同時に切り替えるコマンド宣言\\ -% +\{Declare|Set}RelationFont+ & 従属書体の宣言\\ -% +\userelfont+ & 欧文書体を従属書体にする\\ -% +\selectfont+ & フォントを切り替える\\ -% +\set@fontsize+ & フォントサイズの変更\\ -% +\adjustbaseline+ & ベースラインシフト量の設定\\ -% +\{font|roman|kanji}encoding+ & エンコードの指定\\ -% +\{font|roman|kanji}family+ & ファミリの指定\\ -% +\{font|roman|kanji}series+ & シリーズの指定\\ -% +\{font|roman|kanji}shape+ & シェイプの指定\\ -% +\use{font|roman|kanji}+ & 書体の切り替え\\ -% +\normalfont+ & デフォルト値の設定に切り替える\\ -% +\mcfamily+,+\gtfamily+ & 和文書体を明朝体、ゴシック体にする\\ -% +\textunderscore+ & テキストモードでの下線マクロ\\ -% \end{tabular} -% \end{center} -% \DeleteShortVerb{\+} -% \MakeShortVerb{\|} -% +% \subsection{\NFSS2の拡張コマンド} +% \NFSS2の拡張コマンドを定義します。 % +% \subsubsection{エンコードの宣言} % \begin{macro}{\DeclareFontEncoding} % \begin{macro}{\DeclareFontEncoding@} % 欧文エンコードを宣言するためのコマンドです。 @@ -921,6 +995,7 @@ % % \begin{macro}{\DeclareKanjiEncodingDefaults} % 和文エンコードのデフォルト値を宣言するコマンドです。 +% |\DeclareFontEncodingDefaults|に相当します。 % \begin{macrocode} \def\DeclareKanjiEncodingDefaults#1#2{% \ifx\relax#1\else @@ -945,13 +1020,57 @@ % \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} +% +%\plIncludeInRelease{2020/04/12}{\ensure@KanjiEncodingPair} +% {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} +% +%\plEndIncludeInRelease +%\plIncludeInRelease{0000/00/00}{\ensure@KanjiEncodingPair} +% {ASCII Corporation original}% +%\let\ensure@KanjiEncodingPair\@undefined +%\plEndIncludeInRelease +%<*plcore> +% \end{macrocode} +% \end{macro} % +% +% \subsubsection{ファミリの宣言} % \begin{macro}{\DeclareFontFamily} % 欧文ファミリを宣言するためのコマンドです。 % |\ffam@list|を作るように再定義をします。 @@ -1004,10 +1123,15 @@ % \end{macro} % % \begin{macro}{\DeclareKanjiSubstitution} -% 目的の和文フォントが見つからなかったときに使うフォントの宣言をする -% コマンドです。 -% |\DeclareFontSubstitution|に対応します。 +% 目的の和文フォントが見つからなかったときに使う代用書体の +% 宣言をするコマンドです。 +% |\DeclareFontSubstitution|に相当します。 +% \changes{v1.7e}{2020/03/26}{\cs{default@k@...}を使用} % \begin{macrocode} +% +%\plIncludeInRelease{2020/04/12}{\DeclareKanjiSubstitution} +% {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 @@ -1025,16 +1149,62 @@ \cdp@list \xdef\cdp@list{\the\toks@}% \endgroup - \global\@namedef{D@#1}{\def\default@family{#2}% - \def\default@series{#3}% - \def\default@shape{#4}}% + \global\@namedef{D@#1}{\def\default@k@family{#2}% !!! + \def\default@k@series{#3}% !!! + \def\default@k@shape{#4}}% !!! \fi} +% +%\plEndIncludeInRelease +%\plIncludeInRelease{0000/00/00}{\DeclareKanjiSubstitution} +% {ASCII Corporation original}% +%\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@family{#2}% +% \def\default@series{#3}% +% \def\default@shape{#4}}% +% \fi} +%\plEndIncludeInRelease +%% !!! Special case BEGIN +%% required for any emulation date +%% copied from (u)pldefs.ltx +%\def\pltx@tempa{JY1}\ifx\pltx@tempa\k@encoding +%\DeclareKanjiSubstitution{JY1}{mc}{m}{n} +%\DeclareKanjiSubstitution{JT1}{mc}{m}{n} +%\else\def\pltx@tempa{JY2}\ifx\pltx@tempa\k@encoding +%\DeclareKanjiSubstitution{JY2}{mc}{m}{n} +%\DeclareKanjiSubstitution{JT2}{mc}{m}{n} +%\fi\fi +%% emulate execution of \enc@update in \selectfont +%% before (u)pldefs.ltx is loaded +%\csname D@\f@encoding\endcsname +%% emulate execution of \kenc@update in \selectfont +%% inside (u)pldefs.ltx +%\csname D@\k@encoding\endcsname +%% !!! 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)} @@ -1075,10 +1245,181 @@ % \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} +% +%\plIncludeInRelease{2020/04/12}{\wrong@fontshape} +% {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 +} +% +%\plEndIncludeInRelease +%\plIncludeInRelease{2015/01/01}{\wrong@fontshape} +% {LaTeX2e original (2015)}% +%\def\wrong@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} +%\let\wrong@al@fontshape\@undefined +%\let\wrong@ja@fontshape\@undefined +%\plEndIncludeInRelease +%\plIncludeInRelease{0000/00/00}{\wrong@fontshape} +% {LaTeX2e original (old)}% +%\def\wrong@fontshape{% +% \csname D@\f@encoding\endcsname +% \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 +% \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} +%\let\wrong@al@fontshape\@undefined +%\let\wrong@ja@fontshape\@undefined +%\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}{プリアンブル・コマンドにしてしまっていたのを解除} @@ -1113,7 +1454,104 @@ % \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} +% +%\plIncludeInRelease{2020/04/12}{\do@subst@correction} +% {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 +} +% +%\plEndIncludeInRelease +%\plIncludeInRelease{0000/00/00}{\do@subst@correction} +% {LaTeX2e original}% +%\def\do@subst@correction{% +% \xdef\subst@correction{% +% \font@name +% \global\expandafter\font +% \csname \curr@fontshape/\f@size\endcsname +% \noexpand\fontname\font +% \relax}% +% \aftergroup\subst@correction +%} +%\let\pltx@do@subst@correction@al\@undefined +%\let\pltx@do@subst@correction@yoko\@undefined +%\let\pltx@do@subst@correction@tate\@undefined +%\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さん。} @@ -1242,6 +1680,7 @@ % \end{macro} % % +% \subsubsection{従属書体の宣言} % \begin{macro}{\DeclareRelationFont} % \begin{macro}{\SetRelationFont} % 和文書体に対する従属書体を宣言するコマンドです。\emph{従属書体}とは、 @@ -1331,6 +1770,7 @@ % \end{macrocode} % \end{macro} % +% \subsubsection{フォントの選択} % \begin{macro}{\selectfont} % |\selectfont|のオリジナルからの変更部分は、次の3点です。 % \begin{itemize} @@ -1342,10 +1782,13 @@ % \changes{v1.0c}{1995/08/22}{縦横両方のフォントを切り替えるようにした} % \changes{v1.2}{1995/11/22}{エラーフォントに対応した} % \changes{v1.3n}{2004/08/10}{和文エンコーディングの切り替えを有効化} +% \changes{v1.7e}{2020/03/26}{縦横エンコーディングのセット化確認} % |\selectfont|コマンドは、まず、和文フォントを切り替えます。 % \begin{macrocode} % -%<*plcore|trace> +%\plIncludeInRelease{2020/04/12}{\selectfont} +% {Check \KanjiEncodingPair}% +%<*plcore|platexrelease|trace> \DeclareRobustCommand\selectfont{% \let\tmp@error@fontshape\error@fontshape \let\error@fontshape\error@kfontshape @@ -1354,12 +1797,14 @@ \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 @@ -1419,7 +1864,68 @@ \set@fontsize\baselinestretch\f@size\f@baselineskip \fi \size@update} -% +% +%\plEndIncludeInRelease +%\plIncludeInRelease{0000/00/00}{\selectfont} +% {ASCII Corporation original}% +%\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 +% \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 +% \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@ +% \@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} +%\plEndIncludeInRelease %<*plcore> % \end{macrocode} % \end{macro} @@ -1651,6 +2157,7 @@ % \end{macro} % % +% \subsubsection{エンコードの指定} % \begin{macro}{\romanencoding} % \begin{macro}{\kanjiencoding} % \begin{macro}{\fontencoding} @@ -1766,6 +2273,7 @@ % \end{macrocode} % \end{macro} % +% \subsubsection{ファミリの指定} % \begin{macro}{\@notkfam} % \begin{macro}{\@notffam} % |\fontfamily|コマンド内で使用するフラグです。 @@ -1928,35 +2436,68 @@ % \end{macro} % % -% \begin{macro}{\series@maybe@drop@one@m} -% 本家\LaTeXe~2020-02-02 patch level~5で追加された命令です。 -% \NFSS{}が大幅に修正・拡張された\LaTeXe~2020-02-02のうち、 +% \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{}のみをサポートします。 +% ^^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 % patch level 0, 1, 2 - \@latex@error - {Please update LaTeX2e!^^J\space\space - At least LaTeX2e 2020-02-02 patch level 3 is required} - {LaTeX2e 2020-02-02 patch level 2 has a bug.} -% \@@end + \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 - % actually we'd like to check the below too, - % but commented out for TL19 frozen since - % platex-dev format generation fails - %\ifx\series@maybe@drop@one@m\@undefined % patch level 0--4 - % \@latex@error - % {Please update LaTeX2e!^^J\space\space - % At least LaTeX2e 2020-02-02 patch level 5 is required} - % {LaTeX2e 2020-02-02 patch level 2 and 4 has a bug.} - %\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 % % \end{macrocode} @@ -2031,42 +2572,85 @@ \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 \begingroup\let\f@encoding\k@encoding\let\f@family\k@family \maybe@load@fontshape\endgroup \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 } -\ifx\series@maybe@drop@one@m\@undefined % patch level 0--4 -\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 % patch level 5 \def\set@target@series@kanji#1{% \edef\k@series{#1}% - \expandafter\series@maybe@drop@one@m\expandafter{\k@series}\k@series + \series@maybe@drop@one@m\k@series\k@series } \fi -\fi +% % \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> +\newif\if@shape@roman@kanji +% +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\romanshape} % \begin{macro}{\kanjishape} % \begin{macro}{\fontshape} @@ -2077,15 +2661,38 @@ % \LaTeXe~2020-02-02以降では、|\DeclareFontShapeChangeRule|によって % 宣言された「シェイプ更新規則」に基づきシェイプを選択します。 % \begin{macrocode} +%\plIncludeInRelease{2020/04/12}{\fontshape} +% {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]{\kanjishape{#1}\romanshape{#1}} +\DeclareRobustCommand\fontshape[1]{% + \set@safe@kanji@shape{#1}{}% + \edef\f@shape{#1}% +} \else % 2020-02-02 \DeclareRobustCommand\romanshape[1]{\merge@font@shape{#1}} \DeclareRobustCommand\kanjishape[1]{\merge@kanji@shape{#1}} -\DeclareRobustCommand\fontshape[1]{\kanjishape{#1}\romanshape{#1}} +\DeclareRobustCommand\fontshape[1]{% + \@shape@roman@kanjitrue + \kanjishape{#1}\romanshape{#1}% + \@shape@roman@kanjifalse} \fi +% +%\plEndIncludeInRelease +%\plIncludeInRelease{0000/00/00}{\fontshape} +% {ASCII Corporation / TeXJP original}% +%\ifx\fontshapeforce\@undefined % old +%\DeclareRobustCommand\romanshape[1]{\edef\f@shape{#1}} +%\DeclareRobustCommand\kanjishape[1]{\edef\k@shape{#1}} +%\DeclareRobustCommand\fontshape[1]{\kanjishape{#1}\romanshape{#1}} +%\else % 2020-02-02 +%\DeclareRobustCommand\romanshape[1]{\merge@font@shape{#1}} +%\DeclareRobustCommand\kanjishape[1]{\merge@kanji@shape{#1}} +%\DeclareRobustCommand\fontshape[1]{\kanjishape{#1}\romanshape{#1}} +%\fi +%\plEndIncludeInRelease % \end{macrocode} % \end{macro} % \end{macro} @@ -2098,14 +2705,33 @@ % \changes{v1.6v}{2020/02/01}{New commands \cs{fontshapeforce} etc. % (sync with ltfssaxes.dtx 2019/12/16 v1.0a)} % \begin{macrocode} +%\plIncludeInRelease{2020/04/12}{\fontshapeforce} +% {No \k@shape update if unavailable}% +%<*plcore|platexrelease> \ifx\fontshapeforce\@undefined % old \let\romanshapeforce\@undefined \let\kanjishapeforce\@undefined \else % 2020-02-02 \DeclareRobustCommand\romanshapeforce[1]{\edef\f@shape{#1}} \DeclareRobustCommand\kanjishapeforce[1]{\edef\k@shape{#1}} -\DeclareRobustCommand\fontshapeforce[1]{\kanjishapeforce{#1}\romanshapeforce{#1}} +\DeclareRobustCommand\fontshapeforce[1]{% + \set@safe@kanji@shape{#1}{}% + \edef\f@shape{#1}% +} \fi +% +%\plEndIncludeInRelease +%\plIncludeInRelease{0000/00/00}{\fontshapeforce} +% {ASCII Corporation / TeXJP original}% +%\ifx\fontshapeforce\@undefined % old +%\let\romanshapeforce\@undefined +%\let\kanjishapeforce\@undefined +%\else % 2020-02-02 +%\DeclareRobustCommand\romanshapeforce[1]{\edef\f@shape{#1}} +%\DeclareRobustCommand\kanjishapeforce[1]{\edef\k@shape{#1}} +%\DeclareRobustCommand\fontshapeforce[1]{\kanjishapeforce{#1}\romanshapeforce{#1}} +%\fi +%\plEndIncludeInRelease % \end{macrocode} % \end{macro} % \end{macro} @@ -2115,6 +2741,9 @@ % \begin{macro}{\merge@kanji@shape@} % \cs{merge@font@shape}の和文版です。 % \begin{macrocode} +%\plIncludeInRelease{2020/04/12}{\merge@kanji@shape@} +% {No \k@shape update if unavailable}% +%<*plcore|platexrelease> \ifx\fontseriesforce\@undefined % old \let\merge@kanji@shape\@undefined \let\merge@kanji@shape@\@undefined @@ -2129,31 +2758,125 @@ \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 \begingroup\let\f@encoding\k@encoding\let\f@family\k@family \maybe@load@fontshape\endgroup \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 % +%\plEndIncludeInRelease +%\plIncludeInRelease{0000/00/00}{\merge@kanji@shape@} +% {ASCII Corporation / TeXJP original}% +%\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 +% \edef\k@shape{#2}% +% \else +% \begingroup\let\f@encoding\k@encoding\let\f@family\k@family +% \maybe@load@fontshape\endgroup +% \edef\reserved@a{\k@encoding /\k@family /\k@series/#1}% +% \ifcsname \reserved@a\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 +%\plEndIncludeInRelease +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\set@safe@kanji@shape} +% \begin{macro}{\@kanji@shape@nochange@info} +% 和文シェープが利用可能かどうか予めチェックしてから設定します。 +% \begin{macrocode} +%\plIncludeInRelease{2020/04/12}{\set@safe@kanji@shape} +% {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}% +} +% +%\plEndIncludeInRelease +%\plIncludeInRelease{0000/00/00}{\set@safe@kanji@shape} +% {ASCII Corporation original}% +%\let\set@safe@kanji@shape\@undefined +%\let\@kanji@shape@nochange@info\@undefined +%\plEndIncludeInRelease % \end{macrocode} % \end{macro} % \end{macro} % % +% \subsubsection{書体の切り替え(新NFSS対応)} % \begin{macro}{\usekanji} % \begin{macro}{\useroman} % \begin{macro}{\usefont} @@ -2235,10 +2958,19 @@ % 和文書体もデフォルト値になるように再定義しています。 % ただし高速化のため、|\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)} % \begin{macrocode} -%\plIncludeInRelease{2020/02/02}{\normalfont} -% {Don't call \fontseries or \fontshape}% +%\plIncludeInRelease{2020/04/12}{\normalfont} +% {Use \@defaultfamilyhook}% %<*plcore|platexrelease> +\ifx\@defaultfamilyhook\@undefined % old \DeclareRobustCommand\normalfont{% \kanjiencoding{\kanjiencodingdefault}% \edef\k@family{\kanjifamilydefault}% @@ -2248,11 +2980,41 @@ \edef\f@family{\familydefault}% \edef\f@series{\seriesdefault}% \edef\f@shape{\shapedefault}% - \selectfont\ignorespaces} + \selectfont} +\else % 2020-02-02 PL2 +%\DeclareRobustCommand\normalfont{% +% \fontencoding\encodingdefault +% \edef\f@family{\familydefault}% +% \edef\f@series{\seriesdefault}% +% \edef\f@shape{\shapedefault}% +% \@defaultfamilyhook +% \selectfont} +\g@addto@macro\@defaultfamilyhook{% + \kanjiencoding{\kanjiencodingdefault}% + \edef\k@family{\kanjifamilydefault}% + \edef\k@series{\kanjiseriesdefault}% + \edef\k@shape{\kanjishapedefault}% +} +\fi \adjustbaseline \let\reset@font\normalfont % %\plEndIncludeInRelease +%\plIncludeInRelease{2020/02/02}{\normalfont} +% {Don't call \fontseries or \fontshape}% +%\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\ignorespaces} +%\adjustbaseline +%\let\reset@font\normalfont +%\plEndIncludeInRelease %\plIncludeInRelease{0000/00/00}{\normalfont} % {ASCII Corporation original}% %\DeclareRobustCommand\normalfont{% @@ -2309,18 +3071,22 @@ % % \begin{macro}{\expand@font@defaults} % ファミリのデフォルトを完全展開します。 -% まず、オリジナルの\LaTeX{}の定義を載せておきます。 +% まず、オリジナルの\LaTeX{}の定義(ltfssini.dtx 2020/04/06 v3.1m以降)を +% 載せておきます。 % \begin{macrocode} %\def\expand@font@defaults{% % \edef\rmdef@ult{\rmdefault}% % \edef\sfdef@ult{\sfdefault}% % \edef\ttdef@ult{\ttdefault}% -% \edef\bfdef@ult{\bfdefault}% -% \edef\mddef@ult{\mddefault}% +% \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}% +% \@expandfontdefaultshook % !! added 2020/04/06 v3.1m %} % \end{macrocode} % p\LaTeX{}では、以下のコードを末尾に追加します。 +% ^^A ltfssini.dtx 2020/04/06 v3.1m に基づけば |\@expandfontdefaultshook| を +% ^^A 使うこともできるが、とりあえず |\g@addto@macro| で末尾追加で問題ない。 % \begin{macrocode} \ifx\expand@font@defaults\@undefined\else % 2020-02-02 \g@addto@macro\expand@font@defaults{% @@ -2336,56 +3102,111 @@ % \begin{macro}{\bfseries} % \begin{macro}{\mdseries} % ファミリごとの設定値を参照します。 +% まず、オリジナルの\LaTeX{}の定義(ltfssini.dtx 2020/04/06 v3.1m以降)を +% 載せておきます。 +% \begin{macrocode} +%\DeclareRobustCommand\bfseries{% +% \not@math@alphabet\bfseries\mathbf +% \expand@font@defaults +% \ifx\bfdefault\bfdefault@previous\else +% \expandafter\def\expandafter\bfdefault +% \expandafter{\bfdefault\@empty}% +% \let\bfseries@previous\bfdefault +% \let\bfseries@rm\bfdef@ult +% \let\bfseries@sf\bfdef@ult +% \let\bfseries@tt\bfdef@ult +% \@setbfseriesdefaultshook % !! added 2020/04/06 v3.1m +% \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 +% \selectfont +%} +%\DeclareRobustCommand\mdseries{% +% \not@math@alphabet\mdseries\relax +% \expand@font@defaults +% \ifx\mddefault\mddefault@previous\else +% \expandafter\def\expandafter\mddefault +% \expandafter{\mddefault\@empty}% +% \let\mdseries@previous\mddefault +% \let\mdseries@rm\mddef@ult +% \let\mdseries@sf\mddef@ult +% \let\mdseries@tt\mddef@ult +% \@setmdseriesdefaultshook % !! added 2020/04/06 v3.1m +% \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 +% \selectfont +%} +% \end{macrocode} +% 以下でp\LaTeX{}用に再定義します。 % \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 -\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} +\ifx\bfseries@rm\@undefined % old +\let\pltx@fontseries@saved\@undefined +\let\pltx@patch@bfseries\@undefined +\let\pltx@patch@mdseries\@undefined +\else % 2020-02-02 +\let\pltx@fontseries@saved\fontseries +\def\pltx@patch@bfseries\not@math@alphabet#1#2#3\selectfont{% + \long\expandafter\def\csname bfseries \endcsname{% + \not@math@alphabet#1#2% should be \bfseries\mathbf + % \fontseries of pLaTeX tries to change both Latin and Japanese; + % here we want only Latin, so use \romanseries + \let\fontseries\romanseries + #3% contains \fontseries and \@setbfseriesdefaultshook + \let\fontseries\pltx@fontseries@saved % recover % 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 + \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} +\ifx\@setbfseriesdefaultshook\@undefined\else +\g@addto@macro\@setbfseriesdefaultshook{% + \let\bfseries@mc\bfdef@ult + \let\bfseries@gt\bfdef@ult +} +\fi +\expandafter\expandafter\expandafter + \pltx@patch@bfseries\csname bfseries \endcsname +\def\pltx@patch@mdseries\not@math@alphabet#1#2#3\selectfont{% + \long\expandafter\def\csname mdseries \endcsname{% + \not@math@alphabet#1#2% should be \mdseries\relax + % \fontseries of pLaTeX tries to change both Latin and Japanese; + % here we want only Latin, so use \romanseries + \let\fontseries\romanseries + #3% contains \fontseries and \@setmdseriesdefaultshook + \let\fontseries\pltx@fontseries@saved % recover % 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 + }% +} +\ifx\@setmdseriesdefaultshook\@undefined\else +\g@addto@macro\@setmdseriesdefaultshook{% + \let\mdseries@mc\mddef@ult + \let\mdseries@gt\mddef@ult } \fi +\expandafter\expandafter\expandafter + \pltx@patch@mdseries\csname mdseries \endcsname +\fi % \end{macrocode} % \end{macro} % \end{macro} @@ -2408,10 +3229,10 @@ \let\update@series@target@value@kanji\@undefined \else % 2020-02-02 \def\prepare@family@series@update#1#2{% - \if@forced@series +~\if@forced@series %<+debug> \series@change@debug{No series preparation (forced \f@series)\on@line}% - \romanfamily#2% % changed \fontfamily -> \romanfamily - \else +~ \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 @@ -2432,16 +3253,17 @@ \maybe@load@fontshape %<+debug> \series@change@debug{Target series: %<+debug> \f@series \space -> \target@series@value}% - \let\f@series\target@series@value +% \let\f@series\target@series@value + \series@maybe@drop@one@m\target@series@value\f@series \fi \fi - \fi +~\fi } \def\prepare@family@series@update@kanji#1#2{% - \if@forced@series +~\if@forced@series %<+debug> \series@change@debug{No series preparation (forced \k@series)\on@line}% - \kanjifamily#2% - \else +~ \kanjifamily#2% +~\else %<+debug> \series@change@debug{Prepearing for switching to #1 (#2)\on@line}% \expand@font@defaults \let\target@series@value\@empty @@ -2463,10 +3285,11 @@ \maybe@load@fontshape\endgroup %<+debug> \series@change@debug{Target series: %<+debug> \k@series \space -> \target@series@value}% - \let\k@series\target@series@value +% \let\k@series\target@series@value + \series@maybe@drop@one@m\target@series@value\k@series \fi \fi - \fi +~\fi } \def\@meta@family@list@kanji{\@elt{mc}\@elt{gt}} \def\update@series@target@value@kanji#1{% @@ -2483,10 +3306,15 @@ \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 + \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\ifx\csname bfseries@#1\endcsname\k@series + \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 @@ -2585,6 +3413,209 @@ % \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 +%<+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 +% +% \end{macrocode} +% +% +% \begin{macro}{\romanprocess@table} +% \begin{macro}{\kanjiprocess@table} +% \begin{macro}{\process@table} +% 文書の先頭で、和文デフォルトフォントの変更が反映されないのを修正します。 +% \changes{v1.3g}{1999/04/05}{plpatch.ltxの内容を反映。 +% ありがとう、山本さん。} +% \begin{macrocode} +%<*plcore> +\let\romanprocess@table\process@table +\def\kanjiprocess@table{% + \kanjiencoding{\kanjiencodingdefault}% + \kanjifamily{\kanjifamilydefault}% + \kanjiseries{\kanjiseriesdefault}% + \kanjishape{\kanjishapedefault}% +} +\def\process@table{% + \romanprocess@table + \kanjiprocess@table +} +\@onlypreamble\romanprocess@table +\@onlypreamble\kanjiprocess@table +% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsection{強調書体} % \begin{macro}{\em} % \begin{macro}{\emph} % \begin{macro}{\eminnershape} @@ -2654,35 +3685,7 @@ % \end{macro} % % -% \begin{macro}{\romanprocess@table} -% \begin{macro}{\kanjiprocess@table} -% \begin{macro}{\process@table} -% 文書の先頭で、和文デフォルトフォントの変更が反映されないのを修正します。 -% \changes{v1.3g}{1999/04/05}{plpatch.ltxの内容を反映。 -% ありがとう、山本さん。} -% \begin{macrocode} -%<*plcore> -\let\romanprocess@table\process@table -\def\kanjiprocess@table{% - \kanjiencoding{\kanjiencodingdefault}% - \kanjifamily{\kanjifamilydefault}% - \kanjiseries{\kanjiseriesdefault}% - \kanjishape{\kanjishapedefault}% -} -\def\process@table{% - \romanprocess@table - \kanjiprocess@table -} -\@onlypreamble\romanprocess@table -\@onlypreamble\kanjiprocess@table -% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% +% \subsection{下線マクロ} % \begin{macro}{\textunderscore} % \changes{v1.1b}{1995/04/12}{下線マクロを追加} % このコマンドはテキストモードで指定された|\_|の内部コマンドです。 diff --git a/language/japanese/platex/plnewsc14.tex b/language/japanese/platex/plnewsc14.tex new file mode 100644 index 0000000000..0599113d07 --- /dev/null +++ b/language/japanese/platex/plnewsc14.tex @@ -0,0 +1,209 @@ +%% <2020-02-02> and <2020-04-12> +\documentclass{plnews} + +\publicationyear{2020}% 発行年 +\publicationmonth{04}% 発行月 +\publicationissue{c14}% 番号 +\author{日本語\TeX{}開発コミュニティ(\texttt{https://texjp.org/})} + +\def\cs#1{\texttt{\char92\nobreak #1}} +\def\pTeX{p\kern-.15em\TeX} +\def\eTeX{$\varepsilon$-\TeX} +\def\epTeX{$\varepsilon$-\pTeX} +\def\pLaTeX{p\kern-.05em\LaTeX} +\def\pLaTeXe{p\kern-.05em\LaTeXe} +\xspcode`\\=1 + +\begin{document} + +\maketitle + +コミュニティ版\pLaTeXe\ \texttt{<2020-02-02>}および +\texttt{<2020-04-12>}について、 +\pLaTeXe\ \texttt{<2019-10-01>}からの更新箇所をまとめます。 + + +\section{\LaTeXe\ \texttt{<2020-02-02>}対応} +→参考:|texjporg/platex#88| + +\LaTeXe\ \texttt{<2020-02-02>}で +NFSS(フォント選択の仕組み)が大幅に拡張されたことを受け、 +\pLaTeXe\ \texttt{<2020-02-02>}で対応を施しました。 +シリーズ・シェイプの多軸化は\file{fontaxes}から、 +ファミリごとの実シリーズ値は\file{mweights}から、 +それぞれアイデアを取り入れたようです。 +\file{ltnews31}も参照してください。 + +\pLaTeXe{}での拡張部分は以下のとおりです。 + +\paragraph{シリーズの多軸化} +\begin{itemize} + \item |\kanjiseries|, |\romanseries| (, |\fontseries|)\\ + |\DeclareFontSeriesChangeRule|による + シリーズ更新規則に従うようにした。 + \item |\kanjiseriesforce|, |\romanseriesforce|\\ + 無条件にシリーズを更新する(新規)。\\ + |\fontseriesforce|は和欧文両方に影響。 +\end{itemize} + +\paragraph{シェイプの多軸化} +\begin{itemize} + \item |\kanjishape|, |\romanshape| (, |\fontshape|)\\ + |\DeclareFontShapeChangeRule|による + シェイプ更新規則に従うようにした。 + \item |\kanjishapeforce|, |\romanshapeforce|\\ + 無条件にシェイプを更新する(新規)。\\ + |\fontshapeforce|は和欧文両方に影響。 +\end{itemize} + +\paragraph{総称ファミリごとの実シリーズ値の設定} +\begin{itemize} + \item |\DeclareFontSeriesDefault|\\ + 第一引数(オプション)の総称ファミリ名に + |rm|, |sf|, |tt|に加え|mc|, |gt|も指定できるようにした。 +\end{itemize} + +\paragraph{強調書体指定の一般化} +\begin{itemize} + \item \pLaTeX{}で再定義している|\em| (, |\emph|)でも + |\DeclareEmphSequence|による + 入れ子の強調書体のカスタマイズ機能をサポートした。 +\end{itemize} + +\paragraph{既定値} +\LaTeXe{}に追随して\pLaTeXe{}でも調整。 + +まず、\LaTeXe{}での既定値の変更を見てみます。 +\begin{itemize} + \item |\bfdefault|: |bx| → |b| に変更 + \item |\updefault|: |n| → |up| に変更 + \item |\shapedefault|: |\updefault| → |n| に変更 +\end{itemize} +このうち「|bx| → |b|」は +太字を原則|b| (bold)に変更することを意味します。 +これだけでは互換性に関して懸念がありますが、 +\LaTeXe{}では同時に +「総称ファミリごとの実シリーズ値の設定」の新機能を活用して +\begin{itemize} + \item Computer ModernとLatin Modernの場合だけは + 従来どおり太字を|bx| (bold-extended)に維持 +\end{itemize} +という挙動を実現しています。 + +\pLaTeXe{}では、|\bfdefault|と|\updefault|について +\LaTeXe{}の設定がそのまま和文にも引き継がれます。 +残る一つは和文用の既定値が別に存在します。 +\begin{itemize} + \item |\kanjishapedefault|: |\updefault| → |n| に変更 +\end{itemize} + +さて、和文の太字は従来|\bfdefault|一択(結果的に|bx|) +でしたが、\pLaTeXe\ \texttt{<2020-02-02>}では +「総称ファミリごとの実シリーズ値の設定」の新機能が +和文ファミリ|mc|, |gt|にも使えます。 +ここで、|mc|, |gt|の太字をどう設定するかは議論の余地があります: +\begin{enumerate} + \item 互換性のため、従来どおり|bx|を維持する。 + \item Computer ModernでもLatin Modernでもないので、 + |b|に変更する。 +\end{enumerate} +この2案のうち、現在の版では2.すなわち +\begin{itemize} + \item 和文ファミリ|mc|と|gt|の太字も|b| (bold)に変更 +\end{itemize} +を採っています。これは、和文の太字は線が太いだけで、 +横幅が広がるわけではないためです。 + + +\section{NFSSの和文対応の改善} +\pLaTeXe\ \texttt{<2020-04-12>}での修正です。 +\LaTeXe\ \texttt{<2020-02-02>}でのNFSSの拡張とは無関係に、 +従来から\pLaTeXe{}のNFSSに存在した和文フォントでの不具合に +対処しました。 + +\paragraph{\cs{fontshape}で和文シェイプが未定義なら維持} +端的には |{\itshape a}| のようなシェイプ変更で +\begin{verbatim} + Font shape `JT1/mc/m/it' undefined + using `JT1/mc/m/n' instead on .... + Font shape `JY1/mc/m/it' undefined + using `JY1/mc/m/n' instead on .... +\end{verbatim} +という|LaTeX Font Warning|が出るのを抑制することを +目的とした修正です。→|texjporg/platex#90| + +\pLaTeXe{}の|\fontshape|は、欧文に加えて和文のシェイプも変更するように +再定義されていました(アスキー\pLaTeXe{}の仕様)。 +しかし、これでは|\itshape|のような命令で余分な警告を発してしまいます。 +\begin{itemize} + \item \LaTeXe{}が定義する|\itshape|などのシェイプ変更命令は、 + 内部で|\fontshape|を呼び出す。 + \item \pLaTeXe{}の|\fontshape|は、欧文書体だけでなく + 和文書体のシェイプも変更しようとする。 + \item しかし、和文書体のシェイプはほとんど``n''しか用いられず、 + |\DeclareFontShape|での定義も``n''しか与えられないことが多い。 + \item 結果的に、欧文書体のシェイプを変更するつもりでも + 「和文書体のシェイプが未定義」という警告が出てしまう。 +\end{itemize} +これを改善するため、\pLaTeXe\ \texttt{<2020-04-12>}では +\begin{itemize} + \item |\fontshape|が選択しようとした + 和文のシェイプが未定義の場合は、 + 和文のシェイプは変更せず、欧文のシェイプのみを変更する +\end{itemize} +という仕様に変更しました。これは|\fontshapeforce|も同様です。 + +なお、|\kanjishape|や|\kanjishapeforce|は +和文書体のシェイプを変更する意図でしか実行されないため、 +未定義かどうかは確認しません。 +また、|\usefont|は和欧文両用ですが、一緒に指定された +エンコーディングに応じて|\useroman|と|\usekanji|の一方だけが +実行されることが明白なため、やはり未定義かどうかは確認しません。 + +\paragraph{sub, ssubの和文対応} +|\DeclareFontShape|で使われるsize functionの +|sub|, |ssub|が和文フォントを正しく取得できない不具合を修正。 + +これが露呈する具体的な症例としては、GitHubの +|texjporg/jsclasses#53|で報告されている +「日本語の数式ファミリを宣言した状態で\file{bm}パッケージを +使うとゴシックにならない」がありましたが、 +今回のリリースで解消しました。 + +\paragraph{\cs{normalfont}末尾の\cs{ignorespaces}削除} +オリジナルの\LaTeXe{}の1995年の修正に追随し、 +\pLaTeXe{}の|\normalfont|末尾になぜか残っていた +|\ignorespaces|を削除しました。 + +\paragraph{\cs{KanjiEncodingPair}不在のエラー改善} +2004年のアスキー\pLaTeXe{}で、|\KanjiEncodingPair|による +和文縦横エンコードのセット化が必須となっています。 +しかし、セット化せずにエンコードを定義した場合のエラーが +判りづらかったため、改善しました。(|#92|) + +\paragraph{\cs{DeclareKanjiSubstitution}の修正} +和文の代用書体の宣言が +欧文の|\DeclareFontSubstitution|と干渉し、 +誤ったフォント定義ファイルが読まれようとする問題を解消しました。(|#93|) + +\paragraph{\cs{verb}の改良} +|\verb+>+|を和文で挟むと後ろだけアキが入って前には入らない現象に +対処し、|\texttt{>}|と同様に前後にアキが入るようにしました。(|#87|) + + +\section{開発版のテストのお願い} +今後\pLaTeX{}に導入するかもしれない修正パッチや仕様変更のテストに +ご協力ください。\TeX{}ファイルの冒頭(|\documentclass|より前)で +\begin{verbatim} + \RequirePackage{exppl2e} +\end{verbatim} +と書くことで、現在の開発版をテストすることができます。 +詳細は\file{exppl2e.pdf}を参照してください。ここには、 +その他の\pLaTeXe{}の既知の制約事項も記載しています。 +\TeX\ ForumやGitHubのIssueでのバグ報告やご意見を歓迎します。 +\begin{itemize} +\item \texttt{https://github.com/texjporg/platex} +\item \texttt{https://github.com/texjporg/uplatex} +\end{itemize} + +\end{document} diff --git a/language/japanese/platex/plvers.dtx b/language/japanese/platex/plvers.dtx index ff2cc58b87..e85d8dca5d 100644 --- a/language/japanese/platex/plvers.dtx +++ b/language/japanese/platex/plvers.dtx @@ -93,12 +93,15 @@ % (sync with ltvers.dtx 2019/07/01 v1.1c)} % \changes{v1.1q}{2019/10/01}{\LaTeX\ \texttt{!<2019-10-01!>}版対応確認} % \changes{v1.1r}{2020/02/01}{\LaTeX\ \texttt{!<2020-02-02!>}版対応確認} +% \changes{v1.1s}{2020/03/14}{\LaTeX\ \texttt{!<2020-02-02!> PL5}版対応確認} +% \changes{v1.1t}{2020/03/25}{バナーの再構築を効率化} +% \changes{v1.1u}{2020/03/28}{latexrelease利用時の警告を早めた} % \fi % % \iffalse %<*driver> % \fi -\ProvidesFile{plvers.dtx}[2020/02/01 v1.1r pLaTeX Kernel (Version Info)] +\ProvidesFile{plvers.dtx}[2020/03/28 v1.1u pLaTeX Kernel (Version Info)] % \iffalse \documentclass{jltxdoc} \GetFileInfo{plvers.dtx} @@ -113,9 +116,8 @@ % \fi % % \section{p\LaTeXe{}のバージョンの設定} -% まず、このディストリビューションでのp\LaTeXe{}の日付とバージョン番号 -% を定義します。 % +% 現在のp\LaTeXe{}がベースとした\LaTeXe{}のバージョンは、下記のとおりです。 % \changes{v1.0}{1995/05/16}{p\LaTeXe\ 用に\file{ltvers.dtx}を修正} % \changes{v1.0a}{1995/08/30}{\LaTeX\ \texttt{!<1995/06/01!>}版用に修正} % \changes{v1.0b}{1996/01/31}{\LaTeX\ \texttt{!<1995/12/01!>}版用に修正} @@ -138,11 +140,7 @@ % \changes{v1.1o}{2018/12/01}{\LaTeX\ \texttt{!<2018-12-01!>}版対応確認} % \changes{v1.1q}{2019/10/01}{\LaTeX\ \texttt{!<2019-10-01!>}版対応確認} % \changes{v1.1r}{2020/02/01}{\LaTeX\ \texttt{!<2020-02-02!>}版対応確認} -% -% このバージョンのp\LaTeXe{}は、次のバージョンの\LaTeX{}\footnote{% -% \LaTeX\ authors: Johannes Braams, David Carlisle, Alan Jeffrey, -% Leslie Lamport, Frank Mittelbach, Chris Rowley, Rainer Sch\"opf}を -% もとにしています。 +% \changes{v1.1s}{2020/03/14}{\LaTeX\ \texttt{!<2020-02-02!> PL5}版対応確認} % \begin{macrocode} %<*2ekernel> %\def\fmtname{LaTeX2e} @@ -155,10 +153,10 @@ % % \end{macrocode} % -% まず、次のバージョンの\LaTeX{}が利用可能なことを確認します。 -% \LaTeXe\ 2017-04-15で、バージョン番号(日付)のフォーマットが -% YYYY/MM/DD形式からYYYY-MM-DDに変更されています。 -% ^^A \LaTeXe\ 2017/01/01以降はe-\TeX{}必須になっています。 +% また、現在のp\LaTeXe{}は最低でも\LaTeXe\ 2017-04-15以降 +% (バージョン番号すなわち日付が|YYYY/MM/DD|形式から +% |YYYY-MM-DD|形式に変更された版)を前提とします。 +% なお、\LaTeXe\ 2017/01/01以降はe-\TeX{}必須になっています。 % \changes{v1.1i}{2018/03/31}{\LaTeXe\ 2017-04-15以降必須} % \begin{macrocode} %<*plcore> @@ -183,7 +181,7 @@ % \begin{macro}{\pfmtname} % \begin{macro}{\pfmtversion} % \begin{macro}{\ppatch@level} -% p\LaTeXe{}のフォーマットファイル名とバージョンです。 +% p\LaTeXe{}のフォーマットファイル名とバージョンを定義します。 % \changes{v1.0x}{2016/06/19}{パッチレベルを\file{plvers.dtx}で設定} % \begin{macrocode} %<*plcore> @@ -192,44 +190,18 @@ % %\edef\platexreleaseversion %<*plcore|platexrelease> - {2020-02-02} + {2020-04-12} % %<*plcore> -\def\ppatch@level{3} +\def\ppatch@level{0} % % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % -% \subsection{\LaTeXe{}のバージョンの取得} -% このファイルの直前で\LaTeXe{}の\file{latex.ltx}が読み込まれているはず -% なので、その起動時のバナーを保存します。 -% -% \LaTeXe\ 2018-04-01 patch level 1までは、|\everyjob|が -%\begin{verbatim} -% \typeout{LaTeX2e version}\typeout{Babel version} -%\end{verbatim} -% だけでしたが、\LaTeXe\ 2018-04-01 patch level 2で新たなトークン列が -% 追加されました。今後も\LaTeXe{}側で|\everyjob|に実行を遅らせる -% コードが追加される可能性がありますので、そのコードを抽出しなければ -% なりません。そこで、最初と最後に区切りトークン(それぞれ|\platexNILa|と -% |\platexNILb|)を付けておきます。 -% \changes{v1.1f}{2017/11/11}{\LaTeX{}のバナーを保存するコードを -% \file{platex.ltx}から\file{plcore.ltx}へ移動} -% \changes{v1.1l}{2018/04/09}{バナーの保存しかたを改良} -% \begin{macrocode} -%<*plcore> -\edef\platexBANNER{\noexpand\platexNILa - \the\everyjob % LaTeX banner and delayed codes - \noexpand\platexNILb} -% -% \end{macrocode} -% -% \subsection{パッチファイルのロード} -% % コミュニティ版\pLaTeXe{}ではパッチファイルを使用しないので、 -% コメントアウトしました。 +% パッチファイルをロードするコードは削除しました。 % \changes{v1.0v}{2016/05/07}{パッチファイルをロードするのをやめた。} % % \iffalse @@ -273,43 +245,54 @@ % \end{macrocode} % \fi % -% \subsection{起動時に実行するコード} +% \section{起動時に実行するコード} % -% \begin{macro}{\everyjob} -% p\LaTeXe{}が起動されたときに実行されるコードです。 -% \LaTeXe{}の実行コードを元に、\pLaTeXe{}用の調整を加えます。 -% \changes{v1.1}{2016/09/14}{起動時のバナーを取得するコードを改良} -% \changes{v1.1k}{2018/04/08}{バナー調節のコードを最後(plfinal)ではなく -% 最初(plcore)に早めた} -% \changes{v1.1l}{2018/04/09}{バナーの再構築のしかたを改良} -% \changes{v1.1m}{2018/09/24}{バナーの再構築を簡略化} +% \subsection{\LaTeXe{}起動時の実行コードの取得} +% このファイルの直前で\LaTeXe{}の\file{latex.ltx}が読み込まれているはず +% なので、その起動時の実行コード(|\everyjob|トークンの内容)を保存します。 % -% まず、\LaTeXe{}のバージョン表示(|\typeout{LaTeX2e version}|)より -% 前に実行されるコードがあれば、それを抽出して|\everyjob|に入れます。 -% \LaTeXe\ 2018-04-01 patch level 2の時点では空です。 +% \LaTeXe\ 2018-04-01 patch level~1までは、|\everyjob|が +%\begin{verbatim} +% \typeout{LaTeX2e version}\typeout{Babel version} +%\end{verbatim} +% だけでしたが、patch level~2以降では +% いくつかのコードが|\everyjob|で遅延実行されるようになっています。 +% それらのコードを抽出するため、最初と最後に区切りトークン +% (それぞれ|\platexNILa|と|\platexNILb|)を付けておきます。 +% \changes{v1.1f}{2017/11/11}{\LaTeX{}のバナーを保存するコードを +% \file{platex.ltx}から\file{plcore.ltx}へ移動} +% \changes{v1.1l}{2018/04/09}{バナーの保存しかたを改良} % \begin{macrocode} %<*plcore> -\begingroup - \def\platexNILa#1\typeout#2#3\platexNILb{#1} - \toks0=\expandafter\expandafter\expandafter{\platexBANNER} - \global\everyjob\expandafter{\the\toks0}% -\endgroup +\edef\platexBANNER{\noexpand\platexNILa + \the\everyjob % LaTeX banner and delayed codes + \noexpand\platexNILb} % \end{macrocode} % -% 次に、\LaTeXe{}のバージョンを表示するコードを抽出し、 -% \pLaTeXe{}のバージョンとまとめて表示するように整形します。 +% \subsection{\pLaTeXe{}起動時に実行するコードの構築} +% +% \begin{macro}{\everyjob} +% \LaTeXe{}起動時の実行コードを元に、\pLaTeXe{}用の調整を加えます。 % \changes{v1.0v}{2016/05/07}{起動時の文字列を最新の\LaTeX{}に合わせた。} % \changes{v1.0w}{2016/05/12}{起動時の文字列に入れる\LaTeX{}のバージョンを % 元の\LaTeX{}のバナーから引き継ぐように改良} +% \changes{v1.0w}{2016/05/12}{起動時の文字列に入れるBabelのバージョンを +% 元の\LaTeX{}のバナーから取得するコードを\file{platex.ini}から取り入れた} +% \changes{v1.1}{2016/09/14}{起動時のバナーを取得するコードを改良} % \changes{v1.1d}{2017/09/24}{パッチレベルが負の数の場合をpre-release扱いへ} % \changes{v1.1g}{2017/12/04}{\pLaTeX{}のバナーの定義時に % \cs{pfmtname}, \cs{pfmtversion}, \cs{ppatch@level}を展開しないように} +% \changes{v1.1k}{2018/04/08}{バナー調節のコードを最後(plfinal)ではなく +% 最初(plcore)に早めた} +% \changes{v1.1l}{2018/04/09}{バナーの再構築のしかたを改良} +% \changes{v1.1m}{2018/09/24}{バナーの再構築を簡略化} +% \changes{v1.1t}{2020/03/25}{バナーの再構築を効率化} % \begin{macrocode} -%\ifx\ppatch@level\@undefined % fallback if undefined in pLaTeX -% \def\ppatch@level{0}\fi \begingroup - \def\platexNILa#1\typeout#2#3\platexNILb{#2} - \toks0=\expandafter\expandafter\expandafter{\platexBANNER} +% \end{macrocode} +% +% \pLaTeXe{}のバージョン表示を作ります。 +% \begin{macrocode} \ifnum\ppatch@level=0 \toks2={\pfmtname\space<\pfmtversion>\space}% \else\ifnum\ppatch@level>0 @@ -317,24 +300,28 @@ \else \toks2={\pfmtname\space<\pfmtversion>-pre\ppatch@level\space}% \fi\fi - \edef\platexBANNER{\the\everyjob - \noexpand\typeout{\the\toks2 (based on \the\toks0)}} - \global\everyjob\expandafter{\platexBANNER}% -\endgroup % \end{macrocode} % -% \LaTeXe{}のバージョン表示の後に残っているコードを、 -% そのまま|\everyjob|に追加します。 +% |\everyjob|の内容をパースして +% \begin{itemize} +% \item \LaTeXe{}のバージョン表示の中身(|\typeout{}|の引数)を |#2| +% \item バージョン表示の前に実行されるコードがあれば |#1| +% \item バージョン表示の後に残っているコードがあれば |#3| +% \end{itemize} +% に入れます。2020年時点では |#1| は空、|#3| は欧文inputencのUTF-8化で +% 遅延されたコードに該当します。 % ^^A Babel v3.20まではこの中に|\typeout{Babel version}|も含まれて % ^^A いましたが、Babel v3.21からはこのバナー表示は無くなったようです。 -% \changes{v1.0w}{2016/05/12}{起動時の文字列に入れるBabelのバージョンを -% 元の\LaTeX{}のバナーから取得するコードを\file{platex.ini}から取り入れた} +% そして、\LaTeXe{}のバージョンと\pLaTeXe{}のバージョンを +% まとめて表示するように整形します。 +% \begin{macrocode} + \edef\platexNILa#1\typeout#2#3\platexNILb{% + #1\noexpand\typeout{\the\toks2 (based on #2)}#3} + \global\everyjob\expandafter\expandafter\expandafter{\platexBANNER}% +% \end{macrocode} +% +% 不要になったマクロ定義は削除しておきます。 % \begin{macrocode} -\begingroup - \def\platexNILa#1\typeout#2#3\platexNILb{#3} - \toks0=\expandafter\expandafter\expandafter{\platexBANNER} - \edef\platexBANNER{\the\everyjob \the\toks0} - \global\everyjob\expandafter{\platexBANNER}% \endgroup \let\platexBANNER=\@undefined % @@ -362,6 +349,8 @@ % % 最後に、latexreleaseパッケージへの対応です。 % \begin{macro}{\plIncludeInRelease} +% platexreleaseパッケージでは +% |\plIncludeInRelease|...|\plEndIncludeInRelease|のブロックを使います。 % \changes{v1.0t}{2016/02/03}{\cs{plIncludeInRelease}と % \cs{plEndIncludeInRelease}を新設。} % \changes{v1.1e}{2017/11/09}{\file{latexrelease}と @@ -447,21 +436,42 @@ % \end{macro} % % \LaTeXe{}が提供するlatexreleaseパッケージが読み込まれていて、 -% かつp\LaTeXe{}が提供するplatexreleaseパッケージが読み込まれていない -% 場合は、警告を出します。 +% かつ\pLaTeXe{}が提供するplatexreleaseパッケージが読み込まれていない +% 場合は、巻き戻し機能によって\pLaTeXe{}のコマンドが\LaTeXe{}のコマンドで +% 上書きされ、動作が壊れてしまいますので、警告を出します。 % \changes{v1.0s}{2016/02/01}{latexrelease利用時に警告を出すようにした} +% +% 以前は|\AtBeginDocument|を使って|\@begindocumenthook|の末尾に +% 警告文を入れていましたが、\LaTeXe~2020-02-02以降に付属の +% latexreleaseパッケージで巻き戻すとフックの実行より早い段階 +% (具体的には|\process@table|内の|\kanjiprocess@table|実行中)で +% 「|\series@maybe@drop@one@m|が未定義」というエラーが出てしまうので、 +% |\process@table|の先頭に警告文を入れます。 +% 万が一|\process@table|も巻き戻し対象とされてしまった場合のため、 +% |\@begindocumenthook|の先頭にも入れておきます。 +% ^^A この場合は|\process@table|が|\romanprocess@table|相当へと +% ^^A 上書きされているはずであり、|\kanjiprocess@table|は +% ^^A 実行されないのでエラーは出ない。 +% \changes{v1.1u}{2020/03/28}{latexrelease利用時の警告を早めた} % \begin{macrocode} %<*plfinal> -\AtBeginDocument{% - \@ifpackageloaded{latexrelease}{% - \@ifpackageloaded{platexrelease}{}{% +\expandafter\def\expandafter\process@table\expandafter{% + \expandafter\p@warn@latexrelease\process@table} +\begingroup +\toks@\expandafter{\expandafter\p@warn@latexrelease\@begindocumenthook} +\xdef\@begindocumenthook{\the\toks@} +\endgroup +\def\p@warn@latexrelease{% + \ifx\latexreleaseversion\@undefined\else + \ifx\platexreleaseversion\@undefined \@latex@warning@no@line{% Package latexrelease is loaded.\MessageBreak Some patches in pLaTeX2e core may be overwritten.\MessageBreak Consider using platexrelease.\MessageBreak See platex.pdf for detail}% - }% - }{}% + \fi + \fi + \let\p@warn@latexrelease\relax } % % \end{macrocode} -- cgit v1.2.3