review-retrovert 0.9.7 → 0.9.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +9 -0
  3. data/.editorconfig +3 -0
  4. data/.github/workflows/retrovert.yml +20 -5
  5. data/.gitignore +1 -0
  6. data/.vscode/launch.json +48 -0
  7. data/Gemfile.lock +13 -4
  8. data/Makefile +24 -0
  9. data/docker/review.Dockerfile +10 -0
  10. data/lib/review/retrovert/converter.rb +374 -111
  11. data/lib/review/retrovert/reviewcompat.rb +57 -0
  12. data/lib/review/retrovert/reviewdef.rb +70 -0
  13. data/lib/review/retrovert/sty/{ird.sty → ird.sty.erb} +9 -1
  14. data/lib/review/retrovert/sty/review-retrovert-custom.sty.erb +6 -0
  15. data/lib/review/retrovert/utils.rb +35 -0
  16. data/lib/review/retrovert/version.rb +1 -1
  17. data/lib/review/retrovert/yamlconfig.rb +0 -1
  18. data/package-lock.json +6 -0
  19. data/package.json +1 -0
  20. data/review-retrovert.gemspec +5 -1
  21. data/testdata/mybook/.gitignore +3 -1
  22. data/testdata/mybook/.textlintrc +11 -0
  23. data/testdata/mybook/Rakefile +8 -0
  24. data/testdata/mybook/catalog.yml +36 -10
  25. data/testdata/mybook/config-starter.yml +134 -9
  26. data/testdata/mybook/config.yml +44 -15
  27. data/testdata/mybook/contents/00-preface.re +48 -2
  28. data/testdata/mybook/contents/01-install.re +38 -5
  29. data/testdata/mybook/contents/02-tutorial.re +333 -113
  30. data/testdata/mybook/contents/03-syntax.re +2370 -373
  31. data/testdata/mybook/contents/04-customize.re +424 -88
  32. data/testdata/mybook/contents/05-faq.re +288 -10
  33. data/testdata/mybook/contents/06-bestpractice.re +431 -59
  34. data/testdata/mybook/contents/91-compare.re +402 -2
  35. data/testdata/mybook/contents/92-filelist.re +14 -8
  36. data/testdata/mybook/contents/93-background.re +10 -10
  37. data/testdata/mybook/contents/99-postface.re +2 -1
  38. data/testdata/mybook/contents/r0-root.re +1 -1
  39. data/testdata/mybook/css/webstyle.css +180 -2
  40. data/testdata/mybook/data/terms.txt +3 -0
  41. data/testdata/mybook/data/words.txt +15 -0
  42. data/testdata/mybook/images/03-syntax/index-page.png +0 -0
  43. data/testdata/mybook/images/03-syntax/order-detail.png +0 -0
  44. data/testdata/mybook/images/04-customize/section_decoration_samples.png +0 -0
  45. data/testdata/mybook/images/05-faq/dummy-image.png +0 -0
  46. data/testdata/mybook/images/06-bestpractice/section_title_wlines.png +0 -0
  47. data/testdata/mybook/images/avatar-b.png +0 -0
  48. data/testdata/mybook/images/avatar-g.png +0 -0
  49. data/testdata/mybook/images/avatar-r.png +0 -0
  50. data/testdata/mybook/images/caution-icon.png +0 -0
  51. data/testdata/mybook/images/info-icon.png +0 -0
  52. data/testdata/mybook/images/warning-icon.png +0 -0
  53. data/testdata/mybook/layouts/layout.html5.erb +3 -1
  54. data/testdata/mybook/layouts/layout.tex.erb +265 -379
  55. data/testdata/mybook/layouts/layout.tex.erb.orig +386 -0
  56. data/testdata/mybook/lib/ruby/review-book.rb +64 -0
  57. data/testdata/mybook/lib/ruby/review-builder.rb +902 -63
  58. data/testdata/mybook/lib/ruby/review-compiler.rb +675 -22
  59. data/testdata/mybook/lib/ruby/review-epubbuilder.rb +33 -0
  60. data/testdata/mybook/lib/ruby/review-epubmaker.rb +10 -7
  61. data/testdata/mybook/lib/ruby/review-htmlbuilder.rb +354 -66
  62. data/testdata/mybook/lib/ruby/review-latexbuilder.rb +429 -146
  63. data/testdata/mybook/lib/ruby/review-maker.rb +117 -6
  64. data/testdata/mybook/lib/ruby/review-markdownbuilder.rb +945 -0
  65. data/testdata/mybook/lib/ruby/review-markdownmaker.rb +91 -0
  66. data/testdata/mybook/lib/ruby/review-monkeypatch.rb +2 -0
  67. data/testdata/mybook/lib/ruby/review-pdfmaker.rb +160 -82
  68. data/testdata/mybook/lib/ruby/review-webmaker.rb +20 -5
  69. data/testdata/mybook/lib/tasks/review.rake +14 -0
  70. data/testdata/mybook/lib/tasks/starter.rake +148 -4
  71. data/testdata/mybook/sty/indexstyle.ist +25 -0
  72. data/testdata/mybook/sty/mytextsize.sty +29 -0
  73. data/testdata/mybook/sty/mytitlepage.sty +34 -11
  74. data/testdata/mybook/sty/review-base.sty +276 -0
  75. data/testdata/mybook/sty/starter-codeblock.sty +237 -106
  76. data/testdata/mybook/sty/starter-color.sty +72 -17
  77. data/testdata/mybook/sty/starter-heading.sty +60 -13
  78. data/testdata/mybook/sty/starter-misc.sty +894 -0
  79. data/testdata/mybook/sty/starter-note.sty +67 -14
  80. data/testdata/mybook/sty/starter-talklist.sty +105 -0
  81. data/testdata/mybook/sty/starter-util.sty +35 -0
  82. data/testdata/mybook/sty/starter.sty +8 -526
  83. metadata +80 -4
@@ -1,4 +1,4 @@
1
- = あとがき
1
+ = あとがき / おわりに
2
2
 
3
3
  いかがだったでしょうか。
4
4
  感想や質問は随時受けつけています。
