review-retrovert 0.2.2 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/retrovert.yml +39 -0
  3. data/.gitignore +2 -2
  4. data/.ruby-version +1 -0
  5. data/Gemfile +1 -0
  6. data/Gemfile.lock +68 -2
  7. data/README.md +6 -3
  8. data/lib/review/retrovert/cli.rb +2 -0
  9. data/lib/review/retrovert/converter.rb +255 -16
  10. data/lib/review/retrovert/version.rb +1 -1
  11. data/review-retrovert.gemspec +1 -1
  12. data/testdata/mybook/.gitignore +7 -0
  13. data/testdata/mybook/README.md +43 -0
  14. data/testdata/mybook/Rakefile +16 -0
  15. data/testdata/mybook/catalog.yml +33 -0
  16. data/testdata/mybook/config-starter.yml +139 -0
  17. data/testdata/mybook/config.yml +375 -0
  18. data/testdata/mybook/contents/00-preface.re +83 -0
  19. data/testdata/mybook/contents/01-install.re +272 -0
  20. data/testdata/mybook/contents/02-tutorial.re +1008 -0
  21. data/testdata/mybook/contents/03-syntax.re +2613 -0
  22. data/testdata/mybook/contents/04-customize.re +728 -0
  23. data/testdata/mybook/contents/05-faq.re +328 -0
  24. data/testdata/mybook/contents/06-bestpractice.re +971 -0
  25. data/testdata/mybook/contents/91-compare.re +18 -0
  26. data/testdata/mybook/contents/92-filelist.re +119 -0
  27. data/testdata/mybook/contents/93-background.re +267 -0
  28. data/testdata/mybook/contents/99-postface.re +38 -0
  29. data/testdata/mybook/css/normalize.css +349 -0
  30. data/testdata/mybook/css/webstyle.css +514 -0
  31. data/testdata/mybook/images/03-syntax/favicon-16x16.png +0 -0
  32. data/testdata/mybook/images/03-syntax/figure_heretop.png +0 -0
  33. data/testdata/mybook/images/03-syntax/tw-icon1.jpg +0 -0
  34. data/testdata/mybook/images/03-syntax/tw-icon2.jpg +0 -0
  35. data/testdata/mybook/images/03-syntax/tw-icon3.jpg +0 -0
  36. data/testdata/mybook/images/03-syntax/tw-icon4.jpg +0 -0
  37. data/testdata/mybook/images/04-customize/caption_pagebreak.png +0 -0
  38. data/testdata/mybook/images/04-customize/chaptitlepage_sample.png +0 -0
  39. data/testdata/mybook/images/05-faq/codeblock_rpadding1.png +0 -0
  40. data/testdata/mybook/images/05-faq/codeblock_rpadding2.png +0 -0
  41. data/testdata/mybook/images/06-bestpractice/figure_heretop.png +0 -0
  42. data/testdata/mybook/images/06-bestpractice/font_beramono.png +0 -0
  43. data/testdata/mybook/images/06-bestpractice/heading_design1.png +0 -0
  44. data/testdata/mybook/images/06-bestpractice/heading_design2.png +0 -0
  45. data/testdata/mybook/images/06-bestpractice/margin_book.png +0 -0
  46. data/testdata/mybook/images/06-bestpractice/multiline-title.png +0 -0
  47. data/testdata/mybook/images/06-bestpractice/preface_numbered.png +0 -0
  48. data/testdata/mybook/images/06-bestpractice/program_border.png +0 -0
  49. data/testdata/mybook/images/06-bestpractice/sechead_design_4.png +0 -0
  50. data/testdata/mybook/images/06-bestpractice/titlepage-samples.png +0 -0
  51. data/testdata/mybook/images/93-background/bug913.png +0 -0
  52. data/testdata/mybook/images/93-background/slide2.png +0 -0
  53. data/testdata/mybook/images/cover_a5.pdf +0 -0
  54. data/testdata/mybook/images/cover_b5.pdf +0 -0
  55. data/testdata/mybook/images/tw-icon.jpg +0 -0
  56. data/testdata/mybook/layouts/layout.epub.erb +29 -0
  57. data/testdata/mybook/layouts/layout.html5.erb +106 -0
  58. data/testdata/mybook/layouts/layout.tex.erb +546 -0
  59. data/testdata/mybook/lib/hooks/beforetexcompile.rb +55 -0
  60. data/testdata/mybook/lib/ruby/review-builder.rb +503 -0
  61. data/testdata/mybook/lib/ruby/review-cli.rb +58 -0
  62. data/testdata/mybook/lib/ruby/review-compiler.rb +523 -0
  63. data/testdata/mybook/lib/ruby/review-epubmaker.rb +606 -0
  64. data/testdata/mybook/lib/ruby/review-htmlbuilder.rb +661 -0
  65. data/testdata/mybook/lib/ruby/review-latexbuilder.rb +782 -0
  66. data/testdata/mybook/lib/ruby/review-maker.rb +235 -0
  67. data/testdata/mybook/lib/ruby/review-monkeypatch.rb +91 -0
  68. data/testdata/mybook/lib/ruby/review-pdfmaker.rb +468 -0
  69. data/testdata/mybook/lib/ruby/review-textbuilder.rb +36 -0
  70. data/testdata/mybook/lib/ruby/review-tocparser.rb +285 -0
  71. data/testdata/mybook/lib/ruby/review-webmaker.rb +433 -0
  72. data/testdata/mybook/lib/tasks/mytasks.rake +31 -0
  73. data/testdata/mybook/lib/tasks/review.rake +142 -0
  74. data/testdata/mybook/lib/tasks/review.rake.orig +72 -0
  75. data/testdata/mybook/lib/tasks/starter.rake +326 -0
  76. data/testdata/mybook/locale.yml +6 -0
  77. data/testdata/mybook/review-ext.rb +206 -0
  78. data/testdata/mybook/sty/jumoline.sty +310 -0
  79. data/testdata/mybook/sty/mycolophon.sty +81 -0
  80. data/testdata/mybook/sty/mystyle.sty +8 -0
  81. data/testdata/mybook/sty/mytextsize.sty +61 -0
  82. data/testdata/mybook/sty/mytitlepage.sty +103 -0
  83. data/testdata/mybook/sty/reviewmacro.sty +60 -0
  84. data/testdata/mybook/sty/starter-codeblock.sty +332 -0
  85. data/testdata/mybook/sty/starter-color.sty +79 -0
  86. data/testdata/mybook/sty/starter-font.sty +112 -0
  87. data/testdata/mybook/sty/starter-heading.sty +514 -0
  88. data/testdata/mybook/sty/starter-note.sty +127 -0
  89. data/testdata/mybook/sty/starter-section.sty +262 -0
  90. data/testdata/mybook/sty/starter-toc.sty +72 -0
  91. data/testdata/mybook/sty/starter.sty +554 -0
  92. data/testdata/mybook/style.css +597 -0
  93. metadata +100 -3
