review 4.2.0 → 5.0.0

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 (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