review 4.2.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (165) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-win.yml +11 -5
  3. data/.rubocop.yml +113 -24
  4. data/NEWS.ja.md +94 -0
  5. data/NEWS.md +94 -0
  6. data/bin/review-catalog-converter +1 -1
  7. data/bin/review-check +2 -4
  8. data/bin/review-checkdep +1 -1
  9. data/bin/review-compile +8 -14
  10. data/bin/review-validate +1 -1
  11. data/doc/config.yml.sample +4 -1
  12. data/doc/config.yml.sample-simple +1 -1
  13. data/doc/format.ja.md +83 -4
  14. data/doc/format.md +84 -7
  15. data/doc/makeindex.ja.md +2 -2
  16. data/doc/quickstart.ja.md +3 -3
  17. data/doc/quickstart.md +2 -2
  18. data/lib/epubmaker/content.rb +3 -2
  19. data/lib/epubmaker/epubcommon.rb +33 -25
  20. data/lib/epubmaker/epubv2.rb +5 -6
  21. data/lib/epubmaker/epubv3.rb +20 -18
  22. data/lib/review/book.rb +2 -2
  23. data/lib/review/book/base.rb +61 -25
  24. data/lib/review/book/bib.rb +21 -0
  25. data/lib/review/book/book_unit.rb +155 -0
  26. data/lib/review/book/chapter.rb +30 -26
  27. data/lib/review/book/index.rb +23 -185
  28. data/lib/review/book/index/item.rb +7 -1
  29. data/lib/review/book/part.rb +21 -9
  30. data/lib/review/book/volume.rb +1 -1
  31. data/lib/review/builder.rb +68 -13
  32. data/lib/review/catalog.rb +2 -2
  33. data/lib/review/compiler.rb +159 -73
  34. data/lib/review/configure.rb +22 -1
  35. data/lib/review/converter.rb +1 -1
  36. data/lib/review/epub2html.rb +6 -1
  37. data/lib/review/epubmaker.rb +12 -23
  38. data/lib/review/htmlbuilder.rb +36 -7
  39. data/lib/review/htmlutils.rb +7 -10
  40. data/lib/review/i18n.rb +1 -1
  41. data/lib/review/idgxmlbuilder.rb +51 -6
  42. data/lib/review/idgxmlmaker.rb +9 -14
  43. data/lib/review/index_builder.rb +653 -0
  44. data/lib/review/init.rb +5 -13
  45. data/lib/review/latexbuilder.rb +65 -4
  46. data/lib/review/logger.rb +2 -2
  47. data/lib/review/makerhelper.rb +11 -0
  48. data/lib/review/markdownbuilder.rb +19 -1
  49. data/lib/review/pdfmaker.rb +17 -36
  50. data/lib/review/plaintextbuilder.rb +48 -2
  51. data/lib/review/preprocessor.rb +5 -5
  52. data/lib/review/rstbuilder.rb +25 -6
  53. data/lib/review/sec_counter.rb +13 -0
  54. data/lib/review/textmaker.rb +4 -12
  55. data/lib/review/tocprinter.rb +2 -3
  56. data/lib/review/topbuilder.rb +26 -0
  57. data/lib/review/update.rb +7 -7
  58. data/lib/review/version.rb +1 -1
  59. data/lib/review/volumeprinter.rb +2 -3
  60. data/lib/review/webmaker.rb +9 -20
  61. data/review.gemspec +2 -2
  62. data/samples/sample-book/src/config.yml +1 -1
  63. data/samples/syntax-book/Gemfile +1 -1
  64. data/samples/syntax-book/config.yml +1 -1
  65. data/templates/latex/config.erb +27 -23
  66. data/templates/latex/review-jlreq/README.md +3 -1
  67. data/templates/latex/review-jlreq/review-base.sty +31 -15
  68. data/templates/latex/review-jlreq/review-jlreq.cls +8 -24
  69. data/templates/latex/review-jsbook/README.md +7 -5
  70. data/templates/latex/review-jsbook/review-base.sty +34 -16
  71. data/templates/latex/review-jsbook/review-jsbook.cls +4 -2
  72. data/templates/web/html/layout-html5.html.erb +1 -1
  73. data/test/assets/test_template.tex +3 -3
  74. data/test/assets/test_template_backmatter.tex +3 -3
  75. data/test/book_test_helper.rb +11 -5
  76. data/test/test_book.rb +54 -63
  77. data/test/test_book_chapter.rb +93 -52
  78. data/test/test_builder.rb +24 -15
  79. data/test/test_converter.rb +1 -0
  80. data/test/test_epub3maker.rb +2 -2
  81. data/test/test_epubmaker.rb +8 -0
  82. data/test/test_helper.rb +4 -1
  83. data/test/test_htmlbuilder.rb +627 -56
  84. data/test/test_htmlutils.rb +0 -12
  85. data/test/test_i18n.rb +33 -33
  86. data/test/test_idgxmlbuilder.rb +358 -11
  87. data/test/test_idgxmlmaker_cmd.rb +1 -1
  88. data/test/test_index.rb +62 -52
  89. data/test/test_indexbuilder.rb +52 -0
  90. data/test/test_latexbuilder.rb +547 -10
  91. data/test/test_latexbuilder_v2.rb +43 -5
  92. data/test/test_logger.rb +7 -7
  93. data/test/test_makerhelper.rb +0 -12
  94. data/test/test_markdownbuilder.rb +3 -0
  95. data/test/test_pdfmaker.rb +13 -12
  96. data/test/test_pdfmaker_cmd.rb +1 -1
  97. data/test/test_plaintextbuilder.rb +422 -7
  98. data/test/test_review_ext.rb +2 -1
  99. data/test/test_rstbuilder.rb +25 -1
  100. data/test/test_sec_counter.rb +156 -0
  101. data/test/test_textmaker_cmd.rb +1 -1
  102. data/test/test_topbuilder.rb +187 -10
  103. data/test/test_update.rb +10 -10
  104. data/test/test_webtocprinter.rb +12 -12
  105. data/vendor/gentombow/LICENSE +1 -1
  106. data/vendor/gentombow/Makefile +0 -1
  107. data/vendor/gentombow/bounddvi-en.pdf +0 -0
  108. data/vendor/gentombow/bounddvi-en.tex +1 -0
  109. data/vendor/gentombow/bounddvi.pdf +0 -0
  110. data/vendor/gentombow/bounddvi.sty +30 -7
  111. data/vendor/gentombow/bounddvi.tex +1 -0
  112. data/vendor/gentombow/create_archive.sh +1 -0
  113. data/vendor/gentombow/gentombow-ja.pdf +0 -0
  114. data/vendor/gentombow/gentombow-ja.tex +9 -0
  115. data/vendor/gentombow/gentombow.pdf +0 -0
  116. data/vendor/gentombow/gentombow.sty +32 -10
  117. data/vendor/gentombow/gentombow.tex +8 -0
  118. data/vendor/gentombow/tests/gentombow-01-pdfx.tex +8 -0
  119. data/vendor/gentombow/tests/gentombow-02-pdfx.tex +8 -0
  120. data/vendor/jsclasses/Makefile +3 -2
  121. data/vendor/jsclasses/create_archive.sh +5 -5
  122. data/vendor/jsclasses/jis/Makefile +3 -2
  123. data/vendor/jsclasses/jis/jsarticle.cls +22 -18
  124. data/vendor/jsclasses/jis/jsbook.cls +22 -18
  125. data/vendor/jsclasses/jis/jsclasses.dtx +94 -13
  126. data/vendor/jsclasses/jis/jsclasses.ins +15 -5
  127. data/vendor/jsclasses/jis/jslogo.ins +9 -0
  128. data/vendor/jsclasses/jis/jslogo.sty +1 -13
  129. data/vendor/jsclasses/jis/jspf.cls +22 -18
  130. data/vendor/jsclasses/jis/jsreport.cls +22 -18
  131. data/vendor/jsclasses/jis/jsverb.ins +9 -0
  132. data/vendor/jsclasses/jis/jsverb.sty +1 -13
  133. data/vendor/jsclasses/jis/kiyou.cls +22 -18
  134. data/vendor/jsclasses/jis/minijs.sty +65 -22
  135. data/vendor/jsclasses/jis/okumacro.ins +9 -0
  136. data/vendor/jsclasses/jis/okumacro.sty +1 -13
  137. data/vendor/jsclasses/jis/okuverb.ins +9 -0
  138. data/vendor/jsclasses/jis/okuverb.sty +1 -13
  139. data/vendor/jsclasses/jis/winjis.sty +23 -19
  140. data/vendor/jsclasses/jsarticle.cls +22 -18
  141. data/vendor/jsclasses/jsbook.cls +22 -18
  142. data/vendor/jsclasses/jsclasses.dtx +94 -13
  143. data/vendor/jsclasses/jsclasses.ins +15 -5
  144. data/vendor/jsclasses/jsclasses.pdf +0 -0
  145. data/vendor/jsclasses/jslogo.ins +9 -0
  146. data/vendor/jsclasses/jslogo.pdf +0 -0
  147. data/vendor/jsclasses/jslogo.sty +1 -13
  148. data/vendor/jsclasses/jspf.cls +22 -18
  149. data/vendor/jsclasses/jsreport.cls +22 -18
  150. data/vendor/jsclasses/jsverb.ins +9 -0
  151. data/vendor/jsclasses/jsverb.pdf +0 -0
  152. data/vendor/jsclasses/jsverb.sty +1 -13
  153. data/vendor/jsclasses/kiyou.cls +22 -18
  154. data/vendor/jsclasses/minijs.sty +68 -22
  155. data/vendor/jsclasses/okumacro.ins +9 -0
  156. data/vendor/jsclasses/okumacro.pdf +0 -0
  157. data/vendor/jsclasses/okumacro.sty +1 -13
  158. data/vendor/jsclasses/okuverb.ins +9 -0
  159. data/vendor/jsclasses/okuverb.pdf +0 -0
  160. data/vendor/jsclasses/okuverb.sty +1 -13
  161. data/vendor/jsclasses/tests/relfont.tex +10 -0
  162. data/vendor/jsclasses/winjis.sty +23 -19
  163. metadata +14 -6
  164. data/.rubocop_todo.yml +0 -7
  165. data/lib/review/book/compilable.rb +0 -174
