jsarticle platexコンパイルでエラーが発生

jsarticle platexコンパイルでエラーが発生

- 鈴木 靖 の投稿
返信数: 10
【不明なこと】
\documentclass[dvipdfmx]{jarticle}ではplatexで正常にコンパイルされるが,{jsarticle}を使うと,コンパイルエラーが発生し,dvi出力はmcmcが文の先頭に付いてしまう.[dvipdfmx]を削除しても結果は同様.

今まで日本語処理の場合は{jarticle}でplatex処理していたため,過去のTeXバージョンで同様の症状が起こっていたかは不明.また,上記の処理以外は特にコンパイルエラーは発生していない.

(OSおよびTeXシステム)-------------
TeXLive2020のISOファイルからWindows10Proバージョン1909 64-bitにインストールしてtlmgr update --self --allを実行している.

(エラーが発生するTeXファイル)-------------
\documentclass[dvipdfmx]{jsarticle}
\begin{document}
吾輩は猫である。名前はまだ無い。
\end{document}

(logの様子:エラー該当部分)-------------
! Undefined control sequence.
\@rmfamilyhook ...pare@family@series@update@kanji
{mc}\mcdefault
l.2 \begin{document}
 
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

(偶然の処理)-------------
エラー発生箇所が,\rmfamilyと絡んでいる可能性がありそうだったので,jsarticle内の関連部分(下記)を試しにプリアンブルに入れてみたら,エラーが発生せずにコンパイルできた.何故できたのでしょう?これを割愛する手立ては?

\makeatletter
\DeclareRobustCommand\rmfamily
{\not@math@alphabet\rmfamily\mathrm
\romanfamily\rmdefault\kanjifamily\mcdefault\selectfont}
\DeclareRobustCommand\sffamily
{\not@math@alphabet\sffamily\mathsf
\romanfamily\sfdefault\kanjifamily\gtdefault\selectfont}
\DeclareRobustCommand\ttfamily
{\not@math@alphabet\ttfamily\mathtt
\romanfamily\ttdefault\kanjifamily\gtdefault\selectfont}
\makeatother

以上です.解決策お有りの方,よろしくお願いします.
鈴木 靖 への返信

Re: jsarticle platexコンパイルでエラーが発生

- 奥村 晴彦 の投稿
Macですが,たった今 tlmgr update --self --all したものでやってみましたが異状ありませんでした。何なんでしょうね。
鈴木 靖 への返信

Re: jsarticle platexコンパイルでエラーが発生

- aminophen の投稿
処理した時にエラーが出たログファイルを添付していただけませんか?
それがあれば調べる手立てはあります。


> (偶然の処理)-------------
> jsarticle内の関連部分(下記)を試しにプリアンブルに入れてみたら,
> エラーが発生せずにコンパイルできた.何故できたのでしょう?

エラーの原因になっている定義を上書きしたのですから,できて当然です。

もう少し詳しく書くと(わからなくてもいいです):
2020年2月に LaTeX が新しくなりました。参考↓
https://okumuralab.org/tex/mod/forum/discuss.php?d=2770
この LaTeX 及び pLaTeX の変更点の(3)の実体は,
「\rmfamily などの命令の定義をアップデートする」
という実現方法でした。その内容は極めて複雑ですが,そのうち一つは
「\@rmfamilyhook という命令を使うようにする」
ということでした。
鈴木さんは偶然,コピペで
「\rmfamily の定義を再度上書きして \@rmfamilyhook を使わなくした」
ので,エラーが消えて当然です。
aminophen への返信

Re: jsarticle platexコンパイルでエラーが発生

- 鈴木 靖 の投稿
お世話になっております.
logを添付しました.
エディタはEasyTeXを利用しています.
プレビューは,DVIOUTとpdf(TeXでコンパイルしてからDVIファイルをdvipdfmx.exe -f dlbase14.map でPDFに変換し、作成されたPDFファイルをPDFReaderで表示)です.
TeX経験は延べで25年ほどになりますが,最新のことには中々疎くて,ダメだったら再インストールかなとも思っておりました.
「\rmfamily の定義を再度上書きして \@rmfamilyhook を使わなくした」のご教示,ありがとうございます.
新たなご教示ございましたら,よろしくお願いします.
鈴木

