review-retrovert 0.9.7 → 0.9.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.dockerignore +9 -0
- data/.editorconfig +3 -0
- data/.github/workflows/retrovert.yml +20 -5
- data/.gitignore +1 -0
- data/.vscode/launch.json +48 -0
- data/Gemfile.lock +13 -4
- data/Makefile +24 -0
- data/docker/review.Dockerfile +10 -0
- data/lib/review/retrovert/converter.rb +374 -111
- data/lib/review/retrovert/reviewcompat.rb +57 -0
- data/lib/review/retrovert/reviewdef.rb +70 -0
- data/lib/review/retrovert/sty/{ird.sty → ird.sty.erb} +9 -1
- data/lib/review/retrovert/sty/review-retrovert-custom.sty.erb +6 -0
- data/lib/review/retrovert/utils.rb +35 -0
- data/lib/review/retrovert/version.rb +1 -1
- data/lib/review/retrovert/yamlconfig.rb +0 -1
- data/package-lock.json +6 -0
- data/package.json +1 -0
- data/review-retrovert.gemspec +5 -1
- data/testdata/mybook/.gitignore +3 -1
- data/testdata/mybook/.textlintrc +11 -0
- data/testdata/mybook/Rakefile +8 -0
- data/testdata/mybook/catalog.yml +36 -10
- data/testdata/mybook/config-starter.yml +134 -9
- data/testdata/mybook/config.yml +44 -15
- data/testdata/mybook/contents/00-preface.re +48 -2
- data/testdata/mybook/contents/01-install.re +38 -5
- data/testdata/mybook/contents/02-tutorial.re +333 -113
- data/testdata/mybook/contents/03-syntax.re +2370 -373
- data/testdata/mybook/contents/04-customize.re +424 -88
- data/testdata/mybook/contents/05-faq.re +288 -10
- data/testdata/mybook/contents/06-bestpractice.re +431 -59
- data/testdata/mybook/contents/91-compare.re +402 -2
- data/testdata/mybook/contents/92-filelist.re +14 -8
- data/testdata/mybook/contents/93-background.re +10 -10
- data/testdata/mybook/contents/99-postface.re +2 -1
- data/testdata/mybook/contents/r0-root.re +1 -1
- data/testdata/mybook/css/webstyle.css +180 -2
- data/testdata/mybook/data/terms.txt +3 -0
- data/testdata/mybook/data/words.txt +15 -0
- data/testdata/mybook/images/03-syntax/index-page.png +0 -0
- data/testdata/mybook/images/03-syntax/order-detail.png +0 -0
- data/testdata/mybook/images/04-customize/section_decoration_samples.png +0 -0
- data/testdata/mybook/images/05-faq/dummy-image.png +0 -0
- data/testdata/mybook/images/06-bestpractice/section_title_wlines.png +0 -0
- data/testdata/mybook/images/avatar-b.png +0 -0
- data/testdata/mybook/images/avatar-g.png +0 -0
- data/testdata/mybook/images/avatar-r.png +0 -0
- data/testdata/mybook/images/caution-icon.png +0 -0
- data/testdata/mybook/images/info-icon.png +0 -0
- data/testdata/mybook/images/warning-icon.png +0 -0
- data/testdata/mybook/layouts/layout.html5.erb +3 -1
- data/testdata/mybook/layouts/layout.tex.erb +265 -379
- data/testdata/mybook/layouts/layout.tex.erb.orig +386 -0
- data/testdata/mybook/lib/ruby/review-book.rb +64 -0
- data/testdata/mybook/lib/ruby/review-builder.rb +902 -63
- data/testdata/mybook/lib/ruby/review-compiler.rb +675 -22
- data/testdata/mybook/lib/ruby/review-epubbuilder.rb +33 -0
- data/testdata/mybook/lib/ruby/review-epubmaker.rb +10 -7
- data/testdata/mybook/lib/ruby/review-htmlbuilder.rb +354 -66
- data/testdata/mybook/lib/ruby/review-latexbuilder.rb +429 -146
- data/testdata/mybook/lib/ruby/review-maker.rb +117 -6
- data/testdata/mybook/lib/ruby/review-markdownbuilder.rb +945 -0
- data/testdata/mybook/lib/ruby/review-markdownmaker.rb +91 -0
- data/testdata/mybook/lib/ruby/review-monkeypatch.rb +2 -0
- data/testdata/mybook/lib/ruby/review-pdfmaker.rb +160 -82
- data/testdata/mybook/lib/ruby/review-webmaker.rb +20 -5
- data/testdata/mybook/lib/tasks/review.rake +14 -0
- data/testdata/mybook/lib/tasks/starter.rake +148 -4
- data/testdata/mybook/sty/indexstyle.ist +25 -0
- data/testdata/mybook/sty/mytextsize.sty +29 -0
- data/testdata/mybook/sty/mytitlepage.sty +34 -11
- data/testdata/mybook/sty/review-base.sty +276 -0
- data/testdata/mybook/sty/starter-codeblock.sty +237 -106
- data/testdata/mybook/sty/starter-color.sty +72 -17
- data/testdata/mybook/sty/starter-heading.sty +60 -13
- data/testdata/mybook/sty/starter-misc.sty +894 -0
- data/testdata/mybook/sty/starter-note.sty +67 -14
- data/testdata/mybook/sty/starter-talklist.sty +105 -0
- data/testdata/mybook/sty/starter-util.sty +35 -0
- data/testdata/mybook/sty/starter.sty +8 -526
- metadata +80 -4
@@ -82,7 +82,9 @@ module ReVIEW
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def build_part(part, htmlfile)
|
85
|
-
new_renderer().render_part(part
|
85
|
+
html = new_renderer().render_part(part)
|
86
|
+
filepath = File.join(@docroot, htmlfile)
|
87
|
+
File.write(filepath, html)
|
86
88
|
end
|
87
89
|
|
88
90
|
def build_chap(chap, base_path, ispart)
|
@@ -101,9 +103,11 @@ module ReVIEW
|
|
101
103
|
#
|
102
104
|
begin
|
103
105
|
@converter.convert(filename, File.join(@docroot, htmlfile))
|
104
|
-
|
106
|
+
## 文法エラーだけキャッチし、それ以外のエラーはキャッチしないよう変更
|
107
|
+
#rescue => ex
|
108
|
+
rescue ApplicationError => ex
|
105
109
|
warn "compile error in #{filename} (#{ex.class})"
|
106
|
-
warn ex.message
|
110
|
+
warn colored_errmsg(ex.message)
|
107
111
|
generate_errorpage(ex, filename, htmlfile)
|
108
112
|
end
|
109
113
|
end
|
@@ -206,6 +210,11 @@ module ReVIEW
|
|
206
210
|
|
207
211
|
class WEBBuilder < HTMLBuilder
|
208
212
|
|
213
|
+
def target_name
|
214
|
+
#"web"
|
215
|
+
"html"
|
216
|
+
end
|
217
|
+
|
209
218
|
def layoutfile
|
210
219
|
"layouts/layout.html5.erb"
|
211
220
|
end
|
@@ -242,8 +251,14 @@ module ReVIEW
|
|
242
251
|
#
|
243
252
|
sb = ""
|
244
253
|
sb << "<div class=\"part\">\n"
|
245
|
-
sb << "<h1 class=\"part-number\">#{i18n('part', part.number)}</h1>\n"
|
246
|
-
sb << "<h2 class=\"part-title\">#{part_name}</h2>\n" if part_name.present?
|
254
|
+
sb << "<h1 class=\"part-number\">#{h i18n('part', part.number)}</h1>\n"
|
255
|
+
sb << "<h2 class=\"part-title\">#{h part_name}</h2>\n" if part_name.present?
|
256
|
+
sb << "<ul>\n"
|
257
|
+
part.chapters.each do |c|
|
258
|
+
htmlfile = c.path.sub(/\.re\z/, ".#{@config['htmlext']}")
|
259
|
+
sb << " <li><a href=\"#{h htmlfile}\">第#{h c.number}章 #{h c.title}</a></li>\n"
|
260
|
+
end
|
261
|
+
sb << "</ul>\n"
|
247
262
|
sb << "</div>\n"
|
248
263
|
@body = sb
|
249
264
|
#
|
@@ -23,6 +23,18 @@ def config_file()
|
|
23
23
|
return conf
|
24
24
|
end
|
25
25
|
|
26
|
+
def setup_envvars()
|
27
|
+
{
|
28
|
+
'c' => 'STARTER_CHAPTER',
|
29
|
+
't' => 'STARTER_TARGET',
|
30
|
+
'n' => 'STARTER_COMPILETIMES',
|
31
|
+
'd' => 'STARTER_DRAFT',
|
32
|
+
}.each do |char, name|
|
33
|
+
v = ENV.delete(char)
|
34
|
+
ENV[name] = v if v && !v.empty?
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
26
38
|
task default: :html_all
|
27
39
|
|
28
40
|
desc 'build html (Usage: rake build re=target.re)'
|
@@ -55,6 +67,8 @@ task :pdf => :prepare do
|
|
55
67
|
#require 'review/pdfmaker'
|
56
68
|
require './lib/ruby/review-pdfmaker'
|
57
69
|
#
|
70
|
+
setup_envvars() # ex: `c=01-install` => ENV['STARTER_CHAPTER']='01-install'
|
71
|
+
#
|
58
72
|
FileUtils.rm_rf [BOOK_PDF, BOOK, BOOK + '-pdf']
|
59
73
|
begin
|
60
74
|
ReVIEW::PDFMaker.execute(config_file())
|
@@ -25,8 +25,6 @@ namespace :docker do
|
|
25
25
|
|
26
26
|
docker_image = ENV['DOCKER_IMAGE']
|
27
27
|
docker_image = "kauplan/review2.5" if docker_image.to_s.empty?
|
28
|
-
docker_opts = "--rm -v $PWD:/work -w /work"
|
29
|
-
docker_opts += ENV.keys().grep(/^STARTER_/).map {|k| " -e #{k}" }.join()
|
30
28
|
|
31
29
|
desc "+ pull docker image for building PDF file"
|
32
30
|
task :setup do
|
@@ -34,11 +32,16 @@ namespace :docker do
|
|
34
32
|
end
|
35
33
|
|
36
34
|
docker_run = proc do |command, opt=nil|
|
35
|
+
docker_opts = "--rm -v $PWD:/work -w /work"
|
36
|
+
docker_opts += ENV.keys().grep(/^STARTER_/).map {|k| " -e #{k}" }.join()
|
37
37
|
sh "docker run #{docker_opts} #{opt} #{docker_image} #{command}"
|
38
38
|
end
|
39
39
|
|
40
40
|
desc "+ run 'rake pdf' on docker"
|
41
|
-
task :pdf do
|
41
|
+
task :pdf do
|
42
|
+
setup_envvars() # defined in 'review.rake'
|
43
|
+
docker_run.call('rake pdf')
|
44
|
+
end
|
42
45
|
|
43
46
|
desc "+ run 'rake pdf:nombre' on docker"
|
44
47
|
task :'pdf:nombre' do docker_run.call('rake pdf:nombre') end
|
@@ -56,6 +59,115 @@ namespace :docker do
|
|
56
59
|
docker_run.call('rake web:server', opt)
|
57
60
|
end
|
58
61
|
|
62
|
+
desc "+ run 'rake markdown' on docker"
|
63
|
+
task :markdown do docker_run.call('rake markdown') end
|
64
|
+
|
65
|
+
desc "+ run 'rake textlint' on docker"
|
66
|
+
task :textlint do docker_run.call('rake textlint') end
|
67
|
+
|
68
|
+
desc "+ run 'rake textlint:setup' on docker"
|
69
|
+
task :'textlint:setup' do docker_run.call('rake textlint:setup') end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
##
|
75
|
+
## 初期設定
|
76
|
+
##
|
77
|
+
namespace :setup do
|
78
|
+
|
79
|
+
desc "+ install rubygems packages"
|
80
|
+
task :rubygems do
|
81
|
+
if ENV['GEM_HOME'].to_s.empty?
|
82
|
+
ENV['GEM_HOME'] = File.join(Dir.pwd, 'rubygems')
|
83
|
+
mkdir_p 'rubygems'
|
84
|
+
end
|
85
|
+
ruby_version = RUBY_VERSION.split('.').map(&:to_i) # ex: "2.5.0" -> [2, 5, 0]
|
86
|
+
rubyzip_requires = [2, 4, 0] # rubyzip >= 2.0 requires Ruby >= 2.4
|
87
|
+
ruby_too_old = (ruby_version <=> rubyzip_requires) < 0
|
88
|
+
sh "gem install rubyzip --version 1.3" if ruby_too_old
|
89
|
+
sh "gem install review --version 2.5"
|
90
|
+
end
|
91
|
+
|
92
|
+
desc "+ download docker image"
|
93
|
+
task :dockerimage do
|
94
|
+
sh "docker pull kauplan/review2.5"
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
##
|
101
|
+
## Markdownに変換する(主にtextlistを使うため)
|
102
|
+
##
|
103
|
+
desc "+ convert '*.re' files into '*.md'"
|
104
|
+
task :markdown => :prepare do
|
105
|
+
require 'review'
|
106
|
+
require './lib/ruby/review-markdownmaker'
|
107
|
+
#
|
108
|
+
setup_envvars() # ex: `c=01-install` => ENV['STARTER_CHAPTER']='01-install'
|
109
|
+
#
|
110
|
+
begin
|
111
|
+
builddir = ReVIEW::MarkdownMaker.execute(config_file())
|
112
|
+
$_builddir = builddir
|
113
|
+
rescue RuntimeError => ex
|
114
|
+
if ex.message =~ /^failed to run command:/
|
115
|
+
abort "*\n* ERROR (review-pdfmaker):\n* #{ex.message}\n*"
|
116
|
+
else
|
117
|
+
raise
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
##
|
124
|
+
## textlintを実行する
|
125
|
+
##
|
126
|
+
task :textlint => :markdown do
|
127
|
+
builddir = $_builddir
|
128
|
+
textlint_path = "./node_modules/.bin/textlint"
|
129
|
+
if File.exist?(textlint_path)
|
130
|
+
sh "#{textlint_path} #{builddir}/*.md"
|
131
|
+
else
|
132
|
+
sh "textlint #{builddir}/*.md"
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
|
137
|
+
namespace :textlint do
|
138
|
+
|
139
|
+
## see:
|
140
|
+
## - https://github.com/textlint/textlint
|
141
|
+
## - https://github.com/textlint/textlint/wiki/Collection-of-textlint-rule#rule-presets-japanese
|
142
|
+
task :setup do
|
143
|
+
require 'json'
|
144
|
+
rcfile = ".textlintrc"
|
145
|
+
rcdata = File.open(rcfile, encoding: 'utf-8') {|f| JSON.load(f) }
|
146
|
+
keys = ['filters', 'rules']
|
147
|
+
#
|
148
|
+
failed = false
|
149
|
+
sh "npm --version" do |ok, _| failed = !ok end
|
150
|
+
if failed
|
151
|
+
$stderr.puts <<END
|
152
|
+
**
|
153
|
+
** ERROR: `npm' command not installed.
|
154
|
+
**
|
155
|
+
** Please install Node.js (and npm) at first.
|
156
|
+
**
|
157
|
+
END
|
158
|
+
exit 1
|
159
|
+
end
|
160
|
+
#
|
161
|
+
sh "npm init --yes"
|
162
|
+
sh "npm install --save-dev textlint"
|
163
|
+
keys.each do |key|
|
164
|
+
rcdata[key].each do |name, enabled|
|
165
|
+
next unless enabled
|
166
|
+
sh "npm install --save-dev textlint-rule-#{name}"
|
167
|
+
end if rcdata[key]
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
59
171
|
end
|
60
172
|
|
61
173
|
|
@@ -66,6 +178,21 @@ end
|
|
66
178
|
##
|
67
179
|
namespace :pdf do
|
68
180
|
|
181
|
+
color2rgb = {
|
182
|
+
'black' => [0.0, 0.0, 0.0],
|
183
|
+
'white' => [1.0, 1.0, 1.0],
|
184
|
+
'red' => [1.0, 0.0, 0.0],
|
185
|
+
'green' => [0.0, 1.0, 0.0],
|
186
|
+
'blue' => [0.0, 0.0, 1.0],
|
187
|
+
'cyan' => [0.0, 1.0, 1.0],
|
188
|
+
'magenta' => [1.0, 0.0, 1.0],
|
189
|
+
'yellow' => [1.0, 1.0, 0.0],
|
190
|
+
#
|
191
|
+
'gray' => [0.50, 0.50, 0.50],
|
192
|
+
'darkgray' => [0.25, 0.25, 0.25],
|
193
|
+
'lightgray' => [0.75, 0.75, 0.75],
|
194
|
+
}
|
195
|
+
|
69
196
|
desc "+ add nombre (rake pdf:nombre [file=*.pdf] [out=*.pdf])"
|
70
197
|
task :nombre do
|
71
198
|
infile = ENV['file']; infile = nil if infile && infile.empty?
|
@@ -77,6 +204,23 @@ namespace :pdf do
|
|
77
204
|
abort "ERROR: 'combine_pdf' gem not installed; please run `gem install combine_pdf` at first."
|
78
205
|
end
|
79
206
|
#
|
207
|
+
nombre_opts = proc {
|
208
|
+
require 'yaml'
|
209
|
+
conffile = 'config-starter.yml'
|
210
|
+
confdict = File.open(conffile, encoding: 'utf-8') {|f| YAML.load(f) }
|
211
|
+
d = confdict['starter']
|
212
|
+
mm2pt = 72.0 / 25.4 # 1 pt == 1/72 inch, 1 inch == 25.4 mm
|
213
|
+
{
|
214
|
+
:start => d['nombre_startnumber'],
|
215
|
+
:margin_h => d['nombre_bottommargin'].to_f * mm2pt,
|
216
|
+
:margin_w => d['nombre_sidemargin'].to_f * mm2pt,
|
217
|
+
:font => nil,
|
218
|
+
:size => d['nombre_fontsize'].to_i,
|
219
|
+
:color => color2rgb[d['nombre_fontcolor']],
|
220
|
+
:binding => nil,
|
221
|
+
}
|
222
|
+
}.call()
|
223
|
+
#
|
80
224
|
class CombinePDF::PDF
|
81
225
|
def add_nombre(options={})
|
82
226
|
start = options[:start] || 1
|
@@ -131,7 +275,7 @@ namespace :pdf do
|
|
131
275
|
#pdf.add_nombre()
|
132
276
|
#File.binwrite(outfile, pdf.to_pdf())
|
133
277
|
pdf = CombinePDF.load(infile)
|
134
|
-
pdf.add_nombre()
|
278
|
+
pdf.add_nombre(nombre_opts)
|
135
279
|
pdf.save(outfile)
|
136
280
|
end
|
137
281
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
##
|
2
|
+
## LaTeXでの索引生成コマンド mendex (upmendex) の設定
|
3
|
+
##
|
4
|
+
|
5
|
+
## 用語とページ番号との間をピリオドで埋める
|
6
|
+
delim_0 "\\quad\\dotfill ~"
|
7
|
+
delim_1 "\\quad\\dotfill ~"
|
8
|
+
delim_2 "\\quad\\dotfill ~"
|
9
|
+
|
10
|
+
## 用語とページ番号との間を空白で埋める
|
11
|
+
#delim_0 "\\quad\\hfill"
|
12
|
+
#delim_1 "\\quad\\hfill"
|
13
|
+
#delim_2 "\\quad\\hfill"
|
14
|
+
|
15
|
+
## 索引に見出しをつける
|
16
|
+
## (mendex のデフォルトでは見出しが「あ い う え お か ...」になる。
|
17
|
+
## これを「あ か さ た な は ...」にするには、config.yml の
|
18
|
+
## `makeindex_options:` オプションに「-g」を含める。)
|
19
|
+
heading_flag 1
|
20
|
+
letter_head 2
|
21
|
+
|
22
|
+
## 見出しを囲うLaTeXコマンド
|
23
|
+
#heading_prefix "{\\bfseries\\gtfamily\\sffamily ■"
|
24
|
+
heading_prefix "\\starterindexgroup{"
|
25
|
+
heading_suffix "}"
|
@@ -59,3 +59,32 @@
|
|
59
59
|
\addtolength{\topmargin}{-2\Cvs} % ページ上部の余白を2行分減らす
|
60
60
|
\addtolength{\textheight}{2\Cvs} % ページ本文の高さを2行分増やす
|
61
61
|
\addtolength{\headsep}{1mm}
|
62
|
+
|
63
|
+
|
64
|
+
%% 塗り足し幅が設定されていて、かつ印刷用PDFの場合
|
65
|
+
\if@pbook
|
66
|
+
\ifx\starter@bleedsize\empty\else
|
67
|
+
%% 塗り足しの分だけ、本文をずらす
|
68
|
+
\setlength{\@tempdimb}{\starter@bleedsize}
|
69
|
+
\addtolength{\oddsidemargin}{\@tempdimb} % 右ページを右にずらす
|
70
|
+
\addtolength{\evensidemargin}{\@tempdimb} % 左ページも右にずらす
|
71
|
+
\addtolength{\topmargin}{\@tempdimb} % 左右のページを下にずらす
|
72
|
+
%% 塗り足しの分だけ、ページサイズを増やす
|
73
|
+
\setlength{\@tempdimc}{2\@tempdimb}
|
74
|
+
\addtolength{\paperwidth}{\@tempdimc} % ページ幅を増やす
|
75
|
+
\addtolength{\paperheight}{\@tempdimc} % ページ高さを増やす
|
76
|
+
%% 塗り足しの分だけ、PDFの縦横サイズを増やす
|
77
|
+
\def\@tempa{A5}
|
78
|
+
\ifx\starter@pagesize\@tempa
|
79
|
+
\AtBeginDvi{\special{papersize=154mm,216mm}} % A5 (148x210mm)
|
80
|
+
\fi
|
81
|
+
\def\@tempb{B5}
|
82
|
+
\ifx\starter@pagesize\tempb
|
83
|
+
\AtBeginDvi{\special{papersize=188mm,263mm}} % B5 (182x257mm)
|
84
|
+
\fi
|
85
|
+
\def\@tempc{A4}
|
86
|
+
\ifx\starter@pagesize\tempc
|
87
|
+
\AtBeginDvi{\special{papersize=216mm,303mm}} % A4 (210x297mm)
|
88
|
+
\fi
|
89
|
+
\fi
|
90
|
+
\fi
|
@@ -3,7 +3,7 @@
|
|
3
3
|
%%%
|
4
4
|
|
5
5
|
\usepackage{afterpage} % for '\afterpage'
|
6
|
-
\usepackage
|
6
|
+
\usepackage{pagecolor} % for '\newpagecolor'
|
7
7
|
|
8
8
|
%% 背景色を指定
|
9
9
|
%\definecolor{starter@titlepagecolor}{gray}{0.90} % 薄いグレー
|
@@ -40,7 +40,7 @@
|
|
40
40
|
{
|
41
41
|
\Large % フォントサイズを大きめに
|
42
42
|
{\rmfamily ---}~ % ローマン体で「--」
|
43
|
-
\@subtitle
|
43
|
+
\@subtitle{}% % サブタイトル
|
44
44
|
~{\rmfamily ---} % ローマン体で「--」
|
45
45
|
\par % 段落を区切る(デザイン崩れを防ぐため)
|
46
46
|
}
|
@@ -51,15 +51,38 @@
|
|
51
51
|
%\rmfamily % ローマン体(英語)
|
52
52
|
\normalfont % デフォルトの書体
|
53
53
|
|
54
|
-
%%
|
55
|
-
|
56
|
-
\
|
57
|
-
{
|
58
|
-
\
|
59
|
-
\@
|
60
|
-
|
61
|
-
|
62
|
-
|
54
|
+
%% 著者、翻訳者、監修者
|
55
|
+
{
|
56
|
+
\Large % 大きめのフォントに変更
|
57
|
+
\newcommand{\@render@who}[2]{{
|
58
|
+
\edef\@tempa{##2} % 第2引数を一時変数に代入
|
59
|
+
\ifx\@tempa\empty\else % 第2引数が空でなければ、
|
60
|
+
[##1]##2 % 第1引数とともに表示する
|
61
|
+
\fi
|
62
|
+
}}
|
63
|
+
\def\render@bookauthor{\@render@who{著}{\book@author}} % 著者
|
64
|
+
\def\render@booktranslator{\@render@who{訳}{\book@translator}} % 翻訳者
|
65
|
+
\def\render@booksupervisor{\@render@who{監修}{\book@supervisor}} % 監修者
|
66
|
+
%% その中でいちばん長い表示幅を調べる
|
67
|
+
%% (テキストが複数行だと \settowidth が表示幅をうまく取得できない。
|
68
|
+
%% 仕方ないので1行ずつ調べて長さを比較し、いちばん長いものを選ぶ。)
|
69
|
+
\setlength{\@tempdimb}{0pt}
|
70
|
+
\settowidth{\@tempdimc}{\render@bookauthor}
|
71
|
+
\ifdim\@tempdimb<\@tempdimc \setlength{\@tempdimb}{\@tempdimc} \fi
|
72
|
+
\settowidth{\@tempdimc}{\render@booktranslator}
|
73
|
+
\ifdim\@tempdimb<\@tempdimc \setlength{\@tempdimb}{\@tempdimc} \fi
|
74
|
+
\settowidth{\@tempdimc}{\render@booksupervisor}
|
75
|
+
\ifdim\@tempdimb<\@tempdimc \setlength{\@tempdimb}{\@tempdimc} \fi
|
76
|
+
%% 表示幅のボックスを作ると、そのボックスが左右の中央に位置する
|
77
|
+
\ifdim\@tempdimb>0pt
|
78
|
+
\vspace{3\baselineskip} % 縦方向の空き
|
79
|
+
\parbox[t]{\@tempdimb}{{ % 表示幅のボックスを作る
|
80
|
+
\render@bookauthor\par % 著者
|
81
|
+
\render@booktranslator\par % 翻訳者
|
82
|
+
\render@booksupervisor\par % 監修者
|
83
|
+
}}
|
84
|
+
\fi
|
85
|
+
}
|
63
86
|
|
64
87
|
%% 日付、バージョン、イベント名
|
65
88
|
\vfill % 縦方向のスペース
|
@@ -0,0 +1,276 @@
|
|
1
|
+
% -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
\usepackage{caption}
|
4
|
+
\usepackage{suffix}
|
5
|
+
\usepackage[T1]{fontenc}
|
6
|
+
\usepackage{textcomp}%T1/TS1
|
7
|
+
%\usepackage{lmodern}
|
8
|
+
\usepackage{framed}
|
9
|
+
\usepackage{wrapfig}
|
10
|
+
\definecolor{shadecolor}{gray}{0.9}
|
11
|
+
\definecolor{shadecolorb}{gray}{0.1}
|
12
|
+
\definecolor{reviewgreen}{rgb}{0,0.4,0}
|
13
|
+
\definecolor{reviewblue}{rgb}{0.2,0.2,0.4}
|
14
|
+
\definecolor{reviewred}{rgb}{0.7,0,0}
|
15
|
+
\definecolor{reviewdarkred}{rgb}{0.3,0,0}
|
16
|
+
\usepackage[utf8]{inputenc}
|
17
|
+
\usepackage{ascmac}
|
18
|
+
\usepackage{float}
|
19
|
+
\usepackage{alltt}
|
20
|
+
\usepackage{amsmath}
|
21
|
+
|
22
|
+
%% if you use @<u>{} (underline), use jumoline.sty
|
23
|
+
\IfFileExists{jumoline.sty}{
|
24
|
+
\usepackage{jumoline}
|
25
|
+
}
|
26
|
+
|
27
|
+
\newenvironment{shadedb}{%
|
28
|
+
\def\FrameCommand{\fboxsep=\FrameSep \colorbox{shadecolorb}}%
|
29
|
+
\MakeFramed {\FrameRestore}}%
|
30
|
+
{\endMakeFramed}
|
31
|
+
|
32
|
+
%\usepackage[top=10zw,bottom=12zw,left=10zw,right=10zw]{geometry}
|
33
|
+
%\usepackage[top=5zw,bottom=5zw,left=1zw,right=1zw]{geometry}
|
34
|
+
|
35
|
+
\newcommand{\parasep}{\vspace*{3zh}}
|
36
|
+
\setlength{\footskip}{30pt}
|
37
|
+
|
38
|
+
%% クラスファイルによっては \headfont が定義されてないので、
|
39
|
+
%% \newcommand ではなく \def を使う。
|
40
|
+
\def\headfont{\gtfamily\sffamily\bfseries}
|
41
|
+
|
42
|
+
|
43
|
+
%% listings
|
44
|
+
\ifx\config@highlight@listings\empty\else
|
45
|
+
%
|
46
|
+
\usepackage{listings}
|
47
|
+
\ifx\config@language@ja\empty\else
|
48
|
+
\usepackage{jlisting}
|
49
|
+
\fi
|
50
|
+
%
|
51
|
+
\renewcommand{\lstlistingname}{\review@t@list}
|
52
|
+
%
|
53
|
+
\lstset{%
|
54
|
+
breaklines=true,%
|
55
|
+
breakautoindent=false,%
|
56
|
+
breakindent=0pt,%
|
57
|
+
fontadjust=true,%
|
58
|
+
backgroundcolor=\color{shadecolor},%
|
59
|
+
frame=single,%
|
60
|
+
framerule=0pt,%
|
61
|
+
basicstyle=\ttfamily\scriptsize,%
|
62
|
+
commentstyle=\color{reviewgreen},%
|
63
|
+
identifierstyle=\color{reviewblue},%
|
64
|
+
stringstyle=\color{reviewred},%
|
65
|
+
keywordstyle=\bfseries\color{reviewdarkred},%
|
66
|
+
}
|
67
|
+
%
|
68
|
+
\lstnewenvironment{reviewemlistlst}[1][]{\lstset{#1}}{}
|
69
|
+
\lstnewenvironment{reviewemlistnumlst}[1][]{\lstset{numbers=left, #1}}{}
|
70
|
+
\lstnewenvironment{reviewlistlst}[1][]{\lstset{#1}}{}
|
71
|
+
\lstnewenvironment{reviewlistnumlst}[1][]{\lstset{numbers=left, #1}}{}
|
72
|
+
\lstnewenvironment{reviewsourcelst}[1][]{\lstset{#1}}{}
|
73
|
+
\lstnewenvironment{reviewsourcenumlst}[1][]{\lstset{numbers=left, #1}}{}
|
74
|
+
\lstnewenvironment{reviewcmdlst}[1][]{\lstset{backgroundcolor=\color{white}, frameround=tttt, frame=trbl, #1}}{}
|
75
|
+
%
|
76
|
+
\fi
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
%%
|
81
|
+
%% マクロ定義
|
82
|
+
%%
|
83
|
+
|
84
|
+
\newenvironment{reviewimage}{%
|
85
|
+
\begin{figure}[H]
|
86
|
+
\begin{center}}{%
|
87
|
+
\end{center}
|
88
|
+
\end{figure}}
|
89
|
+
|
90
|
+
\newenvironment{reviewdummyimage}{%
|
91
|
+
\begin{figure}[H]
|
92
|
+
\begin{center}\begin{alltt}}{%
|
93
|
+
\end{alltt}\end{center}
|
94
|
+
\end{figure}}
|
95
|
+
|
96
|
+
\newcommand{\reviewimagecaption}[1]{%
|
97
|
+
\caption{#1}}
|
98
|
+
|
99
|
+
\newenvironment{reviewemlist}{%
|
100
|
+
\medskip\small\begin{shaded}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
|
101
|
+
\end{alltt}\end{shaded}}
|
102
|
+
|
103
|
+
\newenvironment{reviewlist}{%
|
104
|
+
\begin{shaded}\small\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
|
105
|
+
\end{alltt}\end{shaded}\par\vspace*{0.5zw}}
|
106
|
+
|
107
|
+
\newenvironment{reviewsource}{%
|
108
|
+
\begin{shaded}\small\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
|
109
|
+
\end{alltt}\end{shaded}\par\vspace*{0.5zw}}
|
110
|
+
|
111
|
+
\newenvironment{reviewcmd}{%
|
112
|
+
\color{white}\medskip\small\begin{shadedb}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
|
113
|
+
\end{alltt}\end{shadedb}}
|
114
|
+
|
115
|
+
\newenvironment{reviewbox}{%
|
116
|
+
\medskip\small\begin{framed}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
|
117
|
+
\end{alltt}\end{framed}}
|
118
|
+
|
119
|
+
\newenvironment{reviewtable}[1]{%
|
120
|
+
\begin{center}\small\setlength{\baselineskip}{1.2zw}
|
121
|
+
\begin{tabular}{#1}}{%
|
122
|
+
\end{tabular}
|
123
|
+
\end{center}}
|
124
|
+
|
125
|
+
\newenvironment{reviewcolumn}{%
|
126
|
+
\begin{framed}
|
127
|
+
}{%
|
128
|
+
\end{framed}
|
129
|
+
\vspace{2zw}}
|
130
|
+
|
131
|
+
\newcommand{\reviewtablecaption}[1]{%
|
132
|
+
\caption{#1}}
|
133
|
+
|
134
|
+
\WithSuffix\newcommand\reviewtablecaption*[1]{%
|
135
|
+
\caption*{#1}}
|
136
|
+
|
137
|
+
\newcommand{\reviewimgtablecaption}[1]{%
|
138
|
+
\caption{#1}\vspace{-3mm}}
|
139
|
+
|
140
|
+
\newcommand{\reviewbackslash}[0]{%
|
141
|
+
\textbackslash{}}
|
142
|
+
|
143
|
+
\newcommand{\reviewlistcaption}[1]{%
|
144
|
+
\medskip{\small\noindent #1}\vspace*{-1.3zw}}
|
145
|
+
|
146
|
+
\newcommand{\reviewemlistcaption}[1]{%
|
147
|
+
\medskip{\small\noindent #1}\vspace*{-1.3zw}}
|
148
|
+
|
149
|
+
\newcommand{\reviewsourcecaption}[1]{%
|
150
|
+
\medskip{\small\noindent #1}\vspace*{-1.3zw}}
|
151
|
+
|
152
|
+
\newcommand{\reviewcmdcaption}[1]{%
|
153
|
+
\medskip{\small\noindent #1}\vspace*{-1.3zw}}
|
154
|
+
|
155
|
+
\newcommand{\reviewindepimagecaption}[1]{%
|
156
|
+
\begin{center}#1\end{center}}
|
157
|
+
|
158
|
+
\newcommand{\reviewboxcaption}[1]{%
|
159
|
+
\medskip{\small\noindent #1}\vspace*{-1.3zw}}
|
160
|
+
|
161
|
+
|
162
|
+
\newenvironment{reviewminicolumn}{%
|
163
|
+
\vspace{1.5zw}\begin{screen}}{%
|
164
|
+
\end{screen}\vspace{2zw}}
|
165
|
+
|
166
|
+
\newcommand{\reviewkw}[1]{\textbf{\textgt{#1}}}
|
167
|
+
\newcommand{\reviewami}[1]{\mask{#1}{A}}
|
168
|
+
\newcommand{\reviewem}[1]{\textbf{#1}}
|
169
|
+
\newcommand{\reviewstrong}[1]{\textbf{#1}}
|
170
|
+
\newcommand{\reviewunderline}{\Underline}
|
171
|
+
|
172
|
+
|
173
|
+
%% @<del> is ignored in LaTeX with default style
|
174
|
+
\newcommand{\reviewstrike}[1]{#1}
|
175
|
+
|
176
|
+
%%%% for ulem.sty:
|
177
|
+
%%\renewcommand{\reviewstrike}[1]{\sout{#1}}
|
178
|
+
%%
|
179
|
+
%%%% for jumoline.sty:
|
180
|
+
%%\renewcommand{\reviewstrike}[1]{\Middleline{#1}}
|
181
|
+
|
182
|
+
|
183
|
+
\newcommand{\reviewth}[1]{{\gtfamily\sffamily\bfseries #1}}
|
184
|
+
\newcommand{\reviewtitlefont}[0]{\usefont{T1}{phv}{b}{n}\gtfamily}
|
185
|
+
\newcommand{\reviewmainfont}[0]{}
|
186
|
+
\newcommand{\reviewcolophon}[0]{\clearpage}
|
187
|
+
\newcommand{\reviewappendix}[0]{\appendix}
|
188
|
+
|
189
|
+
|
190
|
+
\ifdefined\prepartname
|
191
|
+
\renewcommand{\prepartname}{\reviewprepartname}
|
192
|
+
\fi
|
193
|
+
\ifdefined\postpartname
|
194
|
+
\renewcommand{\postpartname}{\reviewpostpartname}
|
195
|
+
\fi
|
196
|
+
\ifdefined\prechaptername
|
197
|
+
\renewcommand{\prechaptername}{\reviewprechaptername}
|
198
|
+
\fi
|
199
|
+
\ifdefined\postchaptername
|
200
|
+
\renewcommand{\postchaptername}{\reviewpostchaptername}
|
201
|
+
\fi
|
202
|
+
\ifdefined\figurename
|
203
|
+
\renewcommand{\figurename}{\reviewfigurename}
|
204
|
+
\fi
|
205
|
+
\ifdefined\tablename
|
206
|
+
\renewcommand{\tablename}{\reviewtablename}
|
207
|
+
\fi
|
208
|
+
\ifdefined\appendixname
|
209
|
+
\renewcommand{\appendixname}{\reviewappendixname}
|
210
|
+
\fi
|
211
|
+
|
212
|
+
|
213
|
+
%% maxwidth is the original width if it is less than linewidth
|
214
|
+
%% otherwise use linewidth (to make sure the graphics do not exceed the margin)
|
215
|
+
\def\maxwidth{%
|
216
|
+
\ifdim\Gin@nat@width>\linewidth
|
217
|
+
\linewidth
|
218
|
+
\else
|
219
|
+
\Gin@nat@width
|
220
|
+
\fi
|
221
|
+
}
|
222
|
+
|
223
|
+
|
224
|
+
|
225
|
+
%%
|
226
|
+
%% titlepage
|
227
|
+
%%
|
228
|
+
\newcommand\reviewtitlepage{%
|
229
|
+
\thispagestyle{empty}
|
230
|
+
\begin{center}%
|
231
|
+
\mbox{} \vskip5zw
|
232
|
+
\reviewtitlefont%
|
233
|
+
{\HUGE\bfseries \@title \par}%
|
234
|
+
\ifx\@subtitle\empty\else%
|
235
|
+
\vskip 1em%
|
236
|
+
{\Large {\rmfamily --- } \@subtitle{} {\rmfamily --- } \par}%
|
237
|
+
\fi%
|
238
|
+
\vskip 15em%
|
239
|
+
{\LARGE
|
240
|
+
\lineskip .75em
|
241
|
+
\begin{tabular}[t]{c}%
|
242
|
+
\@author%
|
243
|
+
\end{tabular}\par}%
|
244
|
+
\vfill
|
245
|
+
{\large \@date\par}%
|
246
|
+
\vskip4zw\mbox{}
|
247
|
+
\end{center}%
|
248
|
+
}
|
249
|
+
|
250
|
+
|
251
|
+
%%
|
252
|
+
%% colophon page
|
253
|
+
%%
|
254
|
+
\newcommand\reviewcolophonpage{%
|
255
|
+
\reviewcolophon
|
256
|
+
\thispagestyle{empty}
|
257
|
+
\vspace*{\fill}
|
258
|
+
{\noindent\reviewtitlefont\Large \@title} \\
|
259
|
+
\ifx\@subtitle\empty\else
|
260
|
+
\medskip
|
261
|
+
{\noindent\reviewtitlefont \@subtitle} \\
|
262
|
+
\fi
|
263
|
+
\rule[8pt]{\textwidth}{1pt} \\
|
264
|
+
{\noindent \colophonpubhistory}
|
265
|
+
\medskip
|
266
|
+
%
|
267
|
+
\begin{tabular}{ll}
|
268
|
+
\colophonokuduke
|
269
|
+
\end{tabular}
|
270
|
+
% \\
|
271
|
+
%
|
272
|
+
\medskip
|
273
|
+
\noindent
|
274
|
+
\rule[0pt]{\textwidth}{1pt} \\
|
275
|
+
\colophonrights
|
276
|
+
}
|