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.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +9 -0
  3. data/.editorconfig +3 -0
  4. data/.github/workflows/retrovert.yml +20 -5
  5. data/.gitignore +1 -0
  6. data/.vscode/launch.json +48 -0
  7. data/Gemfile.lock +13 -4
  8. data/Makefile +24 -0
  9. data/docker/review.Dockerfile +10 -0
  10. data/lib/review/retrovert/converter.rb +374 -111
  11. data/lib/review/retrovert/reviewcompat.rb +57 -0
  12. data/lib/review/retrovert/reviewdef.rb +70 -0
  13. data/lib/review/retrovert/sty/{ird.sty → ird.sty.erb} +9 -1
  14. data/lib/review/retrovert/sty/review-retrovert-custom.sty.erb +6 -0
  15. data/lib/review/retrovert/utils.rb +35 -0
  16. data/lib/review/retrovert/version.rb +1 -1
  17. data/lib/review/retrovert/yamlconfig.rb +0 -1
  18. data/package-lock.json +6 -0
  19. data/package.json +1 -0
  20. data/review-retrovert.gemspec +5 -1
  21. data/testdata/mybook/.gitignore +3 -1
  22. data/testdata/mybook/.textlintrc +11 -0
  23. data/testdata/mybook/Rakefile +8 -0
  24. data/testdata/mybook/catalog.yml +36 -10
  25. data/testdata/mybook/config-starter.yml +134 -9
  26. data/testdata/mybook/config.yml +44 -15
  27. data/testdata/mybook/contents/00-preface.re +48 -2
  28. data/testdata/mybook/contents/01-install.re +38 -5
  29. data/testdata/mybook/contents/02-tutorial.re +333 -113
  30. data/testdata/mybook/contents/03-syntax.re +2370 -373
  31. data/testdata/mybook/contents/04-customize.re +424 -88
  32. data/testdata/mybook/contents/05-faq.re +288 -10
  33. data/testdata/mybook/contents/06-bestpractice.re +431 -59
  34. data/testdata/mybook/contents/91-compare.re +402 -2
  35. data/testdata/mybook/contents/92-filelist.re +14 -8
  36. data/testdata/mybook/contents/93-background.re +10 -10
  37. data/testdata/mybook/contents/99-postface.re +2 -1
  38. data/testdata/mybook/contents/r0-root.re +1 -1
  39. data/testdata/mybook/css/webstyle.css +180 -2
  40. data/testdata/mybook/data/terms.txt +3 -0
  41. data/testdata/mybook/data/words.txt +15 -0
  42. data/testdata/mybook/images/03-syntax/index-page.png +0 -0
  43. data/testdata/mybook/images/03-syntax/order-detail.png +0 -0
  44. data/testdata/mybook/images/04-customize/section_decoration_samples.png +0 -0
  45. data/testdata/mybook/images/05-faq/dummy-image.png +0 -0
  46. data/testdata/mybook/images/06-bestpractice/section_title_wlines.png +0 -0
  47. data/testdata/mybook/images/avatar-b.png +0 -0
  48. data/testdata/mybook/images/avatar-g.png +0 -0
  49. data/testdata/mybook/images/avatar-r.png +0 -0
  50. data/testdata/mybook/images/caution-icon.png +0 -0
  51. data/testdata/mybook/images/info-icon.png +0 -0
  52. data/testdata/mybook/images/warning-icon.png +0 -0
  53. data/testdata/mybook/layouts/layout.html5.erb +3 -1
  54. data/testdata/mybook/layouts/layout.tex.erb +265 -379
  55. data/testdata/mybook/layouts/layout.tex.erb.orig +386 -0
  56. data/testdata/mybook/lib/ruby/review-book.rb +64 -0
  57. data/testdata/mybook/lib/ruby/review-builder.rb +902 -63
  58. data/testdata/mybook/lib/ruby/review-compiler.rb +675 -22
  59. data/testdata/mybook/lib/ruby/review-epubbuilder.rb +33 -0
  60. data/testdata/mybook/lib/ruby/review-epubmaker.rb +10 -7
  61. data/testdata/mybook/lib/ruby/review-htmlbuilder.rb +354 -66
  62. data/testdata/mybook/lib/ruby/review-latexbuilder.rb +429 -146
  63. data/testdata/mybook/lib/ruby/review-maker.rb +117 -6
  64. data/testdata/mybook/lib/ruby/review-markdownbuilder.rb +945 -0
  65. data/testdata/mybook/lib/ruby/review-markdownmaker.rb +91 -0
  66. data/testdata/mybook/lib/ruby/review-monkeypatch.rb +2 -0
  67. data/testdata/mybook/lib/ruby/review-pdfmaker.rb +160 -82
  68. data/testdata/mybook/lib/ruby/review-webmaker.rb +20 -5
  69. data/testdata/mybook/lib/tasks/review.rake +14 -0
  70. data/testdata/mybook/lib/tasks/starter.rake +148 -4
  71. data/testdata/mybook/sty/indexstyle.ist +25 -0
  72. data/testdata/mybook/sty/mytextsize.sty +29 -0
  73. data/testdata/mybook/sty/mytitlepage.sty +34 -11
  74. data/testdata/mybook/sty/review-base.sty +276 -0
  75. data/testdata/mybook/sty/starter-codeblock.sty +237 -106
  76. data/testdata/mybook/sty/starter-color.sty +72 -17
  77. data/testdata/mybook/sty/starter-heading.sty +60 -13
  78. data/testdata/mybook/sty/starter-misc.sty +894 -0
  79. data/testdata/mybook/sty/starter-note.sty +67 -14
  80. data/testdata/mybook/sty/starter-talklist.sty +105 -0
  81. data/testdata/mybook/sty/starter-util.sty +35 -0
  82. data/testdata/mybook/sty/starter.sty +8 -526
  83. metadata +80 -4
@@ -12,7 +12,7 @@
12
12
 
13
13
  === コンパイルエラーが出たとき
14
14
 
15
- PDFファイル生成時にコンパイルエラーになったときの対処方法について説明します。
15
+ PDFファイル生成時のコンパイルエラーについて、対処方法を説明します。
16
16
 
17
17
  PDFへのコンパイルは、内部では大きく3つのステージに分かれます。
18
18
 
@@ -73,7 +73,7 @@ Starterでは、「@<code>|review-pdfmaker|」や「@<code>|review-epubmaker|」
73
73
 
74
74
  === 文章中のプログラムコードに背景色をつけたい
75
75
 
76
- 「@<code>|@@<nop>{}<code>{...}|」を使って文章中に埋め込んだプログラムコードに、背景色をつけられます。
76
+ 「@<code>|@@<nop>{}<code>{...}|」による文章中のプログラムコードに、背景色をつけられます。
77
77
  そのためには、「@<file>{config-starter.yml}」で「@<code>|inlinecode_gray: true|」を設定してください。
78
78
 
79
79
  //list[][ファイル「@<file>{config-starter.yml}」]{
@@ -123,11 +123,11 @@ Starterではプログラム中の長い行が自動的に右端で折り返さ
123
123
 
124
124
  このような場合、プログラムやターミナルの表示幅をほんの少し広げるだけで、右端まで文字が埋まるようになります。
125
125
 
126
- 具体的には、ファイル「@<file>{config-starter.yml}」の中の「@<code>{program_widen: 0.0mm}」や「@<code>{terminal_wide: 0.0mm}」を、たとえば「@<code>{0.3mm}」に設定してください(値は各自で調整してください)。
126
+ 具体的には、ファイル「@<file>{config-starter.yml}」の中の「@<code>{program_widen: 0.0mm}」や「@<code>{terminal_widen: 0.0mm}」を、たとえば「@<code>{0.3mm}」に設定してください(値は各自で調整してください)。
127
127
 
128
128
  //list[][ファイル「config-starter.yml」]{
129
129
  ## プログラム(//list)の表示幅をほんの少しだけ広げる。
130
- @<del>{program_waiden: 0.0mm}
130
+ @<del>{program_widen: 0.0mm}
131
131
  @<b>{program_widen: 0.3mm}
132
132
 
133
133
  ## ターミナル(//terminal, //cmd)の表示幅をほんの少しだけ広げる。
@@ -140,11 +140,13 @@ Starterではプログラム中の長い行が自動的に右端で折り返さ
140
140
  //image[codeblock_rpadding2][表示幅をほんの少し広げると、右端まで埋まるようになった][scale=0.7]
141
141
 
142
142
 
143
- === 半角文字の幅を全角文字の半分にしたい
143
+ === 全角文字の幅を半角文字2個分にしたい
144
144
 
145
- 英数字の幅が狭いフォントを使うと、半角文字の幅が全角文字の約半分になります(ぴったりにはなりません)。
145
+ 「@<code>|//list|」や「@<code>|//terminal|」の第3引数に「@<code>|widecharfit=on|」を指定すると、全角文字の幅が半角文字2文字分になります。
146
+ すべての「@<code>|//list|」や「@<code>|//terminal|」でこのオプションを有効化したい場合は、@<file>{config-starter.yml}の「@<code>|program_default_options:|」や「@<code>|terminal_default_options:|」に、「@<code>|widecharfit: on|」を指定してください。
146
147
 
147
- @<file>{config-starter.yml}で、以下のうち必要なほうを設定してください。
148
+ または英数字の幅が狭いフォントを使うと、半角文字の幅が全角文字の約半分になります(ぴったりにはなりません)。
149
+ @<file>{config-starter.yml}で、次のうち必要なほうを設定してください。
148
150
 
149
151
  //list[][]{
150
152
  ## //list用
@@ -164,7 +166,7 @@ Starterではプログラム中の長い行が自動的に右端で折り返さ
164
166
  「@<code>|//terminal|」や「@<code>|//list|」では、小さいフォントで表示するオプションがあります。
165
167
  フォントサイズは「@<code>|small|」「@<code>|x-small|」「@<code>|xx-small|」の3つが選べます。
166
168
 
