LATEXBuilder: add option @config["otf"]
default is true
cf. #342
https://twitter.com/munepixyz/status/725733720888467456
まあ今回は見送りでしょうか。 私自身はデフォルトが変わらないのであればあまり困ってないのと、これまで対応しているのはlayout.tex.erbを使ってると思うので。 (ただlayout.tex.erbは細かく非互換が入りやすいので、これで事足れりとはならないのが悩ましいので、TeXのスタイル側で対応できるならそれがベストですが。)
$ dvipdfmx -f [mapfile] で指定する [mapfile] に、少なくとも otf-foo.map, otf-up-foo.map(さらに、ptex-foo.map, uptex-foo.map も)を合わせたマップファイル(例えば foo.map)が指定していると、layout.tex.erb 内で \usepackage[deluxe]{otf} をデフォルトで有効にして問題ないです。
したがって、config.yml に otf オプションをつけるほどでもないように思います。
実際のところ、$ dvipdfmx -f [mapfile] の [mapfile] は、ptex-foo.map, uptex-foo.map, otf-foo.map, otf-up-foo.map のどれかを指定すると思い込まれているユーザさんが多いのかもしれません。
(ただlayout.tex.erbは細かく非互換が入りやすいので、これで事足れりとはならないのが悩ましいので、TeXのスタイル側で対応できるならそれがベストですが。)
#342 でコメントしましたでっち上げ reviewbook.cls https://gist.github.com/munepi/91703b6f2422862a7e09e56d6d3166d6 内で、
-\@review@pkg@otftrue % \DeclareOption{package:otf}{\@review@pkg@otftrue}
+\DeclareOption{package:otf}{\@review@pkg@otftrue}
と書き換えると、
\documentclass[dvipdfmx,
package:otf,
]{reviewbook}
と指定でき、platex, uplatex に依らず、jsbook.cls と otf パッケージ有無を適切に読み込ませられます。
この reviewbook.cls のオプションをちょこっと覚える必要がありますが、latex.tex.erb が少し簡単に書けますね。
@munepi ええと、もともとのissueであったのは「\usepackage{otf}のオプションを変えたい(deluxeをつけたりとったりできるようにしたい)」ということなので、その辺まで対応できる必要があります。なので、\documentclassのオプションで対応するのは難しいかも。
まあ、\documentclass[disable-package:otf,...みたいな書き方にして、これがあればotfを読み込まない・なければ読み込む、ということにすればよいのかもしれませんが。
@takahashim そもそも otfパッケージのdeluxeオプションを切り替えなくてよいと思うんですね :-) 各仮想フォントに対して、実フォント+CMapなどが適切に指定されておれば、十分ですから。
ただlayout.tex.erbは細かく非互換が入りやすいので、これで事足れりとはならないのが悩ましい + これがあればotfを読み込まない・なければ読み込む、ということにすればよいのかもしれませんが。
ここにいきつきますよね :-)
できるかぎり、以下のようにまとめられたいのかなーと見ております。
- latex/layout.tex.erb は、書籍情報、書籍文章構造に関わる雛形
- sty/foo.cls, sty/bar.sty は、紙面体裁に関わる雛形
reviewbook.cls https://gist.github.com/munepi/91703b6f2422862a7e09e56d6d3166d6 を元に、現状の layout-tex.erb を整理して、jsbook, (u)tbook を被せた review-jsbook, review-tbook などを作ってもよいかとも思っておりました。しかしながら、すでに現状の layout-tex.erb + reviewmacro.sty で使っていらっしゃるユーザさんがいることを想像しますと、(汎用的なjsbook, tbook を使うにもかかわらず、通常でない LaTeX の使い方が混じっていることで) review-jsbook, review-tbook を作ることが混乱を起こしそうですね。 それゆえに、ひとまず、現存の layout-tex.erb でちょっとした enhancement を PR #617 する程度にしようと思います。 また、現存の layout-tex.erb + reviewmacro.sty over jsbook じゃない、別途クラスファイルの contrib を検討しますね!
そもそも otfパッケージのdeluxeオプションを切り替えなくてよいと思うんですね :-)
なんと、そうなんですか。
@takahashim さん、
そもそも otfパッケージのdeluxeオプションを切り替えなくてよいと思うんですね :-)
なんと、そうなんですか。
周辺の諸々を踏まえた上で、結果的に1年半以上かかってしまいました…、
少なくとも現状の review-jsbook/review-base.sty では、標準的にotfパッケージの deluxe が有効になっています。
@kmuto さん、
{,review}-jsbook.clsに対して、別途、otfパッケージを読み込んだ場合、otfパッケージの replace オプション(デフォルトで有効←人に依って、これも利便性ゆえの混乱の元かと思ったりしています)により、相対フォント名7書体が使えるようになるものの、従属欧文がComputer Modernに書き換えられてしまうので、(真面目に対応するとなると、)Latin Modernへの変更するための後処理が必要です。
review-base.styでotfパッケージに後に、lmodernパッケージを読んでいるので、部分的にしかLatin Modernフォントになっていないと思われます。
一方、現状の review-jlreq では、 otf パッケージを読んでいないです。
そもそもjlreqは、自前で仮想フォント(細かい差を除くと、相対フォント名で4書体分(明朝、ゴシックで2書体ずつなはず))を持っていますので。
その上で、jlreqクラスファイルに対して、otfパッケージを使う場合、jlreq側の仮想フォントを使わない処理を別途与える必要があります。つまり、otfパッケージのreplaceオプション相当の後処理が必要です。
(jlreq側の仮想フォントとotf側の仮想フォントを別々に扱うこともできて…、(ry )
review-jsbook, review-jlreqクラスファイルを使うにしろ、各要素の書体設定を(otfパッケージを使った相対フォント指定の7書体であったとしても、)自由に与えられるようにするのは、 結局の所、標準のTeX Live環境で一般的なユーザさんにとって、なかなか大変だと思います。
やはり、一番良いのは、クラスファイル側に、フォント周りを組み込んだものだと個人的には思っています。 (なので、現状の jlreq クラスファイルは、自前の仮想フォントを使う範囲でそうなっていますし、後から違うフォント設定をされようが、それは知ったこっちゃないのは、当然です。) これは設計思想にも依るので、どれが正しいというわけでないです。 ただ、組版する上で、版面設計やフォント周りの設計は、ある種の「環境」だと思うので、パッケージとしてバラバラに使うのではなく、(既成パッケージを使ったとしても、それらのパッケージごとにお作法が異なったりしがちなので、クラスファイル内部で筋が通るようにした上で、)クラスファイル側で提供したほうがよいと考えます。
review-init がネットワーク経由で引っ張ってきやすくなったので、ここらへんのところも気楽にできるかとおもったり思わなかったり。
とりあえずreview-jsbookのほうについてですが、review-baseのlmodernはreview-jsbook.clsのほうですでにlmodernを取り込んでいるので、有無によって欧文には違いが出ず、和文側のファミリ・シリーズを変えている限りではいずれもLatinModernが使われているようです(つまりとりあえず-baseのlmodernはいらない…)。
和文に関しては https://review-knowledge-ja.readthedocs.io/ja/latest/latex/uptex-fonts.html にpxchfonを使う方法を書いてみましたが、クラスファイルで持たせるとvfとかにも手を出さないといけなくないでしょうか。
jlreqのほうは…自分がまだ使い切れていないのですが、こっちは設定含めてまだユーザーに任せるでもいいのだろうか。
いまのRe:VIEW 3リリース直前で、ここまでやるのは、ちょっと骨が折れるので、
jlreqのほうも武藤さんがknowledge spaceに書かれた「pxchfonを使う方法」などで review-custom.sty をカスタムしてもらうので良いかなとも。
たぶん、otfパッケージのdeluxeで提供される \ltseries, \ebseries, \mgfamily のテスト例がないので、引っかかっていないだけだと思います。
下記のコード例が適切かどうかはさておき、Latin ModernにSerifのLightやSansのExtraBoldがないので、それぞれSerif Regular, Sans Boldで代替して従属欧文を当てています。
ひとまず、ここまで面倒みなくても、気になるユーザさんは、自前でやってもらうのがRe:VIEW 3で良さそうな気がしています(時間の都合もここまで面倒みるかどうかも)。
実際には、Computer ModernとLatin Modernで細かい差があるものの、ほとんどの方は気にならないとも思います。
(以下程度コードならば、otfパッケージのupstreamにも反映できそう(反感を食らわない)だとも思うので、そのうち合間に PR してみます。)
\RequirePackage[T1]{fontenc}\RequirePackage{textcomp}%T1/TS1
\RequirePackage{lmodern}
\input t1lmr.fd
\input t1lmss.fd
\DeclareFontShape{T1}{lmr}{l}{n}{<->sub*lmr/m/n}{}
\DeclareFontShape{T1}{lmss}{eb}{n}{<->sub*lmss/bx/n}{}
\RequirePackage[deluxe,jis2004]{otf}
\DeclareRobustCommand\ltseries{\not@math@alphabet\ltseries\relax
\romanseries\ltdefault\kanjiseries\ltdefault\selectfont}
\DeclareRobustCommand\ebseries{\not@math@alphabet\ebseries\relax
\romanseries\ebdefault\kanjiseries\ebdefault\selectfont}
\DeclareRobustCommand\mgfamily{\not@math@alphabet\mgfamily\mathmg\relax
\romanfamily\sfdefault\kanjifamily\mgdefault\selectfont}
\DeclareRobustCommand\textmc[1]{%
\relax\ifmmode \expandafter\nfss@text \fi{\mcfamily #1}}
\DeclareRobustCommand\textgt[1]{%
\relax\ifmmode \expandafter\nfss@text \fi{\gtfamily\sffamily #1}}
\DeclareTextFontCommand{\textlt}{\mcfamily\ltseries}%%<- \gtfamilyで\ltseriesの場合を考慮していない。
\DeclareTextFontCommand{\texteb}{\gtfamily\sffamily\ebseries}%%<- \mcfamilyで\ebseriesの場合を考慮していない。
\DeclareRelationFont{\otf@JYn}{hmc}{l}{}{\otf@OTorT1}{lmr}{l}{}
\DeclareRelationFont{\otf@JTn}{hmc}{l}{}{\otf@OTorT1}{lmr}{l}{}
\DeclareRelationFont{\otf@JYn}{hmc}{m}{}{\otf@OTorT1}{lmr}{m}{}
\DeclareRelationFont{\otf@JTn}{hmc}{m}{}{\otf@OTorT1}{lmr}{m}{}
\DeclareRelationFont{\otf@JYn}{hmc}{bx}{}{\otf@OTorT1}{lmr}{bx}{}
\DeclareRelationFont{\otf@JTn}{hmc}{bx}{}{\otf@OTorT1}{lmr}{bx}{}
\DeclareRelationFont{\otf@JYn}{hgt}{m}{}{\otf@OTorT1}{lmss}{m}{}
\DeclareRelationFont{\otf@JTn}{hgt}{m}{}{\otf@OTorT1}{lmss}{m}{}
\DeclareRelationFont{\otf@JYn}{hgt}{bx}{}{\otf@OTorT1}{lmss}{bx}{}
\DeclareRelationFont{\otf@JTn}{hgt}{bx}{}{\otf@OTorT1}{lmss}{bx}{}
\DeclareRelationFont{\otf@JYn}{hgt}{eb}{}{\otf@OTorT1}{lmss}{bx}{}
\DeclareRelationFont{\otf@JTn}{hgt}{eb}{}{\otf@OTorT1}{lmss}{bx}{}
\DeclareRelationFont{\otf@JYn}{mg}{m}{}{\otf@OTorT1}{lmss}{m}{}
\DeclareRelationFont{\otf@JTn}{mg}{m}{}{\otf@OTorT1}{lmss}{m}{}