Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

jsreport クラスと otf パッケージ #63

Closed
aminophen opened this issue Dec 9, 2017 · 22 comments
Closed

jsreport クラスと otf パッケージ #63

aminophen opened this issue Dec 9, 2017 · 22 comments
Labels

Comments

@aminophen
Copy link
Member

今年,念願(?)の jsreport.cls を追加しました。これの扱いに関する issue です。

\documentclass[report]{jsook} と \documentclass{jsreport} の相違点は

  • abstract 環境

だけのつもりで,その他はほぼ完全に互換としていると思います。ところが,otf パッケージを使うと全体にスケーリングが非互換になります。

%\documentclass[report,36pt]{jsbook}
\documentclass[36pt]{jsreport}
\usepackage{otf}
\begin{document}
AAAあああああAAA
\end{document}

原因は otf パッケージが「jsclasses 読込済みかどうか」をクラス名そのもので \@ifclassloaded{jsarticle}\@ifclassloaded{jsbook} として判定しているためのようです。これはどちらかというと otf パッケージの issue なのだと思いますが,「otf パッケージをどう直すのが良いか」が明確ではありません。

  • kiyou.cls や jspf.cls はどう扱うべきか?
  • ついでに BXJS クラスとの共存はどうなっているのか?
@zr-tex8r
Copy link
Contributor

BXJS クラスとの共存はどうなっているのか?

jsarticle/jsbookとそれ以外の場合のotfパッケージの挙動の差は「和文スケール値の違い」です。ところがそもそもBXJSクラスでは和文スケール値自体が可変(scaleオプションキーで指定可能)になっています。だから、「BXJSクラスの方からotfパッケージのscaleオプションを指定する」という方法をとっています。

\documentclass[platex,dvipdfmx,ja=Standard,
  scale=1.5,a4paper]{bxjsarticle}
\usepackage{otf}
\begin{document}
{\TeX}はsuperアレ、{\ajSnowman}はnonアレ。
\end{document}

image-bxjsotfscl-1

@zr-tex8r
Copy link
Contributor

自分の持ってる希望としては、
「和文関連クラス・パッケージ開発者の間で『クラスで定められた和文スケール値』を取得するための何らかの共通規約」
があるといいな、と思っています。

既に、オレオレ規約として次のようなものが成立しています。

  • 実数値マクロ\Cjascaleが和文スケール(1zw÷要求サイズ)を表すと規定する。
    (“C”はpLaTeX標準の\Chtなどの真似。)
  • BXJSクラスは\Cjascaleを正しい値(\jsZwに連動した値)に設定する。
  • BXbase、BXcjkjatype、PXchfon、PXgtfont、ZXjafont、ZXjatype、ZXotfの各パッケージは\Cjascaleの値を参照する。

@yuw
Copy link

yuw commented Dec 12, 2017

和文関連クラス・パッケージ開発者の間で『クラスで定められた和文スケール値』を取得するための何らかの共通規約

規約化に賛成です.
もっとも,自分で作るときの和欧文のサイズ調整では,和文の方はスケールさせない(1.0倍)で欧文の方をスケールさせて調整していますが.

@aminophen
Copy link
Member Author

「和文関連クラス・パッケージ開発者の間で『クラスで定められた和文スケール値』を取得するための何らかの共通規約」

賛成です.しかも,すでにその条件を満たす「オレオレ規約」があって,他にそのような事例がないのであれば,そのまま踏襲するのがラクでしょうね.

OTF パッケージは,私のところで勝手に unofficial mirror を立てていました(pLaTeX / upLaTeX 本体のテストに使うつもりで).ここで作業もするのであれば,齋藤さん(原作)・ttk さん(uptex 版)・Norbert さん(CTAN アップロード者)に了承を取りましょうか? pull request していただければ私は受け付けます.

@aminophen
Copy link
Member Author

