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

複数のテンプレートをRe:VIEW本体で抱える検討 #812

Closed
kmuto opened this issue Aug 12, 2017 · 29 comments
Closed

複数のテンプレートをRe:VIEW本体で抱える検討 #812

kmuto opened this issue Aug 12, 2017 · 29 comments

Comments

@kmuto
Copy link
Owner

kmuto commented Aug 12, 2017

cf #808

複数のlayout.tex.erbをRe:VIEW本体で提供しようとする場合、ReVIEW::Template::TEMPLATE_DIRから選ぶための設定方法が必要になる。
今はlatex/layout.tex.erbきめうち。

@takahashim
Copy link
Collaborator

takahashim commented Aug 12, 2017

どちらかというと、将来的にはlayout.tex.erbは最小限のもので固定にして、*.styに全て追いやる方がいいのかなという気もしております。
(主にLuaLaTeX対策の意味もあったりします)

@kmuto
Copy link
Owner Author

kmuto commented Jan 1, 2018

styファイルはreview-init時に作業フォルダにコピーする? それともreview-pdfmaker実行時にRe:VIEWのlib/templatesからコピーする?

前者だと既存環境では動かなくなるのとバグ修正を伝播できないですが。後者だとカスタマイズしたいときにどうしようかという問題があります。

@takahashim
Copy link
Collaborator

前者でしょうねえ。
既存環境のものについては互換性がなくなってしまうかもです。

@kmuto
Copy link
Owner Author

kmuto commented Jan 2, 2018

うむむ。自分の制作範囲だとlayouts/、sty/はもともとごっそり入れ替えているので影響は少ないですが。

layouts/, sty/が存在しない/空の場合はpdfmaker側でコピーかなぁ。

@kmuto
Copy link
Owner Author

kmuto commented Jan 9, 2018

jlreq版スタイルを作ってみていますが、今後どのくらいの単位でsty分割したらよいか悩み中。いまのところ、

  • プリアンプルまわりでlualatex/uplatexでどうしても共通化できないものがある。
  • フォント設定部分は分離したいかなー(ただこれもlualatex/uplatexで全然違う)。
  • noteやコラムなどの囲み記事、listやemlistなどのリスト部分の表現実装は人によって好みが分かれそうなので分離したほうがいいか。
  • あまり分割しすぎると変なCMSみたいになってよろしくない。

@kmuto
Copy link
Owner Author

kmuto commented Jan 11, 2018

https://github.com/kmuto/exp-review-cls で実験していますが、
config.ymlのパラメータをstyに渡すプロセスが厄介です。

  • keyval化したtexファイルを読ませる。keyval化の作業がまず煩雑で、取り出しもわかりづらそう。
  • styのほかに、sty.erbも許容する。最初にerb実行してからビルドフォルダに放り込む、とか。

@kmuto kmuto mentioned this issue Feb 6, 2018
19 tasks
@kmuto
Copy link
Owner Author

kmuto commented Feb 7, 2018

「Re:VIEWシステム側はこういうフォルダ構成になっていて」→「review-initではこういうオプションで選択できて(?)」→「プロジェクトフォルダはこうなる」というおおまかなイメージはないでしょうか。

クラスファイルはまにあわないにしても、現状のjsbook系データをこの形にする準備はしたいのですが。

@takahashim
Copy link
Collaborator

将来的には、

  • *.reを別ディレクトリに置く
  • review-init --template https://example.com/templates/template.ymlみたいな感じでディレクトリ構成のYAML(or JSON?)ファイルを持ってくるか、review-init --template https://example.com/templates/template.zipみたいな形でテンプレートファイルを持ってくるかする

みたいな感じでしょうか…。

Sphinxのテーマ http://www.writethedocs.org/guide/tools/sphinx-themes/ やgitbookのテーマ https://github.com/GitbookIO/theme-api (例: https://github.com/nijikokun/clarity ) をみた感じでは、わりとベタな感じなので厳しい気分になりました。

@kmuto
Copy link
Owner Author

kmuto commented Feb 25, 2018

  • 「*.reを別ディレクトリに置く」は今作りかけのdraftdirみたいなパラメータを追加するかんじでしょうか。contentdirの実装 #938
  • LaTeXのテンプレートの選択は layout.tex.erbの分割 #950 で実装してみましたが、LaTeXのみの想定&フォルダ指定 でした。URLならそっちを拾う・zipを展開する もできそうではありますが、LaTeXもHTMLもとなるとパラメータや展開するファイル群などいろいろ考慮が必要そうです。

@takahashim
Copy link
Collaborator

#938 はそんな感じになるかと思います。実装はFile.joinを使った方が良さそう

@takahashim
Copy link
Collaborator

#950 はあんまり良く分かってないんですが(すみません)、erbは1個だけ+素のstyじゃ難しいんでしようか…?