167
- //list[][サンプル]{
169
+ //list[][サンプル][]{
168
170
  /@<nop>$$/terminal[][小さいフォントで表示する][@<b>|fontsize=x-small|]{
169
171
  Table "public.customers"
170
172
  Column | Type | Nullable | Default
@@ -213,7 +215,279 @@ Starterでは等幅フォントを複数の中から選べます。
213
215
 
214
216
 
215
217
 
216
- == その他
218
+ == 画像
219
+
220
+
221
+ === PDFとHTMLとで画像の表示サイズを変えたい
222
+
223
+ Re:VIEWやStarterでは、PDFとHTMLとで画像の表示サイズを別々に指定できます。
224
+ たとえば次のサンプルでは、PDF (@<LaTeX>{})では本文幅いっぱい、HTMLでは本文幅の半分の大きさで画像を表示します。
225
+
226
+ //list[][サンプル][]{
227
+ /@<nop>$$/image[dummy-image][表示幅を変える][@<b>|latex::scale=1.0,html::scale=0.5|]
228
+ //}
229
+
230
+ //sampleoutputbegin[表示結果]
231
+
232
+ //image[dummy-image][表示幅を変える][latex::scale=1.0,html::scale=0.5]
233
+
234
+ //sampleoutputend
235
+
236
+
237
+
238
+ なお「@<code>|latex::xxx|」や「@<code>|html::xxx|」のような指定方法は、他のオプションやコマンドでも使えます。
239
+
240
+
241
+ === 印刷用PDFと電子用PDFとで異なる解像度の画像を使いたい
242
+
243
+ 印刷用PDFでは解像度の高い画像を使いたい、けど電子用PDFでは画像の解像度を低くしてデータサイズを小さくしたい、という場合は、「@<file>{images/}」フォルダごと切り替えるのがいいでしょう。
244
+ 具体的には次のようにします。
245
+
246
+ //terminal[][高解像度と低解像度の画像を切り替える(macOSまたはLinuxの場合)]{
247
+ ### 事前準備
248
+ $ mkdir images_highres @<balloon>{解像度の高い画像用のフォルダを作る(印刷用)}
249
+ $ mkdir images_lowhres @<balloon>{解像度の低い画像用のフォルダを作る(電子用)}
250
+ $ mv images images.bkup @<balloon>{既存のimagesフォルダを削除するか別名にする}
251
+
252
+ ### 解像度の高い画像に切り替えて印刷用PDFを生成
253
+ $ rm -f images @<balloon>{シンボリックリンクを消す}
254
+ $ ln -s images_highres images @<balloon>{シンボリックリンクを作る}
255
+ $ rake pdf t=pbook @<balloon>{印刷用PDFを生成する}
256
+
257
+ ### 解像度の低い画像に切り替えて電子用PDFを作成
258
+ $ rm -f images @<balloon>{シンボリックリンクを消す}
259
+ $ ln -s images_lowres images @<balloon>{シンボリックリンクを作る}
260
+ $ rake pdf t=ebook @<balloon>{電子用PDFを生成する}
261
+ //}
262
+
263
+ 切り替え作業が面倒なら、独自のRakeタスクを作成するといいでしょう。
264
+ 「@<file>{lib/tasks/mytasks.rake}」に次のようなタスクを追加してください。
265
+
266
+ //list[][@<file>{lib/tasks/mytasks.rake}]{
267
+ desc "印刷用PDFを生成"
268
+ task :pbook do
269
+ rm_f 'images'
270
+ ln_s 'images_highres', 'images'
271
+ sh "rake pdf t=pbook"
272
+ #sh "rake docker:pdf t=pbook"
273
+ end
274
+
275
+ desc "電子用PDFを生成"
276
+ task :ebook do
277
+ rm_f 'images'
278
+ ln_s 'images_rowres', 'images'
279
+ sh "rake pdf t=ebook"
280
+ #sh "rake docker:pdf t=ebook"
281
+ end
282
+ //}
283
+
284
+ これにより、「@<code>|rake pbook|」で高解像度の画像を使って印刷用PDFが生成され、また「@<code>|rake ebook|」で低解像度の画像を使って電子用PDFが生成されます。
285
+
286
+
287
+ === 画像の解像度はどのくらいにすればいいか
288
+
289
+ 画像の「解像度」(Resolution)とは、簡単にいえば画像の「きめ細かさ」です。
290
+ 解像度が高い(=きめ細かい)ほど画像のドットやギザギザがなくなり、解像度が低いほど画像のドットやギザギザが目立ちます。
291
+
292
+ 解像度は「dpi」(dot per inch)という単位で表します。
293
+ この値が大きいほどきめ細かく、低いほど粗くなります。
294
+ 望ましい解像度は用途によって異なります。
295
+ 大雑把には次のように覚えておくといいでしょう。
296
+
297
+ * 安いWindowsノートPCで表示するなら、72dpiで十分
298
+ * MacbookのRetinaディスプレイできれいに表示するなら、144dpiが必要
299
+ * 高級スマートフォンできれいに表示するなら、216dpi必要
300
+ * 商業印刷で使うなら、カラー画像で350dpi、モノクロ画像で600dpi必要
301
+
302
+ たとえば安いWindowsノートPCでスクリーンショットを撮ると、画像の解像度が72dpiになります。
303
+ これをMacbookやスマートフォンで等倍表示すると、必要な解像度に足りないせいで画像のドットが目立ちます@<fn>{fn-v6uxm}。
304
+ 印刷すれば粗さがもっと目立ちます。
305
+
306
+ //footnote[fn-v6uxm][等倍で表示すると荒い画像でも、大きい画像を縮小して表示すれば粗さは目立たなくなります。解像度の高い画像を用意できない場合は、かわりに大きい画像を用意して印刷時に縮小するといいでしょう。]
307
+
308
+ では、技術同人誌では画像の解像度をどのくらいにすればいいでしょうか。
309
+ すでに説明したように、商業印刷に使う画像は350dpi以上の解像度が必要だとよく言われます。
310
+ しかし(マンガやイラストの同人誌ではなく)技術系同人誌であれば、そこまで高解像度の画像を用意しなくても大丈夫です。
311
+
312
+ 実際には、Retinaディスプレイや最近のスマートフォンで画像を等倍表示して気にならない解像度であれば、印刷してもあまり気になりません。
313
+ つまり画像の解像度が144dpiであれば、印刷しても問題は少ないし、電子用PDFで使っても350dpiと比べてデータサイズをかなり小さくできます。
314
+
315
+ 印刷用と電子用とで解像度の違う画像を用意するのは面倒なので、画像の解像度を144dpiにして印刷用と電子用とで同じ画像を使うのが簡単かつ妥当な方法でしょう。
316
+
317
+
318
+ === 白黒印刷用のPDFにカラー画像を使っても大丈夫か
319
+
320
+ 白黒印刷用のPDFにカラー画像を使っても、たいていは大丈夫です。
321
+ たとえばカラーのスクリーンショット画像を、わざわざモノクロ画像に変換する必要はありません。
322
+
323
+ ただし、白黒印刷すれば当然ですがカラーではなくなるので、@<B>{色の違いだけで見分けをつけていたものは白黒印刷すると見分けがつかなくなります}。
324
+ 形を変えたり線の種類を変えるなどして、白黒になっても見分けがつくような工夫をしましょう。
325
+
326
+ また図の一部を赤い丸や四角で囲んでいる場合、白黒印刷すると赤ではなくなるので、たとえば「赤い丸で囲った部分に注目してください」という文章が読者に通じなくなります。
327
+ これもよくある失敗なので気をつけましょう。
328
+
329
+
330
+
331
+ =={sec-nombre} ノンブル
332
+
333
+
334
+ === ノンブルとは
335
+
336
+ 「ノンブル」とは、すべてのページにつけられた通し番号のことです。
337
+ ページ番号と似ていますが、次のような違いがあります。
338
+
339
+ //desclist[indent=0zw]{
340
+ //desc[通し番号]{
341
+ * ページ番号は、まえがきや目次では「i, ii, iii, ...」で、本文が始まると「1, 2, 3, ...」とまる。つまり通し番号になっていない。
342
+ * ノンブルは、まえがきや目次や本文に関係なく「1, 2, 3, ...」と続く通し番号になっている。
343
+ //}
344
+ //desc[用途]{
345
+ * ページ番号は、読者が目的のページへ素早くアクセスするために必要。
346
+ * ノンブルは、印刷所がページの印刷順序を間違わないために必要。
347
+ //}
348
+ //desc[表示位置]{
349
+ * ページ番号は読者のために存在するので、読者からよく見える位置に置く。
350
+ * ノンブルは印刷所の人だけが見られればよく、読者からは見えないほうがよい。
351
+ //}
352
+ //}
353
+
354
+ ノンブルは、印刷所へ入稿するときに必要です。
355
+ 印刷しないならノンブルは不要であり、電子用PDFにはノンブルはつけません。
356
+
357
+ ノンブルについてもっと知りたい場合は「ノンブル 同人誌」でGoogle検索すると詳しい情報が見つかります。
358
+
359
+
360
+ === ノンブルを必要とする印刷所
361
+
362
+ たいていの印刷所では入稿するPDFにノンブルが必要ですが、必要としない印刷所もあります。
363
+ たとえば技術書典でよく利用される印刷所のうち、「日光企画」ではノンブルが必須で、「ねこのしっぽ」では不要(だけどあると望ましい)です。
364
+ 主な同人誌向け印刷所の情報を@<table>{tbl-uyzhu}にまとめたので参考にしてください。
365
+
366
+ //tsize[latex][lcp{81mm}]
367
+ //table[tbl-uyzhu][同人誌向け印刷所ごとのノンブル必要・不要情報][hline=on,fontsize=x-small]{
368
+ 印刷所 ノンブル 参考URL
369
+ --------------------
370
+ 日光企画 必要 @<href>{http://www.nikko-pc.com/qa/yokuaru-shitsumon.html#3-1}
371
+ ねこのしっぽ 不要 @<href>{https://www.shippo.co.jp/neko/faq_3.shtml#faq_039}
372
+ しまや出版 必要 @<href>{https://www.shimaya.net/howto/data-genkou.html#no}
373
+ 栄光 必要 @<href>{https://www.eikou.com/qa/answer/66}
374
+ サンライズ 必要 @<href>{https://www.sunrisep.co.jp/09_genkou/002genko_kiso.html#title-6}
375
+ オレンジ工房 必要 @<href>{https://www.orangekoubou.com/order/question.php#article05}
376
+ 太陽出版 必要 @<href>{https://www.taiyoushuppan.co.jp/doujin/howto/nombre.php}
377
+ ポプルス 不要 @<href>{https://www2.popls.co.jp/pop/genkou/q_and_a.html#nombre}
378
+ 丸正インキ 必要 @<href>{https://www.marusho-ink.co.jp/howto/nombre.html}
379
+ トム出版 必要 @<href>{https://www.tomshuppan.co.jp/manual/data.html}
380
+ 金沢印刷 必要 @<href>{http://www.kanazawa-p.co.jp/howtodata/howtodata_kihon-rule.html}
381
+ ケーナイン 必要 @<href>{https://www.k-k9.jp/data/nomble/}
382
+ booknext 必要 @<href>{https://booknext.ink/guide/making/}
383
+ //}
384
+
385
+ このように印刷所によって違いますが、@<B>{ノンブル不要の印刷所であってもノンブルをつけるほうが望ましい}です。
386
+ 強い理由がないなら、印刷用PDFにはノンブルをつけましょう。
387
+
388
+
389
+ ==={subsec-addnombre} ノンブルのつけ方
390
+
391
+ Re:VIEWとStarterのどちらも、印刷用PDFにはノンブルが自動的につきます(電子用にはつきません)。
392
+ Starterでは、印刷用PDFならページの右下隅または左下隅に、グレーの通し番号がついているはずです。
393
+ これがノンブルです。
394
+
395
+ ノンブルは印刷所の人だけが見られればいいので、読者からは見えにくい位置(見開きの内側)に置かれます。
396
+ このように読者から見えにくい位置に置かれたノンブルを、特に「隠しノンブル」といいます。
397
+
398
+ またStarterでは、すでに生成済みのPDFに対してあとからノンブルを追加できます。
399
+ たとえば大扉(タイトルページ)や奥付をIllustratorやKeynoteで作成し@<fn>{fn-dv7j2}、それを使って印刷用PDFの大扉や奥付のページを手動で入れ替えるような場合は@<fn>{fn-5eb1s}、入れ替えたページにノンブルがつきません。
400
+ このような場合は、次のような作業手順になります。
401
+
402
+ //footnote[fn-dv7j2][大扉(タイトルページ)を別のソフトで作成した例が@<secref>{06-bestpractice|subsec-visualtitlepage}にあります。]
403
+ //footnote[fn-5eb1s][昔はこうする必要がありましたが、現在のStarterは大扉と奥付をPDFファイルで用意すればそれを読み込めるので、手動で入れ替える必要はなくなりました。詳しくは@<secref>{04-customize|subsec-coverpdf}を参照してください。]
404
+
405
+ - (1) 印刷用PDFをノンブルなしで生成する。
406
+ - (2) 手動で大扉や奥付のページを入れ替える。
407
+ - (3) 生成済みの印刷用PDFにノンブルをつける。
408
+
409
+ ここで(1)印刷用PDFをノンブルなしで生成するには、@<file>{config-starter.yml}で「@<code>|nombre: off|」を設定します。
410
+ また(3)生成済みの印刷用PDFにノンブルをつけるには、ターミナル画面で「@<code>|rake pdf:nombre|」を実行してください。
411
+
412
+ //terminal[][生成済みの印刷用PDFにノンブルをつける]{
413
+ $ @<userinput>|rake pdf:nombre| @<balloon>{PDFの全ページにノンブルをつける}
414
+ $ @<userinput>|rake docker:pdf:nombre| @<balloon>{Dockerを使っている場合はこちら}
415
+ //}
416
+
417
+ このRakeタスクでは、ノンブルをつけたいPDFファイル名と出力先のPDFファイル名を指定できます。
418
+ たとえば@<file>{mybook.pdf}にノンブルをつけたものを@<file>{mybook_nombre.pdf}として出力するには、次のようにします。
419
+
420
+ //terminal[][生成済みの印刷用PDFにノンブルをつける]{
421
+ $ @<userinput>|rake pdf:nombre @<b>{file=mybook.pdf} @<b>{out=mybook_nombre.pdf}|
422
+ //}
423
+
424
+ 「@<code>|out=...|」が指定されなければ、「@<code>|file=...|」と同じファイル名が使われます。
425
+ また「@<code>|file=...|」が指定されなければ、「@<code>|rake pdf|」で生成されるPDFファイルの名前が使われます。
426
+
427
+ なお「@<code>{rake pdf:nombre}」はノンブルをつけるだけであり、再コンパイルはしないので注意してください。
428
+ また「@<href>{https://kauplan.org/pdfoperation/, PDFOperation}」を使っても、PDFファイルにノンブルが簡単につけられます。
429
+
430
+ //note[ノンブル用フォントの埋め込み]{
431
+ 残念ながら、「@<code>{rake pdf:nombre}」でノンブルをつけるとそのフォントがPDFファイルに埋め込まれません(これはPDFファイルを操作しているライブラリの限界によるものです)。
432
+ そのため、印刷所へ入稿するまえにフォントを埋め込む必要があります。
433
+
434
+ 対策方法は@<href>{https://kauplan.org/pdfoperation/}を見てください。
435
+ また印刷用PDFにデフォルトでつくノンブルならこのような問題はありません。
436
+ //}
437
+
438
+
439
+ === ノンブルの調整
440
+
441
+ 印刷所によっては、ノンブルの位置や大きさを指定される場合があります。
442
+ その場合は@<file>{config-starter.yml}の中の、ノンブルに関する設定項目を調整してください。
443
+ なおこの設定は、「@<code>|rake pdf:nombre|」タスクでも使われます。
444
+
445
+ //needvspace[latex][6zw]
446
+ //list[][@<file>{config-starter.yml}:ノンブルに関する設定項目]{
447
+ ## ノンブル(1枚目からの通し番号)の設定
448
+ nombre: on @<balloon>{on ならノンブルをつける}
449
+ nombre_sidemargin: 0.5mm @<balloon>{ページ左右からのマージン幅}
450
+ nombre_bottommargin: 2.0mm @<balloon>{ページ下からのマージン高}
451
+ nombre_fontcolor: gray @<balloon>{'gray' or 'black'}
452
+ nombre_fontsize: 6pt @<balloon>{フォントサイズ(6〜8pt)}
453
+ nombre_startnumber: 1 @<balloon>{ノンブルの開始番号(3から始める流儀もある)}
454
+ //}
455
+
456
+
457
+ === ノンブルの注意点
458
+
459
+ 印刷所への入稿に慣れていないと、ノンブルに関するトラブルを起こしがちです。
460
+ 初心者の人は次のような点に注意してください。
461
+
462
+ * すでに説明したように、ノンブルは印刷するときに必要であり、印刷しなければ不要です。
463
+ Starterでは印刷用PDFにのみ自動でノンブルがつきますが、電子用PDFにはつきません。
464
+ * ノンブルは、表紙と裏表紙には必要ありません。
465
+ 印刷所へ入稿するとき、表紙と裏表紙の入稿は本文とは別に行います。
466
+ そのため、表紙と裏表紙にはノンブルをつける必要はありませんし、つけてはいけません。
467
+ * ノンブルは、表紙と裏表紙を除いたすべてのページに必要です。
468
+ たとえ空白ページであってもノンブルを省略してはいけません。
469
+ * 別のソフトで作った大扉(タイトルページ)や奥付をPDFに入れた場合は、それらのページにもノンブルをつけることを忘れないでください。
470
+ * 印刷所からノンブルの位置や大きさの指定がある場合は、それに従ってください。
471
+ ノンブルの調整方法は@<file>{config-starter.yml}で行えます。
472
+ * ノンブルは「1」から始めることがほとんどですが、印刷所によっては「3」から始めるよう指示されることがあります。
473
+ その場合は@<file>{config-starter.yml}に「@<code>|nombre_startnumber: 3|」を設定してください。
474
+ * ノンブルのフォントがPDFに埋め込まれていることを確認してください。
475
+ ただし本文のフォントほど重要ではないので、もしノンブルのフォントがうまく埋め込めない場合は、そのままで入稿できないか印刷所に相談してみましょう。
476
+
477
+
478
+
479
+ == @<LaTeX>{}関連
480
+
481
+
482
+ === LuaLaTeXとjlreqを使いたい
483
+
484
+ Starterでは、LuaLaTeXとjlreq.clsにはまだ対応していません。
485
+ どうしてもこれらが使いたい場合は、Re:VIEWが対応しているのでそちらを使うといいでしょう。
486
+
487
+ LuaLaTeXは好きなフォントが簡単に使えるという大きな利点がありますが、コンパイルが遅くなるという欠点があります。
488
+ またjlreq.clsはカスタマイズ方法がよく分かっていないので、採用ができません。
489
+
490
+ これらの採用は今後の課題です。
217
491
 
218
492
 
219
493
  === @<LaTeX>{}のスタイルファイルから環境変数を参照する
@@ -221,7 +495,7 @@ Starterでは等幅フォントを複数の中から選べます。
221
495
  Starterでは、名前が「@<em>{STARTER_}」で始まる環境変数を@<LaTeX>{}のスタイルファイルから参照できます。
222
496
 
223
497
  たとえば「@<code>{STARTER_FOO_BAR}」という環境変数を設定すると、@<code>{sty/mystyle.sty}や@<code>{sty/starter.sty}では「@<code>{\STARTER@FOO@BAR}」という名前で参照できます。
224
- 想像がつくと思いますが、環境変数名の「@<code>{_}」は「@<code>{@}」に変換されます。
498
+ この例で分かるように、環境変数名の「@<code>{_}」は「@<code>{@}」に変換されます。
225
499
 
226
500
  //terminal[][環境変数を設定する例(macOS, UNIX)]{
227
501
  $ @<userinput>{export STARTER_FOO_BAR="foobar"}
@@ -242,6 +516,10 @@ $ @<userinput>{export STARTER_FOO_BAR="foobar"}
242
516
  また値の中に「@<code>{$}」や「@<code>{\\}」が入っていてもエスケープはしないので注意してください。
243
517
 
244
518
 
519
+
520
+ == その他
521
+
522
+
245
523
  === 高度なカスタマイズ
246
524
 
247
525
  設定ファイルや@<LaTeX>{}スタイルファイルでは対応できないようなカスタマイズが必要になることがあります。
@@ -30,6 +30,8 @@ Re:VIEWおよびStarterでは、「@<file>{catalog.yml}」の「@<code>|PREDEF:|
30
30
 
31
31
  次のは「本書の目的」のサンプルです。
32
32
 
33
+ //sampleoutputbegin[サンプル]
34
+
33
35
  ===={notoc} 本書の目的
34
36
 
35
37
  本書の目的は、SQLを初めてさわる初心者が、簡単な検索と集計をSQLでできるようになることです。
@@ -37,10 +39,13 @@ Re:VIEWおよびStarterでは、「@<file>{catalog.yml}」の「@<code>|PREDEF:|
37
39
 
38
40
  SQLのチューニングや、データベース設計といった内容は、本書の範囲ではありません。
39
41
 
42
+ //sampleoutputend
43
+
40
44
 
41
45
  === まえがきに「対象読者」を入れる
42
46
 
43
- 先ほどの話と似ていますが、「まえがき」に本の対象読者が書かれてあると、本を手にとった人は自分がその本の対象読者かどうか、判断しやすいです。
47
+ 先ほどの話と似ていますが、まえがきに「本の対象読者」を書きましょう。
48
+ 本を手にとった人が、自分がその本の対象読者かどうか判断できます。
44
49
 
45
50
  このとき、「初心者」と「初級者」をちゃんと区別するといいでしょう。
46
51
 
@@ -49,12 +54,16 @@ SQLのチューニングや、データベース設計といった内容は、
49
54
 
50
55
  次のは「対象読者」のサンプルです。
51
56
 
57
+ //sampleoutputbegin[サンプル]
58
+
52
59
  ===={notoc} 本書の対象読者
53
60
 
54
61
  本書は、何らかのオブジェクト指向言語の入門書を読み終えた初級者を対象としています。
55
62
  そのため、「オブジェクト」「クラス」「メソッド」などの用語は説明なしに使用します。
56
63
  まったくの初心者は本書の対象ではないので注意してください。
57
64
 
65
+ //sampleoutputend
66
+
58
67
 
59
68
  === まえがきに「前提知識」を入れる
60
69
 
@@ -66,6 +75,8 @@ SQLのチューニングや、データベース設計といった内容は、
66
75
 
67
76
  次のは「前提知識」のサンプルです。
68
77
 
78
+ //sampleoutputbegin[サンプル]
79
+
69
80
  ===={notoc} 本書の前提知識
70
81
 
71
82
  本書は、Python をある程度使いこなしている中級者以上を対象にしています。そのため、Pythonの基礎知識を持っていることを前提とします。
@@ -78,6 +89,8 @@ SQLのチューニングや、データベース設計といった内容は、
78
89
  * 「@<code>|return|」と「@<code>|yield|」の違いが説明できる
79
90
  * 「@<code>|@property|」が何か分かる
80
91
 
92
+ //sampleoutputend
93
+
81
94
 
82
95
  === まえがきにサポートサイトのURLを載せる
83
96
 
@@ -90,6 +103,8 @@ SQLのチューニングや、データベース設計といった内容は、
90
103
 
91
104
  次のはサポートサイト紹介文のサンプルです。
92
105
 
106
+ //sampleoutputbegin[サンプル]
107
+
93
108
  ==== サポートサイト
94
109
 
95
110
  本書の正誤表は次のサイトに載っています。
@@ -97,6 +112,8 @@ SQLのチューニングや、データベース設計といった内容は、
97
112
 
98
113
  * @<href>{https://www.example.com/mygreatbook/}
99
114
 
115
+ //sampleoutputend
116
+
100
117
 
101
118
  === まえがきに謝辞を載せる
102
119
 
@@ -113,7 +130,7 @@ SQLのチューニングや、データベース設計といった内容は、
113
130
  まえがきに、使用した(または動作検証した)ソフトウェアのバージョンを載せるといいでしょう。
114
131
 
115
132
  たとえばPythonの2.7なのか3.Xなのかは大きな問題です。
116
- またLinuxだとCentOSなのかUbuntuなのか、Ubuntuなら18.04なのか20.04なのか、といった情報を、まえがきに書いておきましょう。
133
+ またLinuxだとCentOSなのかUbuntuなのか、Ubuntuなら18.04なのか20.04なのか、といった情報をまえがきに書いておきましょう。
117
134
 
118
135
 
119
136
  === まえがきの章タイトル以外は目次に載せない
@@ -210,14 +227,14 @@ Starterでは節ごとに改ページする設定が用意されています。
210
227
 
211
228
  == 箇条書き
212
229
 
213
- === 箇条書きを正しく使い分ける
230
+ ==={sec-goodenumerate} 箇条書きを正しく使い分ける
214
231
 
215
232
  箇条書きには「番号なし」「番号つき」「ラベルつき」の3つがあります。
216
233
 
217
234
  番号なしの箇条書きは、項目に順序がないか、あっても重要ではない場合に使います。
218
- たとえば次の例では、公開された順に項目が並んでいますがそこはあまり重要ではなく、項目の順番を入れ替えても文章の意味は成り立つので、番号なしの箇条書きを使います。
235
+ たとえば次の例では、公開された順に項目が並んでいるもののそこはあまり重要ではなく、項目の順番を入れ替えても文章の意味が成り立つので、番号なしの箇条書きを使います。
219
236
 
220
- //list[][サンプル]{
237
+ //list[][サンプル][]{
221
238
  スタジオジブリ初期の代表作は次の通りです。
222
239
 
223
240
  * 風の谷のナウシカ
@@ -240,7 +257,7 @@ Starterでは節ごとに改ページする設定が用意されています。
240
257
  番号つきの箇条書きは、手順や順位など、項目の順序が重要な場合に使います。
241
258
  たとえば次の例では項目の順序が重要なので、番号つきの箇条書きを使います。
242
259
 
243
- //list[][サンプル]{
260
+ //list[][サンプル][]{
244
261
  スタジオジブリ初期の代表作を、好きな順に並べました。
245
262
 
246
263
  1. 風の谷のナウシカ
@@ -264,9 +281,9 @@ Starterでは節ごとに改ページする設定が用意されています。
264
281
  またラベルはあとから参照しやすくするために使い、順番を表すためには使いません。
265
282
  そのため、ラベルつきの箇条書きは「番号なし箇条書きにラベルをつけたもの」として使います。
266
283
 
267
- たとえば次の例では、項目の順序は重要ではないので番号なし箇条書きでもいいのですが、あとから項目を参照するのでラベルつき箇条書きにしています。
284
+ たとえば次の例では、項目の順序はさほど重要でないので番号なし箇条書きでもいいのですが、あとから項目を参照するのでラベルつき箇条書きにしています。
268
285
 
269
- //list[][サンプル]{
286
+ //list[][サンプル][]{
270
287
  スタジオジブリ初期の代表作は次の通りです。
271
288
 
272
289
  - (A) 風の谷のナウシカ
@@ -291,7 +308,7 @@ Starterでは節ごとに改ページする設定が用意されています。
291
308
 
292
309
 
293
310
  番号つき箇条書きとラベルつき箇条書きは、きちんと使い分けましょう。
294
- 前者は順序に強い意味がある場合、後者は意味がないか弱い場合に使います。
311
+ 前者は順序に強い意味がある場合、後者は順序に意味がないまたは弱い場合に使います。
295
312
 
296
313
 
297
314
  === 箇条書き直後に継続する段落は字下げしない
@@ -301,7 +318,7 @@ Starterでは節ごとに改ページする設定が用意されています。
301
318
  次の例を見てください。
302
319
  箇条書きの直後に「@<code>|//noindent|」を入れることで、字下げしないようにしています。
303
320
 
304
- //list[][サンプル]{
321
+ //list[][サンプル][]{
305
322
  スタジオジブリ初期の代表作には、
306
323
 
307
324
  * 風の谷のナウシカ
@@ -311,7 +328,7 @@ Starterでは節ごとに改ページする設定が用意されています。
311
328
  @<b>|//noindent|
312
329
  が挙げられます。
313
330
 
314
- しかしスタジオジブリが発足したのは実はトトロからであり、ナウシカとラピュタは厳密にはスタジオジブリの製作ではないのです。
331
+ しかしスタジオジブリが発足したのは実はラピュタからであり、ナウシカは厳密にはスタジオジブリの制作ではないのです。
315
332
  //}
316
333
 
317
334
  //sampleoutputbegin[表示結果]
@@ -325,7 +342,7 @@ Starterでは節ごとに改ページする設定が用意されています。
325
342
  //noindent
326
343
  が挙げられます。
327
344
 
328
- しかしスタジオジブリが発足したのは実はトトロからであり、ナウシカとラピュタは厳密にはスタジオジブリの製作ではないのです。
345
+ しかしスタジオジブリが発足したのは実はラピュタからであり、ナウシカは厳密にはスタジオジブリの制作ではないのです。
329
346
 
330
347
  //sampleoutputend
331
348
 
@@ -337,14 +354,14 @@ Starterでは節ごとに改ページする設定が用意されています。
337
354
  もっとも、段落の途中に箇条書きを入れること自体がよくありません。
338
355
  この例なら、次のように書き換えるといいでしょう。
339
356
 
340
- //list[][サンプル]{
357
+ //list[][サンプル][]{
341
358
  スタジオジブリ初期の代表作には、@<b>|次の3つが挙げられます。|
342
359
 
343
360
  * 風の谷のナウシカ
344
361
  * 天空の城ラピュタ
345
362
  * となりのトトロ
346
363
 
347
- しかしスタジオジブリが発足したのは実はトトロからであり、ナウシカとラピュタは厳密にはスタジオジブリの製作ではないのです。
364
+ しかしスタジオジブリが発足したのは実はラピュタからであり、ナウシカは厳密にはスタジオジブリの制作ではないのです。
348
365
  //}
349
366
 
350
367
 
@@ -359,7 +376,7 @@ Starterでは節ごとに改ページする設定が用意されています。
359
376
  日本語の文章では本文が明朝体の場合、強調箇所は太字にするだけでなく、ゴシック体にするのがよいとされています。
360
377
  そのため、強調には「@<code>|@@<nop>{}<b>{...}|」ではなく「@<code>|@@<nop>{}<B>{...}|」または「@<code>|@@<nop>{}<strong>{...}|」を使ってください。
361
378
 
362
- //list[][サンプル]{
379
+ //list[][サンプル][]{
363
380
  本文本文@<b>|@@<nop>$$<B>{強調}|本文本文。@@<nop>$$<balloon>{ゴシック体なので望ましい}
364
381
 
365
382
  本文本文@<b>|@@<nop>$$<b>{太字}|本文本文。@@<nop>$$<balloon>{明朝体のままなので望ましくない}
@@ -380,7 +397,7 @@ Starterでは節ごとに改ページする設定が用意されています。
380
397
 
381
398
  傍点とは@<bou>{このように}文章の上についた小さな点のことであり、Re:VIEWやStarterなら「@<code>|@@<nop>{}<bou>{...}|」でつけられます。
382
399
 
383
- 傍点は強調とよく似ていますが、強調は「重要な箇所」を表すのに対し、傍点は「重要ではないけど他と区別したい、注意を向けたい」という用途で使います。
400
+ 傍点は強調とよく似ていますが、強調は「重要な箇所」を表すのに対し、傍点は「重要ではないけど他と区別したい・注意を向けたい」という用途で使います。
384
401
 
385
402
  たとえば次の例では、否定文であることが見落とされないよう、傍点を使っています。
386
403
  ここは重要箇所ではないので、強調は使わないほうがいいでしょう。
@@ -390,7 +407,7 @@ Starterでは節ごとに改ページする設定が用意されています。
390
407
  Re:VIEW Starterではアップグレード用スクリプトを用意して@<bou>{いません}。
391
408
  //}
392
409
 
393
- また技術系の文書ではほとんど見かけませんが、小説やエッセーや漫画では「何か含みを持たせた表現」や「のちの伏線になる箇所」に傍点を使います。
410
+ また技術系の文書ではほとんど見かけませんが、小説や漫画では「何か含みを持たせた表現」や「のちの伏線になる箇所」に傍点を使います。
394
411
  参考までに、『ワールドトリガー』22巻@<fn>{fn-z94o3}から傍点を使った例を(ネタバレは避けつつ)引用します。
395
412
 
396
413
  //quote{
@@ -423,13 +440,13 @@ Re:VIEW Starterではアップグレード用スクリプトを用意して@<bou
423
440
  PDFでは、読みやすさのために日本語と英数字の間に少しアキ(隙間)が入ります。
424
441
  これは内部で使っている組版用ソフト「@<LaTeX>{}」の仕様です。
425
442
 
426
- //list[][サンプル]{
427
- あいうえおABC DEFかきくけこ123
443
+ //list[][サンプル][]{
444
+ あいうえおABC DEFかきくけこ123
428
445
  //}
429
446
 
430
447
  //sampleoutputbegin[表示結果]
431
448
 
432
- あいうえおABC DEFかきくけこ123
449
+ あいうえおABC DEFかきくけこ123
433
450
 
434
451
  //sampleoutputend
435
452
 
@@ -438,7 +455,7 @@ PDFでは、読みやすさのために日本語と英数字の間に少しア
438
455
  しかし記号の場合はアキが入りません。
439
456
  たとえば次の例では、「ン」と「-」の間にはアキが入っていません。
440
457
 
441
- //list[][サンプル]{
458
+ //list[][サンプル][]{
442
459
  オプション-pを使う。
443
460
  //}
444
461
 
@@ -452,7 +469,7 @@ PDFでは、読みやすさのために日本語と英数字の間に少しア
452
469
 
453
470
  このような場合は、半角空白を入れるか、またはカッコでくくるといいでしょう。
454
471
 
455
- //list[][サンプル]{
472
+ //list[][サンプル][]{
456
473
  オプション -p を使う。
457
474
 
458
475
  オプション「-p」を使う。
@@ -471,7 +488,50 @@ PDFでは、読みやすさのために日本語と英数字の間に少しア
471
488
 
472
489
  === [PDF] 等幅フォントで余計な空白が入るのを防ぐ
473
490
 
474
- (TODO)
491
+ Re:VIEWやStarterでは、PDFを作成するために「@<LaTeX>{}」という組版ソフトを使っています。
492
+ この@<LaTeX>{}では、半角空白は次のように扱われます。
493
+
494
+ * 文章中の半角空白は、何個連続していても1個分の空白しか出力されない。
495
+ * ただし「.」と「:」と「!」と「?」の直後の半角空白は、1個しかなくても2個分の空白が出力される。
496
+
497
+ このルールは、英語の文章を書くうえでは妥当な仕様です。
498
+ そしてこのルールは、フォントに依らず適用されます。
499
+ そのため等幅フォントを使っているときでも、「.」と「:」と「!」と「?」の直後に半角空白があると2個分の空白が出力されます。
500
+
501
+ しかし、等幅フォントを使うのはたいていプログラムコードやコマンドを表す場合なので、半角空白が勝手に2個出力されてしまうのは困りものです。
502
+ たとえば、@<br>{}
503
+ 「@<code>|{a: 1}|」と書いたつもりが、@<br>{}
504
+ 「@<code>|{a: 1}|」と表示されるのは、意図したことではないでしょう。
505
+
506
+ そこでStarterでは、等幅フォントの場合はこのルールを適用しないようにしています。
507
+ そのための「@<code>|\frenchspacing|」@<fn>{fn-2zb8y}というマクロが@<LaTeX>{}にはあるので、これを使います。
508
+ 具体的には、@<LaTeX>{}マクロを次のように上書きしています。
509
+
510
+ //list[][]{
511
+ %% 「@<tt>{}」を上書き
512
+ \renewcommand{\reviewtt}[1]{{%
513
+ @<b>|\frenchspacing|% % 「! ? : .」の直後の空白が2文字分になるのを防ぐ
514
+ \texttt{#1}% % 等幅フォントで表示
515
+ }}
516
+ //}
517
+
518
+ //footnote[fn-2zb8y][「@<code>{\frenchspacing}」というのは、「フランス流の空白の入れ方」という意味です。フランス語では「. : ! ?」の直後でも空白は1個なようです。]
519
+
520
+ 「@<code>|@@<nop>{}<code>{}|」が呼び出す「@<code>|\reviewcode|」マクロにも同じ変更をしています。
521
+ このおかげで、Starterでは「@<code>|@@<nop>{}<tt>{}|」や「@<code>|@@<nop>{}<code>{}|」を使ったときに空白が2個出力されるのを防いでいます。
522
+
523
+ ただし、本来このようなルール変更は「@<code>|@@<nop>{}<code>{}|」にだけ行うべきであり、「@<code>|@@<nop>{}<tt>{}|」では変更すべきではありません。
524
+ 現実には「@<code>|@@<nop>{}<tt>{}|」がプログラムコードを表すのに広く使われていることを鑑みて、Starterでは「@<code>|@@<nop>{}<tt>{}|」でもルール変更をしています。
525
+ しかし本来はすべきでないと知っておいてください。
526
+
527
+ なお「@<code>|@@<nop>{}<tt>{}|」を本来の動作に戻すには、@<file>{sty/mystyle.sty}に次のマクロ定義を追加してください。
528
+
529
+ //list[][@<file>{sty/mystyle.sty}]{
530
+ %% @@<nop>{}<tt>{} を本来の動作に戻す
531
+ \renewcommand{\reviewtt}[1]{%
532
+ \texttt{#1}% % 等幅フォントで表示
533
+ }
534
+ //}
475
535
 
476
536
 
477
537
  === 文章中のコードは折り返しする
@@ -481,7 +541,16 @@ PDFでは、読みやすさのために日本語と英数字の間に少しア
481
541
 
482
542
  === ノートとコラムを使い分ける
483
543
 
484
- (TODO)
544
+ ノートとコラムはよく似ています。次のように使い分けるといいでしょう。
545
+
546
+ * 本文に対する補足情報は、ノートを使う。
547
+ あくまで補足情報なので、文章が長くなりすぎないよう注意する。
548
+ * 章(Chapter)の終わりに、長めの関連情報やエッセーを書く場合はコラムを使う。
549
+ これは節(Section)と同じ扱いにするので、「@<code>|==[column]|」を使う。
550
+
551
+ ときどき、ノートで書くべきことをすべてコラムで書いている同人誌を見かけます。
552
+ あまりよいことではないので、ノートとコラムの使い分けを検討してみてください。
553
+ また使い分けがよく分からないと思ったら、商業の技術書籍をいくつか参考にしてみてください。
485
554
 
486
555
 
487
556
 
@@ -490,17 +559,20 @@ PDFでは、読みやすさのために日本語と英数字の間に少しア
490
559
  === 節タイトルが複数行になるなら下線や背景色を使わない
491
560
 
492
561
  Starterでは節(Section)のタイトルに下線や背景色をつけられます。
493
- しかしそれらは節タイトルが1行に収まる場合だけを想定しており、複数行の場合は考慮されていません。
562
+ しかしそれらは節タイトルが1行に収まる場合だけを想定しており、複数行の場合は考慮されていません(@<img>{section_title_wlines})。
563
+
564
+ //image[section_title_wlines][節タイトルが長くて複数行になった場合][scale=0.9,border=on,pos=p]
494
565
 
495
- タイトルが長い節(Section)がある場合は、節タイトルに下線も背景色も使わないものがいいでしょう。
496
- 具体的には次のどちらかを選びましょう。
566
+ 複数行になるぐらいの長い節タイトルがある場合は、下線も背景色も使わないデザインを選びましょう。
567
+ Starterであれば、次のどれかを選ぶといいでしょう。
497
568
 
498
- * 「@<code>{leftline}」… 節タイトル左に縦線を引く(@<img>{sechead_design_4}上)
499
- * 「@<code>{numbox}」… 節番号を白ヌキ文字にする(@<img>{sechead_design_4}下)
569
+ * 「@<code>{numbox}」… 節番号を白ヌキ文字(@<img>{section_title_wlines}上から2番目)
570
+ * 「@<code>{leftline}」… 節タイトル左に縦線(@<img>{section_title_wlines}上から4番目)
571
+ * 「@<code>{circle}」… 大きい円に白ヌキ文字(@<img>{section_title_wlines}上から5番目)
500
572
 
501
- //image[sechead_design_4][タイトルが複数行でも崩れない節デザインの例][scale=0.8,border=on]
573
+ このうち「@<code>{circle}」は、節タイトルが1行の場合でも2行分の高さを必要とするので、他のデザインと比べてページ数が若干増えることに注意してください。
502
574
 
503
- Starterにおける節タイトルのデザインを変更する方法は、@<secref>{04-customize|subsec-sectitle}を参照してください。
575
+ なおStarterにおける節タイトルのデザインを変更する方法は、@<secref>{04-customize|subsec-sectitle}を参照してください。
504
576
 
505
577
 
506
578
  === 項を参照するなら項番号をつける
@@ -538,16 +610,18 @@ Starterでは、プログラムコードやターミナルの等幅フォント
538
610
 
539
611
  Starterのデフォルトでは、本文のフォントサイズに関わらず、A5サイズなら9pt、B5サイズなら10ptのフォントサイズが使われます。
540
612
 
541
- * A5サイズなら、本文が9ptでも10ptでも、プログラムコードはデフォルトで9pt
542
- * B5サイズなら、本文が10ptでも11ptでも、プログラムコードはデフォルトで10pt
613
+ * A5サイズなら、本文が9pt10ptのどちらであっても、プログラムコードはデフォルトで9pt
614
+ * B5サイズなら、本文が10pt11ptのどちらであっても、プログラムコードはデフォルトで10pt
615
+
616
+ この調整は、「@<file>{config-starter.yml}」の設定項目「@<code>|program_default_options:|」と「@<code>|terminal_default_options:|」の中の、「@<code>|fontsize:|」で行われています@<fn>{k7dzw}。
617
+ これらの値は、本文がA5サイズ10ptまたはB5サイズ11ptなら「@<code>|small|」に設定され、A5サイズ9ptまたはB5サイズ10ptなら「@<code>|null|」に設定されます。
543
618
 
544
- この調整は、「@<file>{config-starter.yml}」の設定項目「@<code>|program_fontsize:|」と「@<code>|terminal_fontsize:|」で行われています。
545
- 本文がA5サイズ10ptまたはB5サイズ11ptならこれらが「@<code>|small|」に設定され、A5サイズ9ptまたはB5サイズ10ptなら「@<code>|normal|」に設定されます。
619
+ //footnote[k7dzw][以前は「@<code>|progoram_fontsize:|」と「@<code>|terminal_fontsize:|」という設定項目がありましたが、廃止されました。]
546
620
 
547
621
 
548
622
  === 重要箇所を目立たせる
549
623
 
550
- プログラムコードが10行以上あると、読者はコードのどこに注目すればいいか、分からなくなります。
624
+ プログラムコードが5行以上あると、読者はコードのどこに注目すればいいか、分からなくなります。
551
625
  もし注目してほしい箇所が強調されていれば、読者にとってとても理解しやすくなります。
552
626
 
553
627
  プログラムコードの中で注目してほしい箇所は、ぜひ太字にして目立たせましょう。
@@ -597,7 +671,10 @@ Starterでは「@<code>|@@<nop>{}<weak>{...}|」を使うと、プログラム
597
671
 
598
672
  === 差分(追加と削除)の箇所を明示する
599
673
 
600
- サンプルコードを徐々に改善するような内容の場合は、削除した行に取り消し線を引き、追加した行を太字で表示すると、差分が分かりやすくなります。
674
+ サンプルコードを徐々に改善するような内容の場合は、次のようにすると差分が分かりやすくなります。
675
+
676
+ * 削除した行に取り消し線を引く。
677
+ * 追加した行を太字にする。
601
678
 
602
679
  たとえば次のようなサンプルコードがあるとします。
603
680
 
@@ -649,7 +726,7 @@ $('#button').on('click', toggleLabel);
649
726
 
650
727
  === 長い行の折り返し箇所を明示する
651
728
 
652
- 長い行を折り返したとき、折り返した箇所が分かるような表示が望ましいです。
729
+ 長い行が右端で折り返されるとき、折り返された箇所が分かるような表示にするといいでしょう。
653
730
  そのための方法は3つあります。
654
731
 
655
732
  * 折り返し箇所に何らかの目印をつける
@@ -748,9 +825,11 @@ PythonやYAMLではインデントでブロック構造を表すので、ブロ
748
825
  これを防ぐには、何らかの方法でインデントを可視化します。
749
826
  そうすると、プログラムコードがページをまたいでもインデントが分からなくなることはありません。
750
827
 
751
- Starterでは「@<code>|//list[][]@<b>{[indentwidth=4]}{ ... //}|」のようにすることで、インデントごとに薄い縦線をつけられます。
828
+ Starterでは「@<code>|//list[][]@<b>{[indent=4]}{ ... //}|」@<fn>{lvw95}のようにすることで、インデントごとに薄い縦線をつけられます。
829
+
830
+ //footnote[lvw95][後方互換性のために、「@<code>{indentwidth=4}」という名前でも指定できます。]
752
831
 
753
- //list[][薄い縦線をつけてインデントを可視化する][indentwidth=4]{
832
+ //list[][薄い縦線をつけてインデントを可視化する][indent=4]{
754
833
  class Fib:
755
834
 
756
835
  def __call__(n):
@@ -792,30 +871,37 @@ Starterだと「@<code>|//image[ファイル名][説明文][scale=1.0,@<b>{pos=p
792
871
  図なら「@<code>|@@<nop>{}<img>{ファイル名}|」、表なら「@<code>|@@<nop>{}<table>{ラベル}|」で参照します。
793
872
 
794
873
 
874
+ === 白黒印刷でも問題ないか確認する
875
+
876
+ 形は同じで色だけが違う図形を使うと、白黒印刷したときに判別がつかなくなります。
877
+
878
+ 白黒印刷するなら、形を変えたり線の種類を変えたりするなどして、白黒印刷しても判別できるような図にしましょう。
879
+
880
+
795
881
  === 表のカラム幅を指定する
796
882
 
797
883
  表に長い文章を入れると、ページ横にはみ出してしまいます。
798
884
 
799
- このような場合は、「@<code>{//tsize[|latex|@<b>{p{70mm\}}]}」のようにカラムの幅を指定しましょう。
885
+ このような場合は、「@<code>{//tsize[latex][@<b>{p{70mm\}}]}」のようにカラムの幅を指定しましょう。
800
886
 
801
- //list[][サンプル]{
802
- /@<nop>$$/tsize[|latex||l|@<b>|p{70mm}||]
887
+ //list[][サンプル][]{
888
+ /@<nop>$$/tsize[latex][|l|@<b>|p{70mm}||]
803
889
  /@<nop>$$/table[tbl-jqqu9][長いテキストを使ったサンプル]{
804
890
  伝承地 伝承内容
805
891
  -------------------------------------------
806
- 風の谷 その者、蒼き衣を纏て金色の野に降り立つべし。失われた大地との絆を結び、ついに人々を清浄の地に導かん。
807
- ゴンドアの谷 リーテ・ラトバリタ・ウルス・アリアロス・バル・ネロリール
892
+ 風の谷 その者、蒼き衣を纏て金色の野に降り立つべし。失われし大地との絆を結び、ついに人々を青き清浄の地に導かん。
893
+ ゴンドアの谷 リーテ・ラトバリタ・ウルス・アリアロス・バル・ネトリール
808
894
  /@<nop>$$/}
809
895
  //}
810
896
 
811
897
  //sampleoutputbegin[表示結果]
812
898
 
813
- //tsize[|latex||l|p{70mm}|]
899
+ //tsize[latex][|l|p{70mm}|]
814
900
  //table[tbl-jqqu9][長いテキストを使ったサンプル]{
815
901
  伝承地 伝承内容
816
902
  -------------------------------------------
817
- 風の谷 その者、蒼き衣を纏て金色の野に降り立つべし。失われた大地との絆を結び、ついに人々を清浄の地に導かん。
818
- ゴンドアの谷 リーテ・ラトバリタ・ウルス・アリアロス・バル・ネロリール
903
+ 風の谷 その者、蒼き衣を纏て金色の野に降り立つべし。失われし大地との絆を結び、ついに人々を青き清浄の地に導かん。
904
+ ゴンドアの谷 リーテ・ラトバリタ・ウルス・アリアロス・バル・ネトリール
819
905
  //}
820
906
 
821
907
  //sampleoutputend
@@ -828,8 +914,8 @@ Starterだと「@<code>|//image[ファイル名][説明文][scale=1.0,@<b>{pos=p
828
914
  表のカラムはデフォルトで左寄せ(l)ですが、右寄せ(r)や中央揃え(c)を指定できます。
829
915
  特にカラムが数値なら、右寄せにするのがいいでしょう。
830
916
 
831
- //list[][サンプル]{
832
- /@<nop>$$/tsize[|latex|@<b>{|l|c|r|}]
917
+ //list[][サンプル][]{
918
+ /@<nop>$$/tsize[latex][@<b>{|l|c|r|}]
833
919
  /@<nop>$$/table[tbl-o599k][左寄せ・中央揃え・右寄せのサンプル]{
834
920
  左寄せ 中央揃え 右寄せ
835
921
  -------------------------------------------
@@ -842,7 +928,7 @@ Starterだと「@<code>|//image[ファイル名][説明文][scale=1.0,@<b>{pos=p
842
928
 
843
929
  //sampleoutputbegin[表示結果]
844
930
 
845
- //tsize[|latex||l|c|r|]
931
+ //tsize[latex][|l|c|r|]
846
932
  //table[tbl-o599k][左寄せ・中央揃え・右寄せのサンプル]{
847
933
  左寄せ 中央揃え 右寄せ
848
934
  -------------------------------------------
@@ -873,7 +959,7 @@ Starterだと「@<code>|//image[ファイル名][説明文][scale=1.0,@<b>{pos=p
873
959
  //image[margin_book][紙の書籍ではページ左右の余白幅が必要][scale=0.8]
874
960
 
875
961
  Starterではこのような制限を考慮しつつ、本文幅が最大になるよう設定しています。
876
- そのため、@<b>{印刷用PDFファイルでは奇数ページと偶数ページで左右の余白幅が違います}。
962
+ そのため、@<B>{印刷用PDFファイルでは奇数ページと偶数ページで左右の余白幅が違います}。
877
963
  これは意図した仕様でありバグではありません。
878
964
 
879
965
  電子用PDFファイルではこのようなことを考慮する必要はありません。
@@ -882,12 +968,35 @@ Starterではこのような制限を考慮しつつ、本文幅が最大にな
882
968
 
883
969
  === [PDF] タブレット向けでは余白を切り詰める
884
970
 
885
- (TODO)
971
+ Starterでは、印刷用PDFと電子用PDFを切り替えて生成できます。
972
+ このとき、電子用PDFのレイアウトは印刷用PDFをほぼ忠実に再現しています。
973
+ つまり電子用PDFのレイアウトは電子用として最適化されているわけではなく、あくまで印刷用のレイアウトを流用しているだけです。
886
974
 
975
+ もし印刷用PDFを必要とせず、電子用PDFだけを必要とするなら、レイアウトをタブレット向けに最適化するといいでしょう。
976
+ タブレット向けのPDFでは、本文周辺の余白を切り詰めると、7インチや8インチのタブレットでの読みやすさが向上します。
977
+ 余白がまったくないのもどうかと思いますが、全角1文字分ぐらいの余白があればタブレットの画面では十分です。
887
978
 
888
- === 電子書籍ではページ番号の位置を揃える
979
+ Starterでは、プロジェクト作成時にタブレット向けのレイアウトを選択できます。
980
+ そうすると、タブレット向けに余白を切り詰めたレイアウトになります。
981
+ 印刷用PDFを必要としない人は試してみてください。
889
982
 
890
- (TODO)
983
+ なおタブレット向けに余白を切り詰めたA5サイズの本文幅は、切り詰めていない通常のB5サイズの本文幅とほぼ同じになります。
984
+ つまりB5サイズで余白を切り詰めると本文幅が長くなりすぎるので、Starterではタブレット向けとしてはA5サイズのみを用意しています。
985
+
986
+
987
+ === [PDF] 電子用PDFではページ番号の位置を揃える
988
+
989
+ 紙の書籍においてページ番号は、見開きで左右の上隅または下隅に置かれることが多いです。
990
+ 紙の書籍は見開きで読めるので、ページ番号がこのような位置でも問題ありません。
991
+
992
+ しかしこれと同じことを電子用PDFで行うと、ページ番号の位置が右上だったり左上だったり(あるいは右下だったり左下だったり)一定しないので、読みづらいです。
993
+ なぜなら、電子用PDFをタブレットで見るときは見開きではなく1ページずつ読まれるからです。
994
+
995
+ つまり紙の書籍におけるページ番号は見開きであることを前提にしており、それと同じ前提を電子用PDFにしてはいけません。
996
+
997
+ 電子用PDFでは、ページ番号の位置は一定であることが望ましいです。
998
+ そのため、Starterではページ番号をページ下の真ん中に置いています。
999
+ またこの位置は紙の書籍でも通用するので、印刷用PDFと電子用PDFとで同じページレイアウトにできます。
891
1000
 
892
1001
 
893
1002
  === 非Retina向けには本文をゴシック体にする
@@ -916,19 +1025,45 @@ Starterでは「@<file>{config-starter.yml}」の設定を変えるだけで変
916
1025
  //image[multiline-title][タイトルの改行位置を指定しなかった場合(上)とした場合(下)][scale=0.7,border=on]
917
1026
 
918
1027
 
919
- === 大扉を別のソフトで作成する
1028
+ ==={subsec-visualtitlepage} 大扉を別のソフトで作成する
920
1029
 
921
1030
  Re:VIEWやStarterが生成する大扉(タイトルページ)は、デザインがよくありません。
922
1031
  PhotoshopやIllustratorやKeynoteで作成したほうが、見栄えのいいデザインになります(@<img>{titlepage-samples})。
923
1032
 
924
1033
  //image[titlepage-samples][Keynoteで作成した大扉の例][scale=0.9]
925
1034
 
1035
+ Starterでは、別のソフトで作成した大扉や奥付のPDFファイルを読み込めます。
1036
+ やり方は@<secref>{04-customize|subsec-coverpdf}を参照してください。
1037
+
1038
+ またこうして読み込んだPDFファイルにも、ノンブルがつきます。
1039
+ 以前は大扉や奥付のPDFファイルを読み込む機能がなかったため、最初にノンブルなしの印刷用PDFを生成し、大扉や奥付を差し替えてから、最後にノンブルをつける必要がありました。
1040
+ 今は印刷用PDF生成時に大扉や奥付のPDFファイルを読み込めるので、最初からノンブルつきで印刷用PDFが生成できます。
1041
+
1042
+ このように、別ソフトで作成さた大扉を取り込む機能がStarterでは整っています。
1043
+ 積極的に別ソフトで作っていきましょう。
1044
+ なお印刷所へ入稿するなら、大扉に背景色をつける場合は塗り足し@<fn>{fn-79q5r}もつけましょう。
1045
+ 「塗り足し」が分からなければ、大扉の背景色を白にしておくと入稿時のトラブルが少なくなりま
1046
+ す。
1047
+
1048
+ //footnote[fn-79q5r][塗り足しについては@<secref>{04-customize|subsec-bleed}を参照してください。]
1049
+
1050
+ //note[大扉をKeynoteやPagesで作成する]{
1051
+ Keynote.appで大扉を作成しようとすると、困ったことにKeynote.appにはスライドのサイズをA5やB5にする機能がありません。
1052
+ かわりにスライドを次のようなカスタムサイズにすると、ちょうどA5やB5のサイズになります。
1053
+
1054
+ * A5の場合:419pt x 595pt
1055
+ * B5の場合:516pt x 728pt
1056
+
1057
+ またPages.appなら簡単にA5やB5にできます。
1058
+ B5にしたい場合は「JIS B5」を選んでください。
1059
+ //}
1060
+
926
1061
 
927
1062
 
928
1063
  == 奥付
929
1064
 
930
1065
 
931
- === 奥付は最後のページに置く
1066
+ ==={subsec-colophonlastpage} 奥付は最後のページに置く
932
1067
 
933
1068
  紙の本は必ず偶数ページになります。
934
1069
  たとえば、ページ数が100ページの本はあっても101ページの本はありません。
@@ -940,14 +1075,14 @@ PhotoshopやIllustratorやKeynoteで作成したほうが、見栄えのいい
940
1075
 
941
1076
  実は素のRe:VIEWではこれが考慮されておらず、奥付が奇数ページに置かれることがあります@<fn>{fn-qzmgo}。
942
1077
  Starterではこのようなことはありません。
943
- 奥付は必ず最後の偶数ページに置かれるようになっています。
1078
+ 奥付は必ず最後の偶数ページに置かれます。気が利いてますね。
944
1079
 
945
1080
  //footnote[fn-qzmgo][TechBoosterのテンプレートでは偶数ページに置かれるように修正されています。]
946
1081
 
947
1082
 
948
1083
  === 奥付に更新履歴とイベント名を記載する
949
1084
 
950
- 奥付には、本の更新履歴が記載されるのが一般的です。
1085
+ 一般的に、奥付には本の更新履歴が記載されます。
951
1086
 
952
1087
  同人誌ならそれに加えて、初出のイベント名も記載するといいでしょう。
953
1088
  そうすると、どのイベントで手に入れたかが分かりやすくなります@<fn>{fn-ksg34}。
@@ -969,3 +1104,240 @@ Starterではこのようなことはありません。
969
1104
  たとえば「InDesignで作った」「MS Word 2016で作った」「Pages 10.0で作った」「Vivliostyleで作った」という情報があると、これから本や同人誌を作ろうとする人にとって大きな手がかりとなります。
970
1105
 
971
1106
  またエディタに強いこだわりがある人なら「VS Codeで執筆した」「Vimで執筆した」のようにアピールするのもいいでしょう。
1107
+
1108
+
1109
+
1110
+ =={sec-textlint} textlintによる文章チェック
1111
+
1112
+ この章では、「textlint」というツールを使って文章をチェックする方法を紹介します。
1113
+
1114
+
1115
+ === textlintとは
1116
+
1117
+ 「@<href>{https://github.com/textlint/textlint, textlint}」とは、日本語の文章をチェックして改善点を指摘してくれるツールです。
1118
+
1119
+ たとえば、次のような内容のファイルがあるとします。
1120
+ ファイル名の拡張子は「@<file>{.rd}」ではなく「@<file>{.md}」であることに注意してください。
1121
+
1122
+ //list[][@<file>{sample1.md}:改善前]{
1123
+ Re:VIEW Starterを使うと、きれいなPDFファイルを作成することができます。
1124
+ //}
1125
+
1126
+ これをtextlintでチェックすると、「もっと簡潔に書けるよ」と指摘してくれます(textlintのインストールについてはあとで説明します)。
1127
+
1128
+ //terminal{
1129
+ $ @<userinput>{textlint sample1.md}
1130
+
1131
+ /Users/yourname/sample1.md
1132
+ 1:35 ✓ error 【dict2】 "することができます"は冗長な表現です。"することが"を省き簡潔な表現にすると文章が明瞭になります。
1133
+ 解説: https://github.com/textlint-ja/textlint-rule-ja-no-redundant-expression#dict2 ja-technical-writing/ja-no-redundant-expression
1134
+
1135
+ ✖ 1 problem (1 error, 0 warnings)
1136
+ ✓ 1 fixable problem.
1137
+ Try to run: $ textlint --fix [file]
1138
+
1139
+ //}
1140
+
1141
+ 指摘された通りに改善してみましょう。
1142
+
1143
+ //list[][@<file>{sample1.md}:改善後]{
1144
+ Re:VIEW Starterを使うと、きれいなPDFファイルを作成@<del>{することが}できます。
1145
+ //}
1146
+
1147
+ これをtextlintでチェックすると、指摘されなくなりました。
1148
+
1149
+ //terminal{
1150
+ $ textlint sample1.md @<balloon>{何もエラーが出ない}
1151
+ //}
1152
+
1153
+ もう1つ、別の例を見てみましょう。
1154
+ たとえば次のような文章があるとします。
1155
+
1156
+ //list[][@<file>{sample2.md}:改善前]{
1157
+ ノンブルは、印刷所に入稿するときに必要です。
1158
+ //}
1159
+
1160
+ 一見すると問題がない文章ですが、textlintでチェックすると「1つの文に複数個の『に』があるよ」と指摘してくれます。
1161
+
1162
+ //terminal{
1163
+ $ textlint sample2.md
1164
+
1165
+ /Users/yourname/sample1.md
1166
+ 1:17 error 一文に二回以上利用されている助詞 "に" がみつかりました。 japanese/no-doubled-joshi
1167
+
1168
+ ✖ 1 problem (1 error, 0 warnings)
1169
+
1170
+ //}
1171
+
1172
+ 指摘されたことを改善してみましょう。
1173
+
1174
+ //list[][@<file>{sample2.md}:改善後]{
1175
+ ノンブルは、印刷所@<del>{に}@<b>{へ}入稿するときに必要です。
1176
+ //}
1177
+
1178
+ 改善後は、指摘されなくなりました。
1179
+
1180
+ //terminal{
1181
+ $ textlint sample2.md @<balloon>{何もエラーが出ない}
1182
+ //}
1183
+
1184
+ このように、textlintを使うと日本語文章の改善できそうな点が分かります。
1185
+ とはいえ、textlintも万能ではありません。
1186
+ 次の項で注意点を説明します。
1187
+
1188
+
1189
+ === textlintの注意点
1190
+
1191
+ textlintは似たような文章であっても、改善点を指摘してくれないことがあります。
1192
+ たとえば先ほどの1番目の例である「@<bou>{作成する}ことができます」だと改善点を指摘してくれますが、「@<bou>{作る}ことができます」だと指摘してくれません。
1193
+ 前者が「作成できます」に改善できたように、後者も「作れます」に改善できます。
1194
+
1195
+ またtextlintは「どこが改善できるか」を教えてくれますが、「どう改善できるか」は必ずしも教えてくれません。
1196
+ 先ほどの2番目の例がまさにそれで、『に』が複数あることは教えてくれますが、どう直せばいいかは自分で考える必要があります。
1197
+
1198
+ さらにtextlintの指摘がいつも正しいわけではありません。
1199
+ たとえば「血も涙もない。」という文章をtextlintでチェックすると、「1つの文章に複数個の『も』があるよ」と指摘されます。
1200
+ しかしこの指摘がおかしいことは、明らかでしょう。
1201
+
1202
+ //list[][@<file>{sample3.md}:修正前]{
1203
+ 血も涙もない。
1204
+ //}
1205
+
1206
+ //terminal{
1207
+ $ textlint sample3.md
1208
+
1209
+ /Users/yourname/sample3.md
1210
+ 1:4 error 一文に二回以上利用されている助詞 "も" がみつかりました。 japanese/no-doubled-joshi
1211
+
1212
+ ✖ 1 problem (1 error, 0 warnings)
1213
+
1214
+ //}
1215
+
1216
+ 『も』が複数個現れないように修正できますが、これはさすがにやりすぎです。
1217
+ しないほうがいいでしょう。
1218
+
1219
+ //list[][@<file>{sample3.md}:修正後]{
1220
+ @<del>{血も涙もない。}
1221
+ @<b>{血と涙のどちらも欠いている。}
1222
+ //}
1223
+
1224
+ //terminal{
1225
+ $ textlint sample3.md @<balloon>{何もエラーが出ない}
1226
+ //}
1227
+
1228
+ このような過剰な指摘が起きたのは、Starterがデフォルトで用意したtextlint用の設定が、技術文章向けだからです。
1229
+ textlintは、事前に設定されたルールに従って文章をチェックするツールです。
1230
+ 設定されたルールが小説向けであれば小説向けのチェックをし、技術文章向けであれば技術文章向けのチェックをします。
1231
+
1232
+ textlintの設定は、プロジェクトフォルダの直下にある「@<file>{.textlintrc}」というファイルで変更できます。
1233
+ たとえば次のように変更すると、複数の『も』が登場してもエラーにならなくなります。
1234
+
1235
+ //list[][@<file>{.textlintrc}]{
1236
+ {
1237
+ "filters": {
1238
+ }
1239
+ , "rules": {
1240
+ "preset-japanese": false
1241
+ @<del>|, "preset-ja-technical-writing": true|
1242
+ @<b>|, "preset-ja-technical-writing": {|
1243
+ @<b>|"no-doubled-joshi": {|
1244
+ @<b>|"allow": ["も"]|
1245
+ @<b>|}|
1246
+ @<b>|}|
1247
+ , "preset-jtf-style": false
1248
+ , "preset-ja-spacing": false
1249
+ , "preset-ja-engineering-paper": false
1250
+ }
1251
+ //}
1252
+
1253
+ 「@<file>{.textlintrc}」についてこれ以上の解説はしません。
1254
+ 詳しく知りたい人は「textlint 使い方」でGoogle検索してください。
1255
+
1256
+ ここまでが、textlintについての一般的な説明でした。
1257
+ 次の項から、Starterでtextlintを使う方法を説明します。
1258
+
1259
+
1260
+ === Starterのプロジェクトでtextlintを使う
1261
+
1262
+ Starterのプロジェクトでtextlintを使うには、次のようにします。
1263
+
1264
+ - (1) Node.jsとnpmコマンドをインストールする。
1265
+ - (2) textlintをインストールする。
1266
+ - (3) textlintで原稿をチェックする。
1267
+
1268
+ (1)と(2)は準備なので、プロジェクトごとに一度だけ行います。
1269
+
1270
+ それぞれ順番に説明します。
1271
+
1272
+
1273
+ ==== (1) Node.jsとnpmコマンドをインストール
1274
+
1275
+ textlintを実行するには、@<href>{https://nodejs.org/, Node.js}とnpmコマンドをインストールする必要があります。
1276
+
1277
+ * Dockerを使っている場合は、Dockerイメージの中にNode.jsとnpmコマンドがインストール済みなので、何もする必要がありません。
1278
+ * Dockerを使っていない場合は、@<href>{https://nodejs.org/}にアクセスしてNode.jsをインストールしてください。
1279
+ npmコマンドも自動的にインストールされます。
1280
+
1281
+ //note[Node.jsのバージョンについて]{
1282
+ インストールするNode.jsのバージョンは、「LTS」と書かれたほうを選ぶといいでしょう。
1283
+ Current」と書かれたほうのバージョンでも動作しますが、こちらは上級者向けです。
1284
+ //}
1285
+
1286
+ ==== (2) textlintをインストール
1287
+
1288
+ 次に、textlintとその関連ライブラリをインストールします。
1289
+ StarterではそのためのRakeタスクが用意されているので、次のコマンドを実行してください。
1290
+
1291
+ //terminal[][textlintと関連ライブラリをインストール]{
1292
+ $ @<userinput>{rake textlint:setup} @<balloon>{Dockerを使わない場合}
1293
+ $ @<userinput>{rake docker:textlint:setup} @<balloon>{Dockerを使う場合}
1294
+ //}
1295
+
1296
+ これでtextlintのインストールは完了しました。
1297
+
1298
+ ==== (3) textlintで原稿をチェック
1299
+
1300
+ textlintを使って原稿の文章をチェックするには、「@<code>{rake textlint}」(または「@<code>{rake docker:textlint}」)を実行してください。
1301
+
1302
+ //terminal[][textlintで原稿の文章をチェックする(結果は省略)]{
1303
+ $ @<userinput>{rake textlint} @<balloon>{Dockerを使わない場合}
1304
+ $ @<userinput>{rake docker:textlint} @<balloon>{Dockerを使う場合}
1305
+ //}
1306
+
1307
+ たくさんのエラーが出るので驚くでしょう。
1308
+ 指摘された点のすべてを修正する必要はありません。
1309
+ 自分で納得できたことだけを修正すればいいです。
1310
+
1311
+ ただし出力結果を見ると、ファイル名と行番号が原稿とは違うことに気づくはずです。
1312
+ この理由を次の項で説明します。
1313
+
1314
+
1315
+ === Starterにおけるtextlint実行の仕組み
1316
+
1317
+ textlintは、Starterの原稿ファイル(@<file>{*.re})には対応していません。
1318
+ そこでStarterでは、次のような仕組みでtextlintを実行します。
1319
+
1320
+ - (1) 原稿ファイル(@<file>{*.re})をMarkdown形式のファイル(@<file>{*.md})に変換する。
1321
+ - (2) Markdown形式のファイルをtextlintでチェックする。
1322
+
1323
+ このような仕組みのため、textlintが報告するのはMarkdown形式のファイルにおける行番号であり、原稿ファイルの行番号ではありません。
1324
+ よってtextlintの指摘事項を反映するには、出力された行番号をもとにMarkdownファイルを見て指摘内容を確認し、原稿ファイルに戻って修正するという手順になります。
1325
+
1326
+ これは理想的とは言い難いです。
1327
+ 解決方法は3つ考えられます。
1328
+
1329
+ - (A) textlintを改造して、Starterの原稿ファイルを直接読んで解釈できるようにする。
1330
+ - (B) 原稿ファイルとMarkdownファイルの行番号が一致するように変換する。
1331
+ - (C) 原稿ファイルとMarkdownファイルとの行番号のマッピングデータを生成し、それを利用してtextlintの出力結果に含まれる行番号をMarkdownファイルの行番号から原稿ファイルの行番号に書き換える。
1332
+
1333
+ どれも手間のかかる作業になるので、将来も含めて対応はあまり期待しないでください。
1334
+
1335
+ もしもっといい方法を思いついた人がいたら、ぜひ教えてくださるようお願いします。
1336
+
1337
+
1338
+ //note[Markdownへの変換は精度がよくない]{
1339
+ StarterにおけるMarkdown形式への変換機能はtextlintで使うために実装したので、「textlintで使えればそれでいい」という割り切りをしています。
1340
+ そのため、Markdown形式への変換は精度があまりよくありません。
1341
+
1342
+ 「こう改善してほしい」と具体的に提案していただければ対応しますが、そもそもあまり力を入れた機能ではないことをご了承ください。
1343
+ //}