From ec255e8fe4d54ad7985ebaaa898f36a4e5657eee Mon Sep 17 00:00:00 2001 From: Kenshi Muto Date: Sun, 5 Nov 2017 16:27:41 +0900 Subject: [PATCH 1/5] =?UTF-8?q?TeX=E7=94=A8=E5=90=90=E3=81=8D=E5=87=BA?= =?UTF-8?q?=E3=81=97=E3=83=91=E3=83=A9=E3=83=A1=E3=83=BC=E3=82=BF=E3=81=AE?= =?UTF-8?q?=E3=83=89=E3=83=A9=E3=83=95=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/variables.tex | 76 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 doc/variables.tex diff --git a/doc/variables.tex b/doc/variables.tex new file mode 100644 index 000000000..29241afd8 --- /dev/null +++ b/doc/variables.tex @@ -0,0 +1,76 @@ +% TeXデータ吐き出しの検討ファイル +% マクロ名\rdはReVIEW-Defineの意で、別にこの名前にこだわるわけではない(どっちにしろ自動生成だし) +\rd{review_version}{2.0}% review_version +% bookname, languageはいらなそう +\rd{booktitle}{Re:VIEWサンプル書籍} +% ↓元はbooktitleのfile-as属性。読みはいらない? 商業誌だと奥付ルビに使うことがある。が、ルビの位置をこれだけから決めることは不可能なので、意味がないかも +\rd{booktitle_fileas}{リビューサンプルショセキ} +\rd{aut}{青木峰郎} +\rd{aut_fileas}{アオキミネロウ}% 読みはいらない? 商業誌だと奥付ルビに使うことがあるが、上記booktitle_fileasと同じ問題 +\rd{author}{武藤健志} +\rd{author_fileas}{ムトウケンシ} +% ↑FIXME:同じパラメータに複数の値が入るときは、どう渡すのが適切か +\rd{trl}{翻訳者名} +% 以下↓は奥付などで使うかなぁ…ほかにもいろいろdoc/config.yml.sample参照。同じパラメータに複数の値の可能性あり +\rd{edt}{編集者名} +\rd{csl}{監修者名} +\rd{dsr}{デザイナ名} +\rd{ill}{イラストレータ名} +% ↑ここまで +\rd{prt}{印刷所名} +\rd{pbl}{出版社名} +\rd{pbl_fileas}{シュッパンシャメイ} +\rd{date}{2017-11-5}% 刊行日。大扉や奥付で使うことがある +% ↓奥付のための履歴情報。実際には配列の配列で、 +% [["初版第1刷の日付", "初版第2刷の日付"], ["第2版第1刷の日付"]] +% historyが空ならdateを初版1刷に使う。奥付テンプレートと絡んでくる +% TeXの変数定義で配列の配列 をなんとかするには… +\rd{history}{2016-04-20}% FIXME +% いわゆるiiページに置きたいもの。TeXだと今は使ってないが… +\rd{rights}{権利表記文字列} +\rd{isbn}{ISBN}% 指定があったら奥付に入れたい +\rd{toclevel}{3}% 目次掲載tocdepthの値+1相当。1=部および章のみ、2=節まで +\rd{secnolevel}{2}% これは渡さなくてもいいかも…。どの見出しレベルまで採番を付けるか。latexbuilderで*を付ける付けないを判断している +\rd{toc}{true}% \tableofcontentsを入れるかどうか。FIXME: true/falseを指定するならどうするのが適正? +\rd{coverpage}{true}% 表紙を入れるか。true/false (config.ymlのcover:はちょっとやり方がまずかったのでTeX変数での名前は変えた。) +\rd{coverfile}{TeXファイルパス}% このファイル内容を表紙のTeX断片としてincludeする +\rd{coverimage}{画像ファイルパス}% このファイルを表紙の画像にする (coverfile指定がない場合) +% 本当はfullpagegraphicsではっつけたほうがいいんだろうか… +\rd{titlepage}{true}% 大扉を入れるか。true/false +\rd{titlefile}{TeXファイルパス}% このファイル内容を大扉のTeX断片としてincludeする +\rd{originaltitlefile}{TeXファイルパス}% このファイル内容を原書大扉のTeX断片としてincludeする +\rd{creditfile}{TeXファイルパス}% このファイル内容をクレジットページのTeX断片としてincludeする +%% 表紙→大扉→原書大扉→クレジットページ→PREDEF→目次→CHAPS の順 (オライリーなどでは大扉と原書大扉の間に権利表記まわりが1pあったりするが…それは原書大扉カスタムファイルのほうで対処) +\rd{makeindex}{true}% 索引を入れるか +\rd{colophonpage}{true}% 奥付を入れるか。true/false (config.ymlのcolophon:はちょっとやり方がまずかったのでTeX変数での名前は変えた。) +\rd{colophonfile}{TeXファイルパス}% このファイル内容を奥付のTeX断片としてincludeする +\rd{advfile}{TeXファイルパス}% % このファイル内容を広告のTeX断片としてincludeする +\rd{backcover}{TeXファイルパス}% このファイル内容を裏表紙のTeX断片としてincludeする +%% CHAPS→APPENDIX→POSTDEF→索引→奥付→広告→裏表紙 の順 +% +% imagedir,fontdir,image_ext,font_extはなくていいかな +\rd{highlight}{plistings}% 使用するハイライト。定義がなければハイライトしない +\rd{page_metric}{用紙サイズ または行数などの配列}% geometryのものなので、jlreqベースだとこれじゃない別のもののほうがよさそう +\rd{documentclass}{ドキュメントクラス名} +\rd{documentclass_options}{オプション,オプション}% このへんはバラしたほうがいい? +% ↓たぶんこういうのがいるかな的なものだと +\rd{仕上がり用紙サイズ}{A5とか182mmx233mmとか} +\rd{出力用紙サイズ}{A4とかB5Jとか} +\rd{トンボ有無}{true/false} +\rd{版面表示有無}{true/false} +\rd{ぬりたし領域}{3mm} +\rd{紙か電子か}{print or pdf} +\rd{hyperrefのオプション}{...}% でもconfig.ymlからは指定しない? +\rd{天}{24mm} +\rd{行}{33} +\rd{ノド}{17mm} +\rd{字詰め}{38} +%↑ とやるには、ベースのQと行送りを任意指定? とすると全体のレイアウト調整にかかる? +% 天・地・ノド・小口で指定するほうがいい、という人も多そう +\rd{章の開始ページ左右位置}{page,odd,even}% 値名は適当 +\rd{部の開始ページ左右位置}{page,odd,even} +\rd{目次の開始ページ左右位置}{page,odd,even} +\rd{索引の開始ページ左右位置}{page,odd,even} +\rd{奥付の開始ページ左右位置}{page,odd,even} +\rd{includegprahicsのためのboxオプションはどうしよう}{} +\rd{各スタイルの書体(和欧選定はどうする?)、Q数、行送り?} From 0d07205be846d29b02c900901234715beb7cc34b Mon Sep 17 00:00:00 2001 From: Kenshi Muto Date: Tue, 2 Jan 2018 13:49:31 +0900 Subject: [PATCH 2/5] idea v2 --- doc/variables.tex | 107 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 106 insertions(+), 1 deletion(-) diff --git a/doc/variables.tex b/doc/variables.tex index 29241afd8..922bc251b 100644 --- a/doc/variables.tex +++ b/doc/variables.tex @@ -1,4 +1,109 @@ -% TeXデータ吐き出しの検討ファイル +% TeXデータ吐き出しの検討ファイル (ver.2) +\rdreviewversion{2.0}% review_version +\rdbooktitle{Re:VIEWサンプル書籍}% 書籍名 +% ルビは難しいなぁ。別の定義が必要そう + +\begin{rdnames}{aut}% 著者名 +\item 青木峰郎\rdfileas{あお|き|みね|ろう} +\item 武藤健志\rdfileas{む|とう|けん|し} +\end{rdnames} + +\begin{rdnames}{trl}% 訳者名 +\item 角征典\rdfileas{かど|まさ|のり} +\end{rdnames} + +\begin{rdnames}{edt}% 編集者名 +\item 高橋征義\rdfileas{たか|はし|まさ|よし} +\end{rdnames} + +% csl: 監修者名 +% dsr: デザイナ名 +% ill: イラストレータ名 + +\rdprt{印刷所名} +\rdpbl{出版社名} +% \rdpbl{出版社名\rdfileas{シュッパンシャメイ}} かrdnamesを使いたいケースはある? + +\rddate{2017-11-5}% 刊行日。大扉や奥付で使うことがある +% ↓奥付のための履歴情報。実際には配列の配列 +\begin{rdhistory} +\begin{rdedition} +\item 2016年1月11日 % 初版1刷 +\item 2016年2月14日 % 初版2刷 +\end{rdedition} +\begin{rdedition} +\item 2016年12月24日 % 2版1刷 +\item 2017年11月5日 % 2版2刷 +\end{rdedition} +\end{rdhistory} +% いわゆるiiページに置きたいもの。TeXだと今は使ってないが… +\begin{rdrights} +権利表記文字列(TeX生?) +\end{rdrights} + +\rdisbn{ISBN}% 指定があったら奥付に入れたい +\rdtoclevel{3}% 目次掲載tocdepthの値+1相当。1=部および章のみ、2=節まで +\rdsecnolevel{2}% これは渡さなくてもいいかも…。どの見出しレベルまで採番を付けるか。latexbuilderで*を付ける付けないを判断している +\rdtoc{true}% \tableofcontentsを入れるかどうか。値はなんでもよくて定義ありなしで判断させるのがいい? +\rdcoverpage{true}% 表紙を入れるかどうか +\rdcoverfile{TeXファイルパス}% このファイル内容を表紙のTeX断片としてincludeする +\rdcoverimage{画像ファイルパス}% このファイルを表紙の画像にする (coverfile指定がない場合) +% 本当はfullpagegraphicsではっつけたほうがいいんだろうか… +\rdtitlepage{true}% 大扉を入れるか +\rdtitlefile{TeXファイルパス}% このファイル内容を大扉のTeX断片としてincludeする +\rdoriginaltitlefile{TeXファイルパス}% このファイル内容を原書大扉のTeX断片としてincludeする +\rdcreditfile{TeXファイルパス}% このファイル内容をクレジットページのTeX断片としてincludeする +%% 表紙→大扉→原書大扉→クレジットページ→PREDEF→目次→CHAPS の順 (オライリーなどでは大扉と原書大扉の間に権利表記まわりが1pあったりするが…それは原書大扉カスタムファイルのほうで対処) +\rdmakeindex}{true}% 索引を入れるかどうか +\rdcolophonpage{true}% 奥付を入れるか。true/false +\rdcolophonfile{TeXファイルパス}% このファイル内容を奥付のTeX断片としてincludeする +\rdadvfile{TeXファイルパス}% % このファイル内容を広告のTeX断片としてincludeする +\rdbackcover{TeXファイルパス}% このファイル内容を裏表紙のTeX断片としてincludeする +%% CHAPS→APPENDIX→POSTDEF→索引→奥付→広告→裏表紙 の順 +% +% imagedir,fontdir,image_ext,font_extはなくていいかな +\rdhighlight{plistings}% 使用するハイライト。定義がなければハイライトしない + +% documentclassに与えるべきオプションは、ここで定義せずにconfig.ymlで定義したほうがよいだろうか…わかっていないと難しいものがありそう +% []内はjlreq.clsで定義されているもの +% +% twoside/oneside +% 仕上がり用紙サイズ +% 出力用紙サイズ +% トンボ有無 +% 版面表示有無 +% ぬりたし領域幅 +% 紙(print)/電子(pdf) +% hyperrefのオプション +% 天から版面までのアキ(mmかzh) [head_space] +% ノドから版面までのアキ(mmかzw) [gutter] +% 行あたり文字数(zw) [line_length] +% 行数 [number_of_lines] +% 欧文基本Q、和文基本Q [fontsize, jafontsize] +% 行送り [baselineskip] +% ノンブル/柱の小口からの位置 [headfoot_sidemargin] +% +% 以下は使用しない? +% 傍注幅 [sidenote_length] +% 行間 [linegap] +% twocolumn時の段間アキ [column_gap] +% 地アキ [foot_space] +% 始め括弧位置 [open_bracket_pos] +% JLREQ警告 [jlreq_notes] + +% 以下はgreencherryクラスでよくあるもの +% 章の開始ページ左右位置: page,odd,even +% 部の開始ページ左右位置: page,odd,even +% 目次の開始ページ左右位置: page,odd,even +% 索引の開始ページ左右位置: page,odd,even +% 奥付の開始ページ左右位置: page,odd,even + +% includegprahicsのためのboxオプションはどうしよう + +% ver.2の定義例ここまで +%----------------------------------------------- + +% TeXデータ吐き出しの検討ファイル (ver.1) % マクロ名\rdはReVIEW-Defineの意で、別にこの名前にこだわるわけではない(どっちにしろ自動生成だし) \rd{review_version}{2.0}% review_version % bookname, languageはいらなそう From 6cba17ba075110c153c94837ff0b1e76c42dc3ee Mon Sep 17 00:00:00 2001 From: Kenshi Muto Date: Thu, 4 Jan 2018 18:18:12 +0900 Subject: [PATCH 3/5] surround values with {} --- doc/variables.tex | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/variables.tex b/doc/variables.tex index 922bc251b..00f2c030d 100644 --- a/doc/variables.tex +++ b/doc/variables.tex @@ -4,16 +4,16 @@ % ルビは難しいなぁ。別の定義が必要そう \begin{rdnames}{aut}% 著者名 -\item 青木峰郎\rdfileas{あお|き|みね|ろう} -\item 武藤健志\rdfileas{む|とう|けん|し} +\item {青木峰郎\rdfileas{あお|き|みね|ろう}} +\item {武藤健志\rdfileas{む|とう|けん|し}} \end{rdnames} \begin{rdnames}{trl}% 訳者名 -\item 角征典\rdfileas{かど|まさ|のり} +\item {角征典\rdfileas{かど|まさ|のり}} \end{rdnames} \begin{rdnames}{edt}% 編集者名 -\item 高橋征義\rdfileas{たか|はし|まさ|よし} +\item {高橋征義\rdfileas{たか|はし|まさ|よし}} \end{rdnames} % csl: 監修者名 @@ -28,12 +28,12 @@ % ↓奥付のための履歴情報。実際には配列の配列 \begin{rdhistory} \begin{rdedition} -\item 2016年1月11日 % 初版1刷 -\item 2016年2月14日 % 初版2刷 +\item {2016年1月11日} % 初版1刷 +\item {2016年2月14日} % 初版2刷 \end{rdedition} \begin{rdedition} -\item 2016年12月24日 % 2版1刷 -\item 2017年11月5日 % 2版2刷 +\item {2016年12月24日} % 2版1刷 +\item {2017年11月5日} % 2版2刷 \end{rdedition} \end{rdhistory} % いわゆるiiページに置きたいもの。TeXだと今は使ってないが… From d1bdfdf0bb5963590de95053e095863ca3930394 Mon Sep 17 00:00:00 2001 From: Kenshi Muto Date: Wed, 7 Feb 2018 14:21:43 +0900 Subject: [PATCH 4/5] test implementation of exporting command/environment --- lib/review/pdfmaker.rb | 102 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/lib/review/pdfmaker.rb b/lib/review/pdfmaker.rb index 0992843c4..c6c6b5f19 100644 --- a/lib/review/pdfmaker.rb +++ b/lib/review/pdfmaker.rb @@ -120,9 +120,111 @@ def execute(*args) rescue ReVIEW::ConfigError => e warn e.message end + + make_valcommand + generate_pdf(yamlfile) end + def make_valcommand + # config.ymlの内容をrd〜の命令または環境にする + # rd〜命令とかrdnamesとかを全部どこかで最初にdefineしないといけないのでは? + # カスタムに利用するパラメータを入れると困ったことになる? + initialize_metachars(@config['texcommand']) + # parse config and generate keyval + copyconfig = @config.dup + + copyconfig.delete_if do |k, _v| + %w[epubmaker textmaker webmaker bib_file catalogfile chapter_file + chapref epubversion debug externallink fontdir ext footnotetext + htmlext htmlversion imagedir image_types image_ext imgmath listinfo + mathml nolf opf_prefix opf_meta part_file postdef_file predef_file + pt_to_mm_unit structuredxml tableopt reject_file].include?(k) + end + + copyconfig['pdfmaker'].each do |k, v| + copyconfig[k] = v + end + copyconfig.delete('pdfmaker') + + ret = [] + copyconfig.each_pair do |k, v| + next unless v.present? + k = escape_keyname(k) + case v.class.to_s + when 'String' + ret << %Q(\\rd#{k}{#{escape_latex(v)}}) + when 'TrueClass', 'Float', 'Fixnum' + ret << %Q(\\rd#{k}{#{v}}) + when 'Hash' + case k + when 'booktitle', 'subtitle' + s = %Q(\\rd#{k}{#{escape_latex(@config.name_of(k))}) + v.each_pair do |k2, v2| + next if k2 == 'name' + s += %Q(\\rd#{escape_keyname(k2)}{#{escape_latex(v2)}}) + end + s += '}' + ret << s + when 'aut', 'prt', 'asn', 'ant', 'clb', 'edt', 'dsr', 'ill', 'pht', 'trl' + ret << "\\begin{rdnames}{#{k}}" + case v.class.to_s + when 'String' + ret << "\\item {#{escape_latex(v)}}" + when 'Hash' + s = "\\item {#{escape_latex(v['name'])}" + + v.each_pair do |k2, v2| + next if k2 == 'name' + s += %Q(\\rd#{escape_keyname(k2)}{#{escape_latex(v2)}}) + end + + s += "}\n" + ret << s + end + ret << '\end{rdnames}' + else + STDERR.puts v + end + when 'Array' + case k + when 'aut', 'prt', 'asn', 'ant', 'clb', 'edt', 'dsr', 'ill', 'pht', 'trl' + ret << "\\begin{rdnames}{#{k}}" + v.each do |item| + case item.class.to_s + when 'String' + ret << "\\item {#{escape_latex(item)}}" + when 'Hash' + s = "\\item {#{escape_latex(item['name'])}" + + item.each_pair do |k2, v2| + next if k2 == 'name' + s += %Q(\\rd#{escape_keyname(k2)}{#{escape_latex(v2)}}) + end + + s += "}\n" + ret << s + end + end + ret << '\end{rdnames}' + end + when 'Date' + # ローカリゼーションはどこでやるべきか? + STDERR.puts v + else + # Date, PageMetric + STDERR.puts v.class + end + end + + puts ret.join("\n") + exit + end + + def escape_keyname(k) + k.gsub(/[_-]/, '') + end + def make_input_files(book, yamlfile) input_files = Hash.new { |h, key| h[key] = '' } book.parts.each do |part| From 3d721bbb2d78c39d5ea1289abd3c714a981683da Mon Sep 17 00:00:00 2001 From: Kenshi Muto Date: Fri, 16 Feb 2018 09:53:53 +0900 Subject: [PATCH 5/5] add defines --- lib/review/pdfmaker.rb | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/lib/review/pdfmaker.rb b/lib/review/pdfmaker.rb index c6c6b5f19..73320c3c3 100644 --- a/lib/review/pdfmaker.rb +++ b/lib/review/pdfmaker.rb @@ -1,4 +1,4 @@ -# Copyright (c) 2010-2017 Kenshi Muto and Masayoshi Takahashi +# Copyright (c) 2010-2018 Kenshi Muto and Masayoshi Takahashi # # This program is free software. # You can distribute or modify this program under the terms of @@ -147,15 +147,18 @@ def make_valcommand end copyconfig.delete('pdfmaker') - ret = [] + defines = [] + values = [] + copyconfig.each_pair do |k, v| next unless v.present? k = escape_keyname(k) case v.class.to_s when 'String' - ret << %Q(\\rd#{k}{#{escape_latex(v)}}) + defines << %Q(\\newcommand{\\rd#{k}[1]{}) + values << %Q(\\rd#{k}{#{escape_latex(v)}}) when 'TrueClass', 'Float', 'Fixnum' - ret << %Q(\\rd#{k}{#{v}}) + values << %Q(\\rd#{k}{#{v}}) when 'Hash' case k when 'booktitle', 'subtitle' @@ -165,12 +168,12 @@ def make_valcommand s += %Q(\\rd#{escape_keyname(k2)}{#{escape_latex(v2)}}) end s += '}' - ret << s + values << s when 'aut', 'prt', 'asn', 'ant', 'clb', 'edt', 'dsr', 'ill', 'pht', 'trl' - ret << "\\begin{rdnames}{#{k}}" + values << "\\begin{rdnames}{#{k}}" case v.class.to_s when 'String' - ret << "\\item {#{escape_latex(v)}}" + values << "\\item {#{escape_latex(v)}}" when 'Hash' s = "\\item {#{escape_latex(v['name'])}" @@ -180,20 +183,20 @@ def make_valcommand end s += "}\n" - ret << s + values << s end - ret << '\end{rdnames}' + values << '\end{rdnames}' else STDERR.puts v end when 'Array' case k when 'aut', 'prt', 'asn', 'ant', 'clb', 'edt', 'dsr', 'ill', 'pht', 'trl' - ret << "\\begin{rdnames}{#{k}}" + values << "\\begin{rdnames}{#{k}}" v.each do |item| case item.class.to_s when 'String' - ret << "\\item {#{escape_latex(item)}}" + values << "\\item {#{escape_latex(item)}}" when 'Hash' s = "\\item {#{escape_latex(item['name'])}" @@ -203,10 +206,10 @@ def make_valcommand end s += "}\n" - ret << s + values << s end end - ret << '\end{rdnames}' + values << '\end{rdnames}' end when 'Date' # ローカリゼーションはどこでやるべきか? @@ -217,7 +220,8 @@ def make_valcommand end end - puts ret.join("\n") + puts defines.values.join("\n") + puts values.join("\n") exit end