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

固有のYAML設定のLaTeXへの引き渡し #1505

Closed
kmuto opened this issue Jun 13, 2020 · 11 comments
Closed

固有のYAML設定のLaTeXへの引き渡し #1505

kmuto opened this issue Jun 13, 2020 · 11 comments

Comments

@kmuto
Copy link
Owner

kmuto commented Jun 13, 2020

やりたいこと

任意のYAMLパラメータをPDFMakerにもうちょっと渡しやすくしたい。

背景

現在、config.ymlからPDFMakerへの引き渡しは templates/latex/config.erb で特定の範囲の設定のみを取り込んでTeXマクロに変換し、pdfmaker#latex_config を通して layout.tex.erb 内に貼り付ける という構成にしている。
そのため、任意のYAML設定を使いたいときには、

  • layout.tex.erbごと差し替える
  • pdfmaker#latex_config をreview-extでオーバライドする
  • hookで__REVIEW_BOOK__.texを書き換える
  • hookでYAMLパラメータを取り込んで sty/review-custom.sty などに書き出す

といった、いささか大袈裟 or トリッキー な処理が必要となる。
(YAMLの設定名およびデータ構造とTeXのマクロとで一対一対応にさせるのはほぼ不可能。)

解決案

  • layouts/config-local.tex.erb というファイルがあったらそれも取り込むようにする。中身はconfig.erb同様で任意にマクロ対応を記述する。記述およびエラーの責任はユーザが持つ。

考えられる問題

  • erb通してなんでもできることになるので、セキュリティ的にはよろしくない(が、フックとか-shell-escapeとか穴はいくらでもあるので…)。
  • config-local.tex.erb という名前はダサイ?
  • review-init実行後では存在せず、ドキュメント化はするにしても気付かれなさそう。(自分が使えればいいので別に構わないが)
@takahashim
Copy link
Collaborator

具体的なユースケースは分かってないのですが、結局review-ext.rbと同程度にポータビリティの低いしくみにしかならなさそうなので、review-ext.rb+α(独自のYAMLやJSONの設定ファイル等)でもいいかも?とは思いました。

それともconfig.erbのマッピングルールを整理して、もうちょっと柔軟にするべきでしょうか(そのくらいの拡張性で間に合うのであれば)。

@takahashim
Copy link
Collaborator

でもあんまり変なマッピングルール+命名規則を作っても使いにくそう…という気もしますね…。

@kmuto
Copy link
Owner Author

kmuto commented Jun 13, 2020

はい、マッピングルール作るといろいろ辛そうだなぁという感じです。
目的としては、今のreview-jsbook, review-jlreqとは別にYAMLでカスタマイズできるclsを作ろうと考えています(Re:VIEWコアに入れるかというと微妙なところで、拡張的な位置付けのプロジェクトにしようかなとは思っています)。そのときにreview-ext.rbだとだいぶゴチャゴチャしそうなのでした。

@kmuto
Copy link
Owner Author

kmuto commented Jun 13, 2020

最近review-ext.rbでなんでもやれるだけに魔改造してしまって後々困るようなケースが見受けられるので、パラメータのバインディングなどのありきたりなところはなるべくインタフェースを設けたほうがよいのではという方向を考えつつあります。layout.tex.erb差し替えは無駄すぎるし、コア側で変えたときの追従がしづらい。

@takahashim
Copy link
Collaborator

ちなみにそのYAMLは、PDFMaker以外ではどうハンドリングするんでしょうか?

@kmuto
Copy link
Owner Author

kmuto commented Jun 13, 2020

ほかのMakerだと今のところ、独自のYAML設定で何か挙動を変えたいというシチュエーションがほとんどないんですよね…。とりあえず今のRe:VIEWでは知らないYAML設定は単に無視するんで、あまり困らなそう。

クラスファイル側はまだ全然詰めてないですが

fooclass:
  font:
    bold: ["SourceHanCodeJP-Medium.otf", "Helvetica.otf"]
  style:
    note: doubleround

みたいな想定です。

@takahashim
Copy link
Collaborator

うーん、共用しないでLaTeXからしか使わないのであれば、(La)TeXのマクロをそのまま*.styに書いて読み込んだ方が、Re:VIEWのバージョンにも依存しなくて確実だったりするんではないでしょうか?
あるいは実行タイミング等に問題があったりするんでしょうか。

@kmuto
Copy link
Owner Author

kmuto commented Jun 15, 2020

出力結果としてはsty相当にはなるんですが、
エスケープやパラメータ分解・解析などを全部TeX言語で組むのは困難なので、Ruby言語で記述したいと思っています。
sty/*.sty.erb を許容するならそれでも済みますが、前に考えたときはこれは避けたいということになってましたっけ。

@kmuto
Copy link
Owner Author

kmuto commented Jun 19, 2020

どうしましょうかね。

@takahashim
Copy link
Collaborator

あっとすみません。
まだ必要性について理解できてないんですが、使うんだったら入れざるを得ないと思うので、実際に近いテストケースと一緒に入れてもらえればいいのかな…と思いました。

それはそれとして、使用していることがconfig.ymlで分かるといいかなとも思いましたが、これ以上設定項目増やすのもうれしくなさそうなので、設定はなくてもいいかも(でも暗黙的な機能が増えるのも良くないかも…とはいえ明示的にしたところで大してうれしくなさそうだし…)というところです。

@kmuto
Copy link
Owner Author

kmuto commented Jun 19, 2020

はい、ではテストケースを作っておきます。
ymlの追加は、うーん、なくていいような気はします。

#1502 にほかのPR候補をまとめてみてるんで、ご意見いただければ。

@kmuto kmuto closed this as completed in e4f3336 Jun 19, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants