review 5.1.1 → 5.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-tex.yml +6 -2
  3. data/.github/workflows/ruby-win.yml +6 -2
  4. data/.github/workflows/ruby.yml +6 -2
  5. data/.rubocop.yml +5 -319
  6. data/NEWS.ja.md +149 -0
  7. data/NEWS.md +149 -1
  8. data/README.md +9 -8
  9. data/bin/review +1 -1
  10. data/bin/review-catalog-converter +15 -15
  11. data/bin/review-check +7 -7
  12. data/bin/review-compile +14 -23
  13. data/bin/review-index +1 -1
  14. data/bin/review-preproc +29 -35
  15. data/bin/review-validate +2 -2
  16. data/doc/config.yml.sample +9 -1
  17. data/doc/config.yml.sample-simple +1 -1
  18. data/doc/format.ja.md +29 -3
  19. data/doc/format.md +32 -3
  20. data/doc/writing_vertical.ja.md +6 -0
  21. data/lib/review/book/base.rb +3 -3
  22. data/lib/review/book/book_unit.rb +13 -3
  23. data/lib/review/book/chapter.rb +1 -1
  24. data/lib/review/book/index.rb +7 -4
  25. data/lib/review/book/part.rb +12 -13
  26. data/lib/review/book/volume.rb +1 -1
  27. data/lib/review/builder.rb +92 -65
  28. data/lib/review/catalog.rb +6 -5
  29. data/lib/review/compiler.rb +76 -57
  30. data/lib/review/configure.rb +5 -2
  31. data/lib/review/epub2html.rb +12 -12
  32. data/lib/review/epubmaker/content.rb +1 -1
  33. data/lib/review/epubmaker/epubcommon.rb +47 -45
  34. data/lib/review/epubmaker/epubv2.rb +2 -1
  35. data/lib/review/epubmaker/epubv3.rb +5 -4
  36. data/lib/review/epubmaker/producer.rb +6 -7
  37. data/lib/review/epubmaker/reviewheaderlistener.rb +1 -1
  38. data/lib/review/epubmaker.rb +56 -67
  39. data/lib/review/exception.rb +7 -0
  40. data/lib/review/extentions/string.rb +1 -1
  41. data/lib/review/htmlbuilder.rb +90 -34
  42. data/lib/review/htmlutils.rb +17 -17
  43. data/lib/review/i18n.rb +3 -3
  44. data/lib/review/i18n.yml +6 -0
  45. data/lib/review/idgxmlbuilder.rb +61 -39
  46. data/lib/review/idgxmlmaker.rb +27 -26
  47. data/lib/review/img_math.rb +12 -18
  48. data/lib/review/index_builder.rb +94 -53
  49. data/lib/review/init.rb +4 -4
  50. data/lib/review/latexbuilder.rb +84 -76
  51. data/lib/review/lineinput.rb +3 -3
  52. data/lib/review/location.rb +1 -1
  53. data/lib/review/loggable.rb +27 -0
  54. data/lib/review/logger.rb +69 -21
  55. data/lib/review/makerhelper.rb +8 -4
  56. data/lib/review/markdownbuilder.rb +21 -12
  57. data/lib/review/pdfmaker.rb +63 -42
  58. data/lib/review/plaintextbuilder.rb +16 -15
  59. data/lib/review/preprocessor/directive.rb +35 -0
  60. data/lib/review/preprocessor/line.rb +34 -0
  61. data/lib/review/preprocessor/repository.rb +177 -0
  62. data/lib/review/preprocessor.rb +94 -296
  63. data/lib/review/rstbuilder.rb +12 -3
  64. data/lib/review/template.rb +5 -1
  65. data/lib/review/textmaker.rb +32 -31
  66. data/lib/review/textutils.rb +5 -6
  67. data/lib/review/tocprinter.rb +12 -7
  68. data/lib/review/topbuilder.rb +96 -19
  69. data/lib/review/update.rb +16 -8
  70. data/lib/review/version.rb +1 -1
  71. data/lib/review/volumeprinter.rb +9 -9
  72. data/lib/review/webmaker.rb +45 -46
  73. data/lib/review/webtocprinter.rb +10 -10
  74. data/lib/review/yamlloader.rb +35 -2
  75. data/review.gemspec +2 -1
  76. data/samples/sample-book/src/config.yml +0 -1
  77. data/samples/sample-book/src/lib/tasks/review.rake +3 -1
  78. data/samples/sample-book/src/lib/tasks/z01_copy_sty.rake +2 -1
  79. data/samples/syntax-book/ch02.re +9 -0
  80. data/samples/syntax-book/lib/tasks/z01_copy_sty.rake +2 -1
  81. data/templates/html/_titlepage.html.erb +9 -17
  82. data/templates/latex/config.erb +3 -0
  83. data/templates/latex/review-jlreq/review-base.sty +4 -5
  84. data/templates/latex/review-jlreq/review-jlreq.cls +39 -5
  85. data/templates/latex/review-jsbook/review-base.sty +9 -3
  86. data/templates/latex/review-jsbook/review-jsbook.cls +32 -5
  87. data/templates/opf/opf_manifest_epubv2.opf.erb +1 -1
  88. data/templates/opf/opf_manifest_epubv3.opf.erb +1 -1
  89. data/test/assets/syntax_book_index_detail.txt +10 -8
  90. data/test/assets/test_template.tex +4 -1
  91. data/test/assets/test_template_backmatter.tex +4 -1
  92. data/test/book_test_helper.rb +10 -10
  93. data/test/test_book_chapter.rb +25 -2
  94. data/test/test_builder.rb +10 -8
  95. data/test/test_epub3maker.rb +3 -3
  96. data/test/test_epubmaker.rb +27 -37
  97. data/test/test_epubmaker_cmd.rb +14 -3
  98. data/test/test_htmlbuilder.rb +111 -31
  99. data/test/test_idgxmlbuilder.rb +41 -33
  100. data/test/test_idgxmlmaker_cmd.rb +1 -1
  101. data/test/test_img_math.rb +11 -2
  102. data/test/test_index.rb +30 -4
  103. data/test/test_latexbuilder.rb +46 -25
  104. data/test/test_latexbuilder_v2.rb +18 -10
  105. data/test/test_markdownbuilder.rb +13 -0
  106. data/test/test_pdfmaker.rb +19 -0
  107. data/test/test_pdfmaker_cmd.rb +10 -10
  108. data/test/test_plaintextbuilder.rb +46 -22
  109. data/test/test_preprocessor.rb +188 -1
  110. data/test/test_rstbuilder.rb +13 -0
  111. data/test/test_textmaker_cmd.rb +1 -1
  112. data/test/test_topbuilder.rb +195 -29
  113. data/test/test_yamlloader.rb +28 -42
  114. metadata +11 -6
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2016-2021 Masayoshi Takahashi, Masanori Kado, Kenshi Muto
1
+ # Copyright (c) 2016-2022 Masayoshi Takahashi, Masanori Kado, Kenshi Muto
2
2
  #
