review 5.1.1 → 5.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby-tex.yml +6 -2
- data/.github/workflows/ruby-win.yml +6 -2
- data/.github/workflows/ruby.yml +6 -2
- data/.rubocop.yml +5 -319
- data/NEWS.ja.md +149 -0
- data/NEWS.md +149 -1
- data/README.md +9 -8
- data/bin/review +1 -1
- data/bin/review-catalog-converter +15 -15
- data/bin/review-check +7 -7
- data/bin/review-compile +14 -23
- data/bin/review-index +1 -1
- data/bin/review-preproc +29 -35
- data/bin/review-validate +2 -2
- data/doc/config.yml.sample +9 -1
- data/doc/config.yml.sample-simple +1 -1
- data/doc/format.ja.md +29 -3
- data/doc/format.md +32 -3
- data/doc/writing_vertical.ja.md +6 -0
- data/lib/review/book/base.rb +3 -3
- data/lib/review/book/book_unit.rb +13 -3
- data/lib/review/book/chapter.rb +1 -1
- data/lib/review/book/index.rb +7 -4
- data/lib/review/book/part.rb +12 -13
- data/lib/review/book/volume.rb +1 -1
- data/lib/review/builder.rb +92 -65
- data/lib/review/catalog.rb +6 -5
- data/lib/review/compiler.rb +76 -57
- data/lib/review/configure.rb +5 -2
- data/lib/review/epub2html.rb +12 -12
- data/lib/review/epubmaker/content.rb +1 -1
- data/lib/review/epubmaker/epubcommon.rb +47 -45
- data/lib/review/epubmaker/epubv2.rb +2 -1
- data/lib/review/epubmaker/epubv3.rb +5 -4
- data/lib/review/epubmaker/producer.rb +6 -7
- data/lib/review/epubmaker/reviewheaderlistener.rb +1 -1
- data/lib/review/epubmaker.rb +56 -67
- data/lib/review/exception.rb +7 -0
- data/lib/review/extentions/string.rb +1 -1
- data/lib/review/htmlbuilder.rb +90 -34
- data/lib/review/htmlutils.rb +17 -17
- data/lib/review/i18n.rb +3 -3
- data/lib/review/i18n.yml +6 -0
- data/lib/review/idgxmlbuilder.rb +61 -39
- data/lib/review/idgxmlmaker.rb +27 -26
- data/lib/review/img_math.rb +12 -18
- data/lib/review/index_builder.rb +94 -53
- data/lib/review/init.rb +4 -4
- data/lib/review/latexbuilder.rb +84 -76
- data/lib/review/lineinput.rb +3 -3
- data/lib/review/location.rb +1 -1
- data/lib/review/loggable.rb +27 -0
- data/lib/review/logger.rb +69 -21
- data/lib/review/makerhelper.rb +8 -4
- data/lib/review/markdownbuilder.rb +21 -12
- data/lib/review/pdfmaker.rb +63 -42
- data/lib/review/plaintextbuilder.rb +16 -15
- data/lib/review/preprocessor/directive.rb +35 -0
- data/lib/review/preprocessor/line.rb +34 -0
- data/lib/review/preprocessor/repository.rb +177 -0
- data/lib/review/preprocessor.rb +94 -296
- data/lib/review/rstbuilder.rb +12 -3
- data/lib/review/template.rb +5 -1
- data/lib/review/textmaker.rb +32 -31
- data/lib/review/textutils.rb +5 -6
- data/lib/review/tocprinter.rb +12 -7
- data/lib/review/topbuilder.rb +96 -19
- data/lib/review/update.rb +16 -8
- data/lib/review/version.rb +1 -1
- data/lib/review/volumeprinter.rb +9 -9
- data/lib/review/webmaker.rb +45 -46
- data/lib/review/webtocprinter.rb +10 -10
- data/lib/review/yamlloader.rb +35 -2
- data/review.gemspec +2 -1
- data/samples/sample-book/src/config.yml +0 -1
- data/samples/sample-book/src/lib/tasks/review.rake +3 -1
- data/samples/sample-book/src/lib/tasks/z01_copy_sty.rake +2 -1
- data/samples/syntax-book/ch02.re +9 -0
- data/samples/syntax-book/lib/tasks/z01_copy_sty.rake +2 -1
- data/templates/html/_titlepage.html.erb +9 -17
- data/templates/latex/config.erb +3 -0
- data/templates/latex/review-jlreq/review-base.sty +4 -5
- data/templates/latex/review-jlreq/review-jlreq.cls +39 -5
- data/templates/latex/review-jsbook/review-base.sty +9 -3
- data/templates/latex/review-jsbook/review-jsbook.cls +32 -5
- data/templates/opf/opf_manifest_epubv2.opf.erb +1 -1
- data/templates/opf/opf_manifest_epubv3.opf.erb +1 -1
- data/test/assets/syntax_book_index_detail.txt +10 -8
- data/test/assets/test_template.tex +4 -1
- data/test/assets/test_template_backmatter.tex +4 -1
- data/test/book_test_helper.rb +10 -10
- data/test/test_book_chapter.rb +25 -2
- data/test/test_builder.rb +10 -8
- data/test/test_epub3maker.rb +3 -3
- data/test/test_epubmaker.rb +27 -37
- data/test/test_epubmaker_cmd.rb +14 -3
- data/test/test_htmlbuilder.rb +111 -31
- data/test/test_idgxmlbuilder.rb +41 -33
- data/test/test_idgxmlmaker_cmd.rb +1 -1
- data/test/test_img_math.rb +11 -2
- data/test/test_index.rb +30 -4
- data/test/test_latexbuilder.rb +46 -25
- data/test/test_latexbuilder_v2.rb +18 -10
- data/test/test_markdownbuilder.rb +13 -0
- data/test/test_pdfmaker.rb +19 -0
- data/test/test_pdfmaker_cmd.rb +10 -10
- data/test/test_plaintextbuilder.rb +46 -22
- data/test/test_preprocessor.rb +188 -1
- data/test/test_rstbuilder.rb +13 -0
- data/test/test_textmaker_cmd.rb +1 -1
- data/test/test_topbuilder.rb +195 -29
- data/test/test_yamlloader.rb +28 -42
- metadata +11 -6
data/lib/review/webmaker.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2016-
|
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
|
-
|
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
|
-
|
88
|
-
|
89
|
-
|
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
|
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
|
-
@
|
152
|
-
@
|
153
|
-
@body
|
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
|
-
|
175
|
-
|
176
|
-
|
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
|
-
|
196
|
-
|
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
|
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(
|
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)
|
data/lib/review/webtocprinter.rb
CHANGED
@@ -41,16 +41,16 @@ EOT
|
|
41
41
|
next
|
42
42
|
end
|
43
43
|
|
44
|
-
if path.start_with?('.')
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
if result.level == 0
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
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
|
data/lib/review/yamlloader.rb
CHANGED
@@ -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 =
|
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.
|
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')
|
@@ -130,15 +130,17 @@ file IDGXMLROOT => SRC do
|
|
130
130
|
FileUtils.rm_rf([IDGXMLROOT])
|
131
131
|
end
|
132
132
|
|
133
|
-
desc '
|
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}")
|
data/samples/syntax-book/ch02.re
CHANGED
@@ -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
|
-
|
2
|
-
|
3
|
-
|
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 @
|
6
|
-
|
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 @
|
13
|
-
|
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>
|
data/templates/latex/config.erb
CHANGED
@@ -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}[
|
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/
|
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
|
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
|
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
|
-
|
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}[
|
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}
|
116
|
-
\end{
|
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/
|
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
|
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
|
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
|
-
|
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>
|