ちなみに,ごく最近「platex / uplatex の sync 効率化など (texjporg/platex#56)」を実行している途中で発見したのですが,japanese-otf-uptex には「upLaTeX のデフォルトは従属書体が T1 なのに,otf.sty (japanese-otf-uptex) を読むと OT1 に戻る」という issue もあります。

%#!ptex2pdf -u -l
\documentclass[uplatex]{jsarticle}
\usepackage[uplatex]{otf}% これをなくすと T1
\begin{document}
\userelfont\selectfont\AA\makeatletter\f@encoding\makeatother
\end{document}

aminophen added a commit to texjporg/platex that referenced this issue Dec 31, 2017
aminophen added a commit to texjporg/uplatex that referenced this issue Dec 31, 2017
@aminophen
Copy link
Member Author

platex / uplatex / jsclasses のリポジトリにそれぞれ cjascale ブランチを作り,

  • jsclasses の *.cls, minijs.sty
  • platex の pldefs.ltx
  • uplatex の upldefs.ltx

で \Cjascale を定義してみました。やり方は合っているでしょうか?

@aminophen
Copy link
Member Author

aminophen commented Dec 31, 2017

\Cjascale を定義

一旦 platex / uplatex の (u)pldefs.ltx で定義してみたのですが,これだと

「ユーザが作った(\Cjascale 未定義の)独自クラス + otf パッケージ」

の場合に,後方互換性が失われそうですね(特に,独自クラスが「従来の jsclasses の改変版」だった場合もこれに該当する)。従って,

  • platex / uplatex でも,\Cjascale を *.cls の側で定義する(つまりカーネルでは定義しない)
  • otf パッケージは,\Cjascale が未定義の場合は従来通り \@ifclassloaded{jsarticle} のようにクラスファイル名で判定する

します → [edit] したほうがよいのかもしれないと思い始めました。

aminophen added a commit to texjporg/uplatex that referenced this issue Jan 13, 2018
@aminophen
Copy link
Member Author

platex / uplatex でも,\Cjascale を *.cls の側で定義する(つまりカーネルでは定義しない)

texjporg/platex@d7ac4d1texjporg/uplatex@0d8d1c0 でやってみました(cjascale-cls ブランチ)

@zr-tex8r
Copy link
Contributor

platexの方で、\Cjascaleを1としていますが、
\Cjascale=1zw÷要求サイズ」
という認識であれば、これはuplatexと同じく0.962216となるべきです。

※japanese-otfのフォントのJFMスケールは全て1なので、japanese-otfの側で指定するNFSSスケールの値は、エンジンに関わらず、\Cjascaleと一致します。

@aminophen
Copy link
Member Author

aminophen commented Jan 21, 2018

uplatexと同じく0.962216となるべきです。
japanese-otfのフォントのJFMスケールは全て1

確認していませんでした… ご指摘ありがとうございます。あとで直します。

@t-tk
Copy link
Contributor

t-tk commented Jan 24, 2018

「upLaTeX のデフォルトは従属書体が T1 なのに,otf.sty (japanese-otf-uptex) を読むと OT1 に戻る」
全然認識していませんでした。
適切な直し方を教えてください。

@aminophen
Copy link
Member Author

「upLaTeX のデフォルトは従属書体が T1 なのに,otf.sty (japanese-otf-uptex) を読むと OT1 に戻る」
適切な直し方を教えてください。

発見以来コードは見ていなかったので,今見ました。まだ十分試せていませんが,JY1/JY2 → \otf@JYn で統一しているのを真似れば,\DeclareRelationFont の OT1 登場箇所全て

\def\otf@OTorT{\if@otf@uplatex T1\else OT1\fi}
	\DeclareRelationFont{\otf@JYn}{hmc}{m}{}{\otf@OTorT}{cmr}{m}{}

みたいにすれば動くかもしれません。

@psitau
Copy link

psitau commented Jan 30, 2018

OTFパッケージのscaleの部分を以下のように修正しようと考えています.

\if@otf@scale
	\relax
\else
	\ifx\Cjascale\@undefined
		%for jsclasses
		\@ifclassloaded{jsreport}{\@jsclassestrue}{}
		\@ifclassloaded{jsarticle}{\@jsclassestrue}{}
		\@ifclassloaded{jsbook}{\@jsclassestrue}{}
		\if@jsclasses\def\utf@sc@le{0.92469}\else\def\utf@sc@le{0.962216}\fi
	\else
		\edef\ipa@sc@le{\Cjascale}
	\fi
\fi

\Cjascaleのところは,これでいいのか試せていないのですが,如何でしょうか?

@yuw
Copy link

yuw commented Jan 30, 2018

よくわからなくっているのですが,
スタイルファイルの方から特定のクラスファイルを指すのはやめたほうがよいと思います.

@aminophen
Copy link
Member Author

aminophen commented Jan 30, 2018

@psitau さん,ありがとうございます。まだクラスファイル側で \Cjascale を正しく設定していないので,「\Cjascaleのところは,これでいいのか試せていないのですが,如何でしょうか?」の問いには自信を持って答えられないです。すみません。

スタイルファイルの方から特定のクラスファイルを指すのはやめたほうがよいと思います.

@yuw さんの指摘はメンテナンス性などの面からの指摘なのだと推察しますが,今回のケースだと「特定のクラスファイルを指す方式」は除去できない,と思っています。というのも,「OTF パッケージが jsclasses / pLaTeX / upLaTeX より先に更新された場合」に従来の組版が変化してしまうからです。\Cjascale という規約がなかった時代(現在もまだその時代に該当します)にはそうするほかはなかったのでしょうがないと思います。jsclasses のメンテナと OTF のメンテナの双方が「OTF は jsclasses の特定のクラス名を指している」ことを認識している限り問題は起きないと思います。

@zr-tex8r
Copy link
Contributor

\ipa@sc@le\utf@scaleが正しいですね。

\Cjascaleの扱いはこれでいいと思います。
(otfのJFMはNFSSスケールが1なので)

@zr-tex8r
Copy link
Contributor

(蛇足)

ちなみに、(特に自分パッケージを設計する上で)
「パッケージが特定のクラスへの対策を行う」
ことについてどう考えるか、というと、基本的に
「パッケージが特定の他のパッケージへの対策を行う」
のと同様だと考えます。つまり「筋が悪い」程度の認識です。

※特にそれだけが原因で、「何かの機能の実現を諦める」という判断はしないと思います。

@psitau
Copy link

psitau commented Jan 30, 2018

@yuw さん,jsarticleとjsbookの部分は既存なので,後方互換性のために残させてください.

@zr-tex8r さん,ご指摘ありがとうございます.ipamjmから誤ってコピペしておりました.

先ほどのコードではextra elseなどと怒られてしまうので,次のように修正します.

\if@otf@scale
	\relax
\else
	\@ifundefined{Cjascale}{%
		%for jsclasses
		\@ifclassloaded{jsreport}{\@jsclassestrue}{}
		\@ifclassloaded{jsarticle}{\@jsclassestrue}{}
		\@ifclassloaded{jsbook}{\@jsclassestrue}{}
		\if@jsclasses\def\utf@sc@le{0.92469}\else\def\utf@sc@le{0.962216}\fi
	}{\edef\utf@sc@le{\Cjascale}}
\fi

@aminophen
Copy link
Member Author

「upLaTeX のデフォルトは従属書体が T1 なのに,otf.sty (japanese-otf-uptex) を読むと OT1 に戻る」

texjporg/japanese-otf-mirror@1969510 のように変更すると動作しました。

@aminophen
Copy link
Member Author

  • platex (cjascale-test branch)
  • uplatex (cjascale-test branch)

で pLaTeX / upLaTeX は正しく設定しました,のつもりです。

plfonts.dtx

% p\LaTeX{}では従属書体にOT1エンコーディングを指定しています。
% また、要求サイズ(指定されたフォントサイズ)が10ptのとき、
% 全角幅の実寸が9.62216ptとなるようにしますので、
% 和文スケール値($1\,\mathrm{zw} \div \textmc{要求サイズ}$)は
% $9.62216\,\mathrm{pt}/10\,\mathrm{pt}=0.962216$です。
% min10系のメトリックは全角幅が9.62216ptでデザインされているので、
% これを1倍で読込みます。
% \changes{v1.6l}{2018/02/04}{和文スケール値を明文化}

jclasses.dtx

% \begin{macro}{\Cjascale}
% このクラスファイルが意図する和文スケール値
% ($1\,\mathrm{zw} \div \textmc{要求サイズ}$)を
% 表す実数値マクロ|\Cjascale|を定義します。
% このp\LaTeXe{}の標準クラスでは、フォーマット作成時に読み込まれた
% フォント定義ファイル(\file{jy1mc.fd} / \file{jy1gt.fd} /
% \file{jt1mc.fd} / \file{jt1gt.fd})での和文スケール値がそのまま
% 有効ですので、これは0.962216です。
% \changes{v1.7h}{2018/02/04}{和文スケール値\cs{Cjascale}を定義}
%    \begin{macrocode}
%<*article|report|book>
\def\Cjascale{0.962216}
%</article|report|book>
%    \end{macrocode}
% \end{macro}

uplfonts.dtx

% p\LaTeX{}では従属書体にOT1エンコーディングを指定していましたが、
% up\LaTeX{}ではT1エンコーディングを用いるように変更しました。
% また、要求サイズ(指定されたフォントサイズ)が10ptのとき、
% 全角幅の実寸が9.62216ptとなるようにしますので、
% 和文スケール値($1\,\mathrm{zw} \div \textmc{要求サイズ}$)は
% $9.62216\,\mathrm{pt}/10\,\mathrm{pt}=0.962216$です。
% upjis系のメトリックは全角幅が10ptでデザインされているので、
% これを0.962216倍で読込みます。
% \changes{v1.6l}{2018/02/04}{和文スケール値を明文化}

ujclasses.dtx

% \begin{macro}{\Cjascale}
% このクラスファイルが意図する和文スケール値
% ($1\,\mathrm{zw} \div \textmc{要求サイズ}$)を
% 表す実数値マクロ|\Cjascale|を定義します。
% このup\LaTeXe{}の標準クラスでは、フォーマット作成時に読み込まれた
% フォント定義ファイル(\file{jy2mc.fd} / \file{jy2gt.fd} /
% \file{jt2mc.fd} / \file{jt2gt.fd})での和文スケール値がそのまま
% 有効ですので、これは0.962216です。
% \changes{v1.7h}{2018/02/04}{和文スケール値\cs{Cjascale}を定義}
%    \begin{macrocode}
%<*article|report|book>
\def\Cjascale{0.962216}
%</article|report|book>
%    \end{macrocode}
% \end{macro}

こんな感じです。

@aminophen
Copy link
Member Author

aminophen commented Feb 4, 2018

  • jsclasses (cjascale-test branch)

こちらも jsclasses と minijs の \Cjascale を設定し直しました,のつもりです。

おっと,winjis オプションのところに仕込んだメッセージがいろいろ酷いですね。直します

@aminophen
Copy link
Member Author

jsclasses の \Cjascale (cjascale-test branch) を master にマージしました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants