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
@@ -36,6 +36,21 @@ aut:
36
36
  - name: カウプラン機関極東支部
37
37
  file-as: カウプランキカンキョクトウシブ
38
38
 
39
+ # (Starter拡張) 奥付に載せるデータ。現在はPDFのみ対応。
40
+ additional:
41
+ # 技書博では発行責任者とその連絡先が必須になった。
42
+ # 詳しくはこのページを参照:
43
+ # https://esa-pages.io/p/sharing/13039/posts/115/7fbe936149a836eac678.html#奥付の記載
44
+ - key: 発行者 # サークル名ではなく個人名(ペンネーム可)
45
+ value:
46
+ - key: 連絡先 # メールアドレス推奨
47
+ value:
48
+ ### 連絡先の例:
49
+ #value:
50
+ # - xxxxx@example.com # メールアドレス
51
+ # - https://www.example.com/ # WebサイトURL
52
+ # - "@xxxxx" # Twitterアカウント(先頭に '@' をつけること)
53
+
39
54
  # 以下はオプション
40
55
  # 以下はオプション(autと同じように配列書式で複数指定可能)。
41
56
  # 読みの指定はaut:の例を参照。
@@ -74,16 +89,18 @@ prt: ○○印刷所
74
89
  # a-trl, trl: 翻訳者
75
90
 
76
91
  # 刊行日(省略した場合は実行時の日付)
77
- date: 2020-02-29
92
+ date: 2021-07-10
78
93
  # 発行年月。YYYY-MM-DD形式による配列指定。省略した場合はdateを使用する
79
94
  # 複数指定する場合は次のように記述する
80
95
  # [["初版第1刷の日付", "初版第2刷の日付"], ["第2版第1刷の日付"]]
81
96
  # 日付の後ろを空白文字で区切り、任意の文字列を置くことも可能。
82
- history: [["2020-02-29 ver 1.0"]]
97
+ history:
98
+ - # 初版
99
+ - 2021-07-10 ver 1.0 (技術書典11)
83
100
  # [experimental] 新刊を頒布したイベント名(例:「技術書典6(2019年春)新刊」)
84
- pubevent_name: 技術書典82020年春)新刊
101
+ pubevent_name: 技術書典112021年夏)新刊
85
102
  # 権利表記(配列で複数指定可)
86
- rights: (C) 2020 カウプラン機関極東支部
103
+ rights: (C) 2021 カウプラン機関極東支部
87
104
  # description: 説明
88
105
  # subject: 短い説明用タグ(配列で複数指定可)
89
106
  # type: 書籍のカテゴリーなど(配列で複数指定可)
@@ -198,6 +215,10 @@ titlepage: true
198
215
  # contentdir: null
199
216
  contentdir: contents
200
217
 
218
+ # @<w>命令で使用する単語ファイルのパス。文字コードは必ずUTF-8。
219
+ # CSV形式 (*.csv) とタブ区切りテキスト (*.txt または *.tsv) が利用可能。
220
+ words_file: data/words.txt # [f1.csv, f2.txt] のように複数指定も可能
221
+
201
222
  # 1ページの行数文字数と1kbごとのページ数を用紙サイズで指定する(A5 or B5)。
202
223
  # page_metric: A5
203
224
  #
@@ -294,7 +315,7 @@ epubmaker:
294
315
  # epubmaker:階層を使うものはここまで
295
316
 
296
317
  # LaTeX用のスタイルファイル(styディレクトリ以下に置くこと)
297
- texstyle: [reviewmacro, starter, mystyle, mytitlepage, mycolophon]
318
+ texstyle: [reviewmacro, starter, mytitlepage, mycolophon, mystyle]
298
319
  #
299
320
  # LaTeX用のdocumentclassを指定する
300
321
  # texdocumentclass: ["jsbook", "uplatex,oneside"]
@@ -317,7 +338,7 @@ texoptions: "-halt-on-error -file-line-error" # エラー時にインタラク
317
338
  dvicommand: dvipdfmx
318
339
  #
319
340
  # LaTeX用のdvi変換コマンドのオプションを指定する
320
- dvioptions: "-d 5 -z 3" # -z 9 だと画像を最大圧縮する(ただし時間がかかる)
341
+ dvioptions: "-q -d 5 -z 3" # -z 9 だと画像を最大圧縮する(ただし時間がかかる)
321
342
 
322
343
  # 以下のパラメータを有効にするときには、
323
344
  # pdfmaker:
@@ -344,20 +365,28 @@ pdfmaker:
344
365
  # 画像のscale=X.Xという指定を画像拡大縮小率からページ最大幅の相対倍率に変換します。
345
366
  # image_scale2width: true
346
367
  #
368
+ # 索引
369
+ makeindex: # true なら本の巻末に索引をつける
370
+ # 索引作成コマンドの設定
371
+ makeindex_command: upmendex # 索引を生成するコマンド(デフォルト値:mendex)
372
+ makeindex_options: "-q -g" # 索引見出しを「あ か さ た な は …」にする
373
+ #makeindex_options: "-q" # 索引見出しを「あ い う え お か …」にする
374
+ #makeindex_options: "-f -r -I utf8" # (参考:Re:VIEWでのデフォルト値)
375
+ makeindex_sty: sty/indexstyle.ist # スタイルファイル
376
+ makeindex_dic: data/terms.txt # 用語の読み仮名が書かれたファイル
377
+ makeindex_mecab: false # 読み仮名を形態素解析で自動取得するか?
378
+ makeindex_mecab_opts: "-Oyomi" # 形態素解析エンジン「MeCab」のオプション
379
+ #
347
380
  # 奥付を作成するか。trueを指定するとデフォルトの奥付、ファイル名を指定するとそれがcolophon.htmlとしてコピーされる
348
381
  colophon: true
349
382
  #
350
383
  # 表紙に配置し、書籍の影絵にも利用する画像ファイル。同人誌の印刷では一般的に、表紙は本文と別ファイルにするので、ここはnullにする。
351
384
  #coverimage: null
352
- ### Starterでは、表紙をPDFで用意してください。電子用PDFでのみ挿入されます。
353
- ### ・デフォルトでは印刷用PDFファイルが生成させるので挿入されません。
354
- ### config-starter.ymlで「target: ebook」を設定するか、または
355
- ### 環境変数「STARTER_TARGET=ebook」を設定すると電子用になり、
356
- ### 表紙PDFが挿入されます。
357
- ### ・表紙用PDFファイルは images/ フォルダ直下に置いてください。
358
- coverpdf_files: [cover_a5.pdf] # PDFファイル名(複数指定可)(PNGやJPGはダメ)
359
- backcoverpdf_files: [] # 裏表紙のPDFファイル名(複数指定可)(PNGやJPGはダメ)
360
- coverpdf_option: "offset=-2.3mm 2.3mm" # 必要に応じて微調整すること
385
+ #
386
+ ### 【注意】次の設定項目は config-starter.yml に移動し、項目名も変わりました。
387
+ ### coverpdf_files: => frontcover_pdffile:
388
+ ### ・backcoverpdf_files: => backcover_pdffile:
389
+ ### ・coverpdf_option: => includepdf_option:
361
390
  #
362
391
  # pdfmaker:階層を使うものはここまで
363
392
 
@@ -1,4 +1,4 @@
1
- = まえがき
1
+ = まえがき / はじめに
2
2
 
3
3
  //centering{
4
4
  **************** @<strong>{注意} ****************
@@ -58,7 +58,7 @@ $ @<userinput>{vi catalog.yml} @<balloon>{各章のファイル名を
58
58
  本書では次のような人を対象としています。
59
59
 
60
60
  * XXXについて興味がある人
61
- * XXXの入門書を読んだ人(まったくの初心者は対象外です)
61
+ * XXXの入門書を読んだ初級者の人(まったくの初心者は対象外です)
62
62
 
63
63
 
64
64
  ====[notoc] 前提とする知識
@@ -81,3 +81,49 @@ $ @<userinput>{vi catalog.yml} @<balloon>{各章のファイル名を
81
81
 
82
82
  本書はXXXX氏とXXXX氏にレビューしていただきました。
83
83
  この場を借りて感謝します。ありがとうございました。
84
+
85
+
86
+
87
+ //clearpage
88
+
89
+ ==[notoc] 凡例
90
+
91
+ 本書では、プログラムコードを次のように表示します。太字は強調を表します。
92
+
93
+ //list[][]{
94
+ print("Hello, @<b>|world|!\n"); @<balloon>{太字は強調}
95
+ //}
96
+
97
+ プログラムコードの差分を表示する場合は、追加されたコードを太字で、削除されたコードを取り消し線で表します。
98
+
99
+ //list[][]{
100
+ @<del>|print("Hello, @<b>|world|!\n");| @<balloon>{取り消し線は削除したコード}
101
+ @<b>|print("Hello, "+name+"!\n");| @<balloon>{太字は追加したコード}
102
+ //}
103
+
104
+ 長い行が右端で折り返されると、折り返されたことを表す小さな記号がつきます。
105
+
106
+ //list[][]{
107
+ 123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_
108
+ //}
109
+
110
+ ターミナル画面は、次のように表示します。
111
+ 行頭の「@<code>|$ |」はプロンプトを表し、ユーザが入力するコマンドには薄い下線を引いています。
112
+
113
+ //terminal{
114
+ $ @<userinput>|echo Hello| @<balloon>{行頭の「$ 」はプロンプト、それ以降がユーザ入力}
115
+ //}
116
+
117
+ 本文に対する補足情報や注意・警告は、次のようなノートや囲み枠で表示します。
118
+
119
+ //note[ノートタイトル]{
120
+ ノートは本文に対する補足情報です。
121
+ //}
122
+
123
+ //info[タイトル]{
124
+ 本文に対する補足情報です。
125
+ //}
126
+
127
+ //caution[タイトル]{
128
+ 本文に対する注意・警告です。
129
+ //}
@@ -39,6 +39,9 @@ e-upTeX 3.14159265-p3.7.1-u1.22-161114-2.6 (utf8.uptex) (TeX Live 2017/Debian)
39
39
  ...(省略)...
40
40
  //}
41
41
 
42
+ #@#なおmacOSのようにRubyが使える環境なら、「@<code>|docker pull kauplan/review2.5|」のかわりに「@<code>|rake setup:dockerimage|」を実行してもいいです(内部で同じことを行います)。
43
+ なおmacOSのようにRubyが使える環境なら、「@<code>|rake setup:dockerimage|」を実行すると自動的に「@<code>|docker pull kauplan/review2.5|」が実行されます。
44
+
42
45
 
43
46
  === macOSを使っている場合
44
47
 
@@ -61,14 +64,42 @@ ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
61
64
 
62
65
  実際の出力結果は上と少し違うはずですが、だいたい合っていればOKです。
63
66
 
64
- また、必要なライブラリをインストールするために、以下のコマンドも実行してください(各行の先頭にある「@<code>{$ }」は入力せず、それ以降のコマンドを入力してください)。
67
+ また必要なライブラリをインストールするために、以下のコマンドも実行してください(各行の先頭にある「@<code>{$ }」は入力せず、それ以降のコマンドを入力してください)。
65
68
 
66
69
  //terminal[][必要なライブラリをインストール]{
70
+ ### Rubyに詳しくない初心者向け
71
+ $ @<userinput>{rake setup:rubygems}
72
+
73
+ ### Rubyに詳しい人向け
67
74
  $ @<userinput>{gem install review --version=2.5}
68
75
  $ @<userinput>{review version}
69
76
  2.5.0 @<balloon>{必ず「2.5.0」であること(より新しいバージョンは未サポート)}
70
77
  //}
71
78
 
79
+ //note[macOS標準のRubyでは「gem install」がエラーになる]{
80
+ macOSには標準でRubyがインストールされていますが、それを使って「@<code>|gem install|」を実行するとエラーになります。
81
+
82
+ //terminal[][macOS標準のRubyではgemがインストールできない]{
83
+ $ gem install review --version=2.5
84
+ ERROR: While executing gem ... (Gem::FilePermissionError)
85
+ You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
86
+ //}
87
+
88
+ このエラーを回避するには、次のような方法があります。
89
+
90
+ - (a) Homebrewなどを使って別のRubyをインストールする。
91
+ - (b) @<file>{~/.gemrc}に「@<code>{install: --user-install}」という行を追加する。
92
+ - (c) 「@<file>{rubygems/}」のようなフォルダを作り、そのパスを環境変数@<code>|$GEM_HOME|に設定する。
93
+
94
+ しかしRubyやコマンドラインに慣れていない初心者にとっては、どの方法も難しいでしょう。
95
+
96
+ そこで、(c)に相当する作業を自動的に行えるようにしました。
97
+ それが、Rubyに詳しくない初心者向けのコマンド「@<code>|rake setup:rubygems|」です。
98
+ 詳しいことは@<file>{lib/tasks/starter.rake}の中の「@<code>|task :rubygems|」の定義を見てください。
99
+ また環境変数@<code>|$GEM_HOME|を設定するかわりに、@<file>{Rakefile}の冒頭で@<code>|Gem.path|を設定しています。
100
+
101
+ //}
102
+
72
103
  ==== MacTeXのインストール
73
104
 
74
105
  次に、MacTeXをダウンロードします。MacTeXとは、macOS用のTeXLiveです。
@@ -83,7 +114,7 @@ MacTeXはサイズが大きい(約4GB)ので、本家ではなく以下の
83
114
 
84
115
  ダウンロードができたら、ダブルクリックしてインストールしてください。
85
116
 
86
- インストールしたら、Terminal.appで次のコマンドを入力し、動作を確認してください(各行の先頭にある「@<code>{$ }」は入力せず、それ以降のコマンドを入力してください)。
117
+ インストールしたらTerminal.appで次のコマンドを入力し、動作を確認してください(各行の先頭にある「@<code>{$ }」は入力せず、それ以降のコマンドを入力してください)。
87
118
 
88
119
  //terminal[][MacTeXのインストールができたことを確認]{
89
120
  $ @<userinput>{which uplatex} @<balloon>{下線が引かれたコマンドだけを入力すること}
@@ -121,7 +152,7 @@ C:\Users\yourname> @<userinput>{ruby --version} @<balloon>{「ruby --version」
121
152
  ruby 2.6.6-1 [x64-mingw32]
122
153
  //}
123
154
 
124
- 実際の出力結果は上と少し違うと思いますが、だいたい合っていればOKです。
155
+ 実際の出力結果は上と少し違うでしょうが、だいたい合っていればOKです。
125
156
 
126
157
  また以下のコマンドを実行し、必要なライブラリをインストールします。
127
158
 
@@ -147,7 +178,7 @@ e-upTeX 3.14159265-p3.7.1-u1.22-161114-2.6 (utf8.uptex) (TeX Live 2020/W32TeX)
147
178
  ...(以下省略)...
148
179
  //}
149
180
 
150
- 実際の出力結果は上と少し違うと思いますが、だいたい合っていればOKです。
181
+ 実際の出力結果は上と少し違うでしょうが、だいたい合っていればOKです。
151
182
 
152
183
 
153
184
  == プロジェクトを作成
@@ -267,6 +298,8 @@ C:\Users\yourname\mybook> @<userinput>{dir *.pdf} @<balloon>{PDFファイルが
267
298
 
268
299
  * エラーが発生したときの対処法は@<secref>{02-tutorial|subsec-compileerror}で簡単に説明しています。
269
300
  必ず読んでください。
270
- * ePubファイルを生成するときは「@<code>{rake epub}」または「@<code>{rake docker:epub}」、HTMLファイルを生成するときは「@<code>{rake web}」または「@<code>{rake docker:epub}」を実行してください。
301
+ * HTMLファイルを生成するときは「@<code>{rake web}」(または「@<code>{rake docker:web}」)を実行してください。
302
+ * ePubファイルを生成するときは「@<code>{rake epub}」(または「@<code>{rake docker:epub}」)を実行してください。
303
+ * Markdownファイルを生成するときは「@<code>{rake markdown}」(または「@<code>{rake docker:markdown}」)を実行してください。
271
304
  * Starterでは「@<code>{review-pdfmaker}」コマンドや「@<code>{review-epubmaker}」コマンドが使えません(実行はできますが望ましい結果にはなりません)。
272
305
  必ず「@<code>{rake pdf}」や「@<code>{rake epub}」を使ってください。
@@ -13,7 +13,7 @@
13
13
 
14
14
 
15
15
 
16
- == 用語の説明
16
+ =={sec-terminology} 用語の説明
17
17
 
18
18
  このあとの説明で使用する用語を紹介します。
19
19
 
@@ -132,28 +132,28 @@
132
132
  @<LaTeX>{}で使うスタイルファイルが置かれるフォルダです。
133
133
  #@# : @<file>{sty/jumoline.sty}
134
134
  #@# @<LaTeX>{}で使うスタイルファイルのひとつです。
135
- #@# : @<file>{sty/mycolophon.sty}
136
- #@# 奥付@<fn>{fn-7ypmf}の内容が書かれたスタイルファイルです。
137
- #@# 奥付を変更したい場合はこのファイルを編集します。
135
+ : @<file>{sty/mycolophon.sty}
136
+ 奥付@<fn>{fn-7ypmf}の内容が書かれたスタイルファイルです。
137
+ 奥付を変更したい場合はこのファイルを編集します。
138
138
  : @<file>{sty/mystyle.sty}
139
139
  ユーザが独自に@<LaTeX>{}マクロを定義・上書きするためのファイルです。
140
140
  中身は空であり、ユーザが自由に追加して構いません。
141
141
  : @<file>{sty/mytextsize.sty}
142
142
  PDFにおける本文の高さと幅を定義したファイルです。
143
143
  @<LaTeX>{}では最初に本文の高さと幅を決める必要があるので、他のスタイルファイルから分離されてコンパイルの最初に読み込めるようになっています。
144
- #@# : @<file>{sty/mytitlepage.sty}
145
- #@# 大扉@<fn>{fn-cq9ws}の内容が書かれたスタイルファイルです。
146
- #@# 大扉のデザインを変更したい場合はこのファイルを編集します。
147
- : @<file>{sty/starter.sty}
144
+ : @<file>{sty/mytitlepage.sty}
145
+ 大扉@<fn>{fn-cq9ws}の内容が書かれたスタイルファイルです。
146
+ 大扉のデザインを変更したい場合はこのファイルを編集します。
147
+ : @<file>{sty/starter*.sty}
148
148
  Starter独自のスタイルファイルです。
149
149
  ここに書かれた@<LaTeX>{}マクロを変更したい場合は、このファイルを変更するよりも「@<file>{sty/mystyle.sty}」に書いたほうがバージョンアップがしやすくなります。
150
- : @<file>{sty/starter-headline.sty}
151
- 章(Chapter)や節(Section)や項(Subsection)の@<LaTeX>{}マクロが定義されたファイルです。
150
+ #@# : @<file>{sty/starter-headline.sty}
151
+ #@# 章(Chapter)や節(Section)や項(Subsection)の@<LaTeX>{}マクロが定義されたファイルです。
152
152
 
153
153
 
154
154
  //footnote[fn-zuxns][原稿ファイルを置くフォルダ名は「@<file>{config.yml}」の「@<code>|contentdir: contents|」で変更できます。]
155
- #@#//footnote[fn-7ypmf][@<em>{奥付}とは、本のタイトルや著者や出版社や版や刷などの情報が書かれたページのことです。通常は本のいちばん最後のページに置かれます。]
156
- #@#//footnote[fn-cq9ws][@<em>{大扉}とは、タイトルページのことです。表紙のことではありません。]
155
+ //footnote[fn-7ypmf][@<em>{奥付}とは、本のタイトルや著者や出版社や版や刷などの情報が書かれたページのことです。通常は本のいちばん最後のページに置かれます。]
156
+ //footnote[fn-cq9ws][@<em>{大扉}とは、タイトルページのことです。表紙のことではありません。]
157
157
 
158
158
 
159
159
  == 原稿の追加と変更
@@ -169,8 +169,11 @@
169
169
  まずはこれを変更してみましょう。
170
170
 
171
171
  - (1) まず、お好みのテキストエディタを使って「@<file>{mybook/contents/00-preface.re}」を開いてください。
172
- - (2) 次に、先頭の「@<code>{= はじめに}」の下に、何でもいいので適当なテキストを追加して(例:@<list>{6f3fh})、原稿ファイルを保存してください。
173
- - (3) 原稿ファイルを保存したら、MacならTerminal.app@<fn>{f90kk}、Windowsならコマンドプロンプトを開き、「@<code>{rake pdf}」(またはDockerを使っているなら「@<code>{rake docker:pdf}」)を実行してください。
172
+ - (2) 次に、先頭の「@<code>{= はじめに}」の下に何か適当なテキストを追加して(例:@<list>{6f3fh})、原稿ファイルを保存してください。
173
+ - (3) 原稿ファイルを保存したら、コンパイル@<fn>{fn-r19pw}しましょう。
174
+ MacならTerminal.app@<fn>{f90kk}、Windowsならコマンドプロンプトを開き、「@<code>{rake pdf}」(またはDockerを使っているなら「@<code>{rake docker:pdf}」)を実行してください。
175
+
176
+ //footnote[fn-r19pw][「コンパイル」とは、ここでは原稿ファイルからPDFファイル(またはHTMLやePub)を生成することです。このあとも使う用語なので覚えてください。また用語については@<secref>{sec-terminology}も参照してください。]
174
177
 
175
178
  //list[6f3fh][原稿ファイルの内容]{
176
179
  = はじめに
@@ -187,7 +190,8 @@
187
190
 
188
191
  //note[プロジェクトのフォルダに原稿ファイルがあるとコンパイルエラー]{
189
192
 
190
- 原稿ファイルを「@<file>{contents/}」に置くよう設定している場合、もし原稿ファイル(@<file>{*.re})がプロジェクトのフォルダ(たとえば「@<file>{mybook/}」の直下)にあると、コンパイル@<fn>{fn-zt1bb}できずエラーになります。
193
+ Starterのデフォルトでは、原稿ファイル(@<file>{*.re})を「@<file>{contents/}」フォルダに置くよう設定されています。
194
+ この場合、もし原稿ファイルがプロジェクトのフォルダ(たとえば「@<file>{mybook/}」の直下)にあると、コンパイル@<fn>{fn-zt1bb}できずエラーになります。
191
195
 
192
196
  エラーになるのは、Starterの仕組みに起因します。
193
197
  Starterではコンパイル時に、「@<file>{contents/}」に置かれた原稿ファイル(@<file>{*.re})をプロジェクトフォルダの直下にコピーしてからコンパイルします)@<fn>{fn-g6oit}。
@@ -236,7 +240,7 @@ Starterではコンパイル時に、「@<file>{contents/}」に置かれた原
236
240
  本文本文本文
237
241
  //}
238
242
 
239
- //note[原稿ファイルには番号をつけるべき?]{
243
+ //note[原稿ファイルに番号をつけるべきか]{
240
244
  この例では原稿ファイル名を「@<file>{01-test.re}」にしました。
241
245
  しかしファイル名に「@<file>{01-}」のような番号は、必ずしもつける必要はありません(つけてもいいし、つけなくてもいい)。
242
246
 
@@ -343,7 +347,7 @@ YAMLについてはGoogle検索で調べてください。
343
347
 
344
348
  ==={subsec-compileerror} コンパイルエラーになったら
345
349
 
346
- PDFファイルを生成するときにエラーになったら、以下の点を確認してください。
350
+ PDFファイルの生成がエラーになったら、以下の点を確認してください。
347
351
 
348
352
  * インライン命令がきちんと閉じているか
349
353
  * ブロック命令の引数が足りているか、多すぎないか
@@ -358,6 +362,28 @@ PDFファイルを生成するときにエラーになったら、以下の点
358
362
 
359
363
  詳しくは@<secref>{05-faq|sec-compileerror}を見てください。
360
364
 
365
+ それでもエラーになる場合は、中間ファイルを削除してみましょう。
366
+ たとえばプロジェクト名が「@<file>{mybook}」だったら、「@<file>{mybook-pdf}」というフォルダが作られているはずです。
367
+ これを削除してから、コンパイルし直してみてください。
368
+
369
+ //terminal[][中間ファイルを削除してコンパイルし直す]{
370
+ $ @<userinput>{rm -rf mybook-pdf} @<balloon>{中間ファイルを削除して、}
371
+ $ @<userinput>{rake pdf} @<balloon>{コンパイルし直す}
372
+ //}
373
+
374
+ それでもダメなら、「@<hlink>{https://twitter.com/search?q=%23reviewstarter, #reviewstarter}」というタグでツイートしていただければ、相談に乗ります。
375
+
376
+
377
+ === 文章をチェックする
378
+
379
+ Starterでは、「textlint」というツールを使って原稿の文章をチェックできます。
380
+
381
+ たとえば「Starterを使うときれいなPDFを作成@<bou>{することが}できます」という文章は、「Starterを使うときれいなPDFを作成@<bou>{できます}」のように簡潔にできます。
382
+ このような指摘を行ってくれるのがtextlintです。
383
+
384
+ textlintをStarterのプロジェクトで使う方法は、@<secref>{06-bestpractice|sec-textlint}で解説しています。
385
+ 今はまだtextlintを使う必要はありませんが、Starterに慣れてきたら使ってみてください。
386
+
361
387
 
362
388
 
363
389
  =={sec-basicsyntax} 基本的な記法
@@ -379,27 +405,27 @@ PDFファイルを生成するときにエラーになったら、以下の点
379
405
  行コメントは「@<code>{#@#}」で、また範囲コメントは「@<code>{#@+++}」と「@<code>{#@---}」で表します。
380
406
  どちらも行の先頭から始まってないと、コメントとして認識されません。
381
407
 
382
- //list[][サンプル]{
383
- 本文1
384
- @<b>|#@#|本文2
385
- 本文3
408
+ //list[][サンプル][]{
409
+ 本文1
410
+ @<b>|#@#|本文2
411
+ 本文3
386
412
 
387
413
  @<b>|#@+++|
388
- 本文4
414
+ 本文4
389
415
  @<b>|#@---|
390
- 本文5
416
+ 本文5
391
417
  //}
392
418
 
393
419
  //sampleoutputbegin[表示結果]
394
420
 
395
- 本文1
396
- #@#本文2
397
- 本文3
421
+ 本文1
422
+ #@#本文2
423
+ 本文3
398
424
 
399
425
  #@+++
400
- 本文4
426
+ 本文4
401
427
  #@---
402
- 本文5
428
+ 本文5
403
429
 
404
430
  //sampleoutputend
405
431
 
@@ -414,10 +440,11 @@ PDFファイルを生成するときにエラーになったら、以下の点
414
440
  改行は無視されるか、または半角空白扱いになります。
415
441
  通常は1文ごとに改行して書きます。
416
442
 
417
- //list[][サンプル]{
418
- 言葉を慎みたまえ!君はラピュタ王の前にいるのだ!
443
+ //list[][サンプル][]{
444
+ 言葉を慎みたまえ。君はラピュタ王の前にいるのだ。
419
445
 
420
- これから王国の復活を祝って、諸君にラピュタの力を見せてやろうと思ってね。見せてあげよう、ラピュタの雷を!
446
+ これから王国の復活を祝って、諸君にラピュタの力を見せてやろうと思ってね。
447
+ 見せてあげよう、ラピュタの雷を!
421
448
 
422
449
  旧約聖書にあるソドムとゴモラを滅ぼした天の火だよ。
423
450
  ラーマヤーナではインドラの矢とも伝えているがね。
@@ -425,9 +452,10 @@ PDFファイルを生成するときにエラーになったら、以下の点
425
452
 
426
453
  //sampleoutputbegin[表示結果]
427
454
 
428
- 言葉を慎みたまえ!君はラピュタ王の前にいるのだ!
455
+ 言葉を慎みたまえ。君はラピュタ王の前にいるのだ。
429
456
 
430
- これから王国の復活を祝って、諸君にラピュタの力を見せてやろうと思ってね。見せてあげよう、ラピュタの雷を!
457
+ これから王国の復活を祝って、諸君にラピュタの力を見せてやろうと思ってね。
458
+ 見せてあげよう、ラピュタの雷を!
431
459
 
432
460
  旧約聖書にあるソドムとゴモラを滅ぼした天の火だよ。
433
461
  ラーマヤーナではインドラの矢とも伝えているがね。
@@ -444,7 +472,7 @@ PDFファイルを生成するときにエラーになったら、以下の点
444
472
  章(Chapter)や節(Section)といった見出しは、「@<code>{= }」や「@<code>{== }」で始めます。
445
473
  また章には概要を書くといいでしょう。
446
474
 
447
- //list[][サンプル]{
475
+ //list[][サンプル][]{
448
476
  @<b>|=| 章(Chapter)見出し
449
477
 
450
478
  @<b>|//abstract{|
@@ -474,7 +502,8 @@ Starterでは、章(Chapter)は1ファイルにつき1つだけにしてくだ
474
502
 
475
503
  番号なし箇条書きは「@<code>{ * }」で始めます(先頭に半角空白が必要)。
476
504
 
477
- //list[][サンプル]{
505
+ //needvspace[latex][6zw]
506
+ //list[][サンプル][]{
478
507
  @<b>| * |箇条書き1
479
508
  @<b>| * |箇条書き2
480
509
  @<b>| ** |入れ子の箇条書き
@@ -495,7 +524,7 @@ Starterでは、章(Chapter)は1ファイルにつき1つだけにしてくだ
495
524
  番号つき箇条書きは「@<code>{ 1. }」のように始める方法と、「@<code>{ - A. }」のように始める方法があります(どちらも先頭に半角空白が必要)。
496
525
  後者では番号の自動採番はされず、指定された文字列がそのまま出力されます。
497
526
 
498
- //list[][サンプル]{
527
+ //list[][サンプル][]{
499
528
  @<b>|1.| この記法では数字しか指定できず、
500
529
  @<b>|2.| また入れ子にもできない。
501
530
 
@@ -528,7 +557,7 @@ Starterでは、章(Chapter)は1ファイルにつき1つだけにしてくだ
528
557
  //footnote[axm3t][先頭の半角空白は入れるようにしましょう。過去との互換性のため、先頭の半角空白がなくても動作しますが、箇条書きとの整合性のために半角空白を入れることを勧めます。]
529
558
  //footnote[diwmv][説明文のインデントは、半角空白でもタブ文字でもいいです。]
530
559
 
531
- //list[][サンプル]{
560
+ //list[][サンプル][]{
532
561
  @<b>| : |用語1
533
562
  説明文。
534
563
  説明文。
@@ -558,17 +587,17 @@ Starterでは、章(Chapter)は1ファイルにつき1つだけにしてくだ
558
587
  太字は「@<code>|@@<nop>{}<b>{...}|」で囲み、強調は「@<code>|@@<nop>{}<B>{...}|」または「@<code>|@@<nop>{}<strong>{...}|」で囲みます。
559
588
  強調は、太字になるだけでなくフォントがゴシック体になります。
560
589
 
561
- //list[][サンプル]{
562
- テキスト@<b>|@@<nop>$$<b>{|テキスト@<b>|}|テキスト
590
+ //list[][サンプル][]{
591
+ テキスト@<b>|@@<nop>$$<b>{|テキスト@<b>|}|テキスト。
563
592
 
564
- テキスト@<b>|@@<nop>$$<B>{|テキスト@<b>|}|テキスト
593
+ テキスト@<b>|@@<nop>$$<B>{|テキスト@<b>|}|テキスト。
565
594
  //}
566
595
 
567
596
  //sampleoutputbegin[表示結果]
568
597
 
569
- テキスト@<b>{テキスト}テキスト
598
+ テキスト@<b>{テキスト}テキスト。
570
599
 
571
- テキスト@<B>{テキスト}テキスト
600
+ テキスト@<B>{テキスト}テキスト。
572
601
 
573
602
  //sampleoutputend
574
603
 
@@ -599,6 +628,16 @@ Starterでは、章(Chapter)は1ファイルにつき1つだけにしてくだ
599
628
  //}
600
629
 
601
630
 
631
+ === 等幅フォント
632
+
633
+ 文字列を等幅フォントで表示するには、「@<code>|@@<nop>{}<tt>{...}|」を使います。
634
+ ただしこれを使うことはお勧めしません。
635
+ それよりも、それぞれの用途に合ったインライン命令を使いましょう。
636
+
637
+ * プログラムコードやコマンド文字列を表すには「@<code>|@@<nop>{}<code>{...}|」を使ってください。
638
+ * ファイル名を表すには「@<code>|@@<nop>{}<file>{...}|」を使ってください。
639
+
640
+
602
641
  === プログラムリスト
603
642
 
604
643
  プログラムリストは「@<code>|//list[ラベル][説明文]{ ... //}|」で囲みます。
@@ -607,7 +646,7 @@ Starterでは、章(Chapter)は1ファイルにつき1つだけにしてくだ
607
646
  * 「@<code>|@@<nop>{}<list>{ラベル名}|」のようにプログラムリストを参照できます。
608
647
  * 説明文に「@<code>{]}」を含める場合は、「@<code>{\]}」のようにエスケープします。
609
648
 
610
- //list[][サンプル]{
649
+ //list[][サンプル][]{
611
650
  サンプルコードを@<b>|@@<nop>$$<list>{fib1}|に示します。
612
651
 
613
652
  @<b>|//list[fib1][フィボナッチ数列]|{
@@ -629,7 +668,7 @@ def fib(n):
629
668
 
630
669
 
631
670
 
632
- 第1引数も第2引数も、省略できます。
671
+ 第1引数と第2引数のどちらも、省略できます。
633
672
  たとえば第1引数だけを省略するには「@<code>|//list[][説明]{|」のようにします。
634
673
  両方とも省略するには「@<code>|//list[][]{|」または「@<code>|//list{|」のようにします。
635
674
 
@@ -637,7 +676,7 @@ def fib(n):
637
676
  たとえば次の例では、追加した箇所を「@<code>|@@<nop>{}<b>{...}|」で@<fn>{0hz8w}、削除した箇所を「@<code>|@@<nop>{}<del>{...}|」で表しています。
638
677
  //footnote[0hz8w][プログラムリストの中では、「@<code>|@@<nop>{}<B>{}|」(強調)ではなく「@<code>|@@<nop>{}<b>{}|」(太字)を使ってください。なぜなら、「@<code>|@@<nop>{}<B>{}|」を使うとフォントが等幅フォントからゴシック体に変更されてしまい、表示がずれてしまうからです。]
639
678
 
640
- //list[][サンプル]{
679
+ //list[][サンプル][]{
641
680
  /@<nop>$$/list{
642
681
  function fib(n) {
643
682
  @<b>{@@<nop>$$<del>|}if (n <= 1) { return n; }@<b>{|}
@@ -661,8 +700,12 @@ function fib(n) {
661
700
 
662
701
 
663
702
 
703
+ その他、行番号をつけたり外部ファイルを読み込んだりできます。
664
704
  プログラムコードについての詳細は@<secref>{03-syntax|sec-program}を参照してください。
665
705
 
706
+ また出力結果を表す「@<code>|//output|」という命令もあります。
707
+ 詳細は@<secref>{03-syntax|subsec-output}を参照してください。
708
+
666
709
  //note[ブロック命令]{
667
710
  「@<code>|//list{ ... //}|」のような形式の命令を、@<B>{ブロック命令}といいます。
668
711
  ブロック命令は入れ子にできますが(Starterによる拡張)、できないものもあります。
@@ -676,7 +719,7 @@ function fib(n) {
676
719
  次の例では、引数にラベル名と説明文字列を指定します。
677
720
  また「@<code>|@@<nop>{}<userinput>{...}|」はユーザ入力を表します。
678
721
 
679
- //list[][サンプル]{
722
+ //list[][サンプル][]{
680
723
  @<b>|//terminal[term-1][PDFを生成]{|
681
724
  $ @@<nop>$$<userinput>{rake pdf} @@<nop>$$<balloon>{Dockerを使わない場合}
682
725
  $ @@<nop>$$<userinput>{rake docker:pdf} @@<nop>$$<balloon>{Dockerを使う場合}
@@ -704,8 +747,9 @@ $ @<userinput>{rake docker:pdf} @<balloon>{Dockerを使う場合}
704
747
  === 脚注
705
748
 
706
749
  脚注は、脚注をつけたい箇所に「@<code>|@@<nop>{}<fn>{ラベル}|」をつけ、段落の終わりに「@<code>|//footnote[ラベル][脚注文]|」を書きます。
750
+ 脚注文の中では「@<code>|]|」を「@<code>|\]|」と書いてください。
707
751
 
708
- //list[][サンプル]{
752
+ //list[][サンプル][]{
709
753
  本文テキスト@<b>|@@<nop>$$<fn>{fn-12}|。
710
754
 
711
755
  @<b>|//footnote[fn-12][このように脚注文を書きます。]|
@@ -730,7 +774,7 @@ $ @<userinput>{rake docker:pdf} @<balloon>{Dockerを使う場合}
730
774
  * 画像ファイルの拡張子は指定しません。
731
775
  * ラベルを使って「@<code>|@@<nop>{}<img>{ラベル}|」のように参照できます。
732
776
 
733
- //list[][サンプル]{
777
+ //list[][サンプル][]{
734
778
  @<b>|//image[tw-icon][サンプル画像][scale=0.3]|
735
779
  //}
736
780
 
@@ -750,8 +794,8 @@ Starterでは、画像を入れる位置を指定したり、画像の周りに
750
794
 
751
795
  Starterでは、本文を補足する文章を「ノート」という囲み枠で表します。
752
796
 
753
- //list[][サンプル]{
754
- /@<nop>$$/note[ムスカの苦手なもの]{
797
+ //list[][サンプル][]{
798
+ @<b>|//note|[ムスカの苦手なもの]{
755
799
  実は、ムスカには「虫が苦手」という公式な設定があります。
756
800
  有名な『読める、読めるぞ!』のシーンでムスカが顔の周りに群がるハエを追い払うのは、邪魔だったからだけでなく、虫が苦手だったからです。
757
801
  /@<nop>$$/}
@@ -771,6 +815,47 @@ Starterでは、本文を補足する文章を「ノート」という囲み枠
771
815
  ノート本文には箇条書きやプログラムコードを埋め込めます。
772
816
  詳しくは@<secref>{03-syntax|sec-note}を参照してください。
773
817
 
818
+ また、補足情報や注意喚起や警告を表す囲み枠もあります。
819
+ 詳しくは@<secref>{03-syntax|subsec-miniblock}を参照してください。
820
+
821
+ //list[][サンプル][]{
822
+ @<b>|//info|[解決のヒント]{
823
+ 本製品を手に取り、古くから伝わるおまじないを唱えてみましょう。
824
+ すると天空の城への門が開きます。
825
+ /@<nop>$$/}
826
+
827
+ @<b>|//caution|[使用上の注意]{
828
+ 本製品を石版にかざすと、天空の城から雷が発射されます。
829
+ 周りに人がいないことを確かめてから使用してください。
830
+ /@<nop>$$/}
831
+
832
+ @<b>|//warning|[重大な警告]{
833
+ 本製品を持ったまま滅びの呪文を唱えると、天空の城は自動的に崩壊します。
834
+ 大変危険ですので、決して唱えないでください。
835
+ /@<nop>$$/}
836
+ //}
837
+
838
+ //sampleoutputbegin[表示結果]
839
+
840
+ //info[解決のヒント]{
841
+ 本製品を手に取り、古くから伝わるおまじないを唱えてみましょう。
842
+ すると天空の城への門が開きます。
843
+ //}
844
+
845
+ //caution[使用上の注意]{
846
+ 本製品を石版にかざすと、天空の城から雷が発射されます。
847
+ 周りに人がいないことを確かめてから使用してください。
848
+ //}
849
+
850
+ //warning[重大な警告]{
851
+ 本製品を持ったまま滅びの呪文を唱えると、天空の城は自動的に崩壊します。
852
+ 大変危険ですので、決して唱えないでください。
853
+ //}
854
+
855
+ //sampleoutputend
856
+
857
+
858
+
774
859
 
775
860
  === 表
776
861
 
@@ -781,7 +866,7 @@ Starterでは、本文を補足する文章を「ノート」という囲み枠
781
866
  * ヘッダの区切りは「@<code>{-}」または「@<code>{=}」を12個以上並べます。
782
867
  * ラベルを使って「@<code>|@@<nop>{}<table>{ラベル}|」のように参照できます。
783
868
 
784
- //list[][サンプル]{
869
+ //list[][サンプル][]{
785
870
  @<b>|//table[tbl-31][サンプル表]{|
786
871
  Name Val1 Val2
787
872
  @<b>|--------------------|
@@ -804,6 +889,7 @@ BB 56 78
804
889
 
805
890
 
806
891
  PDFではセルの右寄せ・左寄せ・中央揃えができます。
892
+ またCSVファイルからデータを読み込めます。
807
893
  詳しくは@<secref>{03-syntax|sec-table}を参照してください。
808
894
 
809
895
 
@@ -811,7 +897,7 @@ PDFではセルの右寄せ・左寄せ・中央揃えができます。
811
897
 
812
898
  @<LaTeX>{}の書き方を使って数式を記述できます。
813
899
 
814
- //list[][サンプル]{
900
+ //list[][サンプル][]{
815
901
  @<b>|//texequation[euler][オイラーの公式]{|
816
902
  e^{i\theta} = \sin{\theta} + i\cos{\theta}
817
903
  @<b>|//}|
@@ -834,6 +920,129 @@ e^{i\theta} = \sin{\theta} + i\cos{\theta}
834
920
  詳しくは@<secref>{03-syntax|sec-mathexpr}を参照してください。
835
921
 
836
922
 
923
+ === 会話形式
924
+
925
+ Starterでは、会話形式も書けます。
926
+ 会話形式は、アイコン画像を使う方法と使わない方法があります。
927
+
928
+ //list[][サンプル][]{
929
+ @<b>|//talklist{|
930
+ @<b>|//talk[avatar-b]|{
931
+ あの方は何も盗らなかったわ。私のために闘ってくださったんです。
932
+ /@<nop>$$/}
933
+ @<b>|//talk[avatar-g]|{
934
+ いや、ヤツはとんでもないものを盗んでいきました……
935
+ あなたの心です。
936
+ /@<nop>$$/}
937
+ @<b>|//}|
938
+ //}
939
+
940
+ //sampleoutputbegin[表示結果]
941
+
942
+ //talklist{
943
+ //talk[avatar-b]{
944
+ あの方は何も盗らなかったわ。私のために闘ってくださったんです。
945
+ //}
946
+ //talk[avatar-g]{
947
+ いや、ヤツはとんでもないものを盗んでいきました……
948
+ あなたの心です。
949
+ //}
950
+ //}
951
+
952
+ //sampleoutputend
953
+
954
+
955
+
956
+ //list[][サンプル][]{
957
+ @<b>|//talklist{|
958
+ @<b>|//talk[][クラリス]|{
959
+ あの方は何も盗らなかったわ。私のために闘ってくださったんです。
960
+ /@<nop>$$/}
961
+ @<b>|//talk[][銭形警部]|{
962
+ いや、ヤツはとんでもないものを盗んでいきました……
963
+ あなたの心です。
964
+ /@<nop>$$/}
965
+ @<b>|//}|
966
+ //}
967
+
968
+ //sampleoutputbegin[表示結果]
969
+
970
+ //talklist{
971
+ //talk[][クラリス]{
972
+ あの方は何も盗らなかったわ。私のために闘ってくださったんです。
973
+ //}
974
+ //talk[][銭形警部]{
975
+ いや、ヤツはとんでもないものを盗んでいきました……
976
+ あなたの心です。
977
+ //}
978
+ //}
979
+
980
+ //sampleoutputend
981
+
982
+
983
+
984
+ 詳しくは@<secref>{03-syntax|sec-talk}を参照してください。
985
+
986
+ //note[白黒印刷でも判別できる画像を使う]{
987
+ このサンプルでは、色が違うだけのアイコン画像を使っています。
988
+ そのせいで、白黒印刷すると誰が誰だか判別できなくなります。
989
+ もし白黒印刷するなら、色に頼らず判別できるようなアイコン画像を使いましょう。
990
+ //}
991
+
992
+ //needvspace[latex][4zw]
993
+ //note[会話形式にしても分かりやすくはならない]{
994
+ @<B>{会話形式を採用しても、説明が分かりやすくなるとは限りません。}
995
+ 会話形式にすると楽しさや親しみやすさを向上できますが、それは説明の分かりやすさとは違います。
996
+
997
+ 会話形式だけど説明がよく分からない本はたくさんあります。
998
+ 先生役や先輩役のキャラクターが何かの説明をして、それが読者には伝わっていないのに、生徒役や後輩役のキャラクターが「なるほど!」とか「そういうことか!」と言っているような本、見たことありませんか?
999
+ 先生や先輩の説明を苦もなく理解できるほどの優秀な生徒や後輩は、本の中にしかいません。
1000
+
1001
+ 同様のことはマンガ形式にもいえます。
1002
+ 分かりやすく説明したいなら分かりやすく説明する技術を学ぶべきであり、マンガにしたり会話形式にすることではありません。
1003
+
1004
+ たとえば、『@<href>{https://www.c-r.com/book/detail/1108, わかばちゃんと学ぶ Git使い方入門}』が分かりやすいのはマンガだからではなく、分かりやすく説明する技術を作者の湊川先生が身につけているからです@<fn>{fn-pwgc3}。
1005
+ @<B>{分かりやすく説明できる人がたまたまマンガで説明しているから分かりやすいのであって、マンガや会話形式にすれば何でも分かりやすくなるわけではありません。}
1006
+ ここを履き違えないようにしましょう。
1007
+ //}
1008
+
1009
+ //footnote[fn-pwgc3][@<href>{https://www.youtube.com/watch?v=t2eiA2ylNW0, 湊川先生による文章改善の発表動画}を見ると、分かりやすく説明する技術を先生自身が持っていることがよく分かります。]
1010
+
1011
+
1012
+ === 用語、索引
1013
+
1014
+ 用語は「@<code>|@@<nop>{}<term>{用語名((よみかた))}|」のように書くとゴシック体で表示され、かつ本の巻末の索引に載ります。
1015
+ ゴシック体にするけど索引に載せないなら「@<code>|@@<nop>{}<termnoidx>{用語名}|」、ゴシック体にせず索引に載せるなら「@<code>|@@<nop>{}<idx>{用語名((よみかた))}|」、索引に載せるけど表示はしないなら「@<code>|@@<nop>{}<hidx>{用語名((よみかた))}|」とします。
1016
+
1017
+ 索引は、デフォルトではオフになっています。
1018
+ 索引を使うには、@<file>{config.yml}で「@<code>|makeindex: true|」を設定してください(370行目ぐらいにあります)。
1019
+ 索引は@<LaTeX>{}の機能を使うので、今のところPDFでしかサポートされません。
1020
+ また索引機能をオンにすると@<LaTeX>{}のコンパイル回数が増えるので、コンパイル時間が延びます。
1021
+ 原稿執筆中はオフにし、完成間近になったらオンにするといいでしょう。
1022
+
1023
+ なお索引に登録する用語が何もない場合は、索引を使おうとするとコンパイルエラーになります。
1024
+ 本文に1つでも「@<code>|@@<nop>{}<term>{}|」や「@<code>|@@<nop>{}<idx>{}|」を入れてから索引機能を有効化してください。
1025
+
1026
+ Starterでは索引語の親子関係を指定したり、ページ番号のかわりに「〜を見よ」と指定できます。
1027
+ 詳しくは@<secref>{03-syntax|sec-term}を参照してください。
1028
+
1029
+
1030
+ === 単語展開
1031
+
1032
+ キーを単語に展開できます。
1033
+ たとえば辞書ファイル「@<file>{data/words.txt}」の中に、キー「apple」に対応した単語「アップル」が登録されているとします。
1034
+ すると、本文に「@<code>|@@<nop>{}<w>{apple}|」と書くと「アップル」に展開されます。
1035
+ 「@<code>|@@<nop>{}<wb>{apple}|」なら展開して太字になります。
1036
+ また「@<code>|@@<nop>{}<W>{apple}|」なら展開して強調表示します。
1037
+ #@#「@<code>|@@<nop>{}<wb>{apple}|」なら展開して太字になります(「@<code>|@@<nop>{}<b>{@@<nop>{}<w>{apple}}|」と同じです)。
1038
+ #@#また「@<code>|@@<nop>{}<W>{apple}|」なら展開して強調表示します(「@<code>|@@<nop>{}<B>{@@<nop>{}<w>{apple}}|」と同じです)。
1039
+
1040
+ この機能は、表記が定まっていない単語に使うと便利です。
1041
+ たとえば「Apple」と「アップル」のどちらの表記にするか悩んでるなら、本文には `@<w>{apple}` と書いておけば、あとから辞書の中身を変えるだけでどちらの表記にも対応できます。
1042
+
1043
+ 詳しくは@<secref>{03-syntax|sec-words}を参照してください。
1044
+
1045
+
837
1046
 
838
1047
  =={sec-pdftype} 印刷用PDFと電子用PDF
839
1048
 
@@ -843,24 +1052,29 @@ Starterでは、印刷用と電子用とを切り替えてPDFファイルを生
843
1052
 
844
1053
  === 印刷用と電子用を切り替えてPDFを生成する
845
1054
 
846
- Starterでは、環境変数「@<code>{$STARTER_TARGET}」を設定することで印刷用と電子用とを切り替えます。
1055
+ Starterでは、印刷用と電子用とを切り替えてPDFを生成できます(デフォルトは印刷用)。
1056
+ 具体的には次のどれかを行います@<fn>{fn-0xkt4}。
1057
+
1058
+ * 「@<code>|rake pdf @<b>{t=pbook}|」を実行すると印刷用PDFが生成され、「@<code>|rake pdf @<b>{t=ebook}|」@<fn>{fn-3pf5z}を実行すると電子用PDFが生成される。
1059
+ * 環境変数「@<code>{$STARTER_TARGET}」を「@<code>|pbook|」に設定してから「`rake pdf`」を実行すると印刷用PDFが生成され、「@<code>|ebook|」に設定してから実行すると電子用PDFが生成される。
1060
+ * 「@<file>{config-starter.yml}」に設定項目「@<code>{target:}」があるので、これを「@<code>{pbook}」(印刷用)または「@<code>{ebook}」(電子用)に設定する。
1061
+
1062
+ //footnote[fn-0xkt4][強制力はこの順序であり、設定ファイルより環境変数のほうが、また環境変数より`rake`コマンドのオプションのほうが優先されます。]
1063
+ //footnote[fn-3pf5z][「@<code>{pbook}」は「printing book」、「@<code>{ebook}」は「electronic book」を表します。]
847
1064
 
848
1065
  //terminal[][macOSやLinuxの場合@<fn>{fn-3pf5z}]{
1066
+ $ @<userinput>{rake pdf @<b>{t=pbook}} @<balloon>{印刷用PDFを生成}
1067
+ $ @<userinput>{rake pdf @<b>{t=ebook}} @<balloon>{電子用PDFを生成}
1068
+ ## または
849
1069
  $ @<userinput>{@<b>{export STARTER_TARGET=pbook}} @<balloon>{印刷用に設定}
850
1070
  $ @<userinput>{rake pdf} @<balloon>{またはDockerを使うなら rake docker:pdf}
851
-
852
1071
  $ @<userinput>{@<b>{export STARTER_TARGET=ebook}} @<balloon>{電子用に設定}
853
1072
  $ @<userinput>{rake pdf} @<balloon>{またはDockerを使うなら rake docker:pdf}
854
1073
  //}
855
1074
 
856
- //footnote[fn-3pf5z][「@<code>{pbook}」は「printing book」、「@<code>{ebook}」は「electronic book」を表します。]
857
-
858
1075
  Windowsの場合は、「@<code>{set STARTER_TARGET=pbook}」や「@<code>{set STARTER_TARGET=ebook}」を使って環境変数を設定してください。
859
1076
 
860
- または、「@<file>{config-starter.yml}」に設定項目「@<code>{target:}」があるので、これを「@<code>{pbook}」(印刷用)または「@<code>{ebook}」(電子用)に設定してもいいです。
861
-
862
- ただし、この設定よりも環境変数「@<code>{$STARTER_TARGET}」のほうが優先されます。
863
- 設定ファイルを変更しても切り替わらなくて困った場合は、環境変数を未設定に戻しましょう。
1077
+ 環境変数を未設定に戻すには、次のようにします。
864
1078
 
865
1079
  //terminal[][macOSやLinuxの場合]{
866
1080
  $ @<userinput>{@<b>{unset STARTER_TARGET}} @<balloon>{環境変数を未設定に戻す}
@@ -879,7 +1093,11 @@ $ @<userinput>{@<b>{unset STARTER_TARGET}} @<balloon>{環境変数を未設
879
1093
  具体的には、見開きにおいて内側の余白を約2cm、外側の余白を約1.5cmにしています@<fn>{fn-yuyf5}。
880
1094
  これは見開きでの読みやすさを確保したうえで本文幅をできるだけ広げるための工夫です。@<br>{}
881
1095
  電子用では見開きを考慮する必要がないので、左右の余白幅は同じに設定されます。
882
- : 表紙
1096
+ : ノンブル
1097
+ 印刷用には自動的にノンブルがつき、電子用にはつきません。
1098
+ 「ノンブル」とはすべてのページにつけられる通し番号であり、印刷所に入稿するときに必要です。
1099
+ ノンブルについての詳細は@<secref>{05-faq|sec-nombre}を参照してください。
1100
+ : 表紙
883
1101
  印刷用では、表紙がつきません。
884
1102
  なぜなら、表紙のPDFファイルは本文とは別にして印刷所に入稿するからです。@<br>{}
885
1103
  電子用では、(設定されていれば)表紙がつきます@<fn>{fn-yybgl}。
@@ -888,72 +1106,65 @@ $ @<userinput>{@<b>{unset STARTER_TARGET}} @<balloon>{環境変数を未設
888
1106
  //footnote[fn-yuyf5][余白幅は初期設定によって多少の違いがあります。設定の詳細は「@<file>{sty/mytextsize.sty}」を見てください。]
889
1107
  //footnote[fn-yybgl][表紙のつけ方は@<secref>{04-customize|subsec-coverpdf}を見てください。]
890
1108
 
891
- またこれらの違いに加えて、印刷用PDFファイルにはノンブルをつける必要があります。
892
- 詳しくは次で説明します。
893
1109
 
894
1110
 
895
- === ノンブル
1111
+ =={sec-preview} 高速プレビュー
1112
+
1113
+ ページ数が多くなると、PDFファイルへのコンパイルに時間がかかるようになり、執筆に支障が出ます。
896
1114
 
897
- 「ノンブル」とは全ページにつける通し番号のことです。
898
- ページ番号と似ていますが、次のような違いがあります。
1115
+ ここでは高速にプレビューするための機能を紹介します。
899
1116
 
900
- * ページ番号は目次と本文で番号が連続してなかったり、空白ページにはついてなかったりするので、通し番号にはなっていません。
901
- ノンブルは全ページを通じて連続した番号になっています。
902
- * ページ番号は読者のためにあるので、ページ内で目につくところに置かれます。
903
- ノンブルは印刷所だけが分かればいいので(ページの順番を確認するため)、ページ内で目立たない場所に小さく置かれます。
904
1117
 
905
- 詳しくは「ノンブル qiita.com」でGoogle検索してください。
1118
+ === 指定した章だけをコンパイルする
906
1119
 
907
- 印刷所に入稿するPDFファイルには、ノンブルが必要になることがあります。
908
- ノンブルが必要かどうかは印刷所によって異なり、たとえば「日光企画」なら必須、「ねこのしっぽ」なら必須ではありません。
909
- 詳しくは入稿先の印刷所に聞いてください。
1120
+ Starterでは、指定した章(Chapter)だけを@<LaTeX>{}でコンパイルできます。
1121
+ これは章の数が多い場合や、著者が多数いる合同誌の場合にはとても効果的です。
1122
+ 具体的には次のようにします。
910
1123
 
911
- Starterでは、PDFファイルにノンブルをつける機能が用意されています。
1124
+ * 「@<code>|rake pdf @<b>{c=03-syntax}|」のようにすると、「@<file>{03-syntax.re}」だけをコンパイルします。
1125
+ * または環境変数「@<code>|$STARTER_CHAPTER|」を設定する方法でも、章を指定できます。
912
1126
 
913
- //terminal[][PDFファイルにノンブルをつける]{
914
- $ @<userinput>{rake pdf} @<balloon>{PDFファイルを生成する}
915
- $ @<userinput>{rake pdf:nombre} @<balloon>{PDFファイルにノンブルをつける}
1127
+ //terminal[][例:03-syntax-faq.reだけをコンパイルする]{
1128
+ $ @<userinput>{@<b>{rake pdf c=03-syntax}} @<balloon>{「.re」はつけない}
1129
+ ### または
1130
+ $ @<userinput>{@<b>{export STARTER_CHAPTER=03-syntax}} @<balloon>{「.re」はつけない}
1131
+ $ @<userinput>{rake pdf} @<balloon>{Dockerを使っているなら rake docker:pdf}
916
1132
  //}
917
1133
 
918
- Dockerを使っている場合は、「@<code>{rake pdf:nombre}」のかわりに「@<code>{rake docker:pdf:nombre}」を使ってください。
919
- また「@<code>{rake pdf:nombre}」はノンブルをつけるだけであり、再コンパイルはしないので注意してください。
1134
+ コンパイルする章を指定したとき、Starterは次のような動作になります。
920
1135
 
921
- なお「@<href>{https://kauplan.org/pdfoperation/, PDFOperation}」を使っても、PDFファイルにノンブルが簡単につけられます。
1136
+ * 他の章は無視されます。
1137
+ * 表紙や、目次や、大扉や、奥付も無視されます。
1138
+ * @<LaTeX>{}のコンパイル回数が1回だけになります(コンパイル時間を短縮するため)。
922
1139
 
923
- //note[ノンブル用フォントの埋め込み]{
924
- 残念ながら、「@<code>{rake pdf:nombre}」でノンブルをつけるとそのフォントがPDFファイルに埋め込まれません(これはPDFファイルを操作しているライブラリの限界によるものです)。
925
- そのため、印刷所に入稿するまえにフォントを埋め込む必要があります。
1140
+ なお「@<code>{$STARTER_CHAPTER}」を設定した場合、全体をコンパイルするときにはリセットしてください。
926
1141
 
927
- 対策方法は@<href>{https://kauplan.org/pdfoperation/}を見てください。
1142
+ //terminal[][全体をコンパイルする]{
1143
+ $ @<userinput>{@<b>{unset STARTER_CHAPTER}} @<balloon>{「$」はつけないことに注意}
928
1144
  //}
929
1145
 
930
1146
 
931
- =={sec-preview} 高速プレビュー
1147
+ === コンパイル回数を1回だけに制限する
932
1148
 
933
- ページ数が多くなると、PDFファイルへのコンパイルに時間がかかるようになり、執筆に支障が出ます。
1149
+ Re:VIEWおよびStarterでは、@<LaTeX>{}のコンパイルが最大で3回行われます@<fn>{mb3pa}。
934
1150
 
935
- ここでは高速にプレビューするための機能を紹介します。
1151
+ //footnote[mb3pa][索引があると、コンパイル回数がもう1回増えます。]
936
1152
 
1153
+ * 1回目のコンパイルで章や節のページ番号が分かる。
1154
+ * 2回目のコンパイルで目次が作成される。
1155
+ * もし2回目のコンパイルでページ番号が変わると、3回目のコンパイルが行われる。
937
1156
 
938
- === 指定した章だけをコンパイルする
1157
+ しかし、ページ番号が合ってなくてもいいからとにかく仕上がりを確認したい場面はよくあり、そんなときは3回もコンパイルされるのは時間の無駄です。
939
1158
 
940
- Starterでは、環境変数「@<code>{$STARTER_CHAPTER}」を設定するとその章(Chapter)だけをコンパイルします。
941
- これは章の数が多い場合や、著者が多数いる合同誌の場合にはとても効果的です。
1159
+ そこでStarterでは、@<LaTeX>{}のコンパイル回数を制限する機能を用意しました。
942
1160
 
943
- //terminal[][例:03-syntax-faq.reだけをコンパイルする]{
944
- $ @<userinput>{@<b>{export STARTER_CHAPTER=03-syntax}} @<balloon>{「.re」はつけない}
945
- $ @<userinput>{rake pdf} @<balloon>{Dockerを使っているなら rake docker:pdf}
1161
+ * 「@<code>|rake pdf @<b>{n=1}|」のようにすると、@<LaTeX>{}のコンパイルが1回しか行われません。
1162
+ * または環境変数「@<code>|$STARTER_COMPILETIMES|」を「@<code>|1|」に設定する方法でも、同じように制限できます。
946
1163
 
947
- $ @<userinput>{@<b>{STARTER_CHAPTER=03-syntax rake pdf}} @<balloon>{これでもよい}
948
- //}
949
-
950
- このとき、他の章は無視されます。
951
- また表紙や目次や大扉や奥付も無視されます。
952
-
953
- 全体をコンパイルする場合は、「@<code>{$STARTER_CHAPTER}」をリセットしてください。
954
-
955
- //terminal[][全体をコンパイルする]{
956
- $ @<userinput>{@<b>{unset STARTER_CHAPTER}} @<balloon>{「$」はつけないことに注意}
1164
+ //terminal[][@<LaTeX>{}のコンパイル回数を1回に制限してコンパイル]{
1165
+ $ @<userinput>{rake pdf @<b>{n=1} }
1166
+ ### または
1167
+ $ @<userinput>{@<b>{STARTER_COMPILETIMES=1} rake pdf}
957
1168
  //}
958
1169
 
959
1170
 
@@ -963,18 +1174,27 @@ Starterでは、画像の読み込みを省略する「ドラフトモード」
963
1174
  ドラフトモードにすると、画像のかわりに枠線が表示されます。
964
1175
  こうすると、(@<LaTeX>{}のコンパイル時間は変わりませんが)DVIファイルからPDFを生成する時間が短縮されます。
965
1176
 
966
- この機能は、図やスクリーンショットが多い場合や、印刷用に高解像度の画像を使っている場合は、特に効果が高いです。
1177
+ 図やスクリーンショットが多い場合や、印刷用に高解像度の画像を使っている場合は、この機能は特に効果が高いです。
967
1178
 
968
- ドラフトモードにするには、@<file>{config-starter.yml}で「@<code>{draft: true}」を設定するか、または環境変数「@<em>{$STARTER_DRAFT}」に何らかの値を入れてください。
1179
+ ドラフトモードにするには、次のどれを実行します@<fn>{fn-b5nlc}
969
1180
 
970
- //terminal[][ドラフトモードにしてPDFを生成する]{
971
- $ @<userinput>{export STARTER_DRAFT=1} @<balloon>{ドラフトモードをonにする}
972
- $ @<userinput>{rake pdf} @<balloon>{またはDocker環境なら rake docker:pdf}
1181
+ * 「@<code>|rake pdf @<b>{d=on}|」でコンパイルする。
1182
+ * 環境変数「@<em>{$STARTER_DRAFT}」の値を「@<code>|on|」に設定してからコンパイルする。
1183
+ * @<file>{config-starter.yml}で「@<code>{draft: true}」を設定してからコンパイルする。
973
1184
 
974
- $ @<userinput>{unset STARTER_DRAFT} @<balloon>{ドラフトモードをoffにする}
1185
+ //footnote[fn-b5nlc][強制力はこの順序であり、設定ファイルより環境変数のほうが、また環境変数より`rake`コマンドのオプションのほうが優先されます。]
1186
+
1187
+ //terminal[][画像読み込みを省略するドラフトモードでPDFを生成する]{
1188
+ $ @<userinput>{rake pdf @<b>{d=on}} @<balloon>{ドラフトモードをonにする}
1189
+ ### または
1190
+ $ @<userinput>{export STARTER_DRAFT=on} @<balloon>{ドラフトモードをonにする}
1191
+ $ @<userinput>{rake pdf} @<balloon>{またはDocker環境なら rake docker:pdf}
975
1192
  //}
976
1193
 
977
- また「ドラフトモードにしてPDF生成時間を短縮したい、でもこの画像は表示して確認したい」という場合は、「@<code>|//image[...][...][@<b>{draft=off}]|」のように指定すると、その画像はドラフトモードが解除されてPDFに表示されます。
1194
+ 環境変数の設定をクリアするには、「@<code>|unset STARTER_DRAFT|」を実行してください。
1195
+
1196
+ また「ドラフトモードにしてPDF生成時間を短縮したい、でもこの画像は表示して確認したい」というときもあるでしょう。
1197
+ そんなときは「@<code>|//image[...][...][@<b>{draft=off}]|」のように指定すると、その画像はドラフトモードが解除されてPDFに表示されます。
978
1198
 
979
1199
 
980
1200
  === 自動リロードつきHTMLプレビュー
@@ -998,11 +1218,11 @@ $ @<userinput>{rake docker:web:server} @<balloon>{Dockerを使っている場
998
1218
  いくつか注意点があります。
999
1219
 
1000
1220
  * 表示はHTMLで行っているため、PDFでの表示とは差異があります。
1001
- 執筆中はHTMLでプレビューし、区切りのいいところでPDFで表示を確認するといいでしょう。
1221
+ 執筆中はHTMLでプレビューし、区切りのいいところでPDFによる表示を確認するといいでしょう。
1002
1222
  * 今のところ数式はプレビューできません。
1003
1223
  * 変更が反映されるのは、開いているページと対応した原稿ファイルが変更された場合だけです。
1004
1224
  たとえば「@<file>{foo.html}」を開いているときに「@<file>{foo.re}」を変更するとプレビューに反映されますが、別の「@<file>{bar.re}」を変更しても反映されません。
1005
1225
  * 画面右上の「Rebuild and Reload」リンクをクリックすると、原稿ファイルが変更されていなくても強制的にコンパイルとリロードがされます。
1006
1226
  * 原稿ファイルに入力間違いがあった場合は、画面にエラーが表示されます。
1007
- エラー表示はあまり分かりやすくはないので、今後改善される予定です。
1227
+ エラー表示はあまり分かりやすくないので、今後改善される予定です。
1008
1228
  * Webサーバを終了するには、Controlキーを押しながら「c」を押してください。