texjporg / platex

pLaTeX community edition
BSD 3-Clause "New" or "Revised" License
49 stars 8 forks source link

\KanjiEncodingPair の存在チェック #92

Closed aminophen closed 4 years ago

aminophen commented 4 years ago
\documentclass{article}
\DeclareYokoKanjiEncoding{JY1X}{}{}
\DeclareErrorKanjiFont{JY1X}{mc}{m}{n}{10}
\DeclareKanjiSubstitution{JY1X}{mc}{m}{n}
\DeclareKanjiFamily{JY1X}{mc}{}
\DeclareFontShape{JY1X}{mc}{m}{n}{ <-> min10 }{}
\renewcommand{\kanjiencodingdefault}{JY1X}
%\KanjiEncodingPair{JY1X}{JT1}% => これが無いのは許されない
\begin{document}
\stop
! Missing \endcsname inserted.
<to be read again> 
                   \t@enc@JY1X 
l.9 \begin{document}

?

これでは原因に気づきにくいので「\KanjiEncodingPair の存在チェックをして,未定義の場合は早めに段階で明快なエラーを出す」としようと思います。

(pLaTeX のテストケースを作るべく \DeclareYokoKanjiEncoding だけを宣言したところ,発生したエラーの原因に気づくまでに時間を無駄にしてしまったのがモチベーションorz)

[補足1] \KanjiEncodingPair が追加されたのは2004年8月。plnews08.tex に

横書きと縦書きのエンコーディングは以下のように必ず|\KanjiEncodingPair|で 対応を関連付けてから使用します。

とありました。

[補足2] アスキーの「日本語 LaTeX2e ブック」は \DeclareKanjiEncoding しかなかった古い時代に書かれたものです。TeX Wiki の「LaTeX のエラーメッセージ」のページの

! LaTeX Error: KANJI Encoding scheme `encoding' unknown.

の項目にも

\DeclareTateKanjiEncoding あるいは \DeclareYokoKanjiEncoding を用いてエンコーディング encoding の宣言を行ってください(充分に新しい pLaTeX では,さらに \KanjiEncodingPair の設定も適宜行うことになるでしょう).

と書かれていて,両方宣言しないといけなくなったのは「比較的最近」ということになっています。(とは言っても,もう15年も前ですが。)

[補足3] 2017年に pLaTeX / upLaTeX のソース共通化(uplcore.ltx と plcore.ltx の共通部分は plcore.ltx に任せて削除)の一環で,従来は plcore.ltx にあった

\KanjiEncodingPair{JY1}{JT1}

の行を pldefs.ltx に移動しています。その結果,ユーザが pldefs.cfg を古い pldefs.ltx を前提に用意していた場合に例の"判りにくいエラー"が出る恐れがありました。

aminophen commented 4 years ago

実装を 'kanjiencodingpair' ブランチ (9588493) で作ってみました。

edit: \expandafter\ifx\reserved@a\relax のところがマズイ…。例えば \ifcat\relax\reserved@a なら行けるか?

aminophen commented 4 years ago

2020-04-12 を出したので close します。