3
3
  # This program is free software.
4
4
  # You can distribute or modify this program under the terms of
@@ -21,11 +21,13 @@ require 'review/tocprinter'
21
21
  require 'review/version'
22
22
  require 'review/makerhelper'
23
23
  require 'review/img_math'
24
+ require 'review/loggable'
24
25
 
25
26
  module ReVIEW
26
27
  class WEBMaker
27
28
  include ERB::Util
28
29
  include MakerHelper
30
+ include Loggable
29
31
 
30
32
  attr_accessor :config, :basedir
31
33
 
@@ -33,15 +35,7 @@ module ReVIEW
33
35
  @basedir = nil
34
36
  @logger = ReVIEW.logger
35
37
  @img_math = nil
36
- end
37
-
38
- def error(msg)
39
- @logger.error msg
40
- exit 1
41
- end
42
-
43
- def warn(msg)
44
- @logger.warn msg
38
+ @compile_errors = nil
45
39
  end
46
40
 
47
41
  def self.execute(*args)
@@ -82,11 +76,15 @@ module ReVIEW
82
76
 
83
77
  def execute(*args)
84
78
  cmd_config, yamlfile = parse_opts(args)
85
- error "#{yamlfile} not found." unless File.exist?(yamlfile)
79
+ error! "#{yamlfile} not found." unless File.exist?(yamlfile)
86
80
 
87
- @config = ReVIEW::Configure.create(maker: 'webmaker',
88
- yamlfile: yamlfile,
89
- config: cmd_config)
81
+ begin
82
+ @config = ReVIEW::Configure.create(maker: 'webmaker',
83
+ yamlfile: yamlfile,
84
+ config: cmd_config)
85
+ rescue ReVIEW::ConfigError => e
86
+ error! e.message
87
+ end
90
88
 
91
89
  @config['htmlext'] = 'html'
92
90
  @img_math = ReVIEW::ImgMath.new(@config)
@@ -98,12 +96,12 @@ module ReVIEW
98
96
  rescue ApplicationError => e
99
97
  raise if @config['debug']
100
98
 
101
- error(e.message)
99
+ error! e.message
102
100
  end
103
101
  end
104
102
 
105
103
  def generate_html_files(yamlfile)
106
- @basedir = File.dirname(yamlfile)
104
+ @basedir = File.absolute_path(File.dirname(yamlfile))
107
105
  @path = build_path
108
106
  remove_old_files(@path)
109
107
  Dir.mkdir(@path)
@@ -129,6 +127,7 @@ module ReVIEW
129
127
 
130
128
  def build_body(basetmpdir, _yamlfile)
131
129
  base_path = Pathname.new(@basedir)
130
+ @compile_errors = nil
132
131
  @book.parts.each do |part|
133
132
  if part.name.present?
134
133
  if part.file?
@@ -143,24 +142,35 @@ module ReVIEW
143
142
 
144
143
  part.chapters.each { |chap| build_chap(chap, base_path, basetmpdir, false) }
