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,18 @@
1
+ #@# -*- coding: utf-8 -*-
2
+ = Re:VIEWとの差分
3
+
4
+ //abstract{
5
+ Starterにおける機能追加や修正の一覧です。
6
+ //}
7
+
8
+ (TODO)
9
+
10
+ まだ書かれてないので、かわりにQiiaの記事を参照してください。
11
+
12
+ * 『技術系同人誌を書く人の味方「Re:VIEW Starter」の紹介』(Qitta)@<br>{}
13
+ @<href>{https://qiita.com/kauplan/items/d01e6e39a05be0b908a1}
14
+ * 『Re:VIEW Starterの新機能(2019年夏)』(Qiita)@<br>{}
15
+ @<href>{https://qiita.com/kauplan/items/dd8dd0f4a6e0eb539a98}
16
+ * 『Re:VIEW Starterの新機能(2019年冬)』(Qitta)@<br>{}
17
+ @<href>{https://qiita.com/kauplan/items/e36edd7900498e231aaf}
18
+
@@ -0,0 +1,119 @@
1
+ #@# -*- coding: utf-8 -*-
2
+ = ファイルとフォルダ
3
+
4
+ //abstract{
5
+ プロジェクトのzipファイル(例:@<file>{mybook.zip})を解凍してできるファイルとフォルダの解説です。
6
+ //}
7
+
8
+
9
+ #@#=={appendix-files} ファイルとフォルダの解説
10
+
11
+ #@# : @<file>{Gemfile}
12
+ #@# @<code>{gem}コマンドが使用します。通常は気にしなくていいです。
13
+ : @<file>{README.md}
14
+ プロジェクトの説明が書かれたファイルです。
15
+ ユーザが好きなように上書きすることを想定しています。
16
+ : @<file>{Rakefile}
17
+ @<code>{rake}コマンドが使用します。
18
+ コマンドを追加する場合は、このファイルは変更せず、かわりに「@<file>{lib/tasks/*.rake}」を変更してください。
19
+ : @<file>{catalog.yml}
20
+ 原稿ファイルが順番に並べられたファイルです。
21
+ 原稿ファイルを追加した・削除した場合は、このファイルも編集します。
22
+ #@# : @<file>{catalog.yml.orig}
23
+ #@# Re:VIEWでのオリジナルファイルです。
24
+ : @<file>{config-starter.yml}
25
+ Starter独自の設定ファイルです。
26
+ Starterでは設定ファイルとして「@<file>{cofnig.yml}」と「@<file>{cofnig-starter.yml}」の両方を使います。
27
+ : @<file>{config.yml}
28
+ Re:VIEWの設定ファイルです。
29
+ Starterによりいくつか変更と拡張がされています。
30
+ #@# : @<file>{config.yml.orig}
31
+ #@# Re:VIEWでのオリジナルファイルです。
32
+ : @<file>{contents/}
33
+ 原稿ファイルを置くフォルダです@<fn>{fn-lacsx}。
34
+ : @<file>{contents/*.re}
35
+ 原稿ファイルです。
36
+ 章(Chapter)ごとにファイルが分かれます。
37
+ : @<file>{css/}
38
+ HTMLファイルで使うCSSファイルを置くフォルダです。
39
+ ePubで使うのはこれではなくて@<file>{style.css}なので注意してください。
40
+ : @<file>{images/}
41
+ 画像ファイルを置くフォルダです。
42
+ この下に章(Chapter)ごとのサブフォルダを作ることもできます。
43
+ : @<file>{layouts/layout.epub.erb}
44
+ 原稿ファイルからePubファイルを生成するためのテンプレートです。
45
+ : @<file>{layouts/layout.html5.erb}
46
+ 原稿ファイルからHTMLファイルを生成するためのテンプレートです。
47
+ : @<file>{layouts/layout.tex.erb}
48
+ 原稿ファイルからLaTeXファイルを生成するためのテンプレートです。
49
+ : @<file>{lib/hooks/beforetexcompile.rb}
50
+ LaTeXファイルをコンパイルする前に編集するスクリプトです。
51
+ : @<file>{lib/ruby/*.rb}
52
+ StarterによるRe:VIEWの拡張を行うRubyスクリプトです。
53
+ : @<file>{lib/ruby/mytasks.rake}
54
+ ユーザ独自のRakeコマンドを追加するためのファイルです。
55
+ : @<file>{lib/ruby/review.rake}
56
+ Re:VIEWで用意されているRakeタスクのファイルです。
57
+ Starterによって変更や拡張がされています。
58
+ : @<file>{lib/ruby/review.rake.orig}
59
+ Starterによって変更や拡張がされる前の、オリジナルのタスクファイルです。
60
+ : @<file>{lib/ruby/starter.rake}
61
+ Starterが追加したRakeタスクが定義されたファイルです。
62
+ : @<file>{locale.yml}
63
+ 国際化用のファイルです。
64
+ たとえば「リスト1.1」を「プログラム1.1」に変更したい場合は、このファイルを変更します。
65
+ : @<file>{mybook-epub/}
66
+ ePubファイルを生成するときの中間生成ファイルが置かれるフォルダです。
67
+ 通常は気にする必要はありません。
68
+ : @<file>{mybook-pdf/}
69
+ PDFファイルを生成するときの中間生成ファイルが置かれるフォルダです。
70
+ @<LaTeX>{}ファイルをデバッグするときに必要となりますが、通常は気にする必要はありません。
71
+ : @<file>{mybook.epub}
72
+ 生成されたePubファイルです。
73
+ ファイル名はプロジェクトによって異なります。
74
+ : @<file>{mybook.pdf}
75
+ 生成されたPDFファイルです。
76
+ ファイル名はプロジェクトによって異なります。
77
+ : @<file>{review-ext.rb}
78
+ Re:VIEWを拡張するためのファイルです。
79
+ このファイルから「@<file>{lib/ruby/*.rb}」が読み込まれています。
80
+ : @<file>{sty/}
81
+ @<LaTeX>{}で使うスタイルファイルが置かれるフォルダです。
82
+ : @<file>{sty/jumoline.sty}
83
+ @<LaTeX>{}で使うスタイルファイルのひとつです。
84
+ : @<file>{sty/mycolophon.sty}
85
+ 奥付@<fn>{fn-7ypmf}の内容が書かれたスタイルファイルです。
86
+ 奥付を変更したい場合はこのファイルを編集します。
87
+ : @<file>{sty/mystyle.sty}
88
+ ユーザが独自に@<LaTeX>{}マクロを定義・上書きするためのファイルです。
89
+ 中身は空であり、ユーザが自由に追加して構いません。
90
+ : @<file>{sty/mytextsize.sty}
91
+ PDFにおける本文の高さと幅を定義したファイルです。
92
+ @<LaTeX>{}では最初に本文の高さと幅を決める必要があるので、他のスタイルファイルから分離されてコンパイルの最初に読み込めるようになっています。
93
+ : @<file>{sty/mytitlepage.sty}
94
+ 大扉@<fn>{fn-cq9ws}の内容が書かれたスタイルファイルです。
95
+ 大扉のデザインを変更したい場合はこのファイルを編集します。
96
+ : @<file>{sty/starter.sty}
97
+ Starter独自のスタイルファイルです。
98
+ ここに書かれた@<LaTeX>{}マクロを変更したい場合は、このファイルを変更するよりも「@<file>{sty/mystyle.sty}」に書いたほうがバージョンアップがしやすくなります。
99
+ : @<file>{sty/starter-codeblock.sty.eruby}
100
+ プログラムコードやターミナルのカスタマイズ用です。
101
+ : @<file>{sty/starter-color.sty.eruby}
102
+ 色のカスタマイズ用です。
103
+ : @<file>{sty/starter-font.sty.eruby}
104
+ フォントのカスタマイズ用です。
105
+ : @<file>{sty/starter-headline.sty}
106
+ 章(Chapter)や節(Section)や項(Subsection)の@<LaTeX>{}マクロが定義されたファイルです。
107
+ : @<file>{sty/starter-note.sty.eruby}
108
+ ノートブロックのカスタマイズ用です。
109
+ : @<file>{sty/starter-section.sty.eruby}
110
+ 以前の、章や節の@<LaTeX>{}マクロ定義です。
111
+ もはや使ってませんが、starter.styを書き換えれば使えます。
112
+ : @<file>{sty/starter-toc.sty.eruby}
113
+ 目次のカスタマイズ用です。
114
+ : @<file>{style.css}
115
+ ePubで使われるCSSスタイルファイルです。
116
+
117
+ //footnote[fn-lacsx][原稿ファイルを置くフォルダ名は「@<file>{config.yml}」の「@<code>|contentdir: contents|」で変更できます。]
118
+ //footnote[fn-7ypmf][@<em>{奥付}とは、本のタイトルや著者や出版社や版や刷などの情報が書かれたページのことです。通常は本のいちばん最後のページに置かれます。]
119
+ //footnote[fn-cq9ws][@<em>{大扉}とは、タイトルページのことです。表紙のことではありません。]
@@ -0,0 +1,267 @@
1
+ = 開発の背景
2
+
3
+ //abstract{
4
+ ここでは歴史の記録として、Re:VIEW Starterが開発された背景などを記しておきます。
5
+ 個人的な忘備録として残すものであり、読まなくても本や同人誌の制作にはまったく支障はありません。
6
+ //}
7
+
8
+
9
+ #@#== Re:VIEW Starterについて
10
+ #@#
11
+ #@#Re:VIEW Starterは、「@<href>{Re:VIEW, https://reviewml.org/}」というドキュメント作成ツールを大幅に機能強化したものです。
12
+ #@#
13
+ #@#主なポイントを挙げます。
14
+ #@#
15
+ #@# * プロジェクト作成時に初期設定がGUIで行える
16
+ #@# * 見栄えのいいデザインをあらかじめ用意
17
+ #@# * インライン命令もブロック命令も入れ子にできる
18
+ #@# * 順序つき箇条書きが入れ子にでき、数字以外も使える
19
+ #@# * プログラムコード中の長い行を自動的に折り返す(太字も取消線もOK)
20
+ #@# * プログラムコードの行番号機能が豊富
21
+ #@# * 0とO、1とlが見分けやすいフォントを採用
22
+ #@# * 命令体系をシンプルで覚えやすいように整理
23
+ #@# * 範囲コメントを利用可能
24
+ #@# * いろんなところに気が利いている
25
+
26
+
27
+ ==[notoc] 開発の経緯
28
+
29
+ Re:VIEWはver 2.4の頃、「A5サイズのPDFファイルが生成できない」「フォントサイズも10ptから変更できない」という致命的な問題を抱えていました。
30
+ つまりB5サイズでフォントが10ptの本しか作れなかったのです。
31
+
32
+ この頃はまだ、技術同人誌はB5サイズ10ptで作るのが主流だったので、Re:VIEWのこの制限はあまり問題にはなりませんでした。
33
+ しかし同人誌印刷ではB5サイズよりA5サイズのほうが割安なので、一部の人がA5サイズやより小さいフォントサイズでのPDF生成を模索し、そしてRe:VIEWの制限に苦しみました。
34
+
35
+ たとえば、フォントサイズを小さくしようとして格闘し、結果としてあきらめた人の証言を見てみましょう@<fn>{g6rdf}(@<img>{slide2})。
36
+
37
+ //footnote[g6rdf][@<href>{https://www.slideshare.net/KazutoshiKashimoto/nagoya0927-release}のp.21とp.22。]
38
+
39
+ //image[slide2][フォントやページサイズを変更できなかった人の証言][scale=1.0]
40
+
41
+ この問題は、「@<em>{geometry.sty}」というスタイルファイルをオプションなしで読み込んでいることが原因です@<fn>{fn-ly58b}。
42
+ 具体的は修正方法は@<href>{https://qiita.com/kauplan/items/01dee0249802711d30a6, Qiitaの記事}に書いています。
43
+ 読めば分かりますが、かなり面倒です。
44
+
45
+ //footnote[fn-ly58b][簡単に書いてますけど、原因が@<em>{geometry.sty}であることを突き止めるのには多くの時間がかかり、正月休みが潰れました。今でも恨んでます。この苦労を知らずに「Re:VIEWでは昔からA5のPDFが簡単に生成できた」と言い張る歴史修正者にはケツバットの刑を与えてやりたいくらいです。]
46
+
47
+ この不具合はバグ報告したものの、開発陣の反応は芳しくなく、すぐには修正されなさそうでした@<fn>{fn-mxd28}。
48
+ 当時は「技術書典」という同人イベントの開催が迫っていたので、これは困りました。
49
+ 仕方ないのでRe:VIEW側での修正に期待せず、誰でも簡単にA5サイズの同人誌が作れるための別の方法を考えることにしました。
50
+
51
+ //footnote[fn-mxd28][実際、Re:VIEW Ver 2の間は修正されず、修正されたのはVer 3になってからでした。当然、技術書典には間に合いませんでした。]
52
+
53
+ そうした経緯で誕生したのが、Re:VIEW Starterです。
54
+ Starterでは初期設定がGUIでできる簡単さが売りのひとつですが、もともとはA5サイズ9ptの同人誌を簡単に作れることが開発動機だったのです。
55
+
56
+
57
+ ==[notoc] 開発の転機
58
+
59
+ Starterは、当初はRe:VIEWとの違いが大きくならないよう、GUIで設定した状態のプロジェクトをダウンロードできるだけに留めていました。
60
+ つまりユーザが手作業で設定するのを、GUIで簡単に設定できるようにしただけでした。
61
+
62
+ しかしRe:VIEWは、ドキュメント作成ツールとしての基本機能が足りておらず、そのうえ開発速度が遅くて技術書典といったイベントには新機能追加が間に合いません。
63
+ またバグ報告をしても「仕様だ」と回答されたり、互換性を理由に却下されたり(けど他の人が報告すると取り入れられたり)といったことが積み重なって、ある日を境にStarterで独自の機能を追加することを決心しました。
64
+
65
+ そこからは少しずつRe:VIEWの機能を上書きし、足りない機能を追加していきました。
66
+
67
+ 現在のStarterでは、Re:VIEWのソースコードを広範囲に上書きしています@<fn>{fn-8309s}。
68
+ 特にパーサの大部分はStarter側で上書きしています。
69
+ このおかげで、インライン命令やブロック命令を入れ子対応にしたり、箇条書きの機能を大きく拡張したりできています。
70
+
71
+ Re:VIEWとのかい離はずいぶんと大きくなりました。
72
+
73
+ //footnote[fn-8309s][実はRe:VIEWのソースコードを広範囲に上書きしているせいで、ベースとなるRe:VIEWのバージョンを2.5から上げられていません。しかしRe:VIEWの開発速度が遅く目ぼしい新機能は追加されてないので、デメリットはありません。]
74
+
75
+
76
+ ==[notoc] 開発の障害
77
+
78
+ Starterを開発するうえで大きな障害になったのが、@<LaTeX>{}と、Re:VIEWのコード品質です。
79
+
80
+ 「@<LaTeX>{}」はフリーの組版ソフトウェアであり、Re:VIEWやStarterがPDFファイルを生成するときに内部で使っています。
81
+ @<LaTeX>{}は出力結果がとてもきれいですが、使いこなすには相当な知識が必要です。
82
+
83
+ 特に@<LaTeX>{}のデバッグは困難を極めます。
84
+ エラーメッセージがろくに役立たないせいでエラーを見ても原因が分からない、どう修正すればいいかも分からない、直ったとしてもなぜ直ったのか分からない、分からないことだらけです。
85
+ この文章を読んでいる人にアドバイスできることがあるとすれば、「@<LaTeX>{}には関わるな!」です。
86
+
87
+ またRe:VIEWのコード品質の悪さも、大きな障害となりました。
88
+ ソースコードを読んでも何を意図しているのか理解しづらい、コードの重複があちこちにある、パーサで行うべきことをBuilderクラスで行っている、…など、基礎レベルでのリファクタリングがされていません。
89
+ 信じたくはないでしょうが、同じような感想を持った人が他にもいたので紹介します。
90
+
91
+ //noindent
92
+ @<href>{https://np-complete.gitbook.io/c86-kancolle-api/atogaki}:
93
+ //quote{
94
+ っと上の文章を書いてから2時間ほどRe:VIEWのコードと格闘していたんですが、なんですかこのクソコードは・・・
95
+ これはマジでちょっとビビるレベルのクソコードですよ。
96
+ 夏コミが無事に終わったら冬に向けてRe:VIEWにプルリク送りまくるしかないと思いました。
97
+ //}
98
+
99
+ 「クソコード」は言い過ぎですが、そう言いたくなる気持ちはとてもよく分かります。
100
+
101
+ また、パースしたあとに構文木を作っていないのは、Re:VIEWの重大な設計ミスといえるでしょう。
102
+ Re:VIEWやMarkdownのようなドキュメント作成ツールでは、一般的に次のような設計にします。
103
+
104
+ 1. パーサが入力テキストを解析して、構文木を作る。
105
+ 2. 構文木をたどって必要な改変を行う。
106
+ 3. Visitorパターンを使って、構文木をHTMLや@<LaTeX>{}のコードに変換する。
107
+
108
+ このような設計であれば、機能追加は容易です。
109
+ 特に、HTMLや@<LaTeX>{}のコードを生成するより@<bou>{前}にすべての入力テキストがパース済みなので、たとえ入力テキストの@<bou>{最後}に書かれたコマンドであろうと、それを認識して@<bou>{先頭}のコードを柔軟に変更できます。
110
+
111
+ しかしRe:VIEWは構文木を作らず、パースしながらHTMLや@<LaTeX>{}のコードに変換するため、しなくてもいいはずのハックが必要となることがあります。
112
+
113
+ Starterは将来的にRe:VIEWのパーサをすべて上書きして、構文木を生成するタイプのパーサに置き換えることになるでしょう。
114
+
115
+
116
+ ==[notoc] 開発方針の違い
117
+
118
+ Re:VIEWとStarterでは、開発方針に大きな違いがあります。
119
+
120
+ ===[notoc] 開発速度
121
+
122
+ Re:VIEWでは、リリースが年3回と決まっています。
123
+ またリリース時期も(過去を見る限り)2月末、6月末、10月末に固定されています。
124
+ そのため「次の技術書典までにこの新機能が必要だ」と思っても、固定されたリリース時期にならないと新機能はリリースされません。
125
+ 言い方を変えると、ユーザが必要とする開発速度についてこれていません。
126
+
127
+ Starterは主に、技術書典をはじめとした同人イベントに合わせて新機能が開発されます。
128
+ また2〜3週間ごとにリリースされるので、新機能の追加とバグ修正が急ピッチで進みます。
129
+ つまり、ユーザが必要とする速度で開発されています。
130
+
131
+ ===[notoc] 機能選定
132
+
133
+ Re:VIEWは商業誌での利用実績が多いこともあって、「@<href>{https://www.w3.org/TR/jlreq/ja/, 日本語組版処理の要件}」への対応が重視されます。
134
+ そのため@<href>{jlreqクラスファイル, https://github.com/abenori/jlreq}が標準でサポートされており、少なくない開発リソースがその対応に割かれています。
135
+ そのせいか、「範囲コメントを実装する」「インライン命令やブロック命令を入れ子に対応させる」「順序つき箇条書きで数字以外を使えるようにする」などの基本機能が、未だに実装されていません。
136
+
137
+ しかし「日本語組版処理の要件」は、読んでみると分かりますが、重箱の隅をつつくような内容がほとんどです。
138
+ プロユースでは必要なのかもしれませんが、同人誌では「禁則処理がきちんとできていれば充分」というユーザがほとんどでしょう。
139
+ 開発リソースをそんな細かいところに割くよりも、もっとユーザが必要とする機能の開発に割くべきです。
140
+
141
+ Starterでは日本語組版の細かい要件は気にせず、ユーザが必要とする機能を重点的に開発しています。
142
+ たとえば、範囲コメントを実装したり、インライン命令やブロック命令を入れ子に対応させたり、順序つき箇条書きでアルファベットも使えるようにしたり、章や節のタイトルを見栄えのいいデザインにしたりといった、ユーザにとって必要な機能を優先して開発しています@<fn>{fn-jnik5}。
143
+
144
+ //footnote[fn-jnik5][ここに挙げた機能のうち、見た目のデザインを変更するのは(@<LaTeX>{}の知識さえあれば)ユーザでも変更できますし、実際にTechboosterテンプレートでは見た目のデザインを変更しています。しかしそれ以外の機能はRe:VIEWのソースコードを変更しなければ実現できず、ユーザが簡単に行えることではありません。]
145
+
146
+ ===[notoc] バグ対応
147
+
148
+ 今まで、Re:VIEWには約20個ぐらいのバグ報告やPull Requestを出しました。
149
+ 取り入れられたものも多いですが、理不尽な理由で拒絶されたものも多いです
150
+
151
+
152
+ ===== 明らかなバグを仕様だと言い張る
153
+
154
+ たとえば、Re:VIEWでは箇条書きの項目が複数行だと勝手に結合されるというバグがあります。
155
+
156
+ //list[][サンプル]{
157
+ * AA AA
158
+ BB BB
159
+ CC CC
160
+ //}
161
+
162
+
163
+
164
+ //sampleoutputbegin[表示結果]
165
+
166
+ * AA AABB BBCC CC
167
+
168
+ //sampleoutputend
169
+
170
+
171
+
172
+ 「AABB」や「BBCC」のように英単語が結合されていますよね?
173
+ どう見てもRe:VIEWのバグなのですが、@<hlink>{https://github.com/kmuto/review/issues/1312, 報告}しても「これは仕様だ」と言い張るんです。
174
+ しかも「なぜそのような書き方をするんだ?一行に書けばいいではないか」と言われる始末。
175
+ かなり意味不明な対応をされました。
176
+
177
+ Starterではこのバグは修正しています(当然です)。
178
+
179
+ ===== 提案を却下しておきながら次のバージョンで釈明なく取り入れる
180
+
181
+ Re:VIEW 2.xでは、@<LaTeX>{}スタイルファイルが「@<file>{sty/reviewmacro.sty}」しかなく、カスタマイズするにはこのファイルを編集するのが一般的でした。
182
+ しかしこの方法には問題があります。
183
+
184
+ * 「@<file>{sty/reviewmacro.sty}」を直接編集すると、Re:VIEWのバージョンアップをするときに困る。
185
+ * 自分でスタイルファイルを追加できるが、そのためには設定ファイルの項目を変更する必要があり、初心者には敷居が高い(どの項目をどう変更すればいいか知らないため)。
186
+
187
+ そこで、あらかじめ空のスタイルファイルを用意し、ユーザのカスタマイズはそのファイルの中で行うことを@<hlink>{https://github.com/kmuto/review/issues/917, 提案}しました。
188
+ Starterでいうと「@<file>{sty/mystyle.sty}」のことですね。
189
+ 実装は簡単だし、問題の解決策としてとても妥当な方法です。
190
+
191
+ しかしこの提案は、あーだこーだと理由をつけられて却下されました(これに限らず、初心者への敷居を下げるための提案は却下されることが多い印象です)。
192
+ 仕方ないので、Starterでは初期の頃から独自に空のスタイルファイルを提供していました。
193
+
194
+ ところが、なんとRe:VIEW 3.0でこの機能が取り込まれていたのです!
195
+ 「提案が通ったならそれでいいじゃないか」と心ないことを言う人もいるでしょうけど、いろいろ理由をつけて提案を却下しておきながら、何の釈明もなくしれーっと取り込むのは、却下されたほうとしてはたまったものではありません。
196
+ 不満が残るのは当たり前です。
197
+
198
+ ===== 仲のいい人とそうでない人とで露骨に態度を変える
199
+
200
+ 昔のRe:VIEWでは、「@<code>|//list|」においてキャプション(説明文)を指定しなくても言語指定をすると、本文とプログラムリストの間が大きく空いてしまうというバグがありました。
201
+ たとえばこのように書くと:
202
+
203
+ //list[][サンプル]{
204
+ @<b>|//list[][][ruby]|{
205
+ def fib(n)
206
+ return n <= 1 ? n : fib(n-1) : fib(n-2)
207
+ end
208
+ /@<nop>$$/}
209
+ //}
210
+
211
+
212
+
213
+ //noindent
214
+ @<img>{bug913}の下のように表示されていました。
215
+
216
+ //image[bug913][本文とプログラムリストの間が大きく空いてしまう(下)][scale=0.7,border=on]
217
+
218
+ この現象は、空文字列がキャプションとして使われるため、その分の空行が空いてしまうことが原因です。
219
+ そこで、キャプションが空文字列のときは表示しないようにする修正を@<hlink>{https://github.com/kmuto/review/pull/913, 報告}しました。
220
+
221
+ しかしこのバグ報告も、後方互換性のために却下されました。
222
+ 「出力結果が変わってしまうような変更は、たとえバグ修正だとしても、メジャーバージョンアップ以外では受けつけられない」というのが理由でした。
223
+ こんな明白なバグの互換性なんかいらないはずだと思ったので、粘って交渉したのですが、互換性を理由に頑なに拒まれました。
224
+
225
+ ところが、開発者と仲のいい別の人が「やはりバグではないか?」とコメントした途端、メジャーバージョンアップでもないのに修正されました。
226
+ 見事な手のひら返しです。
227
+
228
+ 「出力結果が変わってしまう変更は、たとえバグ修正でも(メジャーバージョンアップ以外では)受けつけられない。それが組版ソフトだ」という理由でさんざん拒絶しておいて、いざ別の人が言及するとすぐに修正する。
229
+ 出力結果が変わってしまう修正だというのに!
230
+
231
+ 大事な点なので強調しますが、@<B>{出力結果が変わる変更はダメと言って拒絶しておきながら、別の人が「やはりバグでは?」と言うと出力結果が変わる変更でもあっさり行うという、露骨な態度の違い}。
232
+ よく平気でこんなことできるなと逆に感心しました。
233
+
234
+ //blankline
235
+
236
+ こんなことが積み重なったので、もうバグ報告も機能提案もしないことにしました。
237
+ Re:VIEWのコードは品質が良くないので、ソースコードを読んでいると細かいバグがちょこちょこ見つかりますが、もうシラネ。
238
+
239
+ またRe:VIEWのリリースノートを見ると、Starterの機能がRe:VIEWの新機能として取り込まれているのを見かけます。
240
+ つまり、@<B>{Re:VIEWに新機能提案しても通らないけど、Starterに機能を実装するとRe:VIEWに取り込まれる可能性が高い}ということです。
241
+ こちらはバグ報告や提案が変な理由で却下されてストレスが溜まることから解放されるし、Re:VIEW側はStarterが先行実装した機能を選んで取り込めばいいし、Win-Winで、これでいいのだ。
242
+
243
+
244
+ ==[notoc] 今後の開発
245
+
246
+ * Starterは、将来的にRe:VIEWのソースコードをすべて上書きするでしょう。
247
+ @<B>{大事なのはユーザが書いた原稿であって、Re:VIEWでもStarterでもありません}。
248
+ たとえRe:VIEWのソースコードをすべて捨てたとしても、ユーザの原稿は使えるようになるはずです。
249
+
250
+ * 設定は、今は設定ファイルを手作業で変更していますが、これはGUIによる設定に置き換わるでしょう。
251
+ そのため設定ファイルの互換性はなくなる可能性が高いです。
252
+
253
+ * PDF生成のための組版ツールとして、@<LaTeX>{}以外にBibliostyleをサポートしたいと考えています。
254
+ ただしBibliostyleプロジェクトが独自のドキュメント作成ツールを開発中なので、Bibliostyleを必要とする人はそちらを使うだろうから、Starterでの優先順位は高くなくてもいいかなと思っています。
255
+
256
+ * 同人イベントがオンラインに移行することから、PDFよりePubの需要が高くなるでしょう。
257
+ 今のStarterはePub対応が弱いので、強化する必要があります。
258
+
259
+ * 印刷物での配布が減るので、カラー化がいっそう進むでしょう。
260
+ Starterはコードハイライトができないので、対応を急ぐ必要があります。
261
+
262
+ * Visual Studio Codeでの執筆を支援するプラグインが必要とされるでしょう。
263
+ そのための本を買ったけど、積ん読のままです。
264
+
265
+ * Markdownファイルの対応は、パーサを書き換えたあとで検討します。
266
+
267
+ * 諸般の事情によりGitリポジトリを公開していないので、公開できるよう準備を進めます。
@@ -0,0 +1,38 @@
1
+ = あとがき
2
+
3
+ いかがだったでしょうか。
4
+ 感想や質問は随時受けつけています。
5
+
6
+ //blankline
7
+ //blankline
8
+
9
+
10
+ ===[notoc] 著者紹介
11
+
12
+ //sideimage[tw-icon][20mm][side=L,sep=7mm,border=on]{
13
+ //noindent
14
+ @<strong>{カウプラン機関極東支部} (@<hlink>{https://twitter.com/_kauplan, @_kauplan})
15
+
16
+ #@# 例:よさげな言葉を並べてドヤ顔する
17
+ //noindent
18
+ @<small>{“賞味期限が1年にも満たないようなツールやフレームワークに振り回されるのを許しておけるほど、我々の人生は長くはない。”}
19
+
20
+ * @<href>{https://kauplan.org/}
21
+ #@# 例:推しを布教する
22
+ * 『@<hlink>{https://www.amazon.co.jp/dp/4063348792, パンプキン・シザーズ}』推し
23
+ * 『@<hlink>{http://worldtrigger.info/, ワールド・トリガー}』推し
24
+ * 『@<hlink>{https://pripri-anime.jp/, プリンセス・プリンシパル}』推し
25
+ //}
26
+
27
+ //blankline
28
+
29
+
30
+ ===[notoc] 既刊一覧
31
+
32
+ * 『@<hlink>{https://kauplan.org/books/sqltuning/, SQL高速化 in PostgreSQL}』(技術書典2)
33
+ * 『@<hlink>{https://kauplan.org/books/oopl/, オブジェクト指向言語解体新書}』(技術書典3)
34
+ * 『@<hlink>{https://kauplan.org/books/jquery/, jQueryだって複雑なアプリ作れるもん!}』(技術書典4)
35
+ * 『@<hlink>{https://kauplan.org/books/serversetup/, Shellスクリプトでサーバ設定を自動化する本}』(技術書典5)
36
+ * 『@<hlink>{https://kauplan.org/books/errmsg/, Rubyのエラーメッセージが読み解けるようになる本}』(技術書典6)
37
+ * 『@<hlink>{https://kauplan.org/books/sql/, わかりみSQL}』(技術書典7)
38
+ * 『@<hlink>{https://kauplan.org/books/pymagic/, Pythonの黒魔術}』(技術書典8)
@@ -0,0 +1,349 @@
1
+ /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
2
+
3
+ /* Document
4
+ ========================================================================== */
5
+
6
+ /**
7
+ * 1. Correct the line height in all browsers.
8
+ * 2. Prevent adjustments of font size after orientation changes in iOS.
9
+ */
10
+
11
+ html {
12
+ line-height: 1.15; /* 1 */
13
+ -webkit-text-size-adjust: 100%; /* 2 */
14
+ }
15
+
16
+ /* Sections
17
+ ========================================================================== */
18
+
19
+ /**
20
+ * Remove the margin in all browsers.
21
+ */
22
+
23
+ body {
24
+ margin: 0;
25
+ }
26
+
27
+ /**
28
+ * Render the `main` element consistently in IE.
29
+ */
30
+
31
+ main {
32
+ display: block;
33
+ }
34
+
35
+ /**
36
+ * Correct the font size and margin on `h1` elements within `section` and
37
+ * `article` contexts in Chrome, Firefox, and Safari.
38
+ */
39
+
40
+ h1 {
41
+ font-size: 2em;
42
+ margin: 0.67em 0;
43
+ }
44
+
45
+ /* Grouping content
46
+ ========================================================================== */
47
+
48
+ /**
49
+ * 1. Add the correct box sizing in Firefox.
50
+ * 2. Show the overflow in Edge and IE.
51
+ */
52
+
53
+ hr {
54
+ box-sizing: content-box; /* 1 */
55
+ height: 0; /* 1 */
56
+ overflow: visible; /* 2 */
57
+ }
58
+
59
+ /**
60
+ * 1. Correct the inheritance and scaling of font size in all browsers.
61
+ * 2. Correct the odd `em` font sizing in all browsers.
62
+ */
63
+
64
+ pre {
65
+ font-family: monospace, monospace; /* 1 */
66
+ font-size: 1em; /* 2 */
67
+ }
68
+
69
+ /* Text-level semantics
70
+ ========================================================================== */
71
+
72
+ /**
73
+ * Remove the gray background on active links in IE 10.
74
+ */
75
+
76
+ a {
77
+ background-color: transparent;
78
+ }
79
+
80
+ /**
81
+ * 1. Remove the bottom border in Chrome 57-
82
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
83
+ */
84
+
85
+ abbr[title] {
86
+ border-bottom: none; /* 1 */
87
+ text-decoration: underline; /* 2 */
88
+ text-decoration: underline dotted; /* 2 */
89
+ }
90
+
91
+ /**
92
+ * Add the correct font weight in Chrome, Edge, and Safari.
93
+ */
94
+
95
+ b,
96
+ strong {
97
+ font-weight: bolder;
98
+ }
99
+
100
+ /**
101
+ * 1. Correct the inheritance and scaling of font size in all browsers.
102
+ * 2. Correct the odd `em` font sizing in all browsers.
103
+ */
104
+
105
+ code,
106
+ kbd,
107
+ samp {
108
+ font-family: monospace, monospace; /* 1 */
109
+ font-size: 1em; /* 2 */
110
+ }
111
+
112
+ /**
113
+ * Add the correct font size in all browsers.
114
+ */
115
+
116
+ small {
117
+ font-size: 80%;
118
+ }
119
+
120
+ /**
121
+ * Prevent `sub` and `sup` elements from affecting the line height in
122
+ * all browsers.
123
+ */
124
+
125
+ sub,
126
+ sup {
127
+ font-size: 75%;
128
+ line-height: 0;
129
+ position: relative;
130
+ vertical-align: baseline;
131
+ }
132
+
133
+ sub {
134
+ bottom: -0.25em;
135
+ }
136
+
137
+ sup {
138
+ top: -0.5em;
139
+ }
140
+
141
+ /* Embedded content
142
+ ========================================================================== */
143
+
144
+ /**
145
+ * Remove the border on images inside links in IE 10.
146
+ */
147
+
148
+ img {
149
+ border-style: none;
150
+ }
151
+
152
+ /* Forms
153
+ ========================================================================== */
154
+
155
+ /**
156
+ * 1. Change the font styles in all browsers.
157
+ * 2. Remove the margin in Firefox and Safari.
158
+ */
159
+
160
+ button,
161
+ input,
162
+ optgroup,
163
+ select,
164
+ textarea {
165
+ font-family: inherit; /* 1 */
166
+ font-size: 100%; /* 1 */
167
+ line-height: 1.15; /* 1 */
168
+ margin: 0; /* 2 */
169
+ }
170
+
171
+ /**
172
+ * Show the overflow in IE.
173
+ * 1. Show the overflow in Edge.
174
+ */
175
+
176
+ button,
177
+ input { /* 1 */
178
+ overflow: visible;
179
+ }
180
+
181
+ /**
182
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
183
+ * 1. Remove the inheritance of text transform in Firefox.
184
+ */
185
+
186
+ button,
187
+ select { /* 1 */
188
+ text-transform: none;
189
+ }
190
+
191
+ /**
192
+ * Correct the inability to style clickable types in iOS and Safari.
193
+ */
194
+
195
+ button,
196
+ [type="button"],
197
+ [type="reset"],
198
+ [type="submit"] {
199
+ -webkit-appearance: button;
200
+ }
201
+
202
+ /**
203
+ * Remove the inner border and padding in Firefox.
204
+ */
205
+
206
+ button::-moz-focus-inner,
207
+ [type="button"]::-moz-focus-inner,
208
+ [type="reset"]::-moz-focus-inner,
209
+ [type="submit"]::-moz-focus-inner {
210
+ border-style: none;
211
+ padding: 0;
212
+ }
213
+
214
+ /**
215
+ * Restore the focus styles unset by the previous rule.
216
+ */
217
+
218
+ button:-moz-focusring,
219
+ [type="button"]:-moz-focusring,
220
+ [type="reset"]:-moz-focusring,
221
+ [type="submit"]:-moz-focusring {
222
+ outline: 1px dotted ButtonText;
223
+ }
224
+
225
+ /**
226
+ * Correct the padding in Firefox.
227
+ */
228
+
229
+ fieldset {
230
+ padding: 0.35em 0.75em 0.625em;
231
+ }
232
+
233
+ /**
234
+ * 1. Correct the text wrapping in Edge and IE.
235
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
236
+ * 3. Remove the padding so developers are not caught out when they zero out
237
+ * `fieldset` elements in all browsers.
238
+ */
239
+
240
+ legend {
241
+ box-sizing: border-box; /* 1 */
242
+ color: inherit; /* 2 */
243
+ display: table; /* 1 */
244
+ max-width: 100%; /* 1 */
245
+ padding: 0; /* 3 */
246
+ white-space: normal; /* 1 */
247
+ }
248
+
249
+ /**
250
+ * Add the correct vertical alignment in Chrome, Firefox, and Opera.
251
+ */
252
+
253
+ progress {
254
+ vertical-align: baseline;
255
+ }
256
+
257
+ /**
258
+ * Remove the default vertical scrollbar in IE 10+.
259
+ */
260
+
261
+ textarea {
262
+ overflow: auto;
263
+ }
264
+
265
+ /**
266
+ * 1. Add the correct box sizing in IE 10.
267
+ * 2. Remove the padding in IE 10.
268
+ */
269
+
270
+ [type="checkbox"],
271
+ [type="radio"] {
272
+ box-sizing: border-box; /* 1 */
273
+ padding: 0; /* 2 */
274
+ }
275
+
276
+ /**
277
+ * Correct the cursor style of increment and decrement buttons in Chrome.
278
+ */
279
+
280
+ [type="number"]::-webkit-inner-spin-button,
281
+ [type="number"]::-webkit-outer-spin-button {
282
+ height: auto;
283
+ }
284
+
285
+ /**
286
+ * 1. Correct the odd appearance in Chrome and Safari.
287
+ * 2. Correct the outline style in Safari.
288
+ */
289
+
290
+ [type="search"] {
291
+ -webkit-appearance: textfield; /* 1 */
292
+ outline-offset: -2px; /* 2 */
293
+ }
294
+
295
+ /**
296
+ * Remove the inner padding in Chrome and Safari on macOS.
297
+ */
298
+
299
+ [type="search"]::-webkit-search-decoration {
300
+ -webkit-appearance: none;
301
+ }
302
+
303
+ /**
304
+ * 1. Correct the inability to style clickable types in iOS and Safari.
305
+ * 2. Change font properties to `inherit` in Safari.
306
+ */
307
+
308
+ ::-webkit-file-upload-button {
309
+ -webkit-appearance: button; /* 1 */
310
+ font: inherit; /* 2 */
311
+ }
312
+
313
+ /* Interactive
314
+ ========================================================================== */
315
+
316
+ /*
317
+ * Add the correct display in Edge, IE 10+, and Firefox.
318
+ */
319
+
320
+ details {
321
+ display: block;
322
+ }
323
+
324
+ /*
325
+ * Add the correct display in all browsers.
326
+ */
327
+
328
+ summary {
329
+ display: list-item;
330
+ }
331
+
332
+ /* Misc
333
+ ========================================================================== */
334
+
335
+ /**
336
+ * Add the correct display in IE 10+.
337
+ */
338
+
339
+ template {
340
+ display: none;
341
+ }
342
+
343
+ /**
344
+ * Add the correct display in IE 10.
345
+ */
346
+
347
+ [hidden] {
348
+ display: none;
349
+ }