review 0.9.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +9 -0
- data/ChangeLog +326 -0
- data/Rakefile +3 -5
- data/VERSION +1 -1
- data/bin/review-compile +50 -50
- data/bin/review-epubmaker +62 -75
- data/bin/review-epubmaker-ng +185 -0
- data/bin/review-index +2 -1
- data/bin/review-pdfmaker +158 -101
- data/bin/review-vol +6 -2
- data/doc/format.rdoc +111 -46
- data/doc/libepubmaker/sample.yaml +90 -0
- data/doc/quickstart.rdoc +188 -0
- data/doc/sample.yaml +8 -0
- data/lib/epubmaker.rb +28 -0
- data/lib/epubmaker/content.rb +82 -0
- data/lib/epubmaker/epubv2.rb +419 -0
- data/lib/epubmaker/epubv3.rb +249 -0
- data/lib/epubmaker/producer.rb +204 -0
- data/lib/epubmaker/resource.rb +66 -0
- data/lib/review.rb +1 -1
- data/lib/review/book.rb +27 -4
- data/lib/review/builder.rb +153 -20
- data/lib/review/compiler.rb +61 -10
- data/lib/review/ewbbuilder.rb +3 -2
- data/lib/review/htmlbuilder.rb +174 -67
- data/lib/review/i18n.rb +30 -0
- data/lib/review/i18n.yaml +23 -0
- data/lib/review/idgxmlbuilder.rb +110 -63
- data/lib/review/index.rb +34 -12
- data/lib/review/latexbuilder.rb +128 -33
- data/lib/review/latexutils.rb +18 -1
- data/lib/review/textbuilder.rb +17 -0
- data/lib/review/tocparser.rb +3 -1
- data/lib/review/tocprinter.rb +1 -0
- data/lib/review/topbuilder.rb +397 -198
- data/review.gemspec +101 -100
- data/test/test_book.rb +27 -0
- data/test/test_epubmaker.rb +507 -0
- data/test/test_helper.rb +8 -0
- data/test/test_htmlbuilder.rb +295 -10
- data/test/test_i18n.rb +64 -0
- data/test/test_idgxmlbuilder.rb +268 -10
- data/test/test_latexbuilder.rb +316 -20
- data/test/test_preprocessor.rb +23 -0
- data/test/test_topbuilder.rb +246 -0
- metadata +46 -53
- data/doc/format.re +0 -505
- data/test/test_index.rb +0 -15
data/bin/review-index
CHANGED
data/bin/review-pdfmaker
CHANGED
@@ -45,86 +45,51 @@ def main
|
|
45
45
|
values = YAML.load_file(yamlfile)
|
46
46
|
check_book(values)
|
47
47
|
basedir = Dir.pwd
|
48
|
-
path = build_path(values)
|
48
|
+
@path = build_path(values)
|
49
49
|
bookname = values["bookname"]
|
50
|
-
Dir.mkdir(path)
|
50
|
+
Dir.mkdir(@path)
|
51
51
|
|
52
|
-
|
53
|
-
body = 0
|
54
|
-
post = 0
|
55
|
-
@pre_str = ""
|
56
|
-
@chap_str = ""
|
57
|
-
@post_str = ""
|
58
|
-
toccount = 2
|
52
|
+
@chaps_filenames = Hash.new{|h, key| h[key] = ""}
|
59
53
|
|
60
54
|
if File.exists?("PREDEF")
|
61
|
-
|
62
|
-
chaps.each_line {|l|
|
63
|
-
next if l =~ /^#/
|
64
|
-
pre = pre + 1
|
65
|
-
toccount = toccount + 1
|
66
|
-
fork {
|
67
|
-
STDOUT.reopen("#{path}/pre#{pre}.tex")
|
68
|
-
exec("review-compile --target=latex --level=1 #{values["params"]} #{l}")
|
69
|
-
}
|
70
|
-
Process.waitall
|
71
|
-
@pre_str << %Q|\\input{pre#{pre}.tex}\n|
|
72
|
-
}
|
73
|
-
}
|
55
|
+
output_chaps("PREDEF", values)
|
74
56
|
end
|
75
57
|
if File.exists?("CHAPS")
|
76
|
-
|
77
|
-
chaps.each_line {|l|
|
78
|
-
body = body + 1
|
79
|
-
toccount = toccount + 1
|
80
|
-
next if l =~ /^#/
|
81
|
-
fork {
|
82
|
-
STDOUT.reopen("#{path}/chap#{body}.tex")
|
83
|
-
exec("review-compile --target=latex --level=#{values["secnolevel"]} #{values["params"]} #{l}")
|
84
|
-
}
|
85
|
-
Process.waitall
|
86
|
-
@chap_str << %Q|\\input{chap#{body}.tex}\n|
|
87
|
-
}
|
88
|
-
}
|
58
|
+
output_chaps("CHAPS", values)
|
89
59
|
end
|
90
60
|
if File.exists?("POSTDEF")
|
91
|
-
|
92
|
-
chaps.each_line {|l|
|
93
|
-
next if l =~ /^#/
|
94
|
-
post = post + 1
|
95
|
-
toccount = toccount + 1
|
96
|
-
fork {
|
97
|
-
STDOUT.reopen("#{path}/post#{post}.tex")
|
98
|
-
exec("review-compile --target=latex --level=1 #{values["params"]} #{l}")
|
99
|
-
}
|
100
|
-
Process.waitall
|
101
|
-
@post_str << %Q|\\input{post#{post}.tex}\n|
|
102
|
-
}
|
103
|
-
}
|
61
|
+
output_chaps("POSTDEF", values)
|
104
62
|
end
|
105
|
-
values["pre_str"]
|
106
|
-
values["chap_str"] = @
|
107
|
-
values["post_str"] = @
|
63
|
+
values["pre_str"] = @chaps_filenames["PREDEF"]
|
64
|
+
values["chap_str"] = @chaps_filenames["CHAPS"]
|
65
|
+
values["post_str"] = @chaps_filenames["POSTDEF"]
|
108
66
|
|
109
67
|
values["usepackage"] = ""
|
110
68
|
if values["texstyle"]
|
111
69
|
values["usepackage"] = "\\usepackage{#{values['texstyle']}}"
|
112
70
|
end
|
113
71
|
|
114
|
-
copy_images("./images", "#{path}/images")
|
115
|
-
copyStyToDir(Dir.pwd + "/sty", path)
|
72
|
+
copy_images("./images", "#{@path}/images")
|
73
|
+
copyStyToDir(Dir.pwd + "/sty", @path)
|
74
|
+
copyStyToDir(Dir.pwd, @path, "tex")
|
116
75
|
|
117
|
-
Dir.chdir(path) {
|
76
|
+
Dir.chdir(@path) {
|
118
77
|
template = get_template(values)
|
119
78
|
File.open("./book.tex", "wb"){|f| f.write(template)}
|
120
79
|
|
121
80
|
## do compile
|
81
|
+
enc = values["params"].to_s.split(/\s+/).find{|i| i =~ /\A--outencoding=/ }
|
82
|
+
kanji = enc ? enc.split(/=/).last.gsub(/-/, '').downcase : 'utf8'
|
122
83
|
fork {
|
123
|
-
exec("platex book.tex")
|
84
|
+
exec("platex -kanji=#{kanji} book.tex")
|
124
85
|
}
|
125
86
|
Process.waitall
|
126
87
|
fork {
|
127
|
-
exec("platex book.tex")
|
88
|
+
exec("platex -kanji=#{kanji} book.tex")
|
89
|
+
}
|
90
|
+
Process.waitall
|
91
|
+
fork {
|
92
|
+
exec("platex -kanji=#{kanji} book.tex")
|
128
93
|
}
|
129
94
|
Process.waitall
|
130
95
|
fork {
|
@@ -132,8 +97,24 @@ def main
|
|
132
97
|
}
|
133
98
|
Process.waitall
|
134
99
|
}
|
135
|
-
FileUtils.cp("#{path}/book.pdf", "#{basedir}/#{bookname}.pdf")
|
100
|
+
FileUtils.cp("#{@path}/book.pdf", "#{basedir}/#{bookname}.pdf")
|
101
|
+
end
|
136
102
|
|
103
|
+
def output_chaps(chapsfile, values)
|
104
|
+
File.open(chapsfile) {|chaps|
|
105
|
+
chaps.each_line {|l|
|
106
|
+
next if l =~ /^#/
|
107
|
+
file_id = File.basename(l.chomp.strip,".*")
|
108
|
+
filename = "#{file_id}.tex"
|
109
|
+
fork {
|
110
|
+
STDOUT.reopen("#{@path}/#{filename}")
|
111
|
+
$stderr.puts "compiling #{l}"
|
112
|
+
exec("review-compile --target=latex --level=#{values["secnolevel"]} #{values["params"]} #{l}")
|
113
|
+
}
|
114
|
+
Process.waitall
|
115
|
+
@chaps_filenames[chapsfile] << %Q|\\input{#{filename}}\n|
|
116
|
+
}
|
117
|
+
}
|
137
118
|
end
|
138
119
|
|
139
120
|
def copy_images(from, to)
|
@@ -142,16 +123,89 @@ def copy_images(from, to)
|
|
142
123
|
copyImagesToDir(from, to)
|
143
124
|
Dir.chdir(to) {
|
144
125
|
fork {
|
145
|
-
|
126
|
+
begin
|
127
|
+
exec("extractbb *.png *.jpg */*.jpg */*.png;extractbb -m *.png *.jpg */*.jpg */*.png")
|
128
|
+
rescue
|
129
|
+
exec("ebb *.png *.jpg */*.jpg */*.png")
|
130
|
+
end
|
146
131
|
}
|
147
132
|
}
|
148
133
|
Process.waitall
|
149
134
|
end
|
150
135
|
end
|
151
136
|
|
137
|
+
def make_titlepage(values, authors)
|
138
|
+
coverfile = values["coverfile"]
|
139
|
+
if coverfile
|
140
|
+
coverfile_sty = coverfile.sub(/\.[^.]+$/, ".tex")
|
141
|
+
if File.exist?(coverfile_sty)
|
142
|
+
titlepage = File.read(coverfile_sty)
|
143
|
+
return titlepage
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
## use default titlepage template
|
148
|
+
titlepage = <<EOB
|
149
|
+
\\begin{titlepage}
|
150
|
+
EOB
|
151
|
+
if values["coverimage"]
|
152
|
+
titlepage += <<EOB
|
153
|
+
\\begin{center}
|
154
|
+
%%%\\mbox{}\\vskip5zw%
|
155
|
+
\\includegraphics[width=\\textwidth,height=\\textheight,keepaspectratio]{./images/#{values["coverimage"]}}
|
156
|
+
\\end{center}
|
157
|
+
\\clearpage
|
158
|
+
EOB
|
159
|
+
end
|
160
|
+
titlepage += <<EOB
|
161
|
+
\\thispagestyle{empty}
|
162
|
+
\\begin{center}%
|
163
|
+
\\mbox{} \\vskip5zw
|
164
|
+
\\reviewtitlefont%
|
165
|
+
{\\Huge #{values["booktitle"]} \\par}%
|
166
|
+
\\vskip 15em%
|
167
|
+
{\\huge
|
168
|
+
\\lineskip .75em
|
169
|
+
\\begin{tabular}[t]{c}%
|
170
|
+
#{authors}
|
171
|
+
\\end{tabular}\\par}%
|
172
|
+
\\vfill
|
173
|
+
{\\large #{values["date"]} 版\\hspace{2zw}#{values["prt"]} 発行\\par}%
|
174
|
+
\\vskip4zw\\mbox{}
|
175
|
+
\\end{center}%
|
176
|
+
\\end{titlepage}
|
177
|
+
EOB
|
178
|
+
|
179
|
+
return titlepage
|
180
|
+
end
|
181
|
+
|
152
182
|
def get_template(values)
|
183
|
+
dclass = values["texdocumentclass"] || []
|
184
|
+
documentclass = dclass[0] || "jsbook"
|
185
|
+
documentclassoption = dclass[1] || "oneside"
|
186
|
+
|
187
|
+
okuduke = ""
|
188
|
+
authors = ""
|
189
|
+
|
190
|
+
if values["aut"]
|
191
|
+
okuduke += "著 者 & #{values["aut"]} \\\\\n"
|
192
|
+
authors = values["aut"]+ "\\vspace*{1zh} 著"
|
193
|
+
end
|
194
|
+
if values["trl"]
|
195
|
+
authors += " \\\\\n"+values["trl"]+ "\\vspace*{1zh} 訳"
|
196
|
+
okuduke += "翻 訳 & #{values["trl"]} \\\\\n"
|
197
|
+
end
|
198
|
+
if values["edt"]
|
199
|
+
okuduke += "編集者 & #{values["edt"]} \\\\\n"
|
200
|
+
end
|
201
|
+
okuduke += <<EOB
|
202
|
+
発行所 & #{values["prt"]} \\\\
|
203
|
+
EOB
|
204
|
+
|
205
|
+
titlepage = make_titlepage(values, authors)
|
206
|
+
|
153
207
|
str = <<EOB
|
154
|
-
\\documentclass[
|
208
|
+
\\documentclass[#{documentclassoption}]{#{documentclass}}
|
155
209
|
\\usepackage[deluxe]{otf}
|
156
210
|
\\usepackage[dvipdfmx]{color}
|
157
211
|
\\usepackage[dvipdfmx]{graphicx}
|
@@ -182,17 +236,21 @@ def get_template(values)
|
|
182
236
|
\\newcommand{\\parasep}{\\vspace*{3zh}}
|
183
237
|
\\setlength{\\footskip}{30pt}
|
184
238
|
|
185
|
-
\\usepackage[dvipdfm,bookmarks=true,bookmarksnumbered=true,colorlinks=true,%
|
186
|
-
pdftitle={#{values["booktitle"]}},%
|
187
|
-
pdfauthor={#{values["aut"]}}]{hyperref}
|
188
|
-
|
189
239
|
%% Bookmarkの文字化け対策(日本語向け)
|
190
240
|
\\ifnum 46273=\\euc"B4C1 % 46273 == 0xB4C1 == 漢(EUC-JP)
|
191
|
-
\\
|
241
|
+
\\usepackage{atbegshi}%
|
242
|
+
\\AtBeginShipoutFirst{\\special{pdf:tounicode EUC-UCS2}}%
|
243
|
+
%%\\AtBeginDvi{\\special{pdf:tounicode EUC-UCS2}}%
|
192
244
|
\\else
|
193
|
-
\\
|
245
|
+
\\usepackage{atbegshi}%
|
246
|
+
\\AtBeginShipoutFirst{\\special{pdf:tounicode 90ms-RKSJ-UCS2}}%
|
247
|
+
%%\\AtBeginDvi{\\special{pdf:tounicode 90ms-RKSJ-UCS2}}%
|
194
248
|
\\fi
|
195
249
|
|
250
|
+
\\usepackage[dvipdfm,bookmarks=true,bookmarksnumbered=true,colorlinks=true,%
|
251
|
+
pdftitle={#{values["booktitle"]}},%
|
252
|
+
pdfauthor={#{values["aut"]}}]{hyperref}
|
253
|
+
|
196
254
|
\\newenvironment{reviewimage}{%
|
197
255
|
\\begin{figure}[H]
|
198
256
|
\\begin{center}}{%
|
@@ -241,6 +299,12 @@ def get_template(values)
|
|
241
299
|
\\newcommand{\\reviewlistcaption}[1]{%
|
242
300
|
\\medskip{\\small\\noindent #1}\\vspace*{-1.3zw}}
|
243
301
|
|
302
|
+
\\newcommand{\\reviewemlistcaption}[1]{%
|
303
|
+
\\medskip{\\small\\noindent #1}\\vspace*{-1.3zw}}
|
304
|
+
|
305
|
+
\\newcommand{\\reviewcmdcaption}[1]{%
|
306
|
+
\\medskip{\\small\\noindent #1}\\vspace*{-1.3zw}}
|
307
|
+
|
244
308
|
\\newcommand{\\reviewimageref}[1]{%
|
245
309
|
図 #1}
|
246
310
|
\\newcommand{\\reviewtableref}[1]{%
|
@@ -264,6 +328,22 @@ def get_template(values)
|
|
264
328
|
\\newcommand{\\reviewmainfont}[0]{%
|
265
329
|
}
|
266
330
|
|
331
|
+
\\newcommand{\\reviewcolophon}[0]{%
|
332
|
+
\\backmatter
|
333
|
+
\\clearpage}
|
334
|
+
\\newcommand{\\reviewappendix}[0]{%
|
335
|
+
\\appendix}
|
336
|
+
|
337
|
+
\\makeatletter
|
338
|
+
\\def\\maxwidth{%
|
339
|
+
\\ifdim\\Gin@nat@width>\\linewidth
|
340
|
+
\\linewidth
|
341
|
+
\\else
|
342
|
+
\\Gin@nat@width
|
343
|
+
\\fi
|
344
|
+
}
|
345
|
+
\\makeatother
|
346
|
+
|
267
347
|
#{values["usepackage"]}
|
268
348
|
|
269
349
|
\\usepackage[T1]{fontenc}
|
@@ -271,35 +351,10 @@ def get_template(values)
|
|
271
351
|
\\begin{document}
|
272
352
|
|
273
353
|
\\reviewmainfont
|
274
|
-
|
275
|
-
\\begin{titlepage}
|
276
354
|
EOB
|
277
|
-
|
278
|
-
|
279
|
-
\\begin{center}
|
280
|
-
\\mbox{}\\vskip5zw%
|
281
|
-
\\includegraphics[scale=1.0]{./images/#{values["coverimage"]}}
|
282
|
-
\\end{center}
|
283
|
-
\\clearpage
|
284
|
-
EOB
|
285
|
-
end
|
355
|
+
|
356
|
+
str += titlepage
|
286
357
|
str += <<EOB
|
287
|
-
\\thispagestyle{empty}
|
288
|
-
\\begin{center}%
|
289
|
-
\\mbox{} \\vskip5zw
|
290
|
-
\\reviewtitlefont%
|
291
|
-
{\\Huge #{values["booktitle"]} \\par}%
|
292
|
-
\\vskip 15em%
|
293
|
-
{\\huge
|
294
|
-
\\lineskip .75em
|
295
|
-
\\begin{tabular}[t]{c}%
|
296
|
-
#{values["aut"]}\\vspace*{1zh} 著
|
297
|
-
\\end{tabular}\\par}%
|
298
|
-
\\vfill
|
299
|
-
{\\large #{values["date"]} 版\\hspace{2zw}#{values["prt"]} 発行\\par}%
|
300
|
-
\\vskip4zw\\mbox{}
|
301
|
-
\\end{center}%
|
302
|
-
\\end{titlepage}
|
303
358
|
|
304
359
|
\\renewcommand{\\chaptermark}[1]{{}}
|
305
360
|
\\frontmatter
|
@@ -315,13 +370,12 @@ EOB
|
|
315
370
|
#{values["chap_str"]}
|
316
371
|
|
317
372
|
\\renewcommand{\\chaptermark}[1]{\\markboth{\\appendixname\\thechapter~#1}{}}
|
318
|
-
\\
|
373
|
+
\\reviewappendix
|
319
374
|
|
320
375
|
#{values["post_str"]}
|
321
376
|
|
322
377
|
%% okuduke
|
323
|
-
\\
|
324
|
-
\\clearpage
|
378
|
+
\\reviewcolophon
|
325
379
|
\\thispagestyle{empty}
|
326
380
|
|
327
381
|
\\vspace*{\\fill}
|
@@ -333,9 +387,7 @@ EOB
|
|
333
387
|
}
|
334
388
|
|
335
389
|
\\begin{tabular}{ll}
|
336
|
-
|
337
|
-
編集者 & #{values["edt"]} \\\\
|
338
|
-
発行所 & #{values["prt"]} \\\\
|
390
|
+
#{okuduke}
|
339
391
|
\\end{tabular}
|
340
392
|
\\\\
|
341
393
|
\\rule[0pt]{14cm}{1pt} \\\\
|
@@ -353,7 +405,7 @@ def copyImagesToDir(dirname, copybase)
|
|
353
405
|
if FileTest.directory?("#{dirname}/#{fname}")
|
354
406
|
copyImagesToDir("#{dirname}/#{fname}", "#{copybase}/#{fname}")
|
355
407
|
else
|
356
|
-
if fname =~ /\.(png|gif|jpg|jpeg|svg)$/i
|
408
|
+
if fname =~ /\.(png|gif|jpg|jpeg|svg|pdf)$/i
|
357
409
|
Dir.mkdir(copybase) unless File.exist?(copybase)
|
358
410
|
FileUtils.cp "#{dirname}/#{fname}", copybase
|
359
411
|
end
|
@@ -362,11 +414,16 @@ def copyImagesToDir(dirname, copybase)
|
|
362
414
|
}
|
363
415
|
end
|
364
416
|
|
365
|
-
def copyStyToDir(dirname, copybase)
|
417
|
+
def copyStyToDir(dirname, copybase, extname = "sty")
|
418
|
+
unless File.directory?(dirname)
|
419
|
+
$stderr.puts "No such directory - #{dirname}"
|
420
|
+
return
|
421
|
+
end
|
422
|
+
|
366
423
|
Dir.open(dirname) {|dir|
|
367
424
|
dir.each {|fname|
|
368
425
|
next if fname =~ /^\./
|
369
|
-
if fname =~ /\.(
|
426
|
+
if fname =~ /\.(#{extname})$/i
|
370
427
|
Dir.mkdir(copybase) unless File.exist?(copybase)
|
371
428
|
FileUtils.cp "#{dirname}/#{fname}", copybase
|
372
429
|
end
|
data/bin/review-vol
CHANGED
@@ -29,6 +29,7 @@ def main
|
|
29
29
|
}
|
30
30
|
|
31
31
|
part_sensitive = false
|
32
|
+
basedir = nil
|
32
33
|
parser = OptionParser.new
|
33
34
|
parser.on('-P', '--part-sensitive', 'Prints volume of each parts.') {
|
34
35
|
part_sensitive = true
|
@@ -39,6 +40,9 @@ def main
|
|
39
40
|
parser.on('--outencoding=ENCODING', 'Set output encoding. (UTF-8[default], EUC, JIS, and SJIS)') {|enc|
|
40
41
|
@param["outencoding"] = enc
|
41
42
|
}
|
43
|
+
parser.on('--directory=DIR', 'Compile all chapters in DIR.') {|path|
|
44
|
+
basedir = path
|
45
|
+
}
|
42
46
|
parser.on('--help', 'Print this message and quit') {
|
43
47
|
puts parser.help
|
44
48
|
exit 0
|
@@ -51,13 +55,13 @@ def main
|
|
51
55
|
exit 1
|
52
56
|
end
|
53
57
|
|
54
|
-
book = ReVIEW.book
|
58
|
+
book = basedir ? ReVIEW::Book.load(basedir) : ReVIEW.book
|
55
59
|
ReVIEW.book.param = @param
|
56
60
|
if part_sensitive
|
57
61
|
sep = ""
|
58
62
|
book.each_part do |part|
|
59
63
|
print sep; sep = "\n"
|
60
|
-
puts "Part #{part.number}" if part.number
|
64
|
+
puts "Part #{part.number} #{part.name}" if part.number
|
61
65
|
part.each_chapter do |chap|
|
62
66
|
print_chapter_volume chap
|
63
67
|
end
|
data/doc/format.rdoc
CHANGED
@@ -9,7 +9,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
9
9
|
段落(本文)の間は英語の段落のように1行空けます。ただし、組版に
|
10
10
|
まわすときは前処理して1段落を1行に変更してあります。
|
11
11
|
|
12
|
-
|
12
|
+
例:
|
13
13
|
|
14
14
|
だんらくだんらく〜〜〜
|
15
15
|
この行も同じ段落
|
@@ -22,7 +22,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
22
22
|
|
23
23
|
章・節・項・段など、見出しは「=」「==」「===」「====」「=====」です。6 レベル以上は使えません。
|
24
24
|
|
25
|
-
|
25
|
+
例:
|
26
26
|
|
27
27
|
= 章のキャプション
|
28
28
|
|
@@ -40,22 +40,34 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
40
40
|
|
41
41
|
節や項の見出しに [column] を追加するとコラムのキャプションになります。
|
42
42
|
|
43
|
-
|
43
|
+
例:
|
44
44
|
|
45
45
|
===[column] コンパイラコンパイラ
|
46
46
|
|
47
47
|
このとき、「=」と「[column]」は間を開けず、必ず続けて書かなければ
|
48
48
|
なりません。空白があってもいけません。
|
49
49
|
|
50
|
+
次の節や項を待たずにコラムを終了する場合は、「===[/column]」を記述します。
|
51
|
+
|
52
|
+
例:
|
53
|
+
|
54
|
+
===[column] コンパイラコンパイラ
|
55
|
+
|
56
|
+
コラムの内容
|
57
|
+
|
58
|
+
===[/column]
|
59
|
+
|
50
60
|
== 箇条書き
|
51
61
|
|
52
62
|
箇条書き (HTML で言う ul) は「*」で表現します。
|
53
|
-
|
63
|
+
ネストは「**」のように深さに応じて数を増やします。
|
54
64
|
|
55
|
-
|
65
|
+
例:
|
56
66
|
|
57
67
|
* 第一の項目
|
68
|
+
** 第一の項目のネスト
|
58
69
|
* 第二の項目
|
70
|
+
** 第二の項目のネスト
|
59
71
|
* 第三の項目
|
60
72
|
|
61
73
|
箇条書きを書くには、行頭に1つ以上の空白を必ず入れるようにします。
|
@@ -66,7 +78,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
66
78
|
番号付きの箇条書き (HTML で言う ol) は「1. 〜」「2. 〜」
|
67
79
|
「3. 〜」で示します。ネストはしません。
|
68
80
|
|
69
|
-
|
81
|
+
例:
|
70
82
|
|
71
83
|
1. 第一の条件
|
72
84
|
2. 第二の条件
|
@@ -78,7 +90,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
78
90
|
|
79
91
|
用語リスト (HTML で言う dl) は「:」と、続く空白で始まる行を使って示します。
|
80
92
|
|
81
|
-
|
93
|
+
例:
|
82
94
|
|
83
95
|
: Alpha
|
84
96
|
DEC の作っていた RISC CPU。
|
@@ -105,7 +117,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
105
117
|
連番なしリストは「//emlist[キャプション]{ 〜 //}」です。
|
106
118
|
//emlistのキャプションは省略できます。
|
107
119
|
|
108
|
-
|
120
|
+
例:
|
109
121
|
|
110
122
|
//list[main][main()]{ ←「main」が識別子で「main()」がキャプション
|
111
123
|
int
|
@@ -116,7 +128,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
116
128
|
}
|
117
129
|
//}
|
118
130
|
|
119
|
-
|
131
|
+
例:
|
120
132
|
|
121
133
|
//emlist{
|
122
134
|
printf("hello");
|
@@ -132,7 +144,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
132
144
|
|
133
145
|
ソースコードを引用する場合、ファイル名が必要です。
|
134
146
|
|
135
|
-
|
147
|
+
例:
|
136
148
|
|
137
149
|
//source[/hello/world.rb]{
|
138
150
|
puts "hello world!"
|
@@ -145,7 +157,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
145
157
|
|
146
158
|
連番ありのリスト(list)で自動的に行番号がつきます。
|
147
159
|
|
148
|
-
|
160
|
+
例:
|
149
161
|
|
150
162
|
//listnum[hello][ハローワールド]{
|
151
163
|
puts "hello world!"
|
@@ -153,7 +165,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
153
165
|
|
154
166
|
参照方法はlistと変わりません。
|
155
167
|
|
156
|
-
|
168
|
+
例:
|
157
169
|
|
158
170
|
..は@<list>{hello}をみてください。
|
159
171
|
|
@@ -161,7 +173,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
161
173
|
|
162
174
|
連番なしのリスト(emlist)で自動的に行番号がつきます。
|
163
175
|
|
164
|
-
|
176
|
+
例:
|
165
177
|
|
166
178
|
//emlistnum{
|
167
179
|
puts "hello world!"
|
@@ -171,7 +183,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
171
183
|
|
172
184
|
本文中でソースコードを引用して記述します。
|
173
185
|
|
174
|
-
|
186
|
+
例:
|
175
187
|
|
176
188
|
@<code>{p = obj.ref_cnt}
|
177
189
|
|
@@ -179,7 +191,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
179
191
|
|
180
192
|
コマンドラインの操作を示すときは //cmd{ 〜 //} を使います。
|
181
193
|
|
182
|
-
|
194
|
+
例:
|
183
195
|
|
184
196
|
//cmd{
|
185
197
|
$ ls /
|
@@ -193,16 +205,16 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
193
205
|
代替しているため、ダミーのアスキーアートが入っていることがあり
|
194
206
|
ます。この部分は、組版時には単に無視してください。
|
195
207
|
|
196
|
-
|
208
|
+
例:
|
197
209
|
|
198
210
|
//image[unixhistory][UNIX系OSの簡単な系譜]{
|
199
|
-
|
200
|
-
|
211
|
+
System V 系列
|
212
|
+
+----------- SVr4 --> 各種商用UNIX(Solaris, AIX, HP-UX, ...)
|
201
213
|
V1 --> V6 --|
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
214
|
+
+--------- 4.4BSD --> FreeBSD, NetBSD, OpenBSD, ...
|
215
|
+
BSD 系列
|
216
|
+
|
217
|
+
--------------> Linux
|
206
218
|
//}
|
207
219
|
|
208
220
|
3番目の引数として、画像の倍率・大きさを指定することができます。
|
@@ -218,17 +230,29 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
218
230
|
|
219
231
|
//indepimage[ファイル名][キャプション] で番号が振られていない画像ファイルを生成します。キャプションは省略できます。
|
220
232
|
|
221
|
-
|
233
|
+
例:
|
222
234
|
|
223
235
|
//indepimage[unixhistory2]
|
224
236
|
|
225
237
|
同様のことは、//numberlessimageでも使えます。
|
226
238
|
|
227
|
-
|
239
|
+
例:
|
228
240
|
|
229
241
|
//numberlessimage[door_image_path][扉絵]
|
230
242
|
|
231
|
-
※ただし、//indepimageと機能的にかぶっているので、将来は廃止され、//
|
243
|
+
※ただし、//indepimageと機能的にかぶっているので、将来は廃止され、//indepimageに統合される予定です。
|
244
|
+
|
245
|
+
== グラフ表現ツールを使った図
|
246
|
+
|
247
|
+
//graph[ファイル名][コマンド名][キャプション] で各種グラフ表現ツールを使った画像ファイルの生成ができます。キャプションは省略できます。
|
248
|
+
|
249
|
+
例: gnuplotの使用
|
250
|
+
|
251
|
+
//graph[sin_x][gnuplot]{
|
252
|
+
plot sin(x)
|
253
|
+
//}
|
254
|
+
|
255
|
+
コマンド名には、「graphviz」「gnuplot」「blockdiag」「aafigure」のいずれかを指定できます。ツールはそれぞれ別途インストールする必要があります。
|
232
256
|
|
233
257
|
== 表
|
234
258
|
|
@@ -240,7 +264,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
240
264
|
付けてください。例えば「.」という内容のカラムは「..」と書きます。
|
241
265
|
また、空のカラムは「.」と書けます。
|
242
266
|
|
243
|
-
|
267
|
+
例:
|
244
268
|
|
245
269
|
//table[envvars][重要な環境変数]{
|
246
270
|
名前 意味
|
@@ -265,7 +289,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
265
289
|
|
266
290
|
引用は「//quote{ 〜 //}」を使って記述します。
|
267
291
|
|
268
|
-
|
292
|
+
例:
|
269
293
|
|
270
294
|
//quote{
|
271
295
|
百聞は一見に如かず。
|
@@ -278,7 +302,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
278
302
|
|
279
303
|
脚注は「//footnote」を使って記述します。
|
280
304
|
|
281
|
-
|
305
|
+
例:
|
282
306
|
|
283
307
|
パッケージは本書のサポートサイトから入手できます@<fn>{site}。
|
284
308
|
各自ダウンロードしてインストールしておいてください。
|
@@ -294,7 +318,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
294
318
|
コメントが無い場合も定義可能です。
|
295
319
|
//bibpaper[site][キャプション]
|
296
320
|
|
297
|
-
|
321
|
+
例:
|
298
322
|
|
299
323
|
//bibpaper[lins][Lins, 1991]{
|
300
324
|
Refael D. Lins. A shared memory architecture for parallel study of
|
@@ -305,7 +329,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
305
329
|
|
306
330
|
本文中で参考文献を参照したい場合は次のようにしてください。
|
307
331
|
|
308
|
-
|
332
|
+
例:
|
309
333
|
|
310
334
|
…という研究が知られています(@<bib>{lins})
|
311
335
|
|
@@ -314,7 +338,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
314
338
|
リード文は //lead{ 〜 //} で指定します。
|
315
339
|
歴史的経緯により//read{ 〜 //} でも使えます。
|
316
340
|
|
317
|
-
|
341
|
+
例:
|
318
342
|
|
319
343
|
//lead{
|
320
344
|
本章ではまずこの本の概要について話し、
|
@@ -325,7 +349,7 @@ RD や各種 Wiki の文法をとりいれて簡素化しています。
|
|
325
349
|
|
326
350
|
LaTeX の式を挿入するには、//texequation{ 〜 //} を使います。
|
327
351
|
|
328
|
-
|
352
|
+
例:
|
329
353
|
|
330
354
|
//texequation{
|
331
355
|
\sum_{i=1}^nf_n(x)
|
@@ -345,16 +369,42 @@ LaTeX の式を挿入するには、//texequation{ 〜 //} を使います。
|
|
345
369
|
|
346
370
|
最終結果に出力されないコメントを記述したい場合は「#@#」を使ってください。
|
347
371
|
|
348
|
-
|
372
|
+
例:
|
349
373
|
|
350
374
|
#@# ここで 1 行あける
|
351
375
|
|
352
376
|
また、修正が必要な警告的コメントには#@warn(...)を使ってください。
|
353
377
|
|
354
|
-
|
378
|
+
例:
|
355
379
|
|
356
380
|
#@warn(あとで書く)
|
357
381
|
|
382
|
+
== 生データ行
|
383
|
+
|
384
|
+
ReVIEW のタグ範囲を越えて何か特別な行を挿入したい場合、//raw を使います。
|
385
|
+
|
386
|
+
例:
|
387
|
+
|
388
|
+
//raw[|html|<div class="special">\nここは特別な行です。\n</div>]
|
389
|
+
|
390
|
+
「|ビルダ名|そのまま出力させる内容」という書式です。
|
391
|
+
|
392
|
+
ビルダ名には「html」「latex」「idgxml」「top」のいずれかが入り、(複数のビルダにまたがる指定が必要かは別として)「,」で区切って複数指定することも可能です。
|
393
|
+
「バックスラッシュ+n」は改行に変換されます。
|
394
|
+
該当のビルダを使用しているときのみ、内容が出力されます。
|
395
|
+
|
396
|
+
例:
|
397
|
+
|
398
|
+
(HTMLビルダの場合:)
|
399
|
+
<div class="special">
|
400
|
+
ここは特別な行です。
|
401
|
+
</div>
|
402
|
+
|
403
|
+
(ほかのビルダの場合は単に無視されて何も出力されない)
|
404
|
+
|
405
|
+
//raw およびこの後に紹介する @<raw> インラインタグは、誤った内容を入れると
|
406
|
+
構造化文書を容易に破壊し得ることに注意してください。
|
407
|
+
|
358
408
|
== その他の文法
|
359
409
|
|
360
410
|
ReVIEW は任意のブロックを追加可能なので、本によって専用ブロックを
|
@@ -389,7 +439,7 @@ ReVIEW は任意のブロックを追加可能なので、本によって専用
|
|
389
439
|
@<icon>{samplephoto}:: インライン画像。
|
390
440
|
@<uchar>{2460}:: Unicode文字の出力。引数は16進数で指定する。
|
391
441
|
@<href>{http://www.google.com/}:: リンク。URLで指定できる
|
392
|
-
@<raw>{
|
442
|
+
@<raw>{|ビルダ名|<span>★</span>}:: そのまま出力する。「}」は「バックスラッシュ+}」でエスケープする。ビルダ名は「html」「latex」「idgxml」「top」のいずれかで、「,」で区切って複数指定することも可能。該当のビルダを使用時のみ、出力される。内容に「バックスラッシュ+n」を入れると改行に変換される。
|
393
443
|
|
394
444
|
== 著者用タグ (プリプロセッサ命令)
|
395
445
|
|
@@ -409,13 +459,7 @@ ReVIEW は任意のブロックを追加可能なので、本によって専用
|
|
409
459
|
CHAPSファイルが置かれているディレクトリに layouts/layout.erb
|
410
460
|
を置くとその html を ERB で評価します。
|
411
461
|
|
412
|
-
|
413
|
-
|
414
|
-
<html>
|
415
|
-
<head>
|
416
|
-
<title><%= title %></title>
|
417
|
-
</head>
|
418
|
-
[例]
|
462
|
+
例:
|
419
463
|
|
420
464
|
<html>
|
421
465
|
<head>
|
@@ -432,7 +476,7 @@ CHAPSファイルが置かれているディレクトリに layouts/layout.erb
|
|
432
476
|
PART ファイルに定義してください。
|
433
477
|
PART ファイルは CHAPS の部わけと対応しています。
|
434
478
|
|
435
|
-
|
479
|
+
例:
|
436
480
|
|
437
481
|
CHAPS:
|
438
482
|
intro.re
|
@@ -451,13 +495,13 @@ PART:
|
|
451
495
|
見出し番号と見出しを生成します。
|
452
496
|
見出しの階層は"|"で区切って指定してください。
|
453
497
|
|
454
|
-
|
498
|
+
例:
|
455
499
|
|
456
500
|
@<hd>{はじめに|まずわ}
|
457
501
|
|
458
502
|
他の章を参照したい場合は、先頭に章のidを指定してください。
|
459
503
|
|
460
|
-
|
504
|
+
例:
|
461
505
|
|
462
506
|
@<hd>{preface|はじめに|まずわ}
|
463
507
|
|
@@ -468,10 +512,31 @@ Web ハイパーリンクを記述するには、リンクに @<href>、アン
|
|
468
512
|
省略すると URL がそのまま使われます。URL 中に , を使いたいときには、\,
|
469
513
|
と表記してください。
|
470
514
|
|
471
|
-
|
515
|
+
例:
|
472
516
|
|
473
517
|
@<href>{http://github.com/, GitHub}
|
474
518
|
@<href>{http://www.google.com/}
|
475
519
|
@<href>{#point1, ドキュメント内ポイント}
|
476
520
|
@<href>{chap1.html#point1, ドキュメント内ポイント}
|
477
521
|
//label[point1]
|
522
|
+
|
523
|
+
== 国際化(i18n)
|
524
|
+
|
525
|
+
ReVIEWが出力する文字列(「第◯章」「図」「表」など)を、指定した言語に
|
526
|
+
合わせて出力することができます。デフォルトは日本語です。
|
527
|
+
|
528
|
+
CHAPS などと同じディレクトリに locale.yaml というファイルを用意して、
|
529
|
+
以下のように記述します(日本語の場合)。
|
530
|
+
|
531
|
+
例:
|
532
|
+
|
533
|
+
locale: ja
|
534
|
+
|
535
|
+
既存の表記を書き換えたい場合は、該当する項目を上書きします。
|
536
|
+
既存の設定ファイルは lib/review/i18n.yaml にあります。
|
537
|
+
|
538
|
+
例:
|
539
|
+
|
540
|
+
locale: ja
|
541
|
+
image: イメージ
|
542
|
+
table: テーブル
|