145
144
  end
145
+ if @compile_errors
146
+ app_error 'compile error, No web files output.'
147
+ end
146
148
  end
147
149
 
148
150
  def build_part(part, basetmpdir, htmlfile)
149
151
  @title = h("#{ReVIEW::I18n.t('part', part.number)} #{part.name.strip}")
150
152
  File.open("#{basetmpdir}/#{htmlfile}", 'w') do |f|
151
- @body = ''
152
- @body << %Q(<div class="part">\n)
153
- @body << %Q(<h1 class="part-number">#{ReVIEW::I18n.t('part', part.number)}</h1>\n)
154
- @body << %Q(<h2 class="part-title">#{part.name.strip}</h2>\n) if part.name.strip.present?
155
- @body << "</div>\n"
156
-
153
+ @part_number = part.number
154
+ @part_title = part.name.strip
155
+ @body = ReVIEW::Template.generate(path: template_name(localfile: '_part_body.html.erb', systemfile: 'html/_part_body.html.erb'), binding: binding)
157
156
  @language = @config['language']
158
157
  @stylesheets = @config['stylesheet']
159
158
  f.write ReVIEW::Template.generate(path: template_name, binding: binding)
160
159
  end
161
160
  end
162
161
 
163
- def template_name
162
+ def template_name(localfile: 'layout-web.html.erb', systemfile: nil)
163
+ if @basedir
164
+ layoutfile = File.join(@basedir, 'layouts', localfile)
165
+ if File.exist?(layoutfile)
166
+ return layoutfile
167
+ end
168
+ end
169
+
170
+ if systemfile
171
+ return systemfile
172
+ end
173
+
164
174
  if @config['htmlversion'].to_i == 5
165
175
  'web/html/layout-html5.html.erb'
166
176
  else
@@ -169,13 +179,11 @@ module ReVIEW
169
179
  end
170
180
 
171
181
  def build_chap(chap, base_path, basetmpdir, ispart)
172
- filename = ''
173
-
174
- if ispart.present?
175
- filename = chap.path
176
- else
177
- filename = Pathname.new(chap.path).relative_path_from(base_path).to_s
178
- end
182
+ filename = if ispart.present?
183
+ chap.path
184
+ else
185
+ Pathname.new(chap.path).relative_path_from(base_path).to_s
186
+ end
179
187
  id = File.basename(filename).sub(/\.re\Z/, '')
180
188
 
181
189
  if @buildonly && !@buildonly.include?(id)
@@ -191,9 +199,10 @@ module ReVIEW
191
199
 
192
200
  begin
193
201
  @converter.convert(filename, File.join(basetmpdir, htmlfile))
194
- rescue => e
195
- warn "compile error in #{filename} (#{e.class})"
196
- warn e.message
202
+ rescue ApplicationError => e
203
+ @compile_errors = true
204
+ error "compile error in #{filename} (#{e.class})"
205
+ error e.message
197
206
  end
198
207
  end
199
208
 
@@ -220,7 +229,7 @@ module ReVIEW
220
229
 
221
230
  if FileTest.directory?("#{resdir}/#{fname}")
222
231
  recursive_copy_files("#{resdir}/#{fname}", "#{destdir}/#{fname}", allow_exts)
223
- elsif fname =~ /\.(#{allow_exts.join('|')})\Z/i
232
+ elsif /\.(#{allow_exts.join('|')})\Z/i.match?(fname)
224
233
  FileUtils.mkdir_p(destdir)
225
234
  FileUtils.cp("#{resdir}/#{fname}", destdir)
226
235
  end
@@ -275,18 +284,8 @@ module ReVIEW
275
284
 
276
285
  def build_titlepage(basetmpdir, htmlfile)
277
286
  @title = h('titlepage')
278
- File.open("#{basetmpdir}/#{htmlfile}", 'w') do |f|
279
- @body = ''
280
- @body << %Q(<div class="titlepage">)
281
- @body << %Q(<h1 class="tp-title">#{h(@config.name_of('booktitle'))}</h1>)
282
- if @config['aut']
283
- @body << %Q(<h2 class="tp-author">#{join_with_separator(@config.names_of('aut'), ReVIEW::I18n.t('names_splitter'))}</h2>)
284
- end
285
- if @config['pbl']
286
- @body << %Q(<h3 class="tp-publisher">#{join_with_separator(@config.names_of('pbl'), ReVIEW::I18n.t('names_splitter'))}</h3>)
287
- end
288
- @body << '</div>'
289
-
287
+ File.open(File.join(basetmpdir, htmlfile), 'w') do |f|
288
+ @body = ReVIEW::Template.generate(path: template_name(localfile: '_titlepage.html.erb', systemfile: 'html/_titlepage.html.erb'), binding: binding)
290
289
  @language = @config['language']
291
290
  @stylesheets = @config['stylesheet']
292
291
  f.write ReVIEW::Template.generate(path: template_name, binding: binding)
@@ -41,16 +41,16 @@ EOT
41
41
  next
42
42
  end
43
43
 
44
- if path.start_with?('.')
45
- content << "<li>#{escape(result.headline)}"
46
- else
47
- content << %Q(<li><a href="#{path}">#{escape(result.headline)}</a>)
48
- end
49
- if result.level == 0
50
- content << "\n<ul>" # part
51
- else
52
- content << "</li>\n"
53
- end
44
+ content << if path.start_with?('.')
45
+ "<li>#{escape(result.headline)}"
46
+ else
47
+ %Q(<li><a href="#{path}">#{escape(result.headline)}</a>)
48
+ end
49
+ content << if result.level == 0
50
+ "\n<ul>" # part
51
+ else
52
+ "</li>\n"
53
+ end
54
54
  end
55
55
  content << "</ul>\n"
56
56
  end
@@ -2,6 +2,39 @@ require 'yaml'
2
2
 
3
3
  module ReVIEW
4
4
  class YAMLLoader
5
+ def self.safe_load_file(file)
6
+ if YAML.respond_to?(:safe_load_file)
7
+ YAML.safe_load_file(file, aliases: true, permitted_classes: [Date])
8
+ else
9
+ File.open(file, 'rt:bom|utf-8') do |f|
10
+ begin
11
+ # < Ruby 3.1
12
+ YAML.safe_load(f, filename: file, aliases: true, permitted_classes: [Date])
13
+ rescue ArgumentError
14
+ # < Ruby 2.7
15
+ YAML.safe_load(f, [Date])
16
+ rescue Psych::DisallowedClass
17
+ # < Ruby 2.5
18
+ YAML.safe_load(File.read(file), [Date])
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ def self.safe_load(s)
25
+ if YAML.respond_to?(:safe_load_file)
26
+ YAML.safe_load(s, aliases: true, permitted_classes: [Date])
27
+ else
28
+ begin
29
+ # < Ruby 3.1
30
+ YAML.safe_load(s, aliases: true, permitted_classes: [Date])
31
+ rescue ArgumentError, Psych::DisallowedClass
32
+ # < Ruby 2.7
33
+ YAML.safe_load(s, [Date])
34
+ end
35
+ end
36
+ end
37
+
5
38
  def initialize
6
39
  end
7
40
 
@@ -17,8 +50,8 @@ module ReVIEW
17
50
 
18
51
  while file_queue.present?
19
52
  current_file = file_queue.shift
20
- current_yaml = YAML.load_file(current_file)
21
- if current_yaml.instance_of?(FalseClass)
53
+ current_yaml = YAMLLoader.safe_load_file(current_file)
54
+ if current_yaml.instance_of?(FalseClass) || current_yaml.nil?
22
55
  raise "#{File.basename(current_file)} is malformed."
23
56
  end
24
57
 
data/review.gemspec CHANGED
@@ -12,6 +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.metadata = { 'rubygems_mfa_required' => 'true' }
15
16
 
16
17
  gem.files = `git ls-files`.split("\n")
17
18
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -26,7 +27,7 @@ Gem::Specification.new do |gem|
26
27
  gem.add_development_dependency('mini_magick')
27
28
  gem.add_development_dependency('pygments.rb')
28
29
  gem.add_development_dependency('rake')
29
- gem.add_development_dependency('rubocop', '~> 1.10.0')
30
+ gem.add_development_dependency('rubocop', '~> 1.12.0')
30
31
  gem.add_development_dependency('rubocop-performance')
31
32
  gem.add_development_dependency('rubocop-rake')
32
33
  gem.add_development_dependency('simplecov')
@@ -3,7 +3,6 @@ review_version: 5.0
3
3
  bookname: book
4
4
  language: ja
5
5
  booktitle: Re:VIEWサンプル書籍
6
- urnid: urn:uuid:http://reviewml.com/books/review-sample-book/
7
6
  # isbn: null
8
7
  aut: Re:VIEW Writers
9
8
  pbl: Re:VIEW Publishers
@@ -130,15 +130,17 @@ file IDGXMLROOT => SRC do
130
130
  FileUtils.rm_rf([IDGXMLROOT])
131
131
  end
132
132
 
133
- desc 'run vivliostyle'
133
+ desc 'preview with vivliostyle'
134
134
  task 'vivliostyle:preview': BOOK_EPUB do
135
135
  sh "#{REVIEW_VSCLI} preview #{REVIEW_VSCLI_USESANDBOX} #{REVIEW_VSCLI_OPTIONS} #{BOOK_EPUB}"
136
136
  end
137
137
 
138
+ desc 'build with vivliostyle'
138
139
  task 'vivliostyle:build': BOOK_EPUB do
139
140
  sh "#{REVIEW_VSCLI} build #{REVIEW_VSCLI_USESANDBOX} #{REVIEW_VSCLI_OPTIONS} -o #{REVIEW_VSCLI_PDF} #{BOOK_EPUB}"
140
141
  end
141
142
 
143
+ desc 'build with vivliostyle'
142
144
  task vivliostyle: 'vivliostyle:build'
143
145
 
144
146
  CLEAN.include([BOOK, BOOK_PDF, BOOK_EPUB, BOOK + '-pdf', BOOK + '-epub', WEBROOT, 'images/_review_math', 'images/_review_math_text', TEXTROOT, IDGXMLROOT])
@@ -1,5 +1,6 @@
1
- desc 'copy sty/* files from current Re:VIEW source code (in git repos)'
2
1
  REVIEW_TEMPLATE = ENV['REVIEW_TEMPLATE'] || 'review-jsbook'
2
+
3
+ desc 'copy sty/* files from current Re:VIEW source code (in git repos)'
3
4
  task :copy_sty do
4
5
  review_rootdir = '../../..'
5
6
  template_dir = File.join(review_rootdir, "templates/latex/#{REVIEW_TEMPLATE}")
@@ -254,6 +254,12 @@ Tips。@<b>{太字bold}@<i>{italicイタ}@<tt>{等幅code}
254
254
 
255
255
  #@# doorquote、bpo、talk、graph、address、box、linebreak、pagebreak、hr、comment、abbr、acronym、dfn、kbd、q、samp、var、big、small、del、ins、recipe、dtp、raw、embed、include
256
256
 
257
+ == 後注
258
+ 後注は脚注と同様の書式で、@<tt>{//endnote}で内容@<endnote>{end1}、@<tt>{@}@<tt>{<endnote>}で参照します@<endnote>{end2}。後注は@<tt>{//printendnotes}を書いた箇所にまとめて書き出されます。ここではファイル末尾に置いています。
259
+
260
+ //endnote[end1][後注その1です。]
261
+ //endnote[end2][後注その2です。]
262
+
257
263
  == LaTeX式
258
264
  LaTeX式はTeX紙面以外は保証されません。EPUBではMathML(@<tt>{math_format: mathml})を使えますが、表現や互換性が不足しており、LaTeXをバックエンドとして画像化する@<tt>{math_format: imgmath}のほうがよさそうです。
259
265
 
@@ -361,3 +367,6 @@ labelで定義したラベルへの参照の例です。EPUBだと@<href>{#inlin
361
367
  @<hidx>{|}@<hidx>{{}@<hidx>$}$
362
368
 
363
369
  idx, hidxいずれも=見出しの中には入れないようにし、後続の段落先頭にhidxで入れるように注意します(入れてしまうと目次などがおかしくなります)。
370
+
371
+ ==== 後注
372
+ //printendnotes
@@ -1,5 +1,6 @@
1
- desc 'copy sty/* files from current Re:VIEW source code (in git repos)'
2
1
  REVIEW_TEMPLATE = ENV['REVIEW_TEMPLATE'] || 'review-jsbook'
2
+
3
+ desc 'copy sty/* files from current Re:VIEW source code (in git repos)'
3
4
  task :copy_sty do
4
5
  review_rootdir = '../..'
5
6
  template_dir = File.join(review_rootdir, "templates/latex/#{REVIEW_TEMPLATE}")
@@ -1,20 +1,12 @@
1
- <h1 class="tp-title"><%= @title_str %></h1>
2
- <% if @subtitle_str %>
3
- <h2 class="tp-subtitle"><%= h(@subtitle_str) %></h2>
1
+ <div class="titlepage">
2
+ <h1 class="tp-title"><%= h(@config.name_of('booktitle')) %></h1>
3
+ <% if @config['subtitle'] %>
4
+ <h2 class="tp-subtitle"><%= h(@config.name_of('subtitle')) %></h2>
4
5
  <% end %>
5
- <% if @author_str %>
6
- <p>
7
- <br />
8
- <br />
9
- </p>
10
- <h2 class="tp-author"><%= h(@author_str) %></h2>
6
+ <% if @config['aut'] %>
7
+ <h2 class="tp-author"><%= h(@config.names_of('aut').join(ReVIEW::I18n.t('names_splitter'))) %></h2>
11
8
  <% end %>
12
- <% if @publisher_str %>
13
- <p>
14
- <br />
15
- <br />
16
- <br />
17
- <br />
18
- </p>
19
- <h3 class="tp-publisher"><%= h(@publisher_str) %></h3>
9
+ <% if @config['pbl'] %>
10
+ <h3 class="tp-publisher"><%= h(@config.names_of('pbl').join(ReVIEW::I18n.t('names_splitter'))) %></h3>
20
11
  <% end %>
12
+ </div>
@@ -124,6 +124,9 @@
124
124
  \ifdefined\reviewchapref\else% for 5.1.0 compatibility
125
125
  \newcommand{\reviewchapref}[2]{\hyperref[##2]{##1}}
126
126
  \fi
127
+ \ifdefined\reviewtcy\else% for 5.3.0 compatibility
128
+ \DeclareRobustCommand{\reviewtcy}[1]{\rensuji{##1}}
129
+ \fi
127
130
  }
128
131
 
129
132
  \makeatother
@@ -1,4 +1,4 @@
1
- \ProvidesClass{review-base}[2020/12/31]
1
+ \ProvidesClass{review-base}[2021/09/06]
2
2
  % jlreq用基本設定
3
3
  \def\recls@tmp{luatex}\ifx\recls@tmp\recls@driver
4
4
  \hypersetup{
@@ -61,10 +61,7 @@
61
61
  \begin{figure}\begin{center}}{\end{center}\end{figure}}
62
62
 
63
63
  \newenvironment{reviewdummyimage}{%
64
- \begin{figure}
65
- \begin{center}\begin{alltt}}{%
66
- \end{alltt}\end{center}
67
- \end{figure}}
64
+ \begin{figure}\begin{center}}{\end{center}\end{figure}}
68
65
 
69
66
  \newcommand{\reviewindepimagecaption[2]}{\@makecaption{}{#2}}
70
67
 
@@ -189,6 +186,7 @@
189
186
  \DeclareRobustCommand{\reviewunderline}[1]{\underline{#1}}% ulemかjumolineで上書き。デフォルトはulemにしている
190
187
  \DeclareRobustCommand{\reviewit}[1]{\textit{#1}}
191
188
  \DeclareRobustCommand{\reviewbold}[1]{\textbf{#1}}
189
+ \DeclareRobustCommand{\reviewtcy}[1]{\tatechuyoko{#1}}
192
190
 
193
191
  % allow break line in tt
194
192
  % contributed by @zr_tex8r
@@ -388,6 +386,7 @@
388
386
  \ifdefined\review@toc
389
387
  \def\reviewtableofcontents{%
390
388
  \setcounter{tocdepth}{\review@tocdepth}
389
+ \pagestyle{headings}
391
390
  \tableofcontents
392
391
  }
393
392
  \fi
@@ -21,7 +21,7 @@
21
21
 
22
22
  \IfFileExists{plautopatch.sty}{\RequirePackage{plautopatch}}{}
23
23
  \NeedsTeXFormat{LaTeX2e}
24
- \ProvidesClass{review-jlreq}[2021/01/12 Re:VIEW 5.1 upLaTeX/LuaLaTeX class modified for jlreq.cls]
24
+ \ProvidesClass{review-jlreq}[2021/09/07 Re:VIEW 5.3 upLaTeX/LuaLaTeX class modified for jlreq.cls]
25
25
 
26
26
  %% hook at end of reviewmacro
27
27
  \let\@endofreviewmacrohook\@empty
@@ -32,12 +32,15 @@
32
32
  \RequirePackage{fix-cm}%%\RequirePackage{fix-cm,exscale}
33
33
  \IfFileExists{latexrelease.sty}{}{\RequirePackage{fixltx2e}}
34
34
 
35
+ %% amsmath: override \@ifstar with \new@ifnextchar in amsgen.sty
36
+ \let\ltx@ifstar\@ifstar%%as \@ifstar of LaTeX kernel
37
+
35
38
  %% graphicx: added nosetpagesize
36
39
  \IfFileExists{platexrelease.sty}{%% is bundled in TL16 or higher release version
37
40
  \PassOptionsToPackage{nosetpagesize}{graphicx}%%for TL16 or higher version
38
41
  }{}
39
42
 
40
- \RequirePackage{xkeyval,everypage}
43
+ \RequirePackage{xkeyval,everypage,ifthen}
41
44
 
42
45
  %% useful helpers
43
46
  \newcommand\recls@get@p@[2]{%
@@ -82,7 +85,7 @@
82
85
 
83
86
  %% hiddenfolio=nikko-pc
84
87
  \@namedef{@makehiddenfolio@nikko-pc}{%
85
- \jlreqtrimmarkssetup{banner = { center-gutter = { in = {\hiddenfolio@font\selectfont \thepage} } } } }
88
+ \jlreqtrimmarkssetup{banner = { center-gutter= { in = { \hiddenfolio@font\selectfont \thepage} } } } }
86
89
 
87
90
  %% hiddenfolio=shippo
88
91
  \@namedef{@makehiddenfolio@shippo}{%
@@ -218,7 +221,7 @@
218
221
  ]{hyperref}
219
222
 
220
223
  \def\recls@tmp{uplatex}\ifx\recls@tmp\recls@engine
221
- \RequirePackage[\recls@driver]{pxjahyper}
224
+ \RequirePackage{pxjahyper}
222
225
  \fi
223
226
 
224
227
  %% include fullpage graphics
@@ -226,12 +229,29 @@
226
229
  \edef\grnchry@gutter{\evensidemargin}
227
230
  \newcommand*\includefullpagegraphics{%
228
231
  \clearpage
229
- \@ifstar
232
+ \ltx@ifstar
230
233
  {\@includefullpagegraphics}%
231
234
  {\thispagestyle{empty}\@includefullpagegraphics}
232
235
  }
233
236
 
234
237
  \newcommand*\@includefullpagegraphics[2][]{%
238
+ \if@tate
239
+ \vbox to \textheight{%
240
+ \ifodd\c@page
241
+ \vskip-\dimexpr\evensidemargin - \topskip + 1in\relax
242
+ \else
243
+ \vskip-\dimexpr\oddsidemargin - \topskip + 1in\relax
244
+ \fi
245
+ \vbox to \paperwidth{\vss
246
+ \hbox to \textwidth{%
247
+ \hskip-\grnchry@head\relax
248
+ \hbox to \paperheight{\hss
249
+ \rotatebox{90}{\includegraphics[#1]{#2}}%
250
+ \hss}%
251
+ \hss}%
252
+ \vss}%
253
+ \vss}%
254
+ \else
235
255
  \vbox to \textheight{%
236
256
  \vskip-\grnchry@head
237
257
  \vbox to \paperheight{\vss
@@ -247,6 +267,7 @@
247
267
  \hss}%
248
268
  \vss}%
249
269
  \vss}%
270
+ \fi
250
271
  \clearpage
251
272
  }
252
273
 
@@ -282,6 +303,7 @@
282
303
  % シンプルな通しノンブル
283
304
  \ifrecls@serialpage
284
305
  \jlreqsetup{frontmatter_pagination=continuous}
306
+ \if@openright\else\jlreqsetup{mainmatter_pagebreak=clearpage}\fi
285
307
  \fi
286
308
 
287
309
  % 開始ページを変更
@@ -341,5 +363,17 @@
341
363
  \def\reviewleftcurlybrace{\{}
342
364
  \def\reviewrightcurlybrace{\}}
343
365
 
366
+ %% 後注を見出しではなくchapter前にし、endnoteカウンタを新規に用意する
367
+ \jlreqsetup{endnote_position=_chapter}
368
+ \newcounter{reclsendnote}
369
+ \setcounter{reclsendnote}{0}
370
+ \if@tate
371
+ \renewcommand*{\thereclsendnote}{\jlreq@open@bracket@before@space\inhibitglue(\tatechuyoko{\@arabic\c@reclsendnote})\inhibitglue}
372
+ \else
373
+ \renewcommand*{\thereclsendnote}{(\arabic{reclsendnote}\hbox{})\inhibitglue}
374
+ \fi
375
+ \def\jlreq@endnotecounter{reclsendnote}
376
+ \ifthenelse{\equal{\jlreq@article@type}{article}}{}{\@addtoreset{reclsendnote}{chapter}}
377
+
344
378
  \listfiles
345
379
  \endinput
@@ -1,4 +1,4 @@
1
- \ProvidesClass{review-base}[2020/12/31]
1
+ \ProvidesClass{review-base}[2021/09/06]
2
2
  \RequirePackage{ifthen}
3
3
  \@ifundefined{Hy@Info}{% for jsbook.cls
4
4
  \RequirePackage[dvipdfmx,bookmarks=true,bookmarksnumbered=true]{hyperref}
@@ -40,6 +40,9 @@
40
40
  \RequirePackage{amsthm}
41
41
  \RequirePackage{bm}
42
42
  \RequirePackage{tabularx}
43
+ \RequirePackage{endnotesj}
44
+
45
+ \def\enoteheading{}% endnotesj.styの後注前見出しおよび空行の出力を抑制
43
46
 
44
47
  %% if you use @<u>{} (underline), use jumoline.sty
45
48
  \IfFileExists{jumoline.sty}{
@@ -65,9 +68,12 @@
65
68
  \rubysetup{J}}{%
66
69
  \rubysetup{g}}
67
70
 
71
+ \DeclareRobustCommand{\reviewtcy}[1]{\PackageError{review-base}{\reviewtcy is not allowed in yoko mode}{}}
72
+
68
73
  \ifthenelse{\equal{\review@documentclass}{utbook} \OR \equal{\review@documentclass}{tbook}}{%
69
74
  \newcommand{\headfont}{\gtfamily\sffamily\bfseries}
70
75
  \RequirePackage{plext}
76
+ \DeclareRobustCommand{\reviewtcy}[1]{\rensuji{#1}}
71
77
  }{%
72
78
  }
73
79
 
@@ -112,8 +118,8 @@
112
118
 
113
119
  \newenvironment{reviewdummyimage}{%
114
120
  \begin{figure}
115
- \begin{center}\begin{alltt}}{%
116
- \end{alltt}\end{center}
121
+ \begin{center}}{%
122
+ \end{center}
117
123
  \end{figure}}
118
124
 
119
125
  \DeclareRobustCommand{\reviewincludegraphics}[2][]{%
@@ -22,7 +22,7 @@
22
22
  \IfFileExists{plautopatch.sty}{\RequirePackage{plautopatch}}{}
23
23
  \NeedsTeXFormat{pLaTeX2e}
24
24
  \ProvidesClass{review-jsbook}
25
- [2021/01/12 v5.1 Re:VIEW pLaTeX class modified for jsbook.cls]
25
+ [2021/08/23 v5.3 Re:VIEW pLaTeX class modified for jsbook.cls]
26
26
 
27
27
  \def\recls@error{\ClassError{review-jsbook}}
28
28
  \def\recls@warning{\ClassWarning{review-jsbook}}
@@ -39,12 +39,18 @@
39
39
  \RequirePackage{fix-cm}%%\RequirePackage{fix-cm,exscale}
40
40
  \IfFileExists{latexrelease.sty}{}{\RequirePackage{fixltx2e}}
41
41
 
42
+ %% amsmath: override \@ifstar with \new@ifnextchar in amsgen.sty
43
+ \let\ltx@ifstar\@ifstar%%as \@ifstar of LaTeX kernel
44
+
42
45
  %% graphicx: added nosetpagesize
43
46
  \IfFileExists{platexrelease.sty}{%% is bundled in TL16 or higher release version
44
47
  \PassOptionsToPackage{nosetpagesize}{graphicx}%%for TL16 or higher version
45
48
  }{}
46
49
 
47
- \RequirePackage{xkeyval,everypage}%%,etoolbox
50
+ \RequirePackage{xkeyval}%%,etoolbox
51
+ \IfFileExists{everypage-1x.sty}{% is bundled in TL20 or higher
52
+ \RequirePackage{everypage-1x}
53
+ }{\RequirePackage{everypage}}
48
54
 
49
55
  %% useful helpers
50
56
  \newcommand\recls@get@p@[2]{%
@@ -149,7 +155,7 @@
149
155
  \xdef#1{\ifx\recls@hiddenfolio\@empty tombo,\fi#1}}
150
156
 
151
157
  %% \recls@set@hiddenfolio{<preset>}
152
- %% <preset>: default, marusho-ink (丸正インキ), nikko-pc (日光企画),
158
+ %% <preset>: default, marusho-ink (丸正インキ), nikko-pc (日光企画),
153
159
  %% shippo (ねこのしっぽ)
154
160
  \def\recls@set@hiddenfolio#1{\ifx#1\@empty\else
155
161
  \@ifundefined{@makehiddenfolio@#1}{%
@@ -284,6 +290,9 @@
284
290
  % \typeout{!!! magscale: \jsc@magscale}
285
291
  % \typeout{!!! mag: \the\mag}%%=> 1000 -> OK
286
292
 
293
+ %% compatibility for jlreq.cls
294
+ \let\if@tate\iftdir
295
+
287
296
  %% override papersize with custom papersize
288
297
  \ifx\recls@paperwidth\@empty\else\ifx\recls@paperheight\@empty\else
289
298
  \setlength{\paperwidth}{\recls@paperwidth}
@@ -389,7 +398,7 @@
389
398
  hidelinks,
390
399
  setpagesize=false,
391
400
  ]{hyperref}
392
- \RequirePackage[dvipdfmx]{pxjahyper}
401
+ \RequirePackage{pxjahyper}
393
402
 
394
403
  %% more useful macros
395
404
  %% ----------
@@ -398,12 +407,29 @@
398
407
  \let\grnchry@gutter\recls@gutter
399
408
  \newcommand*\includefullpagegraphics{%
400
409
  \clearpage
401
- \@ifstar
410
+ \ltx@ifstar
402
411
  {\@includefullpagegraphics}%
403
412
  {\thispagestyle{empty}\@includefullpagegraphics}
404
413
  }
405
414
 
406
415
  \newcommand*\@includefullpagegraphics[2][]{%
416
+ \if@tate
417
+ \vbox to \textheight{%
418
+ \ifodd\c@page
419
+ \vskip-\dimexpr\evensidemargin - \topskip + 1in\relax
420
+ \else
421
+ \vskip-\dimexpr\oddsidemargin - \topskip + 1in\relax
422
+ \fi
423
+ \vbox to \paperwidth{\vss
424
+ \hbox to \textwidth{%
425
+ \hskip-\grnchry@head\relax
426
+ \hbox to \paperheight{\hss
427
+ \rotatebox{90}{\includegraphics[#1]{#2}}%
428
+ \hss}%
429
+ \hss}%
430
+ \vss}%
431
+ \vss}%
432
+ \else
407
433
  \vbox to \textheight{%
408
434
  \vskip-\grnchry@head
409
435
  \vbox to \paperheight{\vss
@@ -419,6 +445,7 @@
419
445
  \hss}%
420
446
  \vss}%
421
447
  \vss}%
448
+ \fi
422
449
  \clearpage
423
450
  }
424
451
 
@@ -4,7 +4,7 @@
4
4
  <% if @config['toc'] && @config['mytoc'] %>
5
5
  <item id="toc" href="<%= @config['bookname'] %>-toc.<%= @config['htmlext'] %>" media-type="application/xhtml+xml"/>
6
6
  <% end %>
7
- <% @items.each do |item| %>
7
+ <% @items.sort_by { |x| x.id }.each do |item| %>
8
8
  <item id="<%= item.id %>" href="<%= item.file %>" media-type="<%= item.media %>"/>
9
9
  <% end %>
10
10
  </manifest>