review 3.0.0.preview4 → 3.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.ja.md +61 -4
  3. data/NEWS.md +61 -4
  4. data/README.md +2 -1
  5. data/doc/config.yml.sample +48 -20
  6. data/doc/config.yml.sample-simple +7 -6
  7. data/doc/format_idg.ja.md +6 -2
  8. data/doc/pdfmaker.ja.md +95 -4
  9. data/doc/pdfmaker.md +79 -0
  10. data/doc/quickstart.ja.md +26 -3
  11. data/doc/quickstart.md +25 -3
  12. data/doc/writing_vertical.ja.md +19 -2
  13. data/lib/review/epubmaker.rb +27 -27
  14. data/lib/review/i18n.yml +1 -0
  15. data/lib/review/init.rb +34 -22
  16. data/lib/review/latexbuilder.rb +95 -18
  17. data/lib/review/pdfmaker.rb +1 -0
  18. data/lib/review/update.rb +60 -25
  19. data/lib/review/version.rb +1 -1
  20. data/review.gemspec +1 -1
  21. data/samples/sample-book/src/config.yml +3 -3
  22. data/samples/syntax-book/config.yml +3 -3
  23. data/templates/latex/config.erb +3 -0
  24. data/templates/latex/review-jlreq/README.md +97 -7
  25. data/templates/latex/review-jlreq/review-base.sty +8 -0
  26. data/templates/latex/review-jlreq/review-jlreq.cls +28 -6
  27. data/templates/latex/review-jsbook/README.md +18 -20
  28. data/templates/latex/review-jsbook/review-base.sty +15 -0
  29. data/templates/latex/review-jsbook/review-jsbook.cls +172 -230
  30. data/test/test_epubmaker_cmd.rb +1 -1
  31. data/test/test_helper.rb +3 -3
  32. data/test/test_image_finder.rb +9 -9
  33. data/test/test_latexbuilder.rb +20 -1
  34. data/test/test_makerhelper.rb +12 -12
  35. data/test/test_pdfmaker_cmd.rb +1 -1
  36. data/test/test_update.rb +18 -4
  37. data/test/test_zip_exporter.rb +7 -7
  38. data/vendor/jsclasses/.gitignore +163 -0
  39. data/vendor/jsclasses/LICENSE +25 -0
  40. data/vendor/jsclasses/Makefile +88 -0
  41. data/vendor/jsclasses/README.md +43 -0
  42. data/vendor/jsclasses/create_archive.sh +59 -0
  43. data/vendor/jsclasses/jis/Makefile +62 -0
  44. data/vendor/jsclasses/jis/jsarticle.cls +1935 -0
  45. data/vendor/jsclasses/jis/jsbook.cls +2026 -0
  46. data/vendor/jsclasses/jis/jsclasses.dtx +5961 -0
  47. data/vendor/jsclasses/jis/jsclasses.ins +8 -0
  48. data/vendor/jsclasses/jis/jslogo.dtx +413 -0
  49. data/vendor/jsclasses/jis/jslogo.ins +4 -0
  50. data/vendor/jsclasses/jis/jslogo.sty +223 -0
  51. data/vendor/jsclasses/jis/jspf.cls +1766 -0
  52. data/vendor/jsclasses/jis/jsreport.cls +2020 -0
  53. data/vendor/jsclasses/jis/jsverb.dtx +322 -0
  54. data/vendor/jsclasses/jis/jsverb.ins +4 -0
  55. data/vendor/jsclasses/jis/jsverb.sty +128 -0
  56. data/vendor/jsclasses/jis/kiyou.cls +1882 -0
  57. data/vendor/jsclasses/jis/minijs.sty +52 -0
  58. data/vendor/jsclasses/jis/okumacro.dtx +1179 -0
  59. data/vendor/jsclasses/jis/okumacro.ins +4 -0
  60. data/vendor/jsclasses/jis/okumacro.sty +455 -0
  61. data/vendor/jsclasses/jis/okuverb.dtx +243 -0
  62. data/vendor/jsclasses/jis/okuverb.ins +4 -0
  63. data/vendor/jsclasses/jis/okuverb.sty +102 -0
  64. data/vendor/jsclasses/jis/winjis.sty +87 -0
  65. data/vendor/jsclasses/jsarticle.cls +1938 -0
  66. data/vendor/jsclasses/jsbook.cls +2029 -0
  67. data/vendor/jsclasses/jsclasses.dtx +5966 -0
  68. data/vendor/jsclasses/jsclasses.ins +8 -0
  69. data/vendor/jsclasses/jsclasses.pdf +0 -0
  70. data/vendor/jsclasses/jslogo.dtx +424 -0
  71. data/vendor/jsclasses/jslogo.ins +4 -0
  72. data/vendor/jsclasses/jslogo.pdf +0 -0
  73. data/vendor/jsclasses/jslogo.sty +223 -0
  74. data/vendor/jsclasses/jspf.cls +1769 -0
  75. data/vendor/jsclasses/jsreport.cls +2023 -0
  76. data/vendor/jsclasses/jsverb.dtx +333 -0
  77. data/vendor/jsclasses/jsverb.ins +4 -0
  78. data/vendor/jsclasses/jsverb.pdf +0 -0
  79. data/vendor/jsclasses/jsverb.sty +128 -0
  80. data/vendor/jsclasses/kiyou.cls +1885 -0
  81. data/vendor/jsclasses/minijs.sty +52 -0
  82. data/vendor/jsclasses/okumacro.dtx +1184 -0
  83. data/vendor/jsclasses/okumacro.ins +4 -0
  84. data/vendor/jsclasses/okumacro.pdf +0 -0
  85. data/vendor/jsclasses/okumacro.sty +458 -0
  86. data/vendor/jsclasses/okuverb.dtx +254 -0
  87. data/vendor/jsclasses/okuverb.ins +4 -0
  88. data/vendor/jsclasses/okuverb.pdf +0 -0
  89. data/vendor/jsclasses/okuverb.sty +102 -0
  90. data/vendor/jsclasses/winjis.sty +87 -0
  91. metadata +55 -2