@takahashim
Copy link
Collaborator

pdfmakerのこの辺でやりたいことは、詰まるところRubyの世界とLaTeXの世界とでの(主にconfig.ymlの)情報の受け渡しと、その情報を元にしたLaTeXの処理で、前者についてはlayout.tex.erbで実現して、後者についてはLaTeX(*.sty)のみでできるといいんですが、実際LaTeXだけでできるかどうかがちょっと自信ないです

@kmuto
Copy link
Owner Author

kmuto commented Feb 25, 2018

#938 についてはFile.join化してみました。ただFile.joinだと./.はそのままにしちゃうんですね。Pathnameのcleanpathまで使うのは大仰すぎるように思えたので、draftdirデフォルトを空文字列にして通すようにしました。

ymlの内容を定義しておいてマクロだけでなんとかならないかというのは #864 で苦闘してみたのですが、クラスファイル側にその準備がないと無理だと思いました。

@takahashim
Copy link
Collaborator

ただFile.joinだと./.はそのままにしちゃう

むーん、そうなんですね。失礼しました。
Pathname.new("foo").join(".","bar") だと正規化してくれるみたいですが、to_sつける必要あるし、ちょっと冗長なので、File.joinで十分そうです。

@takahashim
Copy link
Collaborator

ymlの内容を定義しておいてマクロだけでなんとかならないか

#864 みたいに汎用的な形でもいいですし、最悪、

\newcommand{\reviewbooktitle}{<%= escape_latex(@config.name_of("booktitle"))}

みたいなのを大量に並べるでもいいかと思うのですが、問題は、

<%- if @config["creditfile"] -%>
<%= @custom_creditpage %>
<%- end -%>

みたいなのを*.styで書けるかですね…。
例えば、layout.tex.erbの中で、

<% if @config["creditfile"] %>
\newcommand{\revewcreditfile}{<%= @custom_creditpage %>}
<% end %>

としておいて、*.styの中で

%%% credit
\ifdefined\revewcreditfile
\revewcreditfile
\fi

みたいに書くのは現実的でしょうか。

@takahashim
Copy link
Collaborator

layout.tex.erb 全体は https://gist.github.com/takahashim/30e3148ff306f0ec2019932e6738d9ec こんな感じとかにすると、\begin{document}\end{document}からはRubyの埋め込みがなくせそう。その代わり文書構造は決め打ちになります(ある程度hook部分でいじれるけど)

@kmuto
Copy link
Owner Author

kmuto commented Feb 25, 2018

なるほど… ちょっとその方向で書いてみましょうか。

@takahashim
Copy link
Collaborator

少し考えてみたのですが、もしかしたら\begin{document}\end{document}内での埋め込み自体は避けなくてもいいのかなあ…という気もしました。
(この方法だと、例えば最後の手段として*.styの中で\renewcommand{\revewcreditfile}で書き換えできるので自由度が高まるかも、という気持ちだったのですが、それで救える場面が少ないんなら別に埋め込み自体は忌避しなくてもよいか、ということです。)

@kmuto
Copy link
Owner Author

kmuto commented Feb 26, 2018

作ってるときでも困ったことなんだけど、配列とかハッシュみたいなものはどう表現しよう問題があるんだよねぇ。
とりあえず今のjsbookの互換で単純文字列化しておく?

@kmuto
Copy link
Owner Author

kmuto commented Feb 26, 2018

プリアンプル内で生なerbで条件式分岐している箇所は以下のところですが、どう代替しましょうかね…

<%- if @texcompiler == "uplatex" -%>
\usepackage[deluxe,uplatex]{otf}
<%- else -%>
\usepackage[deluxe]{otf}
<%- end -%>
<%- unless ["utbook", "tbook"].include?(@documentclass)  -%>
\usepackage[top=10zw,bottom=12zw,left=10zw,right=10zw]{geometry}
%\usepackage[top=5zw,bottom=5zw,left=1zw,right=1zw]{geometry}
<%- end -%>
<%- if ["utbook", "tbook"].include?(@documentclass)  -%>
\newcommand{\headfont}{\gtfamily\sffamily\bfseries}
\usepackage{plext}
<%- end -%>
<%- if config["highlight"] && config["highlight"]["latex"] == "listings" -%>
<%-   if config["language"] == "ja" -%>
\usepackage{listings,jlisting}
<%-   else -%>
\usepackage{listings}
<%-   end -%>
\renewcommand{\lstlistingname}{<%= escape_latex(I18n.t("list")) %>}
(この先まだずらずら)
<%- end -%>
<%- if @config["toctitle"].present? -%>
\renewcommand{\contentsname}{<%= escape_latex(@config["toctitle"]) %>}
<%- elsif I18n.t("toctitle") -%>
\renewcommand{\contentsname}{<%= escape_latex(I18n.t("toctitle")) %>}
<%- end -%>
<%- if @config["texstyle"] -%>
<%-   [@config["texstyle"]].flatten.each do |x| -%>
\usepackage{<%= x %>}
<%-   end -%>
<%- end -%>
<%- if @config["makeindex"] -%>
\usepackage{makeidx}
\makeindex
<%- end -%>