鈴木 靖 への返信

Re: jsarticle platexコンパイルでエラーが発生

- aminophen の投稿
ログファイルのスタート時に,以下のように表示されていますね。

=====
This is e-pTeX, Version 3.14159265-p3.8.3-191112-2.6 (utf8.sjis) (TeX Live 2020/W32TeX) (preloaded format=platex 2020.5.18)  21 MAY 2020 20:16

〜中略〜

pLaTeX2e <2016/11/29> (based on {LaTeX2e <2020-02-02> patch level 5}\let \let \
UTFviii@invalid@err@@\let \UTFviii@two@octets@@\let \UTFviii@three@octets@@\let
\UTFviii@four@octets@@\message {L3 programming layer <2020-05-15>}\sys_everyjob: )

(c:/texlive/2020/texmf-dist/tex/platex/jsclasses/jsarticle.cls
Document Class: jsarticle 2020/02/02 jsclasses (okumura, texjporg)

=====

これは変です。ログから読み取れるのは以下の状況です。
・インストールされているのは最新の TeX Live 2020 である。
・LaTeX のバージョンは最新の LaTeX2e 2020-02-02 patch level 5 である。
・jsclasses のバージョンも最新の 2020/02/02 である。
・しかし pLaTeX のバージョンは pLaTeX2e 2016/11/29 である。
これでは pLaTeX が LaTeX より古いので,マトモに動くはずがありません。

コンピュータのどこかに,ご自身で昔に手動インストールした plcore.ltx(pLaTeX のソースファイル)が
取り残されていて,TeX Live 2020 が配布している最新の pLaTeX(pLaTeX2e 2020-04-12)を
邪魔して隠しているに違いありません。

ターミナル(コマンドプロンプト)から
kpsewhich plcore.ltx
というコマンドを実行すると,邪魔している古い pLaTeX のファイル達の在り処がわかります。
実行結果を教えてください。
aminophen への返信

Re: jsarticle platexコンパイルでエラーが発生

- 鈴木 靖 の投稿
>ターミナル(コマンドプロンプト)から
>kpsewhich plcore.ltx
>というコマンドを実行すると,邪魔している古い pLaTeX のファイル達の在り処が>わかります。
>実行結果を教えてください。

C:\texlive\2020>kpsewhich plcore.ltx
c:/texlive/texmf-local/tex/platex/base/plcore.ltx

となっています.

鈴木 靖 への返信

Re: jsarticle platexコンパイルでエラーが発生

- aminophen の投稿
では,まず
c:/texlive/texmf-local/tex/platex/base/
というフォルダにあるファイルを全削除してください。もし
c:/texlive/texmf-local/tex/platex/config/
というフォルダもあれば,そちらも全削除してください。

次に,コマンドプロンプトから
mktexlsr
というコマンドを実行し,最後に
fmtutil-sys --all
というコマンドを実行してください。

これで修正完了するはずです。
aminophen への返信

Re: jsarticle platexコンパイルでエラーが発生

- 鈴木 靖 の投稿
ご教示の通りで,問題なく動きました.
c:/texlive/texmf-localという2019との共有フォルダが悪さをしているとは思っていませんでした.(小生が不注意な訳ですが,共有フォルダの挙動に注意することが情報であまり見受けられないような感じがします.)
今回のことで,コンパイルlogやインストールlogを見たとき, pLaTeX のバージョンが古いな,とは思いましたが,そこまで疑い切れませんでした.
本当にありがとうございました.


aminophen への返信

Re: jsarticle platexコンパイルでエラーが発生

- 鈴木 靖 の投稿
c:/texlive/texmf-local/tex/platex/base/plcore.ltx
という結果ですが,昨年のTeXlive2019と共通のフォルダに入っている状態なので,古いplcore.ltxが2020のインストールの時に悪さしたということですね.
鈴木 靖 への返信

Re: jsarticle platexコンパイルでエラーが発生

- aminophen の投稿
> 昨年のTeXlive2019と共通のフォルダに入っている状態なので,
> 古いplcore.ltxが2020のインストールの時に悪さしたということですね.

はい,そうです。