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.
- checksums.yaml +4 -4
- data/NEWS.ja.md +61 -4
- data/NEWS.md +61 -4
- data/README.md +2 -1
- data/doc/config.yml.sample +48 -20
- data/doc/config.yml.sample-simple +7 -6
- data/doc/format_idg.ja.md +6 -2
- data/doc/pdfmaker.ja.md +95 -4
- data/doc/pdfmaker.md +79 -0
- data/doc/quickstart.ja.md +26 -3
- data/doc/quickstart.md +25 -3
- data/doc/writing_vertical.ja.md +19 -2
- data/lib/review/epubmaker.rb +27 -27
- data/lib/review/i18n.yml +1 -0
- data/lib/review/init.rb +34 -22
- data/lib/review/latexbuilder.rb +95 -18
- data/lib/review/pdfmaker.rb +1 -0
- data/lib/review/update.rb +60 -25
- data/lib/review/version.rb +1 -1
- data/review.gemspec +1 -1
- data/samples/sample-book/src/config.yml +3 -3
- data/samples/syntax-book/config.yml +3 -3
- data/templates/latex/config.erb +3 -0
- data/templates/latex/review-jlreq/README.md +97 -7
- data/templates/latex/review-jlreq/review-base.sty +8 -0
- data/templates/latex/review-jlreq/review-jlreq.cls +28 -6
- data/templates/latex/review-jsbook/README.md +18 -20
- data/templates/latex/review-jsbook/review-base.sty +15 -0
- data/templates/latex/review-jsbook/review-jsbook.cls +172 -230
- data/test/test_epubmaker_cmd.rb +1 -1
- data/test/test_helper.rb +3 -3
- data/test/test_image_finder.rb +9 -9
- data/test/test_latexbuilder.rb +20 -1
- data/test/test_makerhelper.rb +12 -12
- data/test/test_pdfmaker_cmd.rb +1 -1
- data/test/test_update.rb +18 -4
- data/test/test_zip_exporter.rb +7 -7
- data/vendor/jsclasses/.gitignore +163 -0
- data/vendor/jsclasses/LICENSE +25 -0
- data/vendor/jsclasses/Makefile +88 -0
- data/vendor/jsclasses/README.md +43 -0
- data/vendor/jsclasses/create_archive.sh +59 -0
- data/vendor/jsclasses/jis/Makefile +62 -0
- data/vendor/jsclasses/jis/jsarticle.cls +1935 -0
- data/vendor/jsclasses/jis/jsbook.cls +2026 -0
- data/vendor/jsclasses/jis/jsclasses.dtx +5961 -0
- data/vendor/jsclasses/jis/jsclasses.ins +8 -0
- data/vendor/jsclasses/jis/jslogo.dtx +413 -0
- data/vendor/jsclasses/jis/jslogo.ins +4 -0
- data/vendor/jsclasses/jis/jslogo.sty +223 -0
- data/vendor/jsclasses/jis/jspf.cls +1766 -0
- data/vendor/jsclasses/jis/jsreport.cls +2020 -0
- data/vendor/jsclasses/jis/jsverb.dtx +322 -0
- data/vendor/jsclasses/jis/jsverb.ins +4 -0
- data/vendor/jsclasses/jis/jsverb.sty +128 -0
- data/vendor/jsclasses/jis/kiyou.cls +1882 -0
- data/vendor/jsclasses/jis/minijs.sty +52 -0
- data/vendor/jsclasses/jis/okumacro.dtx +1179 -0
- data/vendor/jsclasses/jis/okumacro.ins +4 -0
- data/vendor/jsclasses/jis/okumacro.sty +455 -0
- data/vendor/jsclasses/jis/okuverb.dtx +243 -0
- data/vendor/jsclasses/jis/okuverb.ins +4 -0
- data/vendor/jsclasses/jis/okuverb.sty +102 -0
- data/vendor/jsclasses/jis/winjis.sty +87 -0
- data/vendor/jsclasses/jsarticle.cls +1938 -0
- data/vendor/jsclasses/jsbook.cls +2029 -0
- data/vendor/jsclasses/jsclasses.dtx +5966 -0
- data/vendor/jsclasses/jsclasses.ins +8 -0
- data/vendor/jsclasses/jsclasses.pdf +0 -0
- data/vendor/jsclasses/jslogo.dtx +424 -0
- data/vendor/jsclasses/jslogo.ins +4 -0
- data/vendor/jsclasses/jslogo.pdf +0 -0
- data/vendor/jsclasses/jslogo.sty +223 -0
- data/vendor/jsclasses/jspf.cls +1769 -0
- data/vendor/jsclasses/jsreport.cls +2023 -0
- data/vendor/jsclasses/jsverb.dtx +333 -0
- data/vendor/jsclasses/jsverb.ins +4 -0
- data/vendor/jsclasses/jsverb.pdf +0 -0
- data/vendor/jsclasses/jsverb.sty +128 -0
- data/vendor/jsclasses/kiyou.cls +1885 -0
- data/vendor/jsclasses/minijs.sty +52 -0
- data/vendor/jsclasses/okumacro.dtx +1184 -0
- data/vendor/jsclasses/okumacro.ins +4 -0
- data/vendor/jsclasses/okumacro.pdf +0 -0
- data/vendor/jsclasses/okumacro.sty +458 -0
- data/vendor/jsclasses/okuverb.dtx +254 -0
- data/vendor/jsclasses/okuverb.ins +4 -0
- data/vendor/jsclasses/okuverb.pdf +0 -0
- data/vendor/jsclasses/okuverb.sty +102 -0
- data/vendor/jsclasses/winjis.sty +87 -0
- metadata +55 -2
data/lib/review/latexbuilder.rb
CHANGED
@@ -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?
|
112
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
631
|
-
|
656
|
+
@tsize = @latex_tsize
|
657
|
+
end
|
658
|
+
|
659
|
+
if @tsize
|
632
660
|
if @tsize =~ /\A[\d., ]+\Z/
|
633
|
-
cellwidth = @tsize.split(/\s*,\s*/)
|
634
|
-
|
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 '
|
642
|
-
|
643
|
-
|
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
|
-
|
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
|
-
|
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
|
|
data/lib/review/pdfmaker.rb
CHANGED
@@ -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 = '
|
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 =
|
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
|
-
|
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
|
-
|
386
|
-
opts << "Q=#{q}"
|
416
|
+
opts << "fontsize=#{v.sub('j', '')}"
|
387
417
|
when /[\d.]+pt/
|
388
|
-
|
389
|
-
opts << "Q=#{q}"
|
418
|
+
opts << "fontsize=#{v}"
|
390
419
|
when /[\d.]+Q/
|
391
|
-
opts << "
|
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 << '
|
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 << '
|
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
|
-
|
472
|
-
|
473
|
-
FileUtils.cp File.join(@review_dir, 'vendor/
|
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
|
data/lib/review/version.rb
CHANGED
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-
|
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", "
|
60
|
-
# texdocumentclass: ["review-jsbook", "
|
61
|
-
# texdocumentclass: ["review-jsbook", "
|
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", "
|
26
|
-
texdocumentclass: ["review-jsbook", "
|
27
|
-
#texdocumentclass: ["review-jsbook", "
|
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"
|
data/templates/latex/config.erb
CHANGED
@@ -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
|
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` も指定してください。
|