@@ -36,3 +36,4 @@
36
36
  * 『@<hlink>{https://kauplan.org/books/errmsg/, Rubyのエラーメッセージが読み解けるようになる本}』(技術書典6)
37
37
  * 『@<hlink>{https://kauplan.org/books/sql/, わかりみSQL}』(技術書典7)
38
38
  * 『@<hlink>{https://kauplan.org/books/pymagic/, Pythonの黒魔術}』(技術書典8)
39
+ * 『@<hlink>{https://techbookfest.org/product/6602586671022080?productVariantID=6362324925415424, カウプランレポート vol.01}』(技術書典10)
@@ -3,7 +3,7 @@
3
3
  #@mapfile(contents/r0-inner.re)
4
4
  #@end
5
5
 
6
- @<br>{}
6
+ //blankline
7
7
 
8
8
  test@<br>{}
9
9
 
@@ -155,6 +155,21 @@ h2.numbox > span.secno {
155
155
  color: #fff;
156
156
  margin: 0 20px 0 0;
157
157
  }
158
+ h2.circle {
159
+ vertical-align: middle;
160
+ }
161
+ h2.circle > span.secno {
162
+ display: inline-block;
163
+ background: #08c;
164
+ color: #fff;
165
+ border-radius: 50%;
166
+ width: 3.0em;
167
+ height: 2.1em;
168
+ text-align: center;
169
+ vertical-align: middle;
170
+ padding-top: 0.9em;
171
+ margin-right: 0.3em;
172
+ }
158
173
  h3 {
159
174
  margin: 40px 0 5px 0;
160
175
  }
@@ -182,8 +197,7 @@ pre, code, tt, kdb, var, samp {
182
197
  font-family: 'Monaco', 'Consolas', 'Courier New', monospace;
183
198
  font-size: 0.875;
184
199
  }
185
- pre.list, pre.emlist {
186
- background: #eee;
200
+ pre.list, pre.emlist, pre.output {
187
201
  padding: 3px 6px;
188
202
  margin: 0;
189
203
  border: solid 1px #ddd;
@@ -192,9 +206,19 @@ pre.list, pre.emlist {
192
206
  white-space: pre-wrap;
193
207
  line-height: 150%;
194
208
  }
209
+ pre.list, pre.emlist {
210
+ background: #eee;
211
+ }
212
+ pre.output {
213
+ background: #fff;
214
+ }
215
+
216
+
195
217
  code.inline-code {
196
218
  background: #eee;
197
219
  padding: 2px 4px;
220
+ white-space: pre;
221
+ border-radius: 2px;
198
222
  }
199
223
  h1 > code.inline-code, h2 > code.inline-code, h3 > code.inline-code, h4 > code.inline-code, h5 > code.inline-code {
200
224
  background: none;
@@ -244,6 +268,10 @@ div.cmd-code > pre > .indentbar {
244
268
  margin: 0 0 5px 0;
245
269
  display: inline-block;
246
270
  }
271
+ p.caption {
272
+ display: block;
273
+ }
274
+
247
275
  .caption:before {
248
276
  content: '\25BC '; /* ▼ */
249
277
  color: #777;
@@ -287,6 +315,14 @@ div.abstract {
287
315
  }
288
316
 
289
317
 
318
+ div.chapterauthor {
319
+ text-align: right;
320
+ }
321
+ div.chapterauthor::before {
322
+ content: "[著]";
323
+ }
324
+
325
+
290
326
 
291
327
  div.column {
292
328
  border: solid 1px #08c;
@@ -320,6 +356,43 @@ div.note > h5:before {
320
356
 
321
357
 
322
358
 
359
+ .miniblock {
360
+ border: solid 1px gray;
361
+ border-radius: 2px;
362
+ margin-top: 5ex;
363
+ margin-bottom: 5ex;
364
+ padding: 10px 15px 10px 15px;
365
+ background-repeat: no-repeat;
366
+ background-size: 64px;
367
+ background-position: 15px 15px;
368
+ font-size: small;
369
+ }
370
+
371
+ .miniblock.miniblock-info {
372
+ padding-left: 100px;
373
+ background-image: url("../images/info-icon.png")
374
+ }
375
+
376
+ .miniblock.miniblock-warning {
377
+ padding-left: 100px;
378
+ background-image: url("../images/warning-icon.png")
379
+ }
380
+
381
+ .miniblock.miniblock-caution {
382
+ padding-left: 100px;
383
+ background-image: url("../images/caution-icon.png")
384
+ }
385
+
386
+ .miniblock-caption {
387
+ font-family: sans-serif;
388
+ font-size: medium;
389
+ font-weight: bold;
390
+ margin-top: 0.5ex;
391
+ margin-bottom: -0.5ex;
392
+ }
393
+
394
+
395
+
323
396
  div.table {
324
397
  margin: 30px auto;
325
398
  text-align: center;
@@ -339,6 +412,15 @@ div.table > table th {
339
412
  background: #ddd;
340
413
  }
341
414
 
415
+ div.table.table-nohline > table, div.table.table-nohline > table {
416
+ border: solid 1px #ccc !important;
417
+ }
418
+ div.table.table-nohline > table td, div.table.table-nohline > table th {
419
+ border: none;
420
+ }
421
+ div.table > table tr.hline, div.table > table tr.hline {
422
+ border-bottom: solid 1px #ccc;
423
+ }
342
424
 
343
425
 
344
426
  strong {
@@ -397,6 +479,98 @@ p.footnote {
397
479
  }
398
480
 
399
481
 
482
+ .talk-list {
483
+ list-style-type: none;
484
+ padding-left: 0px;
485
+ margin-top: 20px;
486
+ margin-bottom: 20px;
487
+ }
488
+ .talk-item {
489
+ margin-top: 10px;
490
+ margin-bottom: 10px;
491
+ }
492
+ .talk-item::after {
493
+ content: "";
494
+ display: block;
495
+ clear: both;
496
+ }
497
+ .talk-image {
498
+ width: 60px;
499
+ }
500
+ .talk-chara {
501
+ float: left;
502
+ }
503
+ .talk-name {
504
+ font-family: sans-serif;
505
+ font-weight: normal;
506
+ padding-top: 5px;
507
+ display: inline-block;
508
+ }
509
+ .talk-name::after {
510
+ content: ":";
511
+ display: inline-block;
512
+ width: 1.5em;
513
+ }
514
+ .talk-text {
515
+ display: block;
516
+ margin-left: 100px;
517
+ padding-top: 5px;
518
+ }
519
+ .talk-text > p:first-child {
520
+ /*margin-top: 0;*/
521
+ display: inline;
522
+ }
523
+ .talk-text::before {
524
+ content: "「";
525
+ display: inline-block;
526
+ text-align: right;
527
+ width: 1em;
528
+ margin-left: -1em;
529
+ }
530
+ .talk-text::after {
531
+ content: "」";
532
+ display: inline-block;
533
+ text-align: left;
534
+ width: 1em;
535
+ }
536
+
537
+
538
+ dl.desc-list {
539
+ margin-top: 20px;
540
+ margin-bottom: 20px;
541
+ }
542
+ dl.desc-list > dl.desc-list {
543
+ margin-top: 10px;
544
+ margin-bottom: 10px;
545
+ }
546
+ dt.desc {
547
+ display: inline-block;
548
+ font-weight: normal;
549
+ font-family: sans-serif;
550
+ }
551
+ dd.desc {
552
+ display: block;
553
+ margin-left: 40px;
554
+ }
555
+ dd.desc > p:first-child {
556
+ margin-top: 0;
557
+ }
558
+ dl.desc-list.item-bold > dt.desc {
559
+ font-weight: bold;
560
+ }
561
+ dl.desc-list.compact > dt.desc {
562
+ margin-right: 1em;
563
+ float: left;
564
+ }
565
+ dl.desc-list.compact > dd.desc {
566
+ margin-left: 80px;
567
+ }
568
+ dl.desc-list.compact > dd.desc::after {
569
+ content: "";
570
+ display: block;
571
+ clear: both;
572
+ }
573
+
400
574
 
401
575
  .sampleoutput {
402
576
  margin: 15px 0;
@@ -472,6 +646,10 @@ p.footnote {
472
646
  .balloon:before {
473
647
  content: "←";
474
648
  }
649
+ .term {
650
+ font-family: sans-serif;
651
+ }
652
+
475
653
 
476
654
  .rebuild {
477
655
  background: #eee;
@@ -0,0 +1,3 @@
1
+ 侍従長 じじゅうちょう
2
+ 内務卿 ないむきょう
3
+ ハイランダー連隊 はいらんだーれんたい
@@ -0,0 +1,15 @@
1
+ # coding: utf-8
2
+
3
+ ##
4
+ ## キーに対応した単語の辞書ファイル。@<w>{} と @<wb>{} で使う。
5
+ ## 例: 「@<w>{apple}」が「アップル」に展開される。
6
+ ##
7
+ ## ・文字コードはUTF-8。
8
+ ## ・キーと単語は1文字以上のタブ文字で区切る(半角空白では区切れない)。
9
+ ## ・行頭が `#` なら行コメント。
10
+ ##
11
+
12
+ apple アップル
13
+ amazon アマゾン
14
+ google グーグル
15
+ facebook フェイスブック
Binary file
Binary file
Binary file
@@ -60,9 +60,11 @@ body_ext = @body_ext || (@error ? ' class="has-compile-error"' : nil)
60
60
  <p>Traceback:</p>
61
61
  <pre class="compile-error-backtrace"><% @error.backtrace.each do |x| %><%=h x %><%= "\n" %><% end %></pre>
62
62
 
63
- <% else %>
63
+ <% elsif @toc %>
64
64
  <h1><%=h @book.config.name_of("booktitle") %></h1>
65
65
  <%= @toc %>
66
+ <% else %>
67
+ <%= @body %>
66
68
  <% end %>
67
69
  </main>
68
70
  <nav class="page-navi">
@@ -1,21 +1,23 @@
1
1
  <% # -*- coding: utf-8 -*-
2
2
 
3
- ## based on Re:VIEW 2.4
3
+ ## based on Re:VIEW 2.5
4
4
 
5
5
  def xelatex?()
6
6
  @texcompiler == 'xelatex'
7
7
  end
8
8
 
9
+ ## I18n用文字列
10
+ i18n = proc {|key, *args| escape_latex(I18n.t(key, *args)) }
11
+ i18n_t = proc {|key, *args| I18n.t(key, *args) }
12
+
13
+ ## dviコマンド
9
14
  case @dvicommand
10
15
  when 'dvipdfmx'
11
16
  dvipdfmx = 'dvipdfmx'
12
- dvipdfmx_ = 'dvipdfmx,'
13
17
  when nil, ''
14
18
  dvipdfmx = ''
15
- dvipdfmx_ = ''
16
19
  else
17
20
  dvipdfmx = 'dvipdfmx'
18
- dvipdfmx_ = 'dvipdfmx,'
19
21
  end
20
22
 
21
23
  pagesize = @config['starter']['pagesize'] # A5 or B5
@@ -26,46 +28,85 @@ docopts << fontsize # 9pt or 10pt
26
28
 
27
29
  %>
28
30
  \documentclass[<%= docopts.join(',') %>]{<%= @documentclass %>}
29
- % %% fixes to LaTeX2e
30
- % \usepackage{fix-cm}[2006/09/13 v1.1m]
31
- % \usepackage{fixltx2e}[2006/09/13 v1.1m]
32
31
 
33
32
 
34
33
  %% copy values from 'config-starter.yml'
34
+ <%-
35
+ def to_val(v)
36
+ case v
37
+ when nil ; ''
38
+ when true ; 'Y'
39
+ when false ; ''
40
+ when Numeric ; v.to_s
41
+ when /\A(\d+(?:\.\d+)?)(mm|cm|pt)\z/ ; "#{$1}true#{$2}"
42
+ when /\A(\d+(?:\.\d+)?)(zw|zh)\z/ ; xelatex?() ? "#{$1}\\#{$2}" : v
43
+ else ; escape(v.to_s)
44
+ end
45
+ end
46
+ -%>
35
47
  \makeatletter
36
- <%- length_keys = ['caption_needspace', 'program_widen', 'terminal_widen'] -%>
37
- <%- @config['starter'].each do |k, v| -%>
38
- <%- if k == 'target' -%>
39
- <%- target = ENV['STARTER_TARGET'].to_s -%>
40
- <%- v = target unless target.empty? -%>
41
- <%- else -%>
42
- <%- v = v == true ? 'Y' : v == false ? '' : v.to_s -%>
43
- <%- end -%>
44
- <%- if v =~ /\A[-a-zA-Z0-9!'`*+,.\/:;=?@\[\]()]*\z/ -%>
45
- <%- x = 'starter@' + k.gsub('_', '@') -%>
46
- <%- if length_keys.include?(k) -%>
47
- <%- #v = v.sub(/\b(z[wh])$/, '\\zw') -%>
48
+ <%-
49
+ length_keys = ['caption_needspace', 'program_widen', 'terminal_widen', 'output_widen']
50
+ @config['starter'].each do |k, v|
51
+ x = k.gsub('_', '@')
52
+ if k =~ /_default_options\z/
53
+ x = $`.gsub('_', '@')
54
+ dict = v
55
+ dict.each do |k_, v_|
56
+ -%>
57
+ \def\starter@<%= x %>@<%= k_.gsub('_', '@') %>{<%= to_val(v_) %>}
58
+ <%-
59
+ end
60
+ elsif v.is_a?(Hash) || v.is_a?(Array)
61
+ next
62
+ elsif length_keys.include?(k)
63
+ #v = v.sub(/\b(z[wh])$/, '\\zw')
64
+ -%>
48
65
  %\def\<%= x %>{<%= v %>}
49
- \newlength{\<%= x %>}
50
- \setlength{\<%= x %>}{<%= v %>}
51
- <%- else -%>
52
- \def\<%= x %>{<%= v %>}
53
- <%- end -%>
54
- <%- end -%>
55
- <%- end -%>
66
+ \newlength{\starter@<%= x %>}
67
+ \setlength{\starter@<%= x %>}{<%= to_val(v) %>}
68
+ <%-
69
+ else
70
+ -%>
71
+ \def\starter@<%= x %>{<%= to_val(v) %>}
72
+ <%-
73
+ end#if
74
+ end#each
75
+ -%>
56
76
  \makeatother
57
77
 
58
-
59
78
  %% environment values for Starter
60
79
  \makeatletter
61
- <%- ENV.each do |key, val| -%>
62
- <%- if key =~ /^STARTER_\w+$/ -%>
63
- \def\<%= key.gsub('_', '@') %>{<%= val %>}%
64
- <%- end -%>
65
- <%- end -%>
80
+ <%-
81
+ ENV.each do |k, v|
82
+ if k =~ /^STARTER_\w+$/
83
+ -%>
84
+ \def\<%= k.gsub('_', '@') %>{<%= v %>}%
85
+ <%-
86
+ end
87
+ end
88
+ ##
89
+ target = ENV['STARTER_TARGET']
90
+ if target && !target.strip.empty?
91
+ -%>
92
+ \def\starter@target{<%= target.strip %>} % $STARTER_TARGET=<%- target -%>
93
+ <%-
94
+ end
95
+ ##
96
+ case ENV['STARTER_EXCLUDE_MOUSESELECT']
97
+ when 'on'
98
+ -%>
99
+ \def\starter@exclude@mouseselect{Y} % $STARTER_EXCLUDE_MOUSESELECT=on
100
+ <%-
101
+ when 'off'
102
+ -%>
103
+ \def\starter@exclude@mouseselect{} % $STARTER_EXCLUDE_MOUSESELECT=off
104
+ <%-
105
+ end
106
+ -%>
66
107
  \makeatother
67
108
 
68
- \usepackage{mytextsize}
109
+ \usepackage{mytextsize} % 本文の幅と高さを設定
69
110
 
70
111
  <%- if @texcompiler == "uplatex" -%>
71
112
  \usepackage[deluxe,uplatex]{otf}
@@ -74,283 +115,98 @@ docopts << fontsize # 9pt or 10pt
74
115
  <%- else -%>
75
116
  \usepackage[deluxe]{otf}
76
117
  <%- end -%>
77
- \usepackage{caption}
78
- \usepackage{suffix}
79
- \usepackage[T1]{fontenc}\usepackage{textcomp}%T1/TS1
80
- %\usepackage{lmodern}
81
- <%- if ! ENV['STARTER_DRAFT'].to_s.empty? || @config['starter']['draft'] -%>
82
- \usepackage[<%= dvipdfmx_ %>draft]{graphicx}
83
- <%- else -%>
84
- \usepackage[<%= dvipdfmx %>]{graphicx}
85
- <%- end -%>
86
- \usepackage[<%= dvipdfmx_ %>table]{xcolor}%requires colortbl, array
87
- \usepackage{framed}
88
- \usepackage{wrapfig}
89
- \definecolor{shadecolor}{gray}{0.9}
90
- \definecolor{shadecolorb}{gray}{0.1}
91
- \definecolor{reviewgreen}{rgb}{0,0.4,0}
92
- \definecolor{reviewblue}{rgb}{0.2,0.2,0.4}
93
- \definecolor{reviewred}{rgb}{0.7,0,0}
94
- \definecolor{reviewdarkred}{rgb}{0.3,0,0}
95
- \usepackage[utf8]{inputenc}
96
- \usepackage{ascmac}
97
- \usepackage{float}
98
- \usepackage{alltt}
99
- \usepackage{amsmath}
100
- \usepackage{pdfpages} % provides '\includepdf' command
101
-
102
- %% if you use @<u>{} (underline), use jumoline.sty
103
- \IfFileExists{jumoline.sty}{
104
- \usepackage{jumoline}
105
- }
106
-
107
- \newenvironment{shadedb}{%
108
- \def\FrameCommand{\fboxsep=\FrameSep \colorbox{shadecolorb}}%
109
- \MakeFramed {\FrameRestore}}%
110
- {\endMakeFramed}
111
-
112
- <%- unless ["utbook", "tbook"].include?(@documentclass) -%>
113
- %\usepackage[top=10zw,bottom=12zw,left=10zw,right=10zw]{geometry}
114
- %\usepackage[top=5zw,bottom=5zw,left=1zw,right=1zw]{geometry}
115
- <%- end -%>
116
-
117
- \newcommand{\parasep}{\vspace*{3zh}}
118
- \setlength{\footskip}{30pt}
119
118
 
120
- %% Bookmarkの文字化け対策(日本語向け)
121
- \usepackage[<%= dvipdfmx_ %>bookmarks=true,bookmarksnumbered=true,colorlinks=true,%
122
- pdftitle={<%= escape_latex(@config.name_of("booktitle")) %>},%
123
- pdfauthor={<%= escape_latex(@config.names_of("aut").join(I18n.t("names_splitter"))) %>}]{hyperref}
124
- <%- if xelatex?() -%>
125
- %\usepackage[<%= dvipdfmx %>]{pxjahyper}
119
+ <%- case ENV['STARTER_DRAFT'] -%>
120
+ <%- when nil, '', 'off', 'false' -%>
121
+ \usepackage{graphicx}
126
122
  <%- else -%>
127
- \usepackage[<%= dvipdfmx %>]{pxjahyper}
123
+ \usepackage[draft]{graphicx}
128
124
  <%- end -%>
125
+ \usepackage[table]{xcolor}%requires colortbl, array
129
126
 
130
- <%- if ["utbook", "tbook"].include?(@documentclass) -%>
131
- \newcommand{\headfont}{\gtfamily\sffamily\bfseries}
132
- \usepackage{plext}
133
- <%- end -%>
127
+ \usepackage[bookmarks=true,bookmarksnumbered=true,colorlinks=true,%
128
+ pdftitle={<%= escape_latex(@config.name_of("booktitle")) %>},%
129
+ pdfauthor={<%= escape_latex(@config.names_of("aut").join(i18n_t.('names_splitter'))) %>}]{hyperref}
130
+ <%- p = xelatex?() ? '%' : '' -%>
131
+ <%= p %>\usepackage{pxjahyper} % Bookmarkの文字化け対策(日本語向け)
134
132
 
135
- <%- if @config["highlight"] && @config["highlight"]["latex"] == "listings" -%>
136
- <%- if @config["language"] == "ja" -%>
137
- \usepackage{listings,jlisting}
138
- <%- else -%>
139
- \usepackage{listings}
140
- <%- end -%>
141
- \renewcommand{\lstlistingname}{<%= escape_latex(I18n.t("list")) %>}
142
- \lstset{%
143
- breaklines=true,%
144
- breakautoindent=false,%
145
- breakindent=0pt,%
146
- fontadjust=true,%
147
- backgroundcolor=\color{shadecolor},%
148
- frame=single,%
149
- framerule=0pt,%
150
- basicstyle=\ttfamily\scriptsize,%
151
- commentstyle=\color{reviewgreen},%
152
- identifierstyle=\color{reviewblue},%
153
- stringstyle=\color{reviewred},%
154
- keywordstyle=\bfseries\color{reviewdarkred},%
155
- }
133
+ <%- p = ["utbook", "tbook"].include?(@documentclass) ? '' : '%' -%>
134
+ <%= p %>\usepackage{plext} % 縦書き用のパッケージ
156
135
 
157
- \lstnewenvironment{reviewemlistlst}[1][]{\lstset{#1}}{}
158
- \lstnewenvironment{reviewemlistnumlst}[1][]{\lstset{numbers=left, #1}}{}
159
- \lstnewenvironment{reviewlistlst}[1][]{\lstset{#1}}{}
160
- \lstnewenvironment{reviewlistnumlst}[1][]{\lstset{numbers=left, #1}}{}
161
- \lstnewenvironment{reviewsourcelst}[1][]{\lstset{#1}}{}
162
- \lstnewenvironment{reviewsourcenumlst}[1][]{\lstset{numbers=left, #1}}{}
163
- \lstnewenvironment{reviewcmdlst}[1][]{\lstset{backgroundcolor=\color{white}, frameround=tttt, frame=trbl, #1}}{}
164
- <%- end -%>
136
+ %% コードハイライト用の設定情報
137
+ \makeatletter
138
+ <%- yes = @config["highlight"] && @config["highlight"]["latex"] == "listings" -%>
139
+ \def\config@highlight@listings{<%= yes ? 'Y' : '' %>}
140
+ <%- yes = @config["language"] == "ja" -%>
141
+ \def\config@language@ja{<%= yes ? 'Y' : '' %>}
142
+ \def\review@t@list{<%= i18n.('list') %>}
143
+ \makeatother
165
144
 
166
- \newenvironment{reviewimage}{%
167
- \begin{figure}[H]
168
- \begin{center}}{%
169
- \end{center}
170
- \end{figure}}
171
-
172
- \newenvironment{reviewdummyimage}{%
173
- \begin{figure}[H]
174
- \begin{center}\begin{alltt}}{%
175
- \end{alltt}\end{center}
176
- \end{figure}}
177
-
178
- \newcommand{\reviewimagecaption}[1]{%
179
- \caption{#1}}
180
-
181
- \newenvironment{reviewemlist}{%
182
- \medskip\small\begin{shaded}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
183
- \end{alltt}\end{shaded}}
184
-
185
- \newenvironment{reviewlist}{%
186
- \begin{shaded}\small\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
187
- \end{alltt}\end{shaded}\par\vspace*{0.5zw}}
188
-
189
- \newenvironment{reviewsource}{%
190
- \begin{shaded}\small\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
191
- \end{alltt}\end{shaded}\par\vspace*{0.5zw}}
192
-
193
- \newenvironment{reviewcmd}{%
194
- \color{white}\medskip\small\begin{shadedb}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
195
- \end{alltt}\end{shadedb}}
196
-
197
- \newenvironment{reviewbox}{%
198
- \medskip\small\begin{framed}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
199
- \end{alltt}\end{framed}}
200
-
201
- %\newenvironment{reviewtable}[1]{%
202
- % \begin{center}\small\setlength{\baselineskip}{1.2zw}
203
- % \begin{tabular}{#1}}{%
204
- % \end{tabular}
205
- % \end{center}}
206
- \newenvironment{reviewtable}[1]{%
207
- \small\setlength{\baselineskip}{1.2zw}%
208
- \begin{tabular}{#1}%
209
- }{%
210
- \end{tabular}%
211
- }
145
+ %% Re:VIEW用のスタイルファイル
146
+ \usepackage{review-base}
212
147
 
213
- \newenvironment{reviewcolumn}{%
214
- \begin{framed}
215
- }{%
216
- \end{framed}
217
- \vspace{2zw}}
218
148
 
149
+ %% I18N辞書のデータ
219
150
  \newcommand{\reviewcolumnhead}[2]{%
220
- {\noindent\large <%= escape_latex(I18n.t("column_head"))%>: #2}}
221
-
222
- \newcommand{\reviewtablecaption}[1]{%
223
- \caption{#1}}
151
+ {\noindent\large <%= i18n.('column_head') %>: #2}}
224
152
 
225
- \WithSuffix\newcommand\reviewtablecaption*[1]{%
226
- \caption*{#1}}
227
-
228
- \newcommand{\reviewimgtablecaption}[1]{%
229
- \caption{#1}\vspace{-3mm}}
230
-
231
- \newcommand{\reviewbackslash}[0]{%
232
- \textbackslash{}}
233
-
234
- \newcommand{\reviewlistcaption}[1]{%
235
- \medskip{\small\noindent #1}\vspace*{-1.3zw}}
236
-
237
- \newcommand{\reviewemlistcaption}[1]{%
238
- \medskip{\small\noindent #1}\vspace*{-1.3zw}}
239
-
240
- \newcommand{\reviewsourcecaption}[1]{%
241
- \medskip{\small\noindent #1}\vspace*{-1.3zw}}
242
-
243
- \newcommand{\reviewcmdcaption}[1]{%
244
- \medskip{\small\noindent #1}\vspace*{-1.3zw}}
245
-
246
- \newcommand{\reviewindepimagecaption}[1]{%
247
- \begin{center}#1\end{center}}
248
-
249
- \newcommand{\reviewboxcaption}[1]{%
250
- \medskip{\small\noindent #1}\vspace*{-1.3zw}}
251
-
252
- \newcommand{\reviewimageref}[2]{<%= escape_latex(I18n.t("image"))%> #1}
253
- \newcommand{\reviewtableref}[2]{<%= escape_latex(I18n.t("table"))%> #1}
254
- \newcommand{\reviewlistref}[1]{<%= escape_latex(I18n.t("list"))%> #1}
153
+ \newcommand{\reviewimageref}[2]{<%= i18n.('image') %> #1}
154
+ \newcommand{\reviewtableref}[2]{<%= i18n.('table') %> #1}
155
+ \newcommand{\reviewlistref}[1]{<%= i18n.('list') %> #1}
255
156
  \newcommand{\reviewbibref}[2]{#1}
256
- \newcommand{\reviewcolumnref}[2]{<%= escape_latex(I18n.t("columnname"))%> #1}
157
+ \newcommand{\reviewcolumnref}[2]{<%= i18n.('columnname') %> #1}
257
158
  \newcommand{\reviewsecref}[2]{#1}
258
159
 
259
160
  \newcommand{\reviewminicolumntitle}[1]{%
260
- {\large <%= escape_latex(I18n.t("memo_head"))%>: #1}\\}
161
+ {\large <%= i18n.('memo_head') %>: #1}\\}
261
162
 
262
163
  <%- if @config["toctitle"].present? -%>
263
164
  \renewcommand{\contentsname}{<%= escape_latex(@config["toctitle"]) %>}
264
- <%- elsif I18n.t("toctitle") -%>
265
- \renewcommand{\contentsname}{<%= escape_latex(I18n.t("toctitle")) %>}
165
+ <%- elsif i18n_t.('toctitle') -%>
166
+ \renewcommand{\contentsname}{<%= i18n.('toctitle') %>}
266
167
  <%- end -%>
267
168
 
268
- \newenvironment{reviewminicolumn}{%
269
- \vspace{1.5zw}\begin{screen}}{%
270
- \end{screen}\vspace{2zw}}
271
-
272
- \newcommand{\reviewkw}[1]{\textbf{\textgt{#1}}}
273
- \newcommand{\reviewami}[1]{\mask{#1}{A}}
274
- \newcommand{\reviewem}[1]{\textbf{#1}}
275
- \newcommand{\reviewstrong}[1]{\textbf{#1}}
276
- \newcommand{\reviewunderline}{\Underline}
277
-
278
- %% @<del> is ignored in LaTeX with default style
279
- \newcommand{\reviewstrike}[1]{#1}
280
-
281
- %%%% for ulem.sty:
282
- %%\renewcommand{\reviewstrike}[1]{\sout{#1}}
283
- %%
284
- %%%% for jumoline.sty:
285
- %%\renewcommand{\reviewstrike}[1]{\Middleline{#1}}
286
-
287
- \newcommand{\reviewth}[1]{{\gtfamily\sffamily\bfseries #1}}
288
- \newcommand{\reviewtitlefont}[0]{\usefont{T1}{phv}{b}{n}\gtfamily}
289
- \newcommand{\reviewmainfont}[0]{}
290
- \newcommand{\reviewcolophon}[0]{\clearpage}
291
- \newcommand{\reviewappendix}[0]{\appendix}
292
-
293
- \newcommand{\reviewprepartname}{<%= escape_latex(@locale_latex["prepartname"]) %>}
294
- \newcommand{\reviewpostpartname}{<%= escape_latex(@locale_latex["postpartname"]) %>}
295
- \newcommand{\reviewprechaptername}{<%= escape_latex(@locale_latex["prechaptername"]) %>}
296
- \newcommand{\reviewpostchaptername}{<%= escape_latex(@locale_latex["postchaptername"]) %>}
297
- \newcommand{\reviewfigurename}{<%= escape_latex(I18n.t("image")) %>}
298
- \newcommand{\reviewtablename}{<%= escape_latex(I18n.t("table")) %>}
299
- \newcommand{\reviewappendixname}{<%= escape_latex(@locale_latex["preappendixname"]) %>}
300
-
301
- \ifdefined\prepartname
302
- \renewcommand{\prepartname}{\reviewprepartname}
303
- \fi
304
- \ifdefined\postpartname
305
- \renewcommand{\postpartname}{\reviewpostpartname}
306
- \fi
307
- \ifdefined\prechaptername
308
- \renewcommand{\prechaptername}{\reviewprechaptername}
309
- \fi
310
- \ifdefined\postchaptername
311
- \renewcommand{\postchaptername}{\reviewpostchaptername}
312
- \fi
313
- \ifdefined\figurename
314
- \renewcommand{\figurename}{\reviewfigurename}
315
- \fi
316
- \ifdefined\tablename
317
- \renewcommand{\tablename}{\reviewtablename}
318
- \fi
319
- \ifdefined\appendixname
320
- \renewcommand{\appendixname}{\reviewappendixname}
321
- \fi
169
+
170
+ %% ロケールに関する文字列
171
+ <%-
172
+ locale = proc {|key| escape_latex(@locale_latex[key]) }
173
+ -%>
174
+ \newcommand{\reviewprepartname}{<%= locale.('prepartname') %>}
175
+ \newcommand{\reviewpostpartname}{<%= locale.('postpartname') %>}
176
+ \newcommand{\reviewprechaptername}{<%= locale.('prechaptername') %>}
177
+ \newcommand{\reviewpostchaptername}{<%= locale.('postchaptername') %>}
178
+ \newcommand{\reviewfigurename}{<%= i18n.('image') %>}
179
+ \newcommand{\reviewtablename}{<%= i18n.('table') %>}
180
+ \newcommand{\reviewappendixname}{<%= locale.('preappendixname') %>}
322
181
 
323
182
 
324
183
  \makeatletter
325
- %% maxwidth is the original width if it is less than linewidth
326
- %% otherwise use linewidth (to make sure the graphics do not exceed the margin)
327
- \def\maxwidth{%
328
- \ifdim\Gin@nat@width>\linewidth
329
- \linewidth
330
- \else
331
- \Gin@nat@width
332
- \fi
333
- }
334
184
 
335
185
  %% true between '\appendix' and ''
336
- \newif\if@appendix
186
+ \newif\if@appendix % true なら付録を処理中である
337
187
  \@appendixfalse
338
188
 
339
189
  \makeatother
340
190
 
341
- <%- if @config["texstyle"] -%>
342
- <%- [@config["texstyle"]].flatten.each do |x| -%>
191
+ <%- [@config["texstyle"]].flatten.compact.each do |x| -%>
343
192
  \usepackage{<%= x %>}
344
- <%- end -%>
345
193
  <%- end -%>
194
+
346
195
  <%- if @config["makeindex"] -%>
347
196
  \usepackage{makeidx}
348
197
  \makeindex
349
198
  <%- end -%>
350
199
 
351
- <% if @config['secnolevel'] %>
200
+ <%- if @config['secnolevel'] -%>
352
201
  \setcounter{secnumdepth}{<%= @config['secnolevel'] - 1 %>}
353
- <% end %>
202
+ <%- end -%>
203
+
204
+ <%- if (n = @config['starter']['part_startnumber']) -%>
205
+ \setcounter{part}{<%= n - 1 %>}
206
+ <%- end -%>
207
+ <%- if (n = @config['starter']['chapter_startnumber']) -%>
208
+ \setcounter{chapter}{<%= n - 1 %>}
209
+ <%- end -%>
354
210
 
355
211
 
356
212
  \begin{document}
@@ -358,75 +214,116 @@ docopts << fontsize # 9pt or 10pt
358
214
  \reviewmainfont
359
215
 
360
216
  <%-
361
- ## 表紙用PDFファイルを読み込む
362
- include_pdffiles = proc do |pdf_files|
363
- if ENV['STARTER_CHAPTER'].to_s.empty?
364
- target = ENV['STARTER_TARGET']; target = nil if target.to_s.empty?
365
- target ||= (@config['starter'] || {})['target']
366
- p = target == "ebook" ? '' : '%'
367
- [pdf_files].flatten.compact.each do |pdf_file|
217
+ ## PDFファイルを読み込む
218
+ include_pdffiles = proc do |pdf_files, except: nil, incrpagenum: false|
219
+ next if ENV['STARTER_CHAPTER'].present?
220
+ target = ENV['STARTER_TARGET'].to_s.strip
221
+ target = (@config['starter'] || {})['target'] if target.empty?
222
+ p = except && except == target ? '%' : ''
223
+ imagedir = @config['imagedir']
224
+ pdf_option = @config['starter']['includepdf_option']
225
+ offset = pdf_option =~ /\Aoffset=(.*)/ ? $1 : nil
226
+ [pdf_files].flatten.compact.each do |pdf_file|
227
+ pdf_file = pdf_file.sub(/(?:<(.*?)>)?(\*)?\z/, '')
228
+ pagenum = $1; star = $2
229
+ pdf_filepath = "./#{imagedir}/#{pdf_file}"
368
230
  -%>
369
- <%= p %>\includepdf[<%= @config["coverpdf_option"] %>]{./<%= @config["imagedir"] %>/<%= pdf_file %>}
370
- <%= p %>\addtocounter{page}{-1}
231
+ \begingroup
232
+ <%= p %>\makeatletter\def\starter@includepdf@pagenum{<%= pagenum %>}\makeatother
233
+ <%= p %>\starterincludepdf<%= star %>[<%= offset %>]{<%= pdf_filepath %>}
234
+ \endgroup
235
+ <%- if ! incrpagenum -%>
236
+ <%= p %>\addtocounter{page}{-1}
371
237
  <%-
372
238
  end
373
239
  end
374
240
  end
375
- -%>
376
- <%- include_pdffiles.call(@config["coverpdf_files"]) -%>
377
241
 
242
+ ## 表紙用PDFファイルを読み込む
243
+ include_pdffiles.(@config['starter']['frontcover_pdffile'], except: 'pbook')
244
+ -%>
378
245
  %
379
246
 
380
- <%- if @config["titlepage"] -%>
247
+ <%-
248
+ ## 表紙と奥付用の各種データ
249
+ maintitle = escape_latex(@config.name_of("booktitle").to_s)
250
+ maintitle = maintitle.gsub(/\n/) { "\\\\\n" } # '\n' -> '\\'
251
+ #
252
+ subtitle = escape_latex(@config.name_of("subtitle").to_s)
253
+ rexp = /([!?])$/
254
+ if subtitle =~ rexp
255
+ subtitle = subtitle.gsub(rexp) { "\\mbox{#{$1}}" }
256
+ elsif !subtitle.empty?
257
+ subtitle += " "
258
+ end
259
+ subtitle = subtitle.gsub(/\n/) { "\\\\\n" } # '\n' -> '\\'
260
+ #
261
+ pubevent = escape_latex(@config["pubevent_name"].to_s)
262
+ pubhistory = escape_latex(@config["pubhistory"].to_s)
263
+ pubdate = escape_latex(@config["date"].to_s)
264
+ pubedition = i18n.('edition')
265
+ publisher = @config.names_of("pbl").join(I18n.t("names_splitter"))
266
+ published_by = i18n.('published_by', publisher)
267
+ #
268
+ latest_pubhist = pubhistory.lines[-1]
269
+ if latest_pubhist
270
+ if latest_pubhist =~ /\s*(.*)\z/
271
+ latest_pubhist = $`
272
+ end
273
+ end
274
+ -%>
381
275
  %%%
382
- \title{<%= escape_latex(@config.name_of("booktitle").to_s).gsub(/\n/) { "\\\\\n" } %>}
383
276
  \makeatletter
384
- \def\@subtitle{<%= escape_latex(@config.name_of("subtitle").to_s).gsub(/\n/) { "\\\\\n" } %>}
385
- \def\@pubevent{<%= escape_latex(@config["pubevent_name"].to_s) %>}
386
- \def\@latestpubhistory{<%= escape_latex(@config["pubhistory"].to_s.lines[-1]) %>}
387
- \makeatother
277
+ \title{<%= maintitle %>}
278
+ \def\@maintitle{<%= maintitle %>}
279
+ \def\@subtitle{<%= subtitle %>}
280
+ \def\@pubevent{<%= pubevent %>}
281
+ \def\@latestpubhistory{<%= latest_pubhist %>}
388
282
  \author{<%= @authors %>}
389
- \date{<%= escape_latex(@config["date"].to_s) %> <%= escape_latex(I18n.t("edition")) %>\hspace{2zw}<%= escape_latex(I18n.t("published_by", @config.names_of("pbl").join(I18n.t("names_splitter"))))%>}
283
+ \date{<%= pubdate %> <%= pubedition %>\hspace{2zw}<%= published_by %>}
284
+ \def\book@author{<%= escape(@book_author||'') %>}
285
+ \def\book@supervisor{<%= escape(@book_supervisor||'') %>}
286
+ \def\book@translator{<%= escape(@book_translator||'') %>}
287
+ \makeatother
390
288
  %%%
391
- <%- if @custom_titlepage -%>
289
+ <%-
290
+ ## 大扉(タイトルページ)を表示
291
+ if ! @config['titlepage']
292
+ # nothing
293
+ elsif @custom_titlepage
294
+ -%>
392
295
  <%= @custom_titlepage %>
393
- <%- else -%>
296
+ <%-
297
+ elsif @config['starter']['titlepage_pdffile'].present?
298
+ ## 大扉用PDFファイルを読み込む
299
+ include_pdffiles.(@config['starter']['titlepage_pdffile'], incrpagenum: true)
300
+ else
301
+ -%>
394
302
  \begin{titlepage}
395
- <%- if @config["coverimage"] -%>
303
+ <%- if @config["coverimage"] -%>
304
+ <%- image_filepath = "./#{@config['imagedir']}/#{@config['coverimage']}" -%>
396
305
  \begin{center}
397
- \includegraphics[<%= @coverimageoption%>]{./<%= @config["imagedir"] %>/<%= @config["coverimage"] %>}
306
+ \includegraphics[<%= @coverimageoption %>]{<%= image_filepath %>}
398
307
  \end{center}
399
308
  \clearpage
400
- <%- end -%>
401
- \ifdefined\mytitlepage %%%%%%%%%%
402
- \mytitlepage % defined in 'sty/mytitlepage.sty'
403
- \else %%%%%%%%%%
404
- \thispagestyle{empty}
405
- \begin{center}%
406
- \mbox{} \vskip5zw
407
- \reviewtitlefont%
408
- {\HUGE\bfseries <%= escape_latex(@config.name_of("booktitle")) %> \par}%
409
- <%- if @config["subtitle"] -%>
410
- \vskip 1em%
411
- {\Large {\rmfamily --- } <%= escape_latex(@config.name_of("subtitle")) %> {\rmfamily --- } \par}%
412
- <%- end -%>
413
- \vskip 15em%
414
- {\LARGE
415
- \lineskip .75em
416
- \begin{tabular}[t]{c}%
417
- <%= @authors %>
418
- \end{tabular}\par}%
419
- \vfill
420
- {\large <%= escape_latex(@config["date"].to_s) %> <%= escape_latex(I18n.t("edition")) %>\hspace{2zw}<%= escape_latex(I18n.t("published_by", @config.names_of("pbl").join(I18n.t("names_splitter"))))%>\par}%
421
- \vskip4zw\mbox{}
422
- \end{center}%
423
- \fi %%%%%%%%%%
309
+ <%- end -%>
310
+ \ifdefined\mytitlepage
311
+ \mytitlepage % defined in 'sty/mytitlepage.sty'
312
+ \else
313
+ \reviewtitlepage % defined in 'sty/review-base.sty'
314
+ \fi
424
315
  \end{titlepage}
316
+ <%-
317
+ end#if
318
+ #
319
+ if @config['titlepage']
320
+ -%>
425
321
  \ifdefined\mytitlenextpage
426
- \mytitlenextpage
322
+ \mytitlenextpage % defined in 'sty/mytitlepage.sty'
427
323
  \fi
428
- <%- end -%>
429
- <%- end -%>
324
+ <%-
325
+ end
326
+ -%>
430
327
 
431
328
  %\renewcommand{\chaptermark}[1]{{}}
432
329
  \frontmatter
@@ -481,66 +378,55 @@ docopts << fontsize # 9pt or 10pt
481
378
  <%- end -%>
482
379
 
483
380
  %%% colophon
484
- <%- if @config["colophon"] -%>
485
- <%- if @custom_colophonpage -%>
486
- <%= @custom_colophonpage %>
487
- <%- else -%>
488
- %% okuduke
489
- \ifdefined\mycolophon %%%%%%%%%%
490
- \title{<%= escape_latex(@config.name_of("booktitle")) %>}
491
- \makeatletter
492
- \def\@subtitle{<%= escape_latex(@config.name_of("subtitle")) %>}
493
- \makeatother
494
- \def\colophonpubhistory{%
495
- <%= @config["pubhistory"].to_s.gsub(/\n/){ "\n\n\\noindent\n" } %>%
496
- }
497
- \def\colophonokuduke{%
498
- <%= @okuduke %>%
499
- }
500
- \def\colophonrights{%
501
- <% @config.names_of("rights").each do |s| %>
502
- <%= escape_latex(s).sub(/^\(C\)/i, '{\textcopyright}') %>\\
503
- <% end if @config["rights"] %>
504
- }
505
- \mycolophon % defined in 'sty/mycolophon.sty'
506
- \else %%%%%%%%%%
507
- \reviewcolophon
508
- \thispagestyle{empty}
509
-
510
- \vspace*{\fill}
511
-
512
- {\noindent\reviewtitlefont\Large <%= escape_latex(@config.name_of("booktitle")) %>} \\
513
- <%- if @config["subtitle"] -%>
514
- \medskip
515
- {\noindent\reviewtitlefont <%= escape_latex(@config.name_of("subtitle")) %>} \\
516
- <%- end -%>
517
- \rule[8pt]{\textwidth}{1pt} \\
518
- {\noindent
519
- <%= @config["pubhistory"].to_s.gsub(/\n/){"\n\n\\noindent\n"} %>
381
+ <%- ## 奥付に必要なデータ -%>
382
+ \title{<%= escape_latex(@config.name_of("booktitle")) %>} % 2行にしない
383
+ \def\@subtitle{<%= escape_latex(@config.name_of("subtitle")) %>} % 2行にしない
384
+ \def\colophonpubhistory{%
385
+ <%= @config["pubhistory"].to_s.gsub(/\n/){ "\n\n\\noindent\n" } %>%
520
386
  }
521
- \medskip
522
-
523
- \begin{tabular}{ll}
524
- <%= @okuduke %>
525
- \end{tabular}
526
- % \\
527
-
528
- \medskip
529
- \noindent
530
- \rule[0pt]{\textwidth}{1pt} \\
531
- <%- if @config["rights"] -%>
532
- <%= @config.names_of("rights").map{|s| escape_latex(s)}.join('\\' + '\\') %> \\
533
- <%- end -%>
534
- <%- end -%>
535
- \fi %%%%%%%%%%
536
- <%- end -%>
387
+ \def\colophonokuduke{%
388
+ <%= @okuduke %>%
389
+ }
390
+ \def\colophonrights{%
391
+ <%- @config.names_of("rights").each do |s| -%>
392
+ <%= escape_latex(s).sub(/^\(C\)/i, '{\textcopyright}') %>\\
393
+ <%- end if @config["rights"] -%>
394
+ }
395
+ <%-
396
+ ## 奥付を表示
397
+ if ! @config['colophon']
398
+ # nothing
399
+ elsif @custom_colophonpage
400
+ -%>
401
+ <%= @custom_colophonpage %>
402
+ <%-
403
+ elsif @config['starter']['colophon_pdffile'].present?
404
+ ## 奥付のPDFファイルを読み込む
405
+ -%>
406
+ \reviewcolophon % 偶数ページに移動
407
+ <%-
408
+ include_pdffiles.(@config['starter']['colophon_pdffile'], incrpagenum: true)
409
+ else
410
+ -%>
411
+ \ifdefined\mycolophon
412
+ \mycolophon % defined in 'sty/mycolophon.sty'
413
+ \else
414
+ \reviewcolophonpage % defined in 'sty/review-base.sty'
415
+ \fi
416
+ <%-
417
+ end#if
418
+ -%>
537
419
 
538
420
  %%% backcover
539
- <%- if @config["backcover"] -%>
421
+ <%-
422
+ if @config['backcover']
423
+ -%>
540
424
  <%= @custom_backcoverpage %>
541
- <%- end -%>
542
-
543
- <%- ## 裏表紙用PDFファイルを読み込む -%>
544
- <%- include_pdffiles.call(@config["backcoverpdf_files"]) -%>
425
+ <%-
426
+ elsif @config['starter']['backcover_pdffile'].present?
427
+ ## 裏表紙用PDFファイルを読み込む
428
+ include_pdffiles.(@config['starter']['backcover_pdffile'], except: 'pbook')
429
+ end
430
+ -%>
545
431
 
546
432
  \end{document}