@@ -38,7 +38,9 @@ texdocumentclass: ["review-jlreq", "クラスオプションたち(省略可
38
38
 
39
39
  `media` の値によって表紙(config.yml の coverimage に指定した画像)の配置の有無は自動で切り替わりますが、`cover=true` とすれば必ず表紙を入れるようになります。
40
40
 
41
- なお、config.yml coverimage で指定する画像ファイルは、原寸を想定しています。
41
+ ### 表紙画像のサイズの仕上がり紙面合わせ `cover_fit_page=<trueまたはfalse>`
42
+
43
+ 上記の coverimage で指定する画像ファイルは、原寸を想定しているため、サイズが異なる場合にははみ出たり、小さすぎたりすることになります。できるだけ原寸で用意することを推奨しますが、`cover_fit_page=true` とすれば表紙画像を紙面の仕上がりサイズに合わせて拡縮します。
42
44
 
43
45
  ### 特定の用紙サイズ `paper=<用紙サイズ>`
44
46
 
@@ -1,22 +1,30 @@
1
- \ProvidesClass{review-base}[2020/01/02]
1
+ \ProvidesClass{review-base}[2020/08/16]
2
2
  % jlreq用基本設定
3
3
  \def\recls@tmp{luatex}\ifx\recls@tmp\recls@driver
4
4
  \hypersetup{
5
5
  pdftitle={\review@booktitlename},
6
- pdfauthor={\review@autnames},
6
+ pdfauthor={\ifdefined\review@autnames\review@autnames\fi},
7
7
  pdfcreator={Re:VIEW \review@reviewversion, with LaTeX}
8
8
  }
9
9
  \else
10
- \newcommand*\PDFDocumentInformation[1]{%
11
- \AtBeginShipoutFirst{\special{pdf:docinfo <<#1>>}}}
12
- \@onlypreamble\PDFDocumentInformation
13
- \PDFDocumentInformation{
14
- /Title (\review@booktitlename)
15
- /Author (\review@autnames)
16
- % /Subject ()
17
- % /Keywords (,,)
18
- /Creator (Re:VIEW \review@reviewversion, with LaTeX)
19
- }
10
+ \def\recls@tmp{ebook}\ifx\recls@cameraready\recls@tmp
11
+ \hypersetup{
12
+ pdftitle={\review@booktitlename},
13
+ pdfauthor={\ifdefined\review@autnames\review@autnames\fi},
14
+ pdfcreator={Re:VIEW \review@reviewversion, with LaTeX}
15
+ }
16
+ \else
17
+ \newcommand*\PDFDocumentInformation[1]{%
18
+ \AtBeginShipoutFirst{\special{pdf:docinfo <<#1>>}}}
19
+ \@onlypreamble\PDFDocumentInformation
20
+ \PDFDocumentInformation{
21
+ /Title (\review@booktitlename)
22
+ \ifdefined\review@autnames /Author (\review@autnames)\fi
23
+ % /Subject ()
24
+ % /Keywords (,,)
25
+ /Creator (Re:VIEW \review@reviewversion, with LaTeX)
26
+ }
27
+ \fi
20
28
  \fi
21
29
 
22
30
  \RequirePackage{pxrubrica}
@@ -26,6 +34,11 @@
26
34
 
27
35
  \long\def\review@ifempty#1{\expandafter\ifx\expandafter\relax\detokenize{#1}\relax\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
28
36
 
37
+ %% pass bbox setting to extractbb of graphicx
38
+ \ifdefined\review@bbox
39
+ \def\Gin@pagebox{\review@bbox}
40
+ \fi
41
+
29
42
  % コードリスト装飾のデフォルト
30
43
  \newenvironment{reviewemlist}{%
31
44
  \begin{tcolorbox}[skin=enhanced jigsaw,breakable,colback=black!10,colframe=black!10,boxrule=0mm,arc=0mm]\ifdefined\reviewlistxkanjiskip\setxkanjiskip{\reviewlistxkanjiskip}\fi\begin{alltt}}%
@@ -122,9 +135,9 @@
122
135
  \newcommand{\reviewtableref}[2]{\review@intn@table #1}
123
136
  \newcommand{\reviewlistref}[1]{\review@intn@list #1}
124
137
  \newcommand{\reviewequationref}[1]{\review@intn@equation #1}
125
- \newcommand{\reviewbibref}[2]{#1}
126
- \newcommand{\reviewcolumnref}[2]{#1}
127
- \newcommand{\reviewsecref}[2]{#1}
138
+ \newcommand{\reviewbibref}[2]{\hyperref[#2]{#1}}
139
+ \newcommand{\reviewcolumnref}[2]{#1}% XXX:ハイパーリンクにはreviewcolumn側の調整が必要
140
+ \newcommand{\reviewsecref}[2]{\hyperref[#2]{#1}}
128
141
 
129
142
  \renewcommand{\contentsname}{\review@toctitle}
130
143
 
@@ -325,6 +338,9 @@
325
338
 
326
339
  \if@reclscover
327
340
  \ifdefined\review@coverimage
341
+ \ifrecls@coverfitpage
342
+ \def\review@coverimageoption{width=\paperwidth,height=\paperheight}
343
+ \fi
328
344
  \def\reviewcoverpagecont{%
329
345
  \expandafter\includefullpagegraphics\expandafter[\review@coverimageoption]{\review@coverimage}
330
346
  \cleardoublepage
@@ -1,5 +1,5 @@
1
1
  %#!ptex2pdf -l -u -ot '-synctex=1' test-rejlreqbk
2
- % Copyright (c) 2018-2019 Kenshi Muto.
2
+ % Copyright (c) 2018-2020 Kenshi Muto.
3
3
  %
4
4
  % Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  % of this software and associated documentation files (the "Software"), to deal
@@ -20,8 +20,7 @@
20
20
  % THE SOFTWARE.
21
21
 
22
22
  \NeedsTeXFormat{LaTeX2e}
23
- \ProvidesClass{review-jlreq}[2019/11/11 Re:VIEW pLaTeX class modified for jlreq.
24
- cls]
23
+ \ProvidesClass{review-jlreq}[2020/08/16 Re:VIEW 5.0 upLaTeX/LuaLaTeX class modified for jlreq.cls]
25
24
 
26
25
  %% hook at end of reviewmacro
27
26
  \let\@endofreviewmacrohook\@empty
@@ -65,11 +64,7 @@ cls]
65
64
  \recls@error{Not define such hiddenfolio: #1}}\relax
66
65
  %% set hiddenfolio preset
67
66
  \expandafter\let\expandafter\@makehiddenfolio\csname @makehiddenfolio@#1\endcsname
68
- %% redefine to output \@makehiddenfolio for every page
69
- %% TODO: would better to use \jlreqtrimmarkssetup
70
- \@bannertoken{\hskip-5mm\smash{\hiddenfolio@font\@makehiddenfolio}}%
71
- \def\jlreq@trimmarks@banner@even@yoko@top@left{\hskip-5mm\smash{\hiddenfolio@font\@makehiddenfolio}}%
72
- \AddEverypageHook{\maketombowbox}%
67
+ \@makehiddenfolio
73
68
  \fi}
74
69
 
75
70
  \def\hiddenfolio@font{\reset@font
@@ -77,29 +72,16 @@ cls]
77
72
 
78
73
  %% hiddenfolio=default
79
74
  \@namedef{@makehiddenfolio@default}{%
80
- \ifodd\c@page
81
- \llap{\thepage\hspace{\dimexpr\recls@tombobleed}}%
82
- \else
83
- \rlap{\hspace{\dimexpr\paperwidth+\recls@tombobleed}\thepage}%
84
- \fi}
75
+ \jlreqtrimmarkssetup{banner = { top-gutter = { \hiddenfolio@font\selectfont \thepage} } } }
85
76
 
86
77
  %% hiddenfolio=marusho-ink
87
78
  \@namedef{@makehiddenfolio@marusho-ink}{%
88
- \gdef\recls@tombobleed{5mm}%
79
+ \gdef\recls@tombobleed{5mm}% XXX: won't work. should set via bleed_margin
89
80
  \@nameuse{@makehiddenfolio@nikko-pc}}
90
81
 
91
82
  %% hiddenfolio=nikko-pc
92
83
  \@namedef{@makehiddenfolio@nikko-pc}{%
93
- \def\recls@hiddfolio{%
94
- \edef\recls@tmp{\thepage}%
95
- \lower\dimexpr4pt+\recls@tombobleed+.5\paperheight+5\p@\hbox{%
96
- \vbox{\expandafter\@tfor\expandafter\recls@x\expandafter:\expandafter=\recls@tmp\do{%
97
- \hbox to 1\zw{\hss\recls@x\hss}}}}}%
98
- \ifodd\c@page
99
- \rlap{\recls@hiddfolio}%
100
- \else
101
- \llap{\recls@hiddfolio\hspace{-\paperwidth}}%
102
- \fi}
84
+ \jlreqtrimmarkssetup{banner = { center-gutter = { in = {\hiddenfolio@font\selectfont \thepage} } } } }
103
85
 
104
86
  %% hiddenfolio=shippo
105
87
  \@namedef{@makehiddenfolio@shippo}{%
@@ -110,12 +92,14 @@ cls]
110
92
  \newif\if@pdfhyperlink \@pdfhyperlinkfalse
111
93
  \newif\if@pdftombo \@pdftombofalse
112
94
  \newif\if@reclscover \@reclscovertrue
95
+ \newif\ifrecls@coverfitpage \recls@coverfitpagefalse
113
96
  \newif\ifrecls@serialpage \recls@serialpagefalse
114
97
  \DeclareOptionX{cameraready}[print]{\gdef\recls@cameraready{#1}}
115
98
  \DeclareOptionX{media}[print]{\gdef\recls@cameraready{#1}}
116
99
  \DeclareOptionX{tombopaper}[a4]{\gdef\recls@tombopaper{#1}}
117
100
  \DeclareOptionX{bleed_margin}[3mm]{\gdef\recls@tombobleed{#1}}
118
101
  \DeclareOptionX{cover}[\@empty]{\gdef\recls@forcecover{#1}}
102
+ \DeclareOptionX{cover_fit_page}[false]{\csname recls@coverfitpage#1\endcsname}
119
103
  \DeclareOptionX{startpage}[1]{\gdef\recls@startpage{\numexpr #1\relax}}
120
104
  \DeclareOptionX{serial_pagination}[false]{\csname recls@serialpage#1\endcsname}
121
105
 
@@ -40,19 +40,21 @@ texdocumentclass: ["review-jsbook", "クラスオプションたち(省略可
40
40
 
41
41
  `media` の値によって表紙(config.yml の coverimage に指定した画像)の配置の有無は自動で切り替わりますが、`cover=true` とすれば必ず表紙を入れるようになります。
42
42
 
43
- なお、config.yml coverimage で指定する画像ファイルは、原寸を想定しています。
43
+ ### 表紙画像のサイズの仕上がり紙面合わせ `cover_fit_page=<trueまたはfalse>`
44
+
45
+ 上記の coverimage で指定する画像ファイルは、原寸を想定しているため、サイズが異なる場合にははみ出たり、小さすぎたりすることになります。できるだけ原寸で用意することを推奨しますが、`cover_fit_page=true` とすれば表紙画像を紙面の仕上がりサイズに合わせて拡縮します。
44
46
 
45
47
  ### 特定の用紙サイズ `paper=<用紙サイズ>`
46
48
 
47
49
  利用可能な特定の用紙サイズを指定できます。
48
50
 
49
- * `a3`
51
+ * `a3`
50
52
  * `a4` [デフォルト]
51
53
  * `a5`
52
- * `a6`
53
- * `b4`:JIS B4
54
+ * `a6`
55
+ * `b4`:JIS B4
54
56
  * `b5`:JIS B5
55
- * `b6`:JIS B6
57
+ * `b6`:JIS B6
56
58
  * `a4var`:210mm x 283mm
57
59
  * `b5var`:182mm x 230mm
58
60
  * `letter`
@@ -1,4 +1,4 @@
1
- \ProvidesClass{review-base}[2020/01/02]
1
+ \ProvidesClass{review-base}[2020/08/16]
2
2
  \RequirePackage{ifthen}
3
3
  \@ifundefined{Hy@Info}{% for jsbook.cls
4
4
  \RequirePackage[dvipdfmx,bookmarks=true,bookmarksnumbered=true]{hyperref}
@@ -48,6 +48,11 @@
48
48
 
49
49
  \long\def\review@ifempty#1{\expandafter\ifx\expandafter\relax\detokenize{#1}\relax\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
50
50
 
51
+ %% pass bbox setting to extractbb of graphicx
52
+ \ifdefined\review@bbox
53
+ \def\Gin@pagebox{\review@bbox}
54
+ \fi
55
+
51
56
  \newenvironment{shadedb}{%
52
57
  \def\FrameCommand{\fboxsep=\FrameSep \colorbox{shadecolorb}}%
53
58
  \MakeFramed {\FrameRestore}}%
@@ -55,18 +60,6 @@
55
60
 
56
61
  \newcommand{\parasep}{\vspace*{3zh}}
57
62
 
58
- \newcommand*\PDFDocumentInformation[1]{%
59
- \AtBeginShipoutFirst{\special{pdf:docinfo <<#1>>}}}
60
- \@onlypreamble\PDFDocumentInformation
61
-
62
- \PDFDocumentInformation{
63
- /Title (\review@booktitlename)
64
- /Author (\review@autnames)
65
- % /Subject ()
66
- % /Keywords (,,)
67
- /Creator (Re:VIEW \review@reviewversion, with LaTeX)
68
- }
69
-
70
63
  \RequirePackage{pxrubrica}
71
64
  \@ifpackagelater{pxrubrica}{2017/04/20}{%
72
65
  \rubysetup{J}}{%
@@ -205,9 +198,9 @@
205
198
  \newcommand{\reviewtableref}[2]{\review@intn@table #1}
206
199
  \newcommand{\reviewlistref}[1]{\review@intn@list #1}
207
200
  \newcommand{\reviewequationref}[1]{\review@intn@equation #1}
208
- \newcommand{\reviewbibref}[2]{#1}
209
- \newcommand{\reviewcolumnref}[2]{#1}
210
- \newcommand{\reviewsecref}[2]{#1}
201
+ \newcommand{\reviewbibref}[2]{\hyperref[#2]{#1}}
202
+ \newcommand{\reviewcolumnref}[2]{#1}% XXX:ハイパーリンクにはreviewcolumn側の調整が必要
203
+ \newcommand{\reviewsecref}[2]{\hyperref[#2]{#1}}
211
204
 
212
205
  \newenvironment{reviewpart}{%
213
206
  \setcounter{section}{0}%
@@ -373,6 +366,28 @@
373
366
  \renewcommand{\appendixname}{\reviewappendixname}
374
367
  \fi
375
368
 
369
+ % PDF meta information
370
+ \def\recls@tmp{ebook}\ifx\recls@cameraready\recls@tmp
371
+ \hypersetup{
372
+ pdftitle={\review@booktitlename},
373
+ pdfauthor={\ifdefined\review@autnames\review@autnames\fi},
374
+ pdfcreator={Re:VIEW \review@reviewversion, with LaTeX}
375
+ }
376
+ \else
377
+ \newcommand*\PDFDocumentInformation[1]{%
378
+ \AtBeginShipoutFirst{\special{pdf:docinfo <<#1>>}}}
379
+ \@onlypreamble\PDFDocumentInformation
380
+
381
+ % for non hyperref. escaped character will be displayed funny...
382
+ \PDFDocumentInformation{
383
+ /Title (\review@booktitlename)
384
+ \ifdefined\review@autnames /Author (\review@autnames)\fi
385
+ % /Subject ()
386
+ % /Keywords (,,)
387
+ /Creator (Re:VIEW \review@reviewversion, with LaTeX)
388
+ }
389
+ \fi
390
+
376
391
  %% maxwidth is the original width if it is less than linewidth
377
392
  %% otherwise use linewidth (to make sure the graphics do not exceed the margin)
378
393
  \def\maxwidth{%
@@ -417,6 +432,9 @@
417
432
 
418
433
  \if@reclscover
419
434
  \ifdefined\review@coverimage
435
+ \ifrecls@coverfitpage
436
+ \def\review@coverimageoption{width=\paperwidth,height=\paperheight}
437
+ \fi
420
438
  \def\reviewcoverpagecont{%
421
439
  \expandafter\includefullpagegraphics\expandafter[\review@coverimageoption]{\review@coverimage}
422
440
  \cleardoublepage
@@ -1,5 +1,5 @@
1
1
  %#!ptex2pdf -l -u -ot '-synctex=1' test-rejsbk
2
- % Copyright (c) 2018-2019 Munehiro Yamamoto, Kenshi Muto.
2
+ % Copyright (c) 2018-2020 Munehiro Yamamoto, Kenshi Muto.
3
3
  %
4
4
  % Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  % of this software and associated documentation files (the "Software"), to deal
@@ -21,7 +21,7 @@
21
21
 
22
22
  \NeedsTeXFormat{pLaTeX2e}
23
23
  \ProvidesClass{review-jsbook}
24
- [2019/09/22 v4.0 Re:VIEW pLaTeX class modified for jsbook.cls]
24
+ [2020/08/16 v5.0 Re:VIEW pLaTeX class modified for jsbook.cls]
25
25
 
26
26
  \def\recls@error{\ClassError{review-jsbook}}
27
27
  \def\recls@warning{\ClassWarning{review-jsbook}}
@@ -226,8 +226,10 @@
226
226
 
227
227
  %% 表紙・開始番号・通しノンブル
228
228
  \newif\if@reclscover \@reclscovertrue
229
+ \newif\ifrecls@coverfitpage \recls@coverfitpagefalse
229
230
  \newif\ifrecls@serialpage \recls@serialpagefalse
230
231
  \DeclareOptionX{cover}[\@empty]{\gdef\recls@forcecover{#1}}
232
+ \DeclareOptionX{cover_fit_page}[false]{\csname recls@coverfitpage#1\endcsname}
231
233
  \DeclareOptionX{startpage}[1]{\gdef\recls@startpage{\numexpr#1}}
232
234
  \DeclareOptionX{serial_pagination}[false]{\csname recls@serialpage#1\endcsname}
233
235
 
@@ -11,7 +11,7 @@
11
11
  <% if @next.present? %><link rel="next" title="<%= h(@next_title)%>" href="<%= h(@next.id.to_s+"."+@book.config['htmlext']) %>" /><% end %>
12
12
  <% if @prev.present? %><link rel="prev" title="<%= h(@prev_title)%>" href="<%= h(@prev.id.to_s+"."+@book.config['htmlext']) %>" /><% end %>
13
13
  <meta name="generator" content="Re:VIEW" />
14
- <title><%=h @title %> | <%=h @book.config.name_of("booktitle")%></title>
14
+ <title><%= @title %> | <%=h @book.config.name_of("booktitle")%></title>
15
15
  </head>
16
16
  <body<%= @body_ext %>>
17
17
  <div class="book">
@@ -1,6 +1,6 @@
1
1
  \documentclass[dvipdfmx]{review-jsbook}
2
2
  \makeatletter
3
- \def\review@reviewversion{3.2.0}
3
+ \def\review@reviewversion{4.2.0}
4
4
  \def\review@texcompiler{uplatex}
5
5
  \def\review@documentclass{review-jsbook}
6
6
 
@@ -9,7 +9,7 @@
9
9
  \def\review@autnames{anonymous}
10
10
 
11
11
  \def\review@titlepageauthors{anonymous 著}
12
- \def\review@date{2011{-}01{-}01}
12
+ \def\review@date{2020{-}07{-}11}
13
13
 
14
14
  \def\review@bookname{sample}
15
15
  \def\review@language{ja}
@@ -38,7 +38,7 @@
38
38
  \def\review@usecovernombre{true}
39
39
  \def\review@titlepage{true}
40
40
 
41
- \def\review@pubhistories{201111日 発行}
41
+ \def\review@pubhistories{2020711日 発行}
42
42
  \def\review@colophonnames{著 者 & anonymous \\
43
43
  }
44
44
 
@@ -1,6 +1,6 @@
1
1
  \documentclass[dvipdfmx]{review-jsbook}
2
2
  \makeatletter
3
- \def\review@reviewversion{3.2.0}
3
+ \def\review@reviewversion{4.2.0}
4
4
  \def\review@texcompiler{uplatex}
5
5
  \def\review@documentclass{review-jsbook}
6
6
 
@@ -9,7 +9,7 @@
9
9
  \def\review@autnames{anonymous}
10
10
 
11
11
  \def\review@titlepageauthors{anonymous 著}
12
- \def\review@date{2011{-}01{-}01}
12
+ \def\review@date{2020{-}07{-}11}
13
13
 
14
14
  \def\review@bookname{sample}
15
15
  \def\review@language{ja}
@@ -49,7 +49,7 @@ some ad content
49
49
  }
50
50
  \null}
51
51
 
52
- \def\review@pubhistories{201111日 発行}
52
+ \def\review@pubhistories{2020711日 発行}
53
53
  \def\review@colophonnames{著 者 & anonymous \\
54
54
  }
55
55
 
@@ -13,13 +13,19 @@ module BookTestHelper
13
13
  Dir.mktmpdir do |tmpdir|
14
14
  Dir.chdir(tmpdir) do
15
15
  dir = '.'
16
- files.each_pair do |basename, content|
17
- path = File.join(dir, basename)
16
+ files.each_pair do |filename, content|
17
+ path = File.join(dir, filename)
18
+ FileUtils.mkdir_p(File.dirname(path))
18
19
  File.open(path, 'w') { |o| o.print content }
19
- created_files[basename] = path
20
+ created_files[filename] = path
20
21
  end
21
- book = Book::Base.load(dir)
22
- book.config = ReVIEW::Configure.values
22
+ conf_path = File.expand_path('config.yml', dir)
23
+ if File.exist?(conf_path)
24
+ config = ReVIEW::Configure.create(yamlfile: conf_path)
25
+ else
26
+ config = ReVIEW::Configure.values
27
+ end
28
+ book = Book::Base.new(dir, config: config)
23
29
  yield(dir, book, created_files)
24
30
  end
25
31
  end
@@ -23,8 +23,8 @@ class BookTest < Test::Unit::TestCase
23
23
  test_const = "ReVIEW__BOOK__TEST__#{num}"
24
24
  begin
25
25
  Dir.mktmpdir do |dir|
26
- File.open(File.join(dir, 'review-ext.rb'), 'w') { |o| o.puts "#{test_const} = #{num}" }
27
- Book::Base.load(dir)
26
+ File.write(File.join(dir, 'review-ext.rb'), "#{test_const} = #{num}")
27
+ Book::Base.new(dir)
28
28
  assert_equal num, (Object.class_eval { const_get(test_const) })
29
29
  end
30
30
  ensure
@@ -159,12 +159,12 @@ class BookTest < Test::Unit::TestCase
159
159
  end
160
160
 
161
161
  def test_parse_chapters
162
- mktmpbookdir 'CHAPS' => '' do |_dir, book, _files|
162
+ mktmpbookdir('CHAPS' => '') do |_dir, book, _files|
163
163
  parts = book.instance_eval { parse_chapters }
164
164
  assert_equal 0, parts.size
165
165
  end
166
166
 
167
- mktmpbookdir 'CHAPS' => "chapter1.re\nchapter2\n" do |dir, book, _files|
167
+ mktmpbookdir('CHAPS' => "chapter1.re\nchapter2\n") do |dir, book, _files|
168
168
  parts = book.instance_eval { parse_chapters }
169
169
  assert_equal 1, parts.size
170
170
 
@@ -178,7 +178,7 @@ class BookTest < Test::Unit::TestCase
178
178
  assert_equal expect, chaps
179
179
  end
180
180
 
181
- mktmpbookdir 'CHAPS' => <<EOC do |dir, book, _files|
181
+ mktmpbookdir('CHAPS' => <<EOC) do |dir, book, _files|
182
182
  part1_chapter1.re
183
183
  part1_chapter2.re
184
184
 
@@ -280,22 +280,22 @@ EOC
280
280
  assert_equal nil, book.prefaces
281
281
  end
282
282
 
283
- mktmpbookdir 'PREDEF' => '' do |_dir, book, _files|
283
+ mktmpbookdir('PREDEF' => '') do |_dir, book, _files|
284
284
  assert_equal nil, book.prefaces # XXX: OK?
285
285
  end
286
286
 
287
- mktmpbookdir 'PREDEF' => 'chapter1',
288
- 'chapter1.re' => '' do |_dir, book, files|
289
- assert_kind_of Book::Part, book.prefaces
287
+ mktmpbookdir('PREDEF' => 'chapter1',
288
+ 'chapter1.re' => '') do |_dir, book, files|
289
+ assert_kind_of(Book::Part, book.prefaces)
290
290
  assert_equal '', book.prefaces.name
291
291
  assert_equal 1, book.prefaces.chapters.size
292
292
  assert_equal 'chapter1', book.prefaces.chapters.first.name
293
293
  assert_equal files['chapter1.re'], book.prefaces.chapters.first.path
294
294
  end
295
295
 
296
- mktmpbookdir 'PREDEF' => "chapter1\n\nchapter2",
297
- 'chapter1.re' => '', 'chapter2.re' => '' do |_dir, book, files|
298
- assert_kind_of Book::Part, book.prefaces
296
+ mktmpbookdir('PREDEF' => "chapter1\n\nchapter2",
297
+ 'chapter1.re' => '', 'chapter2.re' => '') do |_dir, book, files|
298
+ assert_kind_of(Book::Part, book.prefaces)
299
299
  assert_equal '', book.prefaces.name
300
300
  assert_equal 2, book.prefaces.chapters.size
301
301
  assert_equal 'chapter1', book.prefaces.chapters.first.name
@@ -304,29 +304,29 @@ EOC
304
304
  assert_equal files['chapter2.re'], book.prefaces.chapters.last.path
305
305
  end
306
306
 
307
- mktmpbookdir 'PREDEF' => 'chapter1 chapter2',
308
- 'chapter1.re' => '', 'chapter2.re' => '' do |_dir, book, _files|
309
- assert_kind_of Book::Part, book.prefaces
307
+ mktmpbookdir('PREDEF' => 'chapter1 chapter2',
308
+ 'chapter1.re' => '', 'chapter2.re' => '') do |_dir, book, _files|
309
+ assert_kind_of(Book::Part, book.prefaces)
310
310
  assert_equal '', book.prefaces.name
311
311
  assert_equal 2, book.prefaces.chapters.size # XXX: OK?
312
312
  end
313
313
 
314
- mktmpbookdir 'PREDEF' => 'not_exist' do |_dir, book, _files|
314
+ mktmpbookdir('PREDEF' => 'not_exist') do |_dir, book, _files|
315
315
  assert_raises FileNotFound do
316
316
  assert_equal nil, book.prefaces
317
317
  end
318
318
  end
319
319
 
320
- mktmpbookdir 'PREDEF' => 'chapter1.re',
321
- 'chapter1.re' => '' do |_dir, book, _files|
322
- assert_kind_of Book::Part, book.prefaces
320
+ mktmpbookdir('PREDEF' => 'chapter1.re',
321
+ 'chapter1.re' => '') do |_dir, book, _files|
322
+ assert_kind_of(Book::Part, book.prefaces)
323
323
  assert_equal '', book.prefaces.name
324
324
  assert_equal 1, book.prefaces.chapters.size
325
325
  end
326
326
 
327
- mktmpbookdir 'PREDEF' => 'chapter1.txt',
328
- 'chapter1.txt' => '' do |_dir, book, _files|
329
- assert_kind_of Book::Part, book.prefaces
327
+ mktmpbookdir('PREDEF' => 'chapter1.txt',
328
+ 'chapter1.txt' => '') do |_dir, book, _files|
329
+ assert_kind_of(Book::Part, book.prefaces)
330
330
  assert_equal '', book.prefaces.name
331
331
  assert_equal 1, book.prefaces.chapters.size
332
332
  end
@@ -337,13 +337,13 @@ EOC
337
337
  assert_equal nil, book.appendix
338
338
  end
339
339
 
340
- mktmpbookdir 'POSTDEF' => '' do |_dir, book, _files|
340
+ mktmpbookdir('POSTDEF' => '') do |_dir, book, _files|
341
341
  assert_equal nil, book.appendix
342
342
  end
343
343
 
344
- mktmpbookdir 'POSTDEF' => 'chapter1',
345
- 'chapter1.re' => '' do |_dir, book, files|
346
- assert_kind_of Book::Part, book.appendix
344
+ mktmpbookdir('POSTDEF' => 'chapter1',
345
+ 'chapter1.re' => '') do |_dir, book, files|
346
+ assert_kind_of(Book::Part, book.appendix)
347
347
  assert_equal '', book.appendix.name
348
348
  assert_equal 1, book.appendix.chapters.size
349
349
  assert_equal 'chapter1', book.appendix.chapters.first.name
@@ -351,9 +351,9 @@ EOC
351
351
  assert_equal 1, book.appendix.chapters.first.number
352
352
  end
353
353
 
354
- mktmpbookdir 'POSTDEF' => "chapter1\n\nchapter2",
355
- 'chapter1.re' => '', 'chapter2.re' => '' do |_dir, book, files|
356
- assert_kind_of Book::Part, book.appendix
354
+ mktmpbookdir('POSTDEF' => "chapter1\n\nchapter2",
355
+ 'chapter1.re' => '', 'chapter2.re' => '') do |_dir, book, files|
356
+ assert_kind_of(Book::Part, book.appendix)
357
357
  assert_equal '', book.appendix.name
358
358
  assert_equal 2, book.appendix.chapters.size
359
359
  assert_equal 'chapter1', book.appendix.chapters.first.name
@@ -364,32 +364,32 @@ EOC
364
364
  assert_equal 2, book.appendix.chapters.last.number
365
365
  end
366
366
 
367
- mktmpbookdir 'POSTDEF' => 'chapter1 chapter2',
368
- 'chapter1.re' => '', 'chapter2.re' => '' do |_dir, book, _files|
369
- assert_kind_of Book::Part, book.appendix
367
+ mktmpbookdir('POSTDEF' => 'chapter1 chapter2',
368
+ 'chapter1.re' => '', 'chapter2.re' => '') do |_dir, book, _files|
369
+ assert_kind_of(Book::Part, book.appendix)
370
370
  assert_equal '', book.appendix.name
371
371
  assert_equal 2, book.appendix.chapters.size # XXX: OK?
372
372
  assert_equal 1, book.appendix.chapters.first.number
373
373
  assert_equal 2, book.appendix.chapters.last.number
374
374
  end
375
375
 
376
- mktmpbookdir 'POSTDEF' => 'not_exist' do |_dir, book, _files|
376
+ mktmpbookdir('POSTDEF' => 'not_exist') do |_dir, book, _files|
377
377
  assert_raises FileNotFound do
378
378
  assert_equal nil, book.appendix
379
379
  end
380
380
  end
381
381
 
382
- mktmpbookdir 'catalog.yml' => "APPENDIX:\n - p01.re",
383
- 'p01.re' => '= appendix' do |_dir, book, _files|
382
+ mktmpbookdir('catalog.yml' => "APPENDIX:\n - p01.re",
383
+ 'p01.re' => '= appendix') do |_dir, book, _files|
384
384
  assert_equal 'appendix', book.appendix.chapters.first.title
385
385
  assert_equal 1, book.appendix.chapters.first.number
386
386
  end
387
387
  end
388
388
 
389
389
  def test_postscripts
390
- mktmpbookdir 'catalog.yml' => "POSTDEF:\n - b01.re",
391
- 'b01.re' => '= back' do |_dir, book, _files|
392
- assert_kind_of Book::Part, book.postscripts
390
+ mktmpbookdir('catalog.yml' => "POSTDEF:\n - b01.re",
391
+ 'b01.re' => '= back') do |_dir, book, _files|
392
+ assert_kind_of(Book::Part, book.postscripts)
393
393
  assert_equal 1, book.postscripts.chapters.size
394
394
  assert_equal 'back', book.postscripts.chapters.first.title
395
395
  assert_equal nil, book.postscripts.chapters.first.number
@@ -407,7 +407,7 @@ EOC
407
407
  assert tmp.empty?
408
408
  end
409
409
 
410
- mktmpbookdir 'CHAPS' => "ch1\nch2\n\nch3", 'PART' => "foo\nbar\n" do |_dir, book, _files|
410
+ mktmpbookdir('CHAPS' => "ch1\nch2\n\nch3", 'PART' => "foo\nbar\n") do |_dir, book, _files|
411
411
  parts = book.parts
412
412
  assert_equal 2, parts.size
413
413
  assert !book.part(0)
@@ -432,10 +432,10 @@ EOC
432
432
  assert tmp.empty?
433
433
  end
434
434
 
435
- mktmpbookdir 'CHAPS' => "ch1.re\nch2.re\n\nch3.re\n",
435
+ mktmpbookdir('CHAPS' => "ch1.re\nch2.re\n\nch3.re\n",
436
436
  'PART' => "foo\nbar\n",
437
437
  'ch1.re' => "= ch1\n\n", 'ch2.re' => "= ch2\n\n",
438
- 'ch3.re' => "= ch3\n\n" do |_dir, book, _files|
438
+ 'ch3.re' => "= ch3\n\n") do |_dir, book, _files|
439
439
  parts = book.parts_in_file
440
440
  assert_equal 0, parts.size
441
441
  assert !book.part(0)
@@ -448,11 +448,11 @@ EOC
448
448
  assert_equal [1, 2], tmp
449
449
  end
450
450
 
451
- mktmpbookdir 'CHAPS' => "ch1.re\nch2.re\n\nch3.re\n",
451
+ mktmpbookdir('CHAPS' => "ch1.re\nch2.re\n\nch3.re\n",
452
452
  'PART' => "foo.re\nbar.re\n",
453
453
  'foo.re' => "= part1\n\n", 'bar.re' => "= part2\n\n",
454
454
  'ch1.re' => "= ch1\n\n", 'ch2.re' => "= ch2\n\n",
455
- 'ch3.re' => "= ch3\n\n" do |_dir, book, _files|
455
+ 'ch3.re' => "= ch3\n\n") do |_dir, book, _files|
456
456
  parts = book.parts_in_file
457
457
  assert_equal 2, parts.size
458
458
  assert !book.part(0)
@@ -467,7 +467,7 @@ EOC
467
467
  end
468
468
 
469
469
  def test_chapters
470
- mktmpbookdir 'CHAPS' => "ch1\nch2\n\nch3" do |_dir, book, _files|
470
+ mktmpbookdir('CHAPS' => "ch1\nch2\n\nch3") do |_dir, book, _files|
471
471
  chapters = book.chapters
472
472
  assert_equal 3, chapters.size
473
473
 
@@ -486,7 +486,7 @@ EOC
486
486
  end
487
487
  end
488
488
 
489
- mktmpbookdir 'CHAPS' => "ch1.txt\nch2.txt\n\nch3.txt" do |_dir, book, _files|
489
+ mktmpbookdir('CHAPS' => "ch1.txt\nch2.txt\n\nch3.txt") do |_dir, book, _files|
490
490
  chapters = book.chapters
491
491
  assert_equal 3, chapters.size
492
492
 
@@ -507,7 +507,7 @@ EOC
507
507
  end
508
508
 
509
509
  def test_next_chapter
510
- mktmpbookdir 'CHAPS' => "ch1\nch2" do |_dir, book, _files|
510
+ mktmpbookdir('CHAPS' => "ch1\nch2") do |_dir, book, _files|
511
511
  chapter = book.chapter('ch1')
512
512
  assert_equal book.chapter('ch2'), book.next_chapter(chapter)
513
513
 
@@ -517,7 +517,7 @@ EOC
517
517
  end
518
518
 
519
519
  def test_prev_chapter
520
- mktmpbookdir 'CHAPS' => "ch1\nch2" do |_dir, book, _files|
520
+ mktmpbookdir('CHAPS' => "ch1\nch2") do |_dir, book, _files|
521
521
  chapter = book.chapter('ch2')
522
522
  assert_equal book.chapter('ch1'), book.prev_chapter(chapter)
523
523
 
@@ -534,14 +534,14 @@ EOC
534
534
  assert_equal 0, book.volume.lines
535
535
  end
536
536
 
537
- mktmpbookdir 'CHAPS' => 'chapter1.re', 'chapter1.re' => '12345' do |_dir, book, _files|
537
+ mktmpbookdir('CHAPS' => 'chapter1.re', 'chapter1.re' => '12345') do |_dir, book, _files|
538
538
  assert book.volume
539
539
  assert book.volume.bytes > 0
540
540
  assert book.volume.chars > 0
541
541
  assert book.volume.lines > 0
542
542
  end
543
543
 
544
- mktmpbookdir 'preface.re' => '12345' do |dir, _book, _files|
544
+ mktmpbookdir('preface.re' => '12345') do |dir, _book, _files|
545
545
  Dir.chdir(dir) do
546
546
  book2 = Book::Base.new('.')
547
547
  assert book2.volume
@@ -560,12 +560,9 @@ EOC
560
560
  end
561
561
 
562
562
  def test_contentdir
563
- mktmpbookdir('config.yml' => "contentdir: content\n", 'catalog.yml' => "CHAPS:\n - ch01.re\n") do |dir, _book, _files|
564
- Dir.mkdir('content')
565
- File.open('content/ch01.re', 'w') { |f| f.puts "foo\n" }
566
- book = Book::Base.new(dir)
567
- config_file = File.join(dir, 'config.yml')
568
- book.load_config(config_file)
563
+ mktmpbookdir('config.yml' => "contentdir: content\n",
564
+ 'catalog.yml' => "CHAPS:\n - ch01.re\n",
565
+ 'content/ch01.re' => "foo\n") do |_dir, book, _files|
569
566
  assert_equal "foo\n", book.chapters[0].content
570
567
  end
571
568
  end
@@ -578,19 +575,13 @@ EOC
578
575
  end
579
576
 
580
577
  def test_page_metric_config
581
- mktmpbookdir('config.yml' => "bookname: book\npage_metric: B5\n") do |dir, _book, _files|
582
- book = Book::Base.new(dir)
583
- config_file = File.join(dir, 'config.yml')
584
- book.load_config(config_file)
578
+ mktmpbookdir('config.yml' => "bookname: book\npage_metric: B5\n") do |_dir, book, _files|
585
579
  assert_equal ReVIEW::Book::PageMetric::B5, book.page_metric
586
580
  end
587
581
  end
588
582
 
589
583
  def test_page_metric_config_array
590
- mktmpbookdir('config.yml' => "bookname: book\npage_metric: [50, 40, 36, 40, 1]\n") do |dir, _book, _files|
591
- book = Book::Base.new(dir)
592
- config_file = File.join(dir, 'config.yml')
593
- book.load_config(config_file)
584
+ mktmpbookdir('config.yml' => "bookname: book\npage_metric: [50, 40, 36, 40, 1]\n") do |_dir, book, _files|
594
585
  assert_equal ReVIEW::Book::PageMetric::B5, book.page_metric
595
586
  end
596
587
  end