@@ -0,0 +1,728 @@
1
+ = カスタマイズ
2
+
3
+ //abstract{
4
+ Starterをカスタマイズする方法を紹介します。
5
+ //}
6
+
7
+ #@#//makechaptitlepage[toc=on]
8
+
9
+
10
+
11
+ == 命令
12
+
13
+ 新しい命令を追加するには、ファイル「@<file>{review-ext.rb}」を編集します。
14
+
15
+
16
+ === 新しいインライン命令を追加する
17
+
18
+ たとえば次の例では、新しいインライン命令「@<code>|@@<nop>{}<bold>{...}|」を追加しています。
19
+
20
+ //list[][ファイル「review-ext.rb」]{
21
+ module ReVIEW
22
+
23
+ ## インライン命令「@@<nop>{}<bold>{}」を宣言
24
+ @<b>{Compiler.definline :bold}
25
+
26
+ ## LaTeX用の定義
27
+ @<b>{class LATEXBuilder}
28
+ @<b>{def on_inline_bold(&b)} # 入れ子を許す場合
29
+ return "\\textbf{#{yield}}"
30
+ end
31
+ #@<b>{def inline_bold(str)} # 入れ子をさせない場合
32
+ # return "\\textbf{#{escape(str)}}"
33
+ #end
34
+ end
35
+
36
+ ## HTML(ePub)用の定義
37
+ @<b>{class HTMLBuilder}
38
+ @<b>{def on_inline_bold(&b)} # 入れ子を許す場合
39
+ return "<b>#{yield}</b>"
40
+ end
41
+ #@<b>{def inline_bold(str)} # 入れ子をさせない場合
42
+ # return "<b>#{escape(str)}</b>"
43
+ #end
44
+ end
45
+
46
+ end
47
+ //}
48
+
49
+ なお既存のインライン命令を変更するのも、これと同じ方法で行えます。
50
+
51
+
52
+ === 新しいブロック命令を追加する
53
+
54
+ たとえば次の例では、新しいブロック命令「@<code>|//blockquote{ ... //}|」を追加しています。
55
+
56
+ //list[][ファイル「review-ext.rb」]{
57
+ module ReVIEW
58
+
59
+ ## ブロック命令「//blockquote」を宣言(引数は0〜1個)
60
+ @<b>{Compiler.defblock :blockquote, 0..1}
61
+
62
+ ## LaTeX用の定義
63
+ @<b>{class LATEXBuilder}
64
+ ## 入れ子を許す場合
65
+ @<b>{def on_blockquote(arg=nil)}
66
+ if arg.present?
67
+ puts "\\noindent"
68
+ puts escape(arg)
69
+ end
70
+ puts "\\begin{quotation}"
71
+ yield
72
+ puts "\\end{quotation}"
73
+ end
74
+ ## 入れ子を許さない場合
75
+ #@<b>{def blockquote(lines, arg=nil)}
76
+ # if arg.present?
77
+ # puts "\\noindent"
78
+ # puts escape(arg)
79
+ # end
80
+ # puts "\\begin{quotation}"
81
+ # puts lines
82
+ # puts "\\end{quotation}"
83
+ #end
84
+ end
85
+
86
+ ## HTML(ePub)用の定義
87
+ @<b>{class HTMLBuilder}
88
+ ## 入れ子を許す場合
89
+ @<b>{def on_blockquote(arg=nil)}
90
+ if arg.present?
91
+ puts "<p><span>#{escape(arg)}</span></p>"
92
+ end
93
+ puts "<blockquote>"
94
+ yield
95
+ puts "</blockquote>"
96
+ end
97
+ ## 入れ子を許さない場合
98
+ #@<b>{def blockquote(lines, arg=nil)}
99
+ # if arg.present?
100
+ # puts "<p><span>#{escape(arg)}</span></p>"
101
+ # end
102
+ # puts "<blockquote>"
103
+ # puts lines
104
+ # puts "</blockquote>"
105
+ #end
106
+ end
107
+
108
+ end
109
+ //}
110
+
111
+ ブロック命令には「@<code>|{ ... //}|」を使わないタイプのものもあります。
112
+ その場合は「@<code>|Compiler.defsingle|」を使います。
113
+
114
+ たとえば縦方向にスペースを空ける「@<code>|//verticalspace[タイプ][高さ]|」というブロック命令を追加するとしましょう。
115
+ 使い方は次の通りとします。
116
+
117
+ //list{
118
+ @<nop>{}//verticalspace[latex][5mm] @<balloon>{PDFのときは5mm空ける}
119
+ @<nop>{}//verticalspace[epub][10mm] @<balloon>{ePubのときは10mm空ける}
120
+ @<nop>{}//verticalspace[*][15mm] @<balloon>{PDFでもePubでも15mm空ける}
121
+ //}
122
+
123
+ このようなブロック命令は、次のように定義します。
124
+ 「@<code>|Compiler.defblock|」ではなく「@<code>|Compiler.defsingle|」を使っている点に注意してください。
125
+
126
+ //list[][ファイル「review-ext.rb」]{
127
+ module ReVIEW
128
+
129
+ ## ブロック命令「//verticalspace」を宣言(引数は2個)
130
+ @<b>{Compiler.defsingle :verticalspace, 2}
131
+
132
+ ## LaTeX用の定義
133
+ @<b>{class LATEXBuilder}
134
+ ## '{ ... //}' を使わないので入れ子対応にはしない
135
+ @<b>{def verticalspace(type, length)}
136
+ if type == 'latex' || type == '*'
137
+ puts "\\vspace{#{length}}"
138
+ end
139
+ end
140
+ end
141
+
142
+ ## HTML(ePub)用の定義
143
+ @<b>{class HTMLBuilder}
144
+ ## '{ ... //}' を使わないので入れ子対応にはしない
145
+ @<b>{def veritcalspace(type, length)}
146
+ if type == 'html' || type == 'epub' || type == '*'
147
+ puts "<div style=\"height: #{length}\"></div>"
148
+ end
149
+ end
150
+ end
151
+
152
+ end
153
+ //}
154
+
155
+ なお既存のブロック命令を変更するのも、これらと同じ方法で行えます。
156
+
157
+
158
+
159
+ == ページと本文
160
+
161
+
162
+ === [PDF] ページサイズをB5やA5に変更する
163
+
164
+ ページサイズをB5やA5に変更するには、「@<file>{config-starter.yml}」の設定項目「@<code>|pagesize:|」を変更します@<fn>{fn-yq0ne}。
165
+
166
+ //list[][ファイル「config-starter.yml」]{
167
+ pagesize: @<b>{A5} # A5 or B5
168
+ //}
169
+
170
+ //footnote[fn-yq0ne][以前は「@<file>{config.yml}」の中の「@<code>|texdocumentclass:|」を変更していましたが、その必要はなくなりました。]
171
+
172
+
173
+ ==={subsec-textwidth} [PDF] 本文の幅を指定する
174
+
175
+ 本文の幅を指定するには、「@<file>{config-starter.yml}」の設定項目「@<code>|textwidth:|」を変更します@<fn>{fn-ragkm}。
176
+
177
+ //list[][ファイル「config-starter.yml」]{
178
+ textwidth: @<b>{39zw} # 全角文字数で指定
179
+ //}
180
+
181
+ //footnote[fn-ragkm][以前は「@<file>{sty/mytextsize.sty}」を編集していましたが、本文幅を変更するだけならその必要はなくなりました。]
182
+
183
+ ここで、「@<code>|zw|」は全角1文字分の幅を表す単位です。
184
+ 「@<code>|39zw|」なら全角39文字分の幅(長さ)を表します。
185
+
186
+ Starterでは@<table>{tbl-rlsli}のような本文幅を推奨しています。
187
+
188
+ //tsize[|latex||ccl|]
189
+ //table[tbl-rlsli][本文幅の推奨値(タブレット向けを除く)]{
190
+ ベージサイズ フォントサイズ 本文幅
191
+ --------------------
192
+ A5 9pt 全角38文字か39文字
193
+ A5 10pt 全角35文字
194
+ B5 10pt 全角44文字か45文字
195
+ B5 11pt 全角41文字
196
+ //}
197
+
198
+ Starterでは、印刷用PDFではページ左右の余白幅を変えています。
199
+ これは印刷時の読みやすさを確保したまま、本文の幅を最大限に広げているからです。
200
+ 詳しくは@<secref>{06-bestpractice|subsec-sidemargin}を見てください。
201
+
202
+
203
+ ==={subsec-textheight} [PDF] 本文の高さを指定する
204
+
205
+ 本文の高さを調整するには、「@<file>{sty/mytextsize.sty}」を編集します。
206
+
207
+ //list[][ファイル「sty/mytextsize.sty」]{
208
+ %% 天(ページ上部)の余白を狭め、その分を本文の高さに加える
209
+ \addtolength{\topmargin}{@<b>|-2\Cvs|} % 上部の余白を2行分減らす
210
+ \addtolength{\textheight}{@<b>|2Cvs|} % 本文の高さを2行分増やす
211
+ //}
212
+
213
+ 通常は、このような変更は必要ないはずです。
214
+
215
+
216
+ === [PDF] 章の右ページ始まりをやめる
217
+
218
+ 横書きの本では、章(Chapter)を見開きの右ページから始めるのが一般的です。
219
+ そのため、その前のページが空ページになることがよくあります。
220
+ この空ページを入れたくないなら、章の右ページ始まりを止めて左右どちらのページからも始めるようにします。
221
+
222
+ 右ページ始まりをやめるには、「@<file>{config.yml}」の設定項目「@<code>|texdocumentclass:|」を変更します。
223
+
224
+ //list[][ファイル「config.yml」]{
225
+ texdocumentclass: ["jsbook",
226
+ @<del>|"dvipdfmx,uplatex,papersize,twoside,@<b>{openright}"| @<balloon>{右ページはじまり}
227
+ "dvipdfmx,uplatex,papersize,twoside,@<b>{openany}" @<balloon>{両ページはじまり}
228
+ ]
229
+ //}
230
+
231
+
232
+ ==={subec-miniblockdesign} [PDF] 「//info」や「//warning」のデザインを変更する
233
+
234
+ Re:VIEWやStarterでは、「@<code>|//note|」以外にも「@<code>|//info|」や「@<code>|//warning|」が使えます(詳しくは@{03-syntax|subsec-miniblock}を見てください)。
235
+
236
+ これらのデザインを変更するには、「@<file>{sty/mystyle.sty}」にたとえば次のように書いてください。
237
+
238
+ //list[][ファイル「@<file>{sty/mystyle.sty}」]{
239
+ %% 「//warning」のデザインを変更する
240
+ \renewenvironment{starterwarning}[1]{%
241
+ \addvspace{1.0\baselineskip}% 1行分空ける
242
+ \begin{oframed}% % 枠線で囲む
243
+ \ifempty{#1}\else% % 引数(タイトル)があれば
244
+ \noindent% % 字下げせずに
245
+ {\headfont\large% % 太字のゴシック体で大きめに表示
246
+ 《警告》#1}% % 先頭に 《警告》 をつける
247
+ \par\smallskip% % 縦方向に少しスペースを空ける
248
+ \fi%
249
+ }{%
250
+ \end{oframed}% % 枠線による囲みの終わり
251
+ \addvspace{1.0\baselineskip}% 1行分空ける
252
+ }
253
+ //}
254
+
255
+ 次はもっと派手なデザインのサンプルです。
256
+ どんなデザインかは自分で確かめてください。
257
+
258
+ //list[][ファイル「@<file>{sty/mystyle.sty}」]{
259
+ %% 「//info」のデザインを変更する
260
+ \usepackage{ascmac}
261
+ \renewenvironment{starterinfo}[1]{%
262
+ \addvspace{1.5\baselineskip}% 1.5行分空ける
263
+ \begin{boxnote}% % 飾り枠で囲む
264
+ \ifempty{#1}\else% % 引数(タイトル)があれば
265
+ {\centering% % センタリングして
266
+ \headfont\Large#1\par}% 太字のゴシック体で大きく表示
267
+ \bigskip% % 縦方向にスペースを空ける
268
+ \fi%
269
+ \setlength{\parindent}{1zw}% 段落の先頭を字下げする
270
+ }{%
271
+ \end{boxnote}% % 飾り枠の終わり
272
+ \addvspace{1.5\baselineskip}% 1.5行分空ける
273
+ }
274
+ //}
275
+
276
+
277
+
278
+ == フォント
279
+
280
+
281
+ ==={subsec-fontsize} [PDF] フォントサイズを変更する
282
+
283
+ 本文のフォントのサイズを変更するには、「@<file>{config-starter.yml}」の設定項目「@<code>|fontsize:|」を変更します@<fn>{fn-fy3mx}。
284
+
285
+ //list[][ファイル「config-starter.yml」]{
286
+ fontsize: @<b>{9pt} # 9pt or 10pt
287
+ //}
288
+
289
+ //footnote[fn-fy3mx][以前は「@<file>{config.yml}」の設定項目「@<code>|texdocumentclass:|」を変更していましたが、その必要はなくなりました。]
290
+
291
+ フォントサイズは、A5サイズなら9pt、B5サイズなら10ptにするのが一般的です。
292
+ ただし初心者向けの入門書では少し大きくして、A5サイズなら10pt、B5サイズなら11ptにするのがいいでしょう。
293
+
294
+ //note[商業誌のフォントサイズと本文幅]{
295
+ A5サイズの商業誌で使われているフォントサイズと本文幅を調べました(@<table>{tbl-8jedm})。
296
+ 参考にしてください。
297
+
298
+ //table[tbl-8jedm][商業誌のフォントサイズと本文幅]{
299
+ 書籍名@<xsmall>{(出版社)} 各種サイズ
300
+ --------------------
301
+ @<xsmall>{『リーダブルコード』}@<xxsmall>{(オライリー・ジャパン)} @<xsmall>{A5、9pt、38文字}
302
+ @<xsmall>{『ゼロから作るDeep Learning』}@<xxsmall>{(オライリー・ジャパン)} @<xsmall>{A5、9pt、38文字}
303
+ @<xsmall>{『達人に学ぶSQL徹底指南書 第2版』}@<xxsmall>{(翔泳社)} @<xsmall>{A5、9pt、38文字}
304
+ @<xsmall>{『アジャイル・サムライ』}@<xxsmall>{(オーム社)} @<xsmall>{A5、10pt、36文字}
305
+ @<xsmall>{『オブジェクト指向UIデザイン』}@<xxsmall>{(技術評論社)} @<xsmall>{A5、9pt、35文字}
306
+ @<xsmall>{『現場で役立つシステム設計の原則』}@<xxsmall>{(技術評論社)} @<xsmall>{A5、10pt、33文字}
307
+ @<xsmall>{『独習プログラマー』}@<xxsmall>{(日経BP社)} @<xsmall>{A5、10pt、34文字}
308
+ //}
309
+
310
+ //}
311
+
312
+
313
+ ==={subsec-fontfamily} [PDF] フォントの種類を変更する
314
+
315
+ 本文のフォントを変更するには、「@<file>{config-starter.yml}」の設定項目「@<code>|fontfamily_ja:|」と「@<code>|fontfamily_en:|」を変更します。
316
+
317
+ //list[][ファイル「config-starter.yml」]{
318
+ ## 本文のフォント(注:実験的)
319
+ ## (Notoフォントが前提なので、Docker環境が必要。MacTeXでは使わないこと)
320
+ fontfamily_ja: @<b>{mincho} @<balloon>{mincho: 明朝体, gothic: ゴシック体}
321
+ fontfamily_en: @<b>{roman} @<balloon>{roman: ローマン体, sansserif: サンセリフ体}
322
+ fontweight_ja: @<b>{normal} @<balloon>{normal: 通常, light: 細字}
323
+ fontweight_en: @<b>{normal} @<balloon>{normal: 通常, light: 細字}
324
+ //}
325
+
326
+ または、「@<file>{sty/mystyle.sty}」に以下を追加します。
327
+
328
+ //list[][ファイル「sty/mystyle.sty」]{
329
+ %% 英数字のフォントをサンセリフ体に変更
330
+ \renewcommand\familydefault{@<b>|\sfdefault|}
331
+ %% 日本語フォントをゴシック体に変更
332
+ \renewcommand\kanjifamilydefault{@<b>|\gtdefault|}
333
+ %% (macOSのみ)日本語フォントを丸ゴシックに変更
334
+ %\renewcommand\kanjifamilydefault{@<b>|\mgdefault|}
335
+ //}
336
+
337
+
338
+
339
+ == プログラムコード
340
+
341
+
342
+ ==={subsec-needvspace} [PDF] 説明文直後での改ページを防ぐ
343
+
344
+ プログラムコードの説明文の直後で改ページされてしまうことがあります。
345
+ すると説明文とプログラムコードが別ページに離れてしまうため、読みにくくなります(@<img>{caption_pagebreak})。
346
+
347
+ //image[caption_pagebreak][説明文の直後で改ページされることがある][scale=0.7]
348
+
349
+ Starterではこれを防ぐための工夫をしていますが、それでも発生してしまうことがあります。
350
+ もし発生したときは、次の対策のうちどちらを行ってください。
351
+
352
+ ===== 個別対策:「@<code>{//needvspace[]}」を使う
353
+
354
+ たとえば「@<code>|//needvspace[latex][6zw]|」とすると、現在位置に全角6文字分の高さのスペースがあるかを調べ、なければ改ページします。
355
+
356
+ //list[][全角6文字分の高さのスペースがなければ改行]{
357
+ @<b>{//needvspace[latex][6zw]}
358
+ @<nop>{}//list[][フィボナッチ数列]{
359
+ def fib(n)
360
+ n <= 1 ? n : fib(n-1) + fib(n-2)
361
+ end
362
+ @<nop>{}//}
363
+ //}
364
+
365
+ ===== 全体対策:「@<code>|caption_needspace:|」の値を増やす
366
+
367
+ @<file>{config-starter.yml}の「@<code>|caption_needspace:|」がたとえば「@<code>|4.6zh|」であれば、プログラムリストの説明文を表示する前に全角4.6文字分の高さのスペースがあるかを調べ、なければ改ページします。
368
+ よってこの設定値を増やせば、説明文だけが別ページになるのを防げます。
369
+
370
+ ただしこの設定値は、説明文を持つすべてのプログラムリストに影響します。
371
+ 設定値を変える場合は注意してください。
372
+
373
+
374
+ ==={subsec-ttfont} [PDF] プログラムコードのフォントを変更する
375
+
376
+ プログラムコードやターミナルのフォントを変更するには、「@<file>{config-starter.yml}」の設定項目「@<code>|program_ttfont:|」と「@<code>|terminal_ttfont:|」を変更します。
377
+
378
+ //list[][ファイル「config-starter.yml」]{
379
+ ## プログラム用(//list)の等幅フォント
380
+ program_ttfont: @<b>{beramono}
381
+ ## ターミナル用(//terminal、//cmd)の等幅フォント
382
+ terminal_ttfont: @<b>{inconsolata-narrow}
383
+ //}
384
+
385
+ どんなフォントが使えるかは、「@<file>{config-starter.yml}」の中に書いてあります。
386
+
387
+
388
+ === プログラムコードの枠線
389
+
390
+ プログラムコードに枠線をつける・つけないを設定するには、次の設定を変更してください。
391
+
392
+ //list[][ファイル「config-starter.yml」]{
393
+ ## プログラム(//list)を枠で囲むならtrue、囲まないならfalse
394
+ program_border: true
395
+ //}
396
+
397
+ プログラムコードがページをまたいだときは、枠線があったほうが分かりやすいです。
398
+ 詳しくは@<secref>{06-bestpractice|subsec-programborder}を見てください。
399
+
400
+
401
+
402
+ == 見出し
403
+
404
+
405
+ === 章のタイトルデザインを変更する
406
+
407
+ 章(Chapter)のタイトルデザインを変更するには、「@<file>{config-starter.yml}」の設定項目「@<code>|capter_decoration:|」を変更します。
408
+
409
+ //list[][ファイル「config-starter.yml」]{
410
+ ## 章 (Chapter) タイトルの装飾
411
+ ## (none: なし、underline: 下線、boldlines: 上下に太線)
412
+ chapter_decoration: @<b>{boldlines}
413
+
414
+ ## 章 (Chapter) タイトルの左寄せ/右寄せ/中央揃え
415
+ ## (left: 左寄せ、right: 右寄せ、center: 中央揃え)
416
+ chapter_align: @<b>{center}
417
+
418
+ ## 章 (Chapter) タイトルを1行にする(章番号とタイトルとの間で改行しない)
419
+ chapter_oneline: @<b>{false}
420
+ //}
421
+
422
+
423
+ ==={subsec-sectitle} 節のタイトルデザインを変更する
424
+
425
+ 節(Section)のタイトルデザインを変更するには、「@<file>{config-starter.yml}」の設定項目「@<code>|section_decoration:|」を変更します。
426
+
427
+ //list[][ファイル「config-starter.yml」]{
428
+ ## 節 (Section) タイトルの装飾
429
+ section_decoration: @<b>{grayback}
430
+ //}
431
+
432
+ 指定できる値は「@<code>{config-starter.yml}」の中に書かれています。
433
+
434
+
435
+ ==={subsec-paragraphdesign} 段見出しのデザインを変更する
436
+
437
+ 段(Paragraph)見出しや小段(Paragraph)見出しのデザインを変更するには、「@<file>{sty/starter-heading.sty}」から「@<code>|\Paragraph@title|」や「@<code>|\Subparagraph@title|」の定義を取り出し、「@<file>{sty/mystyle.sty}」にコピーしたうえで変更してください。
438
+
439
+
440
+ #@#=== [PDF] 章や節のタイトル上下のスペースを調整する
441
+
442
+ === [PDF] 章や節のタイトルを独自にデザインする
443
+
444
+ 章(Chapter)や節(Section)のタイトルのデザインは、「@<file>{sty/starter-heading.sty}」で定義されています。
445
+ これらを変更したい場合は、必要な箇所を「@<file>{sty/mystyle.sty}」にコピーしてから変更してください。
446
+
447
+ またマクロを上書きする場合は、「@<code>{\newcommand}」ではなく「@<code>{\renewcommand}」を使うことに注意してください。
448
+
449
+
450
+ === [PDF] 章扉をつける
451
+
452
+ Starterでは、章(Chapter)ごとにタイトルページをつけられます(@<img>{chaptitlepage_sample})。
453
+ これを「章扉」といい、商業誌ではとてもよく見かけます。
454
+
455
+ //image[chaptitlepage_sample][章扉(章の概要と目次つき)][scale=0.5]
456
+
457
+ 章扉をつけるには、次のようにします。
458
+
459
+ * 章タイトル直後に「@<code>|//abstract{ ... //}|」で概要を書く(必須)。
460
+ * そのあとに「@<code>{//makechaptitlepage[toc=on]}」を書く。
461
+ * これをすべての章に対して行う(まえがきやあとがきは除く)。
462
+
463
+ //list[][章扉をつける]{
464
+ @<nop>{}= 章タイトル
465
+
466
+ @<b>|//abstract{|
467
+ ...章の概要...
468
+ @<b>|//}|
469
+
470
+ @<b>|//makechaptitlepage[toc=on]|
471
+
472
+ @<nop>{}== 節タイトル
473
+ //}
474
+
475
+ 章扉では、その章に含まれる節(Section)の目次が自動的につきます。
476
+ これは読者にとって便利なので、特にページ数の多い本では章ごとのタイトルページをつけることをお勧めします。
477
+
478
+
479
+ ==={subsec-newpagepersec} [PDF] 節ごとに改ページする
480
+
481
+ 初心者向けの入門書では、節(Chapter)ごとに改ページするデザインが好まれます。
482
+ Starterでこれを行うには、「@<file>{confit-starter.sty}」で設定項目「@<code>|section_newpage:|」を「@<code>|true|」に設定します。
483
+
484
+ //list[][ファイル「config-starter.yml」]{
485
+ ## 節 (Section) ごとに改ページするか
486
+ ## (ただし各章の最初の節は改ページしない)
487
+ section_newpage: @<b>{true}
488
+ //}
489
+
490
+
491
+ ==={subsec-subsecnum} 項に番号をつける
492
+
493
+ Re:VIEWやStarterでは、デフォルトでは項(Subsection)に番号がつきません。
494
+ 項にも番号をつけるには、「@<file>{config.yml}」の設定項目「@<code>|secnolevel:|」を「@<code>|3|」に変更します。
495
+
496
+ //list[][ファイル「config.yml」]{
497
+ # 本文でセクション番号を表示する見出しレベル
498
+ #secnolevel: @<b>{2} # 章 (Chapter) と節 (Section) にだけ番号をつける
499
+ secnolevel: @<b>{3} # 項 (Subsection) にも番号をつける
500
+ //}
501
+
502
+
503
+ === 項を目次に含める
504
+
505
+ 項(Subsection)を目次に出すには、「@<file>{config.yml}」の設定項目「@<code>|toclevel:|」を「@<code>|3|」に変更します。
506
+
507
+ //list[][ファイル「config.yml」]{
508
+ # 目次として抽出する見出しレベル
509
+ #toclevel: @<b>{2} # (部と)章と節までを目次に載せる
510
+ toclevel: @<b>{3} # (部と)章と節と項を目次に載せる
511
+ //}
512
+
513
+
514
+ ==={subsec-parenttitle} [PDF] 項への参照に節タイトルを含める
515
+
516
+ 項(Subsection)に番号がついていない場合、「@<code>|@@<nop>{}<secref>{...}|」で項を参照すると表示が番号なしの項タイトルだけになるので、ユーザはその項を探せません。
517
+
518
+ たとえば前の項のタイトルは「項を目次に含める」です。もし
519
+ //quote{
520
+ //noindent
521
+ 詳しくは「4.5.7 項を目次に含める」を参照してください。
522
+ //}
523
+ と書かれてあれば、項番号を手がかりにして読者はその項を簡単に探せるでしょう。
524
+ しかし、もし項番号がなくて
525
+ //quote{
526
+ //noindent
527
+ 詳しくは「項を目次に含める」を参照してください。
528
+ //}
529
+ //noindent
530
+ と書かれてると、手がかりがないので読者はその項を探すのに苦労するでしょう。
531
+
532
+ このように、本文の中で項を参照しているなら項に番号をつけたほうがいいです。
533
+
534
+ Starterでは別の解決策として、「@<code>|@@<nop>{}<secref>{...}|」で項(Subsection)を参照したときに親となる節(Section)のタイトルもあわせて表示する機能を用意しています。
535
+ たとえばこのように:
536
+ //quote{
537
+ //noindent
538
+ 詳しくは「4.5 見出し」の中の「項を目次に含める」を参照してください。
539
+ //}
540
+
541
+ このような表示にするには、「@<file>{config-starter.yml}」の設定項目「@<code>|secref_parenttitle:|」を「@<code>|true|」に設定してください。
542
+
543
+ //list[][]{
544
+ ## @@<nop>{}<secref>{}において、親の節のタイトルを含めるか?
545
+ secref_parenttitle: true # trueなら親の節のタイトルを含める
546
+ //}
547
+
548
+ なお以前は、この値はデフォルトで「@<code>|true|」になっていました。
549
+ しかし「@<code>|@@<nop>{}<secref>{}|」での参照にページ番号がつくこと、また項タイトルにクローバーをつければ項であることがすぐ分かることから、現在ではデフォルトで「@<code>|false|」になっています。
550
+
551
+
552
+ === 項タイトルの記号を外す
553
+
554
+ 項(Subsection)のタイトル先頭につく記号(クローバー、クラブ)は、「@<code>{config-starter.yml}」でオン・オフできます。
555
+
556
+ //list[][ファイル「config-starter.yml」]{
557
+ ## 項 (Subsection) タイトルの装飾
558
+ ## (none: なし、symbol: 先頭にクローバー)
559
+ subsection_decoration: @<b>{symbol}
560
+ //}
561
+
562
+
563
+ === [PDF] 項タイトルの記号をクローバーから変更する
564
+
565
+ 項(Subsection)のタイトル先頭につく記号は、「@<code>{sty/starter.sty}」で次のように定義されています。
566
+
567
+ //list[][ファイル「sty/starter.sty」]{
568
+ \newcommand{\starter@subsection@symbol}{@<b>|$\clubsuit$|}% クローバー
569
+ //}
570
+
571
+ これを変更するには、「@<file>{sty/mystyle.sty}」で上書きしましょう。
572
+
573
+ //list[][ファイル「sty/mystyle.sty」]{
574
+ %% 「\newcommand」ではなく「\renewcommand」を使うことに注意
575
+ \renewcommand{\starter@subsection@symbol}{@<b>|$\heartsuit$|}% ハート
576
+ //}
577
+
578
+
579
+
580
+ == 本
581
+
582
+ === 本のタイトルや著者名を変更する
583
+
584
+ 本のタイトルや著者名は、「@<file>{config.yml}」で設定できます。
585
+
586
+ //list[][ファイル「config.yml」]{
587
+ # 書名
588
+ ((*booktitle: |-*))
589
+ Re:VIEW Starter
590
+ ユーザーズガイド
591
+ ((*subtitle: |-*))
592
+ 便利な機能を一挙解説!
593
+
594
+ # 著者名。「, 」で区切って複数指定できる
595
+ ((*aut:*))
596
+ - name: カウプラン機関極東支部
597
+ file-as: カウプランキカンキョクトウシブ
598
+ //}
599
+
600
+ Starterでは、本のタイトルやサブタイトルを複数行で設定できます。
601
+ こうすると、大扉(タイトルページ)でも複数行で表示されます。
602
+
603
+
604
+ ==={subsec-coverpdf} [PDF] 表紙を指定する
605
+
606
+ 大扉(タイトルページ)ではなく、本の表紙を指定するには、「@<file>{config.yml}」の最後のほうにある設定項目「@<code>|coverpdf_files:|」にPDFファイル名を指定します。
607
+
608
+ //list[][ファイル「config.yml」]{
609
+ coverpdf_files: @<b>{[cover_a5.pdf]} @<balloon>{表紙}
610
+ backcoverpdf_files: [] @<balloon>{裏表紙}
611
+ coverpdf_option: "offset=-0.0mm 0.0mm" @<balloon>{位置を微調整}
612
+ //}
613
+
614
+ ポイントは次の通りです。
615
+
616
+ * 画像ファイルは使用できません。必ずPDFファイルを使ってください。
617
+ * PDFファイルは、「@<file>{images/}」フォルダ直下に置いてください。
618
+ * 複数のPDFファイルを指定するには、「@<code>|[file1.pdf, file2.pdf]|」のように指定します。
619
+ 「@<code>|,|」のあとには必ず半角空白を入れてください。
620
+ * 裏表紙があれば「@<code>|backcoverpdf_files:|」に指定ます。
621
+ * 位置がずれる@<fn>{fn-oq6uz}場合は、「@<code>|coverpdf_option:|」の値を調整してください。
622
+
623
+ //footnote[fn-oq6uz][@<LaTeX>{}に詳しい人向け:取り込んだPDFファイルの位置がずれるのは、フォントサイズが10pt@<bou>{ではない}ときです。このとき@<file>{jsbook.cls}では@<code>{\mag}の値を@<code>{1.0}以外に変更するので、それが@<file>{pdfpages}パッケージに影響します。一時的に@<code>{\mag}を@<code>{1.0}にしてPDFファイルを取り込む方法は分かりませんでした。]
624
+
625
+ なお表紙がつくのは、電子用PDFファイルの場合のみです。
626
+ 印刷用PDFファイルにはつかない(し、つけてはいけない)ので注意してください。
627
+ 詳しくは@<secref>{02-tutorial|sec-pdftype}を参照してください。
628
+
629
+ //note[PNGやJPGの画像をPDFに変換する]{
630
+ macOSにてPNGやJPGをPDFにするには、画像をプレビュー.appで開き、メニューから「ファイル > 書き出す... > フォーマット:PDF」を選んでください。
631
+
632
+ macOS以外の場合は、「画像をPDFに変換」などでGoogle検索すると変換サービスが見つかります。
633
+ //}
634
+
635
+
636
+
637
+ === [PDF] 大扉のデザインを変更する
638
+
639
+ 大扉(タイトルページ)のデザインは、「@<file>{sty/mytitlepage.sty}」で定義されています。
640
+ 大扉のデザインを変更すには、このファイルを変更してください。
641
+ 変更する前に、バックアップを取っておくといいでしょう@<fn>{fn-iaa2p}。
642
+
643
+ //terminal{
644
+ $ @<userinput>{cp sty/mytitlepage.sty sty/mytitlepage.sty.original}
645
+ $ @<userinput>{vi sty/mytitlepage.sty}
646
+ //}
647
+
648
+ //footnote[fn-iaa2p][もちろん、Gitでバージョン管理している場合はバックアップする必要はありません。]
649
+
650
+
651
+ === [PDF] 注意書きの文章を変更する
652
+
653
+ 大扉(タイトルページ)の裏のページには、免責事項や商標に関する注意書きが書かれています。
654
+ この文言を変更したい場合は、「@<file>{sty/titlepage.sty}」を編集してください。
655
+
656
+ #@#//quote{
657
+ #@#■免責
658
+ #@#本書は情報の提供のみを目的としています。
659
+ #@#本書の内容を実行・適用・運用したことで何が起きようとも、それは実行・適用・運用した人自身の責任であり、著者や関係者はいかなる責任も負いません。
660
+ #@#
661
+ #@#■商標
662
+ #@#本書に登場するシステム名や製品名は、関係各社の商標または登録商標です。
663
+ #@#また本書では、TM、®、© などのマークは省略しています。
664
+ #@#//}
665
+
666
+
667
+ === [PDF] 奥付のデザインを変更する
668
+
669
+ 奥付のデザインは、「@<file>{sty/mycolophon.sty}」で定義されています。
670
+ 奥付のデザインを変更するには、このファイルを変更してください。
671
+ 変更する前に、バックアップを取っておくといいでしょう@<fn>{fn-evcg1}。
672
+
673
+ //terminal{
674
+ $ @<userinput>{cp sty/mytitlepage.sty sty/mytitlepage.sty.original}
675
+ $ @<userinput>{vi sty/mytitlepage.sty}
676
+ //}
677
+
678
+ //footnote[fn-evcg1][もちろん、Gitでバージョン管理している場合はバックアップする必要はありません。]
679
+
680
+
681
+
682
+ == Rakeタスク
683
+
684
+
685
+ === デフォルトタスクを設定する
686
+
687
+ Starterでは、@<code>|rake|コマンドのデフォルトタスクを環境変数「@<em>{$RAKE_DEFAULT}」で指定できます。
688
+
689
+ //terminal[][rakeのデフォルトタスクを設定する]{
690
+ $ @<userinput>{rake} @<balloon>{デフォルトではタスク一覧が表示される}
691
+ $ @<userinput>{@<b>{export RAKE_DEFAULT=pdf}} @<balloon>{環境変数を設定}
692
+ $ @<userinput>{rake} @<balloon>{「rake pdf」が実行される}
693
+ //}
694
+
695
+
696
+ === 独自のタスクを追加する
697
+
698
+ Starterでは、ユーザ独自のRakeタスクを追加するためのファイル「@<file>{lib/tasks/mytasks.rake}」を用意しています。
699
+
700
+ //list[][ファイル「lib/tasks/mytasks.rake」]{
701
+ ## 独自のタスクを追加する
702
+ desc "ZIPファイルを生成する"
703
+ task :zip do
704
+ rm_rf "mybook"
705
+ mkdir "mybook"
706
+ cp_r ["README.md", "mybook.pdf"], "mybook"
707
+ sh "zip -r9 mybook.zip mybook"
708
+ end
709
+ //}
710
+
711
+
712
+ === コンパイルの前処理を追加する
713
+
714
+ Starterでは、任意の処理をコンパイルの前に実行できます。
715
+
716
+ //list[][ファイル「@<file>{lib/tasks/mytasks.rake}」]{
717
+ def my_preparation(config) # 新しい前処理用関数
718
+ print "...前処理を実行...\n"
719
+ end
720
+
721
+ PREPARES.unshift :my_preparation # 前処理の先頭に追加
722
+ //}
723
+
724
+ これを使うと、たとえば以下のようなことができます。
725
+
726
+ * 原稿ファイルをコピーし書き換える。
727
+ * 複数の原稿ファイルを結合して1つにする。
728
+ * 1つの原稿ファイルを複数に分割する。