@@ -33,6 +33,7 @@ module ReVIEW
33
33
  @latex_tsize = nil
34
34
  @tsize = nil
35
35
  @table_caption = nil
36
+ @cellwidth = nil
36
37
  @ol_num = nil
37
38
  @first_line_num = nil
38
39
  @sec_counter = SecCounter.new(5, @chapter)
@@ -96,6 +97,13 @@ module ReVIEW
96
97
  end
97
98
  private :puts
98
99
 
100
+ def result
101
+ if @chapter.is_a?(ReVIEW::Book::Part) && !@book.config.check_version('2', exception: false)
102
+ puts '\end{reviewpart}'
103
+ end
104
+ @output.string
105
+ end
106
+
99
107
  HEADLINE = {
100
108
  1 => 'chapter',
101
109
  2 => 'section',
@@ -108,8 +116,13 @@ module ReVIEW
108
116
  def headline(level, label, caption)
109
117
  _, anchor = headline_prefix(level)
110
118
  headline_name = HEADLINE[level]
111
- if @chapter.is_a? ReVIEW::Book::Part
112
- headline_name = 'part'
119
+ if @chapter.is_a?(ReVIEW::Book::Part)
120
+ if @book.config.check_version('2', exception: false)
121
+ headline_name = 'part'
122
+ elsif level == 1
123
+ headline_name = 'part'
124
+ puts '\begin{reviewpart}'
125
+ end
113
126
  end
114
127
  prefix = ''
115
128
  if level > @book.config['secnolevel'] || (@chapter.number.to_s.empty? && level > 1)
@@ -582,15 +595,28 @@ module ReVIEW
582
595
  table_begin(rows.first.size)
583
596
  if sepidx
584
597
  sepidx.times do
585
- tr(rows.shift.map { |s| th(s) })
598
+ cno = -1
599
+ tr(rows.shift.map do |s|
600
+ cno += 1
601
+ th(s, @cellwidth[cno])
602
+ end)
586
603
  end
587
604
  rows.each do |cols|
588
- tr(cols.map { |s| td(s) })
605
+ cno = -1
606
+ tr(cols.map do |s|
607
+ cno += 1
608
+ td(s, @cellwidth[cno])
609
+ end)
589
610
  end
590
611
  else
591
612
  rows.each do |cols|
592
613
  h, *cs = *cols
593
- tr([th(h)] + cs.map { |s| td(s) })
614
+ cno = 0
615
+ tr([th(h, @cellwidth[0])] +
616
+ cs.map do |s|
617
+ cno += 1
618
+ td(s, @cellwidth[cno])
619
+ end)
594
620
  end
595
621
  end
596
622
  table_end
@@ -627,39 +653,87 @@ module ReVIEW
627
653
 
628
654
  def table_begin(ncols)
629
655
  if @latex_tsize
630
- puts macro('begin', 'reviewtable', @latex_tsize)
631
- elsif @tsize
656
+ @tsize = @latex_tsize
657
+ end
658
+
659
+ if @tsize
632
660
  if @tsize =~ /\A[\d., ]+\Z/
633
- cellwidth = @tsize.split(/\s*,\s*/)
634
- puts macro('begin', 'reviewtable', '|' + cellwidth.collect { |i| "p{#{i}mm}" }.join('|') + '|')
661
+ @cellwidth = @tsize.split(/\s*,\s*/)
662
+ @cellwidth.collect! { |i| "p{#{i}mm}" }
663
+ puts macro('begin', 'reviewtable', '|' + @cellwidth.join('|') + '|')
635
664
  else
665
+ @cellwidth = separate_tsize(@tsize)
636
666
  puts macro('begin', 'reviewtable', @tsize)
637
667
  end
638
668
  else
639
669
  puts macro('begin', 'reviewtable', (['|'] * (ncols + 1)).join('l'))
670
+ @cellwidth = ['l'] * ncols
640
671
  end
641
- puts '\hline'
642
- @tsize = nil
643
- @latex_tsize = nil
672
+ puts '\\hline'
673
+ end
674
+
675
+ def separate_tsize(size)
676
+ ret = []
677
+ s = ''
678
+ brace = nil
679
+ size.split('').each do |ch|
680
+ case ch
681
+ when '|'
682
+ next
683
+ when '{'
684
+ brace = true
685
+ s << ch
686
+ when '}'
687
+ brace = nil
688
+ s << ch
689
+ ret << s
690
+ s = ''
691
+ else
692
+ if brace
693
+ s << ch
694
+ else
695
+ if s.empty?
696
+ s << ch
697
+ else
698
+ ret << s
699
+ s = ch
700
+ end
701
+ end
702
+ end
703
+ end
704
+
705
+ unless s.empty?
706
+ ret << s
707
+ end
708
+
709
+ ret
644
710
  end
645
711
 
646
712
  def table_separator
647
713
  # puts '\hline'
648
714
  end
649
715
 
650
- def th(s)
651
- ## use shortstack for @<br>
716
+ def th(s, cellwidth = 'l')
652
717
  if /\\\\/ =~ s
653
- macro('reviewth', macro('shortstack[l]', s))
718
+ if !@book.config.check_version('2', exception: false) && cellwidth =~ /\{/
719
+ macro('reviewth', s.gsub("\\\\\n", '\\newline{}'))
720
+ else
721
+ ## use shortstack for @<br>
722
+ macro('reviewth', macro('shortstack[l]', s))
723
+ end
654
724
  else
655
725
  macro('reviewth', s)
656
726
  end
657
727
  end
658
728
 
659
- def td(s)
660
- ## use shortstack for @<br>
729
+ def td(s, cellwidth = 'l')
661
730
  if /\\\\/ =~ s
662
- macro('shortstack[l]', s)
731
+ if !@book.config.check_version('2', exception: false) && cellwidth =~ /\{/
732
+ s.gsub("\\\\\n", '\\newline{}')
733
+ else
734
+ ## use shortstack for @<br>
735
+ macro('shortstack[l]', s)
736
+ end
663
737
  else
664
738
  s
665
739
  end
@@ -674,6 +748,9 @@ module ReVIEW
674
748
  puts macro('end', 'reviewtable')
675
749
  puts '\end{table}' if @table_caption
676
750
  @table_caption = nil
751
+ @tsize = nil
752
+ @latex_tsize = nil
753
+ @cellwidth = nil
677
754
  blank
678
755
  end
679
756
 
@@ -164,6 +164,7 @@ module ReVIEW
164
164
  input_files = Hash.new { |h, key| h[key] = '' }
165
165
  book.parts.each do |part|
166
166
  if part.name.present?
167
+ @config['use_part'] = true
167
168
  if part.file?
168
169
  output_chaps(part.name, yamlfile)
169
170
  input_files['CHAPS'] << %Q(\\input{#{part.name}.tex}\n)
data/lib/review/update.rb CHANGED
@@ -25,7 +25,7 @@ module ReVIEW
25
25
  HTML_VERSION = '5'
26
26
  TEX_DOCUMENTCLASS = ['review-jsbook', 'review-jlreq']
27
27
  TEX_DOCUMENTCLASS_BAD = ['jsbook', nil]
28
- TEX_DOCUMENTCLASS_OPTS = 'cameraready=print,paper=a5'
28
+ TEX_DOCUMENTCLASS_OPTS = 'media=print,paper=a5'
29
29
  TEX_COMMAND = 'uplatex'
30
30
  TEX_OPTIONS = '-interaction=nonstopmode -file-line-error'
31
31
  DVI_COMMAND = 'dvipdfmx'
@@ -35,7 +35,7 @@ module ReVIEW
35
35
  attr_accessor :force, :specified_template
36
36
 
37
37
  def initialize
38
- @template = nil
38
+ @template = '__DEFAULT__'
39
39
  @specified_template = nil
40
40
  @force = nil
41
41
  @logger = ReVIEW.logger
@@ -69,9 +69,14 @@ module ReVIEW
69
69
  update_epub_version
70
70
  update_locale
71
71
  update_tex_parameters
72
+
72
73
  if @template
74
+ if @template == '__DEFAULT__'
75
+ @template = TEX_DOCUMENTCLASS[0]
76
+ end
73
77
  update_tex_stys(@template, dir)
74
78
  end
79
+
75
80
  update_tex_command
76
81
  update_dvi_command
77
82
 
@@ -266,6 +271,7 @@ module ReVIEW
266
271
  end
267
272
  end
268
273
  else
274
+ @logger.info t('new file %s is created.', [target_rakefile]) unless @force
269
275
  FileUtils.cp master_rakefile, target_rakefile
270
276
  end
271
277
 
@@ -279,6 +285,7 @@ module ReVIEW
279
285
  end
280
286
  end
281
287
  else
288
+ @logger.info t('new file %s is created.', [target_rakefile]) unless @force
282
289
  FileUtils.cp master_rakefile, target_rakefile
283
290
  end
284
291
  end
@@ -325,10 +332,16 @@ module ReVIEW
325
332
  # want to use other template?
326
333
  @logger.error t("%s: !! 'texdocumentclass' uses new class '%s' already, but you specified '%s'. This tool can't handle such migration. Ignored. !!", [File.basename(yml), config['texdocumentclass'][0], @specified_template])
327
334
  @template = nil
335
+ else
336
+ @template = config['texdocumentclass'][0]
337
+
338
+ if @template == 'review-jsbook'
339
+ update_review_jsbook_opts(yml, config['texdocumentclass'][1])
340
+ end
328
341
  end
342
+
343
+ # no need to update
329
344
  next
330
- else
331
- @template = config['texdocumentclass'][0]
332
345
  end
333
346
 
334
347
  if TEX_DOCUMENTCLASS_BAD.include?(config['texdocumentclass'][0])
@@ -354,21 +367,39 @@ module ReVIEW
354
367
  end
355
368
 
356
369
  flag, modified_opts = convert_documentclass_opts(yml, @template, config['texdocumentclass'][1])
357
- if flag # successfully converted
358
- @logger.info t("%s: previous 'texdocumentclass' option '%s' is safely replaced with '%s'.", [File.basename(yml), config['texdocumentclass'][1], modified_opts])
359
- else # something wrong
360
- unless confirm("%s: previous 'texdocumentclass' option '%s' couldn't be converted fully. '%s' is suggested. Do you really proceed?", [File.basename(yml), config['texdocumentclass'][1], modified_opts], nil)
361
- @template = nil
362
- next
363
- end
364
- end
365
-
366
- rewrite_yml(yml, 'texdocumentclass', %Q(["#{@template}", "#{modified_opts}"]))
370
+ rewrite_documentclass_opts_by_flag(flag, yml, config['texdocumentclass'][1], modified_opts)
367
371
  else
368
372
  @template = nil
369
- @logger.error t("%s: ** 'texdocumentclass' specifies '%s'. Because this is unknown class for this tool, you need to update it by yourself if it won't work. **", [File.basename(yml), config['texdocumentclass']])
373
+ @logger.error t("%s: ** 'texdocumentclass' specifies '%s'. Because this is unknown class for this tool, you need to update it by yourself if it won't work. **", [File.basename(yml), config['texdocumentclass'][0]])
374
+ end
375
+ end
376
+ end
377
+
378
+ def rewrite_documentclass_opts_by_flag(flag, yml, old_opts, modified_opts)
379
+ if flag # successfully converted
380
+ @logger.info t("%s: previous 'texdocumentclass' option '%s' is safely replaced with '%s'.", [File.basename(yml), old_opts, modified_opts])
381
+ else # something wrong
382
+ unless confirm("%s: previous 'texdocumentclass' option '%s' couldn't be converted fully. '%s' is suggested. Do you really proceed?", [File.basename(yml), old_opts, modified_opts], nil)
383
+ @template = nil
384
+ return nil
370
385
  end
371
386
  end
387
+
388
+ rewrite_yml(yml, 'texdocumentclass', %Q(["#{@template}", "#{modified_opts}"]))
389
+ end
390
+
391
+ def update_review_jsbook_opts(yml, old_opts)
392
+ modified_opts = old_opts.gsub(/Q=([^,]+)/, 'fontsize=\1Q').
393
+ gsub(/W=([^,]+)/, 'line_length=\1zw').
394
+ gsub(/L=([^,]+)/, 'number_of_lines=\1').
395
+ gsub(/H=([^,]+)/, 'baselineskip=\1H').
396
+ gsub(/head=([^,]+)/, 'head_space=\1')
397
+
398
+ if modified_opts == old_opts
399
+ return nil
400
+ end
401
+
402
+ rewrite_documentclass_opts_by_flag(true, yml, old_opts, modified_opts)
372
403
  end
373
404
 
374
405
  def convert_documentclass_opts(yml, cls, prev_opts)
@@ -382,13 +413,11 @@ module ReVIEW
382
413
  when 'a4j', 'a5j', 'b4j', 'b5j', 'a3paper', 'a4paper', 'a5paper', 'a6paper', 'b4paper', 'b5paper', 'b6paper', 'letterpaper', 'legalpaper', 'executivepaper'
383
414
  opts << "paper=#{v.sub('j', '').sub('paper', '')}"
384
415
  when /[\d.]+ptj/ # not cared...
385
- q = sprintf('%.2f', v.sub('pt', '').to_f * 1.4056)
386
- opts << "Q=#{q}"
416
+ opts << "fontsize=#{v.sub('j', '')}"
387
417
  when /[\d.]+pt/
388
- q = sprintf('%.2f', v.sub('pt', '').to_f * 1.4056)
389
- opts << "Q=#{q}"
418
+ opts << "fontsize=#{v}"
390
419
  when /[\d.]+Q/
391
- opts << "Q=#{v.sub('Q', '')}"
420
+ opts << "fontsize=#{v}"
392
421
  when 'landscape', 'oneside', 'twoside', 'vartwoside', 'onecolumn',
393
422
  'twocolumn', 'titlepage', 'notitlepage', 'openright',
394
423
  'openany', 'leqno', 'fleqn', 'disablejfam', 'draft', 'final',
@@ -403,7 +432,7 @@ module ReVIEW
403
432
  flag = nil
404
433
  end
405
434
  end
406
- opts << 'cameraready=print'
435
+ opts << 'media=print'
407
436
  opts << 'cover=false'
408
437
  when 'review-jlreq'
409
438
  # at this time, only think about jsbook->jlreq
@@ -428,7 +457,7 @@ module ReVIEW
428
457
  flag = nil
429
458
  end
430
459
  end
431
- opts << 'cameraready=print'
460
+ opts << 'media=print'
432
461
  opts << 'cover=false'
433
462
  else
434
463
  flag = nil
@@ -449,6 +478,7 @@ module ReVIEW
449
478
 
450
479
  unless File.exist?(target_styfile)
451
480
  # just copy
481
+ @logger.info t('new file %s is created.', [target_styfile]) unless @force
452
482
  FileUtils.cp master_styfile, target_styfile
453
483
  next
454
484
  end
@@ -468,9 +498,14 @@ module ReVIEW
468
498
  end
469
499
 
470
500
  if template == 'review-jsbook'
471
- # provide gentombow from vendor/. current version is 2018/08/30 v0.9j
472
- unless File.exist?(File.join(texmacrodir, 'gentombow09j.sty'))
473
- FileUtils.cp File.join(@review_dir, 'vendor/gentombow/gentombow.sty'), File.join(texmacrodir, 'gentombow09j.sty')
501
+ unless File.exist?(File.join(texmacrodir, 'jsbook.cls'))
502
+ @logger.info t('new file %s is created.', [File.join(texmacrodir, 'jsbook.cls')]) unless @force
503
+ FileUtils.cp File.join(@review_dir, 'vendor/jsclasses/jsbook.cls'), File.join(texmacrodir, 'jsbook.cls')
504
+ end
505
+
506
+ unless File.exist?(File.join(texmacrodir, 'gentombow.sty'))
507
+ @logger.info t('new file %s is created.', [File.join(texmacrodir, 'gentombow.sty')]) unless @force
508
+ FileUtils.cp File.join(@review_dir, 'vendor/gentombow/gentombow.sty'), File.join(texmacrodir, 'gentombow.sty')
474
509
  end
475
510
  end
476
511
  end
@@ -1,3 +1,3 @@
1
1
  module ReVIEW
2
- VERSION = '3.0.0.preview4'.freeze
2
+ VERSION = '3.0.0.rc1'.freeze
3
3
  end
data/review.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |gem|
12
12
  gem.summary = 'Re:VIEW: a easy-to-use digital publishing system'
13
13
  gem.description = 'Re:VIEW is a digital publishing system for books and ebooks. It supports InDesign, EPUB and LaTeX.'
14
14
  gem.required_rubygems_version = Gem::Requirement.new('>= 0') if gem.respond_to? :required_rubygems_version=
15
- gem.date = '2018-10-28'
15
+ gem.date = '2018-11-22'
16
16
 
17
17
  gem.files = `git ls-files`.split("\n")
18
18
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -56,9 +56,9 @@ epubmaker:
56
56
  pdfmaker:
57
57
  coverimage: cover-a5.ai
58
58
  texstyle: ["reviewmacro"]
59
- texdocumentclass: ["review-jsbook", "cameraready=print,paper=a5"]
60
- # texdocumentclass: ["review-jsbook", "cameraready=ebook,paper=a5"]
61
- # texdocumentclass: ["review-jsbook", "cameraready=print,paper=a5,tombopaper=a4,bleed_margin=3mm,cover=true,Q=14,startpage=3,serial_pagination=true,hiddenfolio=nikko-pc"]
59
+ texdocumentclass: ["review-jsbook", "media=print,paper=a5"]
60
+ # texdocumentclass: ["review-jsbook", "media=ebook,paper=a5"]
61
+ # texdocumentclass: ["review-jsbook", "media=print,paper=a5,tombopaper=a4,bleed_margin=3mm,cover=true,Q=14,startpage=3,serial_pagination=true,hiddenfolio=nikko-pc"]
62
62
  # texcommand: "uplatex"
63
63
  # texoptions: null
64
64
  # dvicommand: "dvipdfmx"
@@ -22,9 +22,9 @@ epubmaker:
22
22
  htmlext: xhtml
23
23
 
24
24
  texstyle: ["reviewmacro"]
25
- #texdocumentclass: ["review-jsbook", "cameraready=print,paper=b5"]
26
- texdocumentclass: ["review-jsbook", "cameraready=ebook,paper=b5"]
27
- #texdocumentclass: ["review-jsbook", "cameraready=print,paper=b5,bleed_margin=3mm,cover=true,Q=14,startpage=3,serial_pagination=true,hiddenfolio=nikko-pc"]
25
+ #texdocumentclass: ["review-jsbook", "media=print,paper=b5"]
26
+ texdocumentclass: ["review-jsbook", "media=ebook,paper=b5"]
27
+ #texdocumentclass: ["review-jsbook", "media=print,paper=b5,bleed_margin=3mm,cover=true,Q=14,startpage=3,serial_pagination=true,hiddenfolio=nikko-pc"]
28
28
  # texcommand: "uplatex"
29
29
  # texoptions: null
30
30
  # dvicommand: "dvipdfmx"
@@ -94,5 +94,8 @@
94
94
  \def\reviewchapterfiles{<%= @input_files['CHAPS'] %>}
95
95
  \def\reviewappendixfiles{<%= @input_files['APPENDIX'] %>}
96
96
  \def\reviewpostdeffiles{<%= @input_files['POSTDEF'] %>}
97
+ <%- if @config['use_part'] -%>
98
+ \def\reviewusepart{true}
99
+ <%- end -%>
97
100
 
98
101
  \makeatother
@@ -8,16 +8,106 @@ Re:VIEW 向けの本テンプレートは、この jlreq クラスを使用し
8
8
  ## 注意!
9
9
  - 現時点でこのテンプレートは実験段階 (experimental) です。今後の更新でファイルの内容、ファイル名、および紙面表現が大きく変わる可能性が常にあります。
10
10
  - Re:VIEW の一部の命令に対応する紙面表現はまだ実装されていません。
11
- - LaTeX の知識が十分でないと感じるなら、デフォルトの review-jsbook テンプレートあるいは [TechBoosterで利用しているRe:VIEWのテンプレート](https://github.com/TechBooster/ReVIEW-Template) を利用することをお勧めします。
11
+ - LaTeX の知識が十分でないと感じるなら、デフォルトの review-jsbook テンプレートを利用することをお勧めします。
12
+ - jlreq クラスファイル自体、現在も開発段階にあります。本ドキュメントとともに配布している review-jlreq.cls は、jlreq 2018年11月13日時点の abenori_dev ブランチにあるもの (85a9e5b5813325ea905240b145fc93e4a6a8f245) に従っています。
12
13
 
13
14
  ## セットアップ
14
15
  1. jlreq クラスを TeXLive 環境にインストールします。`tlmgr install jlreq` あるいはGitHub https://github.com/abenori/jlreq の clone を実行してください。jlreq 自体も開発段階であり、GitHub 上で頻繁に更新されています。
15
16
  2. `review-init --latex-template review-jlreq プロジェクト名` を実行して新しいプロジェクトを作成します。
16
- 3. `config.yml` ファイルで review-jlreq クラスを使うよう設定します。
17
- ```
18
- ...
19
- texstyle: reviewmacro
20
- texdocumentclass: ["review-jlreq", "book"]
21
- ```
22
17
 
23
18
  既存のプロジェクトを置き換えるには、プロジェクトの `sty` フォルダに `review-jlreq` フォルダ内のファイルを上書きコピーしてください。
19
+
20
+ ## 利用可能なクラスオプションたち
21
+
22
+ クラスオプションオプションたちは、Re:VIEW 設定ファイル config.yml 内の texdocumentclass において、以下のような位置に記述します。
23
+
24
+ ```yaml
25
+ texdocumentclass: ["review-jlreq", "クラスオプションたち(省略可能)"]
26
+ ```
27
+
28
+ ### 用途別 PDF データ作成 `media=<用途名>`
29
+
30
+ 印刷用 `print`、電子用 `ebook` のいずれかの用途名を指定します。
31
+
32
+ * `print`[デフォルト]:印刷用 PDF ファイルを生成します。
33
+ * トンボあり、デジタルトンボあり、hyperref パッケージを `draft` モードで読み込み、表紙は入れない
34
+ * `ebook`:電子用PDFファイルを生成します。
35
+ * トンボなし、hyperref パッケージを読み込み、表紙を入れる
36
+
37
+ ### 表紙の挿入有無 `cover=<trueまたはfalse>`
38
+
39
+ `media` の値によって表紙(config.yml の coverimage に指定した画像)の配置の有無は自動で切り替わりますが、`cover=true` とすれば必ず表紙を入れるようになります。
40
+
41
+ なお、config.yml の coverimage で指定する画像ファイルは、原寸を想定しています。
42
+
43
+ ### 特定の用紙サイズ `paper=<用紙サイズ>`
44
+
45
+ 利用可能な特定の用紙サイズを指定できます。[デフォルト]は a5 です。
46
+
47
+ * `a0` 〜 `a10`:A 列
48
+ * `b0` 〜 `b10`:JIS B 列
49
+ * `c0` 〜 `c8`:C 列
50
+ * `a4var`:210mm x 283mm
51
+ * `b5var`:182mm x 230mm
52
+ * `letter`:レター、8.5in x 11in
53
+ * `legal`:リーガル、8.5in x 14in
54
+ * `executive`:エグゼクティブ、7.25in x 10.5in
55
+ * `hagaki`:葉書き、100mm x 148mm
56
+ * `{横幅,縦幅}`:任意の指定サイズ
57
+
58
+ ### トンボ用紙サイズ `tombopaper=<用紙サイズ>` および塗り足し幅 `bleed_margin=<幅>`
59
+
60
+ `tombopaper` ではトンボ用紙サイズを指定できます。
61
+ [デフォルト]値は自動判定します。
62
+
63
+ `bleed_margin` では塗り足し領域の幅を指定できます。
64
+ [デフォルト]3mm になります。
65
+
66
+ ### 基本版面設計 `fontsize=<文字サイズ>`, `baselineskip=<行送り>`, `line_length=<字詰>`, `number_of_lines=<行数>`, `head_space=<天>`, `foot_space=<地>`, `gutter=<ノド>`, `fore_edge=<小口>`, `linegap=<幅>`, `headheight=<幅>`, `headsep=<幅>`, `footskip=<幅>`
67
+
68
+ 基本版面情報を与えます。
69
+ 天、ノドをそれぞれ与えない場合、それぞれ天地、左右中央になります。
70
+
71
+ * `fontsize=10pt`[デフォルト]:標準の文字(normalfontsize)の文字サイズを与えます。pt のほか、Q や mm といった単位も指定可能です。
72
+ * `baselineskip=高さ`:行送りを与えます。[デフォルト]は fontsize の1.7倍です(10pt の場合 17pt)。
73
+ * `line_length=<字詰め幅>`:1行字詰めを与えます。字詰め幅には単位を付ける必要があります。文字数であれば「zw」を使うとよいでしょう(例:35zw=35文字)。[デフォルト]は紙サイズの 0.75 倍です。
74
+ * `number_of_lines=<行数>`:行数を与えます。[デフォルト]は紙サイズの 0.75 倍です。
75
+ * `head_space=<幅>`:天を与えます。[デフォルト]は天地中央です。
76
+ * `foot_space=<幅>`:地を与えます。[デフォルト]は天地中央です。
77
+ * `gutter=<幅>`:ノドを与えます。[デフォルト]は左右中央です。
78
+ * `fore_edge=<幅>`:小口を与えます。[デフォルト]は左右中央です。
79
+ * `linegap=<幅>`:行送りを baselineskip で指定する代わりに、通常の文字の高さにこのオプションで指定する幅を加えたものを行送りとします。
80
+
81
+ 版面設計の基本としては、以下のどちらかとなります。
82
+
83
+ * 文字サイズ・行送り・字詰め・行数から設計:`fontsize` + `baselineskip` + `line_length` + `number_of_lines` + `head_space` + `gutter`
84
+ * 天・地・ノド・小口から設計:(`fontsize` + `baselineskip`) + `head_space` + `foot_space` + `gutter` + `fore_edge`
85
+
86
+ ほかにもいくつか jlreq 固有の版面設計オプションがあります。詳細については jlreq の README-ja.md を参照してください。
87
+
88
+ ## 開始ページ番号 `startpage=<ページ番号>`
89
+
90
+ 大扉からのページ開始番号を指定します。
91
+
92
+ [デフォルト]は1です。表紙・表紙裏(表1・表2)のぶんを飛ばしたければ、`startpage=3` とします。
93
+
94
+ ## 通しページ番号(通しノンブル) `serial_pagination=<trueまたはfalse>`
95
+
96
+ 大扉からアラビア数字でページ番号を通すかどうかを指定します。
97
+
98
+ * `true`:大扉を開始ページとして、前付(catalog.yml で PREDEF に指定したもの)、さらに本文(catalog.yml で CHAPS に指定したもの)に連続したページ番号をアラビア数字で振ります(通しノンブルと言います)。
99
+ * `false`[デフォルト]:大扉を開始ページとして前付の終わり(通常は目次)までのページ番号をローマ数字で振ります。本文は 1 を開始ページとしてアラビア数字で振り直します(別ノンブルと言います)。
100
+
101
+ ### 隠しノンブル 'hiddenfolio=<プリセット>'
102
+
103
+ 印刷所固有の要件に合わせて、ノドの目立たない位置に小さくノンブルを入れます。
104
+ 'hiddenfolio` にプリセットを与えることで、特定の印刷所さん対応の隠しノンブルを出力することができます。
105
+ 利用可能なプリセットは、以下のとおりです。
106
+
107
+ * `default`:トンボ左上(塗り足しの外)にページ番号を入れます。
108
+ * `marusho-ink`(丸正インキ):塗り足し幅を5mmに設定、ノド中央にページ番号を入れます。
109
+ * `nikko-pc`(日光企画), `shippo`(ねこのしっぽ):ノド中央にページ番号を入れます。
110
+
111
+ 独自の設定を追加したいときには、review-jlreq.cls の実装を参照してください。
112
+
113
+ ページ番号は紙面に入れるものと同じものが入ります。アラビア数字で通したいときには、上記の `serial_pagination=true` も指定してください。