@takahashim
Copy link
Collaborator

LaTeX側で扱えるのは文字列が基本になるかと思うので、LaTeX側で使うための文字列を一通り用意しておくのがいいのかなと。ループとかがなければ。
あとは\ifxとか\ifdefinedとかでいけるといいんですが。と思ったけどifthenパッケージの方がいいんでしょうか?

@kmuto
Copy link
Owner Author

kmuto commented Feb 26, 2018

ifx,ifdefinedでもいいんだけど、特にifxは読みにくいなぁと思っていて、制御構文の可読性+baseのTeX環境で使えるの点でifthenパッケージはわりと使いやすいのでは、と思いました。
全部にelse句が入るのがちょっとアレだけど。

@kmuto
Copy link
Owner Author

kmuto commented Feb 26, 2018

あとは

  • packages部分を切り出してユーザーのstyにコピーするとして、単一のstyにする? 機能ごとに分ける?
  • document内はどのくらいstyに移動をがんばる?
  • titlepage, coverimageの分離はこの機会に入れる?

あたりでしょうかね。
chaptermarkをいじるのは本来はクラスファイル側がカバーしたほうがよいことだろうなぁ…。

@kmuto
Copy link
Owner Author

kmuto commented Feb 27, 2018

yamlからの変換・command定義まわりはpdfmaker.rb側でやってあげて、layout.tex.erbでは <%= define_texconfig%> みたいにしておいたほうがよいのかなと思っています。

ifdefinedを有効活用しようとすると、「最初から定義しない」の挙動が必要になって、それをlayout.tex.erbで書くのは冗長すぎるかんじがしています。

@takahashim
Copy link
Collaborator

*.styについては、

  • review-initを実行すると、Re:VIEW標準の*.styがプロジェクト用ディレクトリのsty/以下に入る
  • 上記で生成された*.styは基本ユーザがいじらないことにする。それ以外にユーザ用の空のstyを用意して、そこはユーザが自由に変更できるようにする(以前 kauplanさんが書いてたようなパターン)
  • Re:VIEWのマイナーバージョンがあがって変更が入った場合にはsty/以下を更新版で差し替えてもらう(??)、あるいはreview-pdfmakerで上書きするオプションを用意する(???)

みたいな管理方法がいいんですかね…。

titlepage, coverimageの分離はこの機会に入れる?

はい、このタイミングで入れた方がよさそうです。

chaptermarkをいじるのは本来はクラスファイル側がカバーしたほうがよいことだろうなぁ…。

https://gist.github.com/takahashim/30e3148ff306f0ec2019932e6738d9ec
でも書きましたが、 frontmamatter/mainmatter/appendix/backmatterの前には全部hookを入れて、chaptermarkとかはそこでいじるというのでどうでしょう。
(この章だけ変えたい、というのは*.reに//embedを入れてもらうということで)

@kmuto
Copy link
Owner Author

kmuto commented Feb 27, 2018

うーん、「いじらない」ものならユーザ環境に提供するよりはRe:VIEW template directoryからビルド時にコピーすればいいということになるような。

pdfmakerで上書きは気持ちが悪いので、やるならinit、あるいはRakefileですかねぇ。間違えるとプロジェクトのファイルを壊しそうなのが不安か。

@takahashim
Copy link
Collaborator

バージョンアップしても既存プロジェクトが壊れにくい方法にしたいところです、はい。

@kmuto
Copy link
Owner Author

kmuto commented Feb 27, 2018

defineの構文は「とりあえず現状のをなんとかすべく」入れたものなので、今後のバージョンアップでまたごそっと変わるかもしれません。そうすると、それに基づいていたstyをプロジェクトに配備してしまうと厄介なことになるのを懸念します。

あと、1つのstyにするのか、カスタマイズ用に複数置くのか、TeXエンジンごとの違いはどうするのか、といったあたりも問題でしょうか。
ユーザー設定環境については、reviewmacro.sty の内容を基本styのほうに含めて、reviewmacro.styを空にしておく だと影響は少ないんでしょうかね。

@kmuto kmuto mentioned this issue Sep 3, 2018
9 tasks
@kmuto
Copy link
Owner Author

kmuto commented Oct 15, 2018

#1105#1117 にて対応
アップデートは別issueを立てる

@kmuto kmuto closed this as completed Oct 15, 2018
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