Closed aminophen closed 6 years ago
根本的に pLaTeX の [定義C] が重要でないのであれば,
補足です.LaTeX の [定義A] と pLaTeX の [定義B] の差異は,後者に
\expandafter\let\csname#1-cmd\endcsname\@changed@cmd
+\def\enc@elt{\noexpand\enc@elt}%
+\xdef\fenc@list{\fenc@list\enc@elt<#1>}%
\else
という 2 行が付け加わっている点です.
このコードで更新される \fenc@list
は「定義済みの欧文エンコーディングのリスト」です.pLaTeX の \fontfamily
命令では引数(ここでは仮に hoge
とする)によって和文ファミリ・欧文ファミリ・あるいは両方を切り替えますが,その判定の以下の部分で \fenc@list
が使われます.
\fenc@list
内にある各欧文コーディング <enc> に対して,フォント定義ファイル<enc>hoge.fd
があるか調べる
補足ありがとうございます。
最初のコメントに書いた「新しい LaTeX の下での pLaTeX の挙動」の
せっかく utf8.def を読み込んだのに,[定義B] が pLaTeX によって吹っ飛ばされる。 … (☆)
によって問題がおきる例を挙げます。
従来の pdfLaTeX,新しい pdfLaTeX,従来の pLaTeX では通っていた以下のソースが,「新しい LaTeX の下での pLaTeX」では通らなくなります。(注意:新しい LaTeX ではもともと utf8 なので,\usepackage[utf8]{inputenc} しても utf8.def は読まれない」ことに注意。)
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[LY1]{fontenc}
%\makeatletter\input{ly1enc.dfu}\makeatother
\begin{document}
[ƒ]\par
\end{document}
! Package inputenc Error: Unicode char Æ^^92 (U+192)
(inputenc) not set up for use with LaTeX.
See the inputenc package documentation for explanation.
Type H <return> for immediate help.
...
l.6 [^^c6^^92
]\par
?
これは,utf8.def による [定義B] が吹っ飛ばされた結果,本来 \usepackage[LY1]{fontenc} の時に読まれるべき ly1enc.dfu が読まれなくなるためです。実際に,追加で
\makeatletter\input{ly1enc.dfu}\makeatother
を書いておくと通るようになりますから,この (☆) の挙動は問題だと思われます。
本件, @h-kitagawa さんのコードで解消します。また,LaTeX 本家のリリースと pLaTeX のリリースのどちらが先でも大丈夫なように微調整を加えたので,明日 4/7 にリリースします。
pLaTeX2e <2018-04-01> based on …
という表示になります。(LaTeX と同じく yyyy-mm-dd 表記に変えました)
http://tug.org/pipermail/tex-live/2018-April/041437.html で
\DeclareFontEncoding@
の再定義によって,LaTeX カーネルがプリロードしている utf8.def の定義が上書きされる(結果として dfu が読まれずエラーになる)というのが議論されています。私も知りませんでしたが,同じ理由で mathtext.sty はずっと昔から pLaTeX2e と衝突しているんですね。
https://github.com/texjporg/platex/issues/67#issuecomment-376529431 のコメントについて,さらに調べました。
LaTeX(従来版・新版共通)
\DeclareFontEncoding@
を \def する。(latex.ltx) … [定義A]LaTeX(新版のみ)
pLaTeX
これらのことから,pLaTeX の状況を以下のようにまとめることができます:
従来の pLaTeX の挙動
新しい LaTeX の下での pLaTeX の挙動
ここで何かしらの対処を取らなければ,新しい LaTeX では (☆) の現象が起きてきます。(★2) は (★1) と内容的には同じですが,(★1) よりも「吹っ飛ぶ」タイミングが早くなる(\documentclass より前)ので,もしこの現象が問題だとすれば,その程度は大きくなるはずです。
一つの方法としては,
という方法がありえます。ただし,[定義D] の内容についてはよく考えないといけません。
もう一つの方法としては,根本的に pLaTeX の [定義C] が重要でないのであれば,削除する(あるいは互いに干渉しない別実装を作る)というのがありえます。従来の (★1) の挙動は 20 年近く存在したはずですが,報告例が見当たらないので,「20 年近く誰も問題視していなかった」と見ても差し支えないかもしれません。
さあ,どうするのが良いでしょうか。