bin/review-pdfmaker in review-0.9.0 vs bin/review-pdfmaker in review-1.0.0
- old
+ new
@@ -43,117 +43,171 @@
yamlfile = ARGV[0]
values = YAML.load_file(yamlfile)
check_book(values)
basedir = Dir.pwd
- path = build_path(values)
+ @path = build_path(values)
bookname = values["bookname"]
- Dir.mkdir(path)
+ Dir.mkdir(@path)
- pre = 0
- body = 0
- post = 0
- @pre_str = ""
- @chap_str = ""
- @post_str = ""
- toccount = 2
+ @chaps_filenames = Hash.new{|h, key| h[key] = ""}
if File.exists?("PREDEF")
- File.open("PREDEF") {|chaps|
- chaps.each_line {|l|
- next if l =~ /^#/
- pre = pre + 1
- toccount = toccount + 1
- fork {
- STDOUT.reopen("#{path}/pre#{pre}.tex")
- exec("review-compile --target=latex --level=1 #{values["params"]} #{l}")
- }
- Process.waitall
- @pre_str << %Q|\\input{pre#{pre}.tex}\n|
- }
- }
+ output_chaps("PREDEF", values)
end
if File.exists?("CHAPS")
- File.open("CHAPS") {|chaps|
- chaps.each_line {|l|
- body = body + 1
- toccount = toccount + 1
- next if l =~ /^#/
- fork {
- STDOUT.reopen("#{path}/chap#{body}.tex")
- exec("review-compile --target=latex --level=#{values["secnolevel"]} #{values["params"]} #{l}")
- }
- Process.waitall
- @chap_str << %Q|\\input{chap#{body}.tex}\n|
- }
- }
+ output_chaps("CHAPS", values)
end
if File.exists?("POSTDEF")
- File.open("POSTDEF") {|chaps|
- chaps.each_line {|l|
- next if l =~ /^#/
- post = post + 1
- toccount = toccount + 1
- fork {
- STDOUT.reopen("#{path}/post#{post}.tex")
- exec("review-compile --target=latex --level=1 #{values["params"]} #{l}")
- }
- Process.waitall
- @post_str << %Q|\\input{post#{post}.tex}\n|
- }
- }
+ output_chaps("POSTDEF", values)
end
- values["pre_str"] = @pre_str
- values["chap_str"] = @chap_str
- values["post_str"] = @post_str
+ values["pre_str"] = @chaps_filenames["PREDEF"]
+ values["chap_str"] = @chaps_filenames["CHAPS"]
+ values["post_str"] = @chaps_filenames["POSTDEF"]
values["usepackage"] = ""
if values["texstyle"]
values["usepackage"] = "\\usepackage{#{values['texstyle']}}"
end
- copy_images("./images", "#{path}/images")
- copyStyToDir(Dir.pwd + "/sty", path)
+ copy_images("./images", "#{@path}/images")
+ copyStyToDir(Dir.pwd + "/sty", @path)
+ copyStyToDir(Dir.pwd, @path, "tex")
- Dir.chdir(path) {
+ Dir.chdir(@path) {
template = get_template(values)
File.open("./book.tex", "wb"){|f| f.write(template)}
## do compile
+ enc = values["params"].to_s.split(/\s+/).find{|i| i =~ /\A--outencoding=/ }
+ kanji = enc ? enc.split(/=/).last.gsub(/-/, '').downcase : 'utf8'
fork {
- exec("platex book.tex")
+ exec("platex -kanji=#{kanji} book.tex")
}
Process.waitall
fork {
- exec("platex book.tex")
+ exec("platex -kanji=#{kanji} book.tex")
}
Process.waitall
fork {
+ exec("platex -kanji=#{kanji} book.tex")
+ }
+ Process.waitall
+ fork {
exec("dvipdfmx -d 5 book.dvi")
}
Process.waitall
}
- FileUtils.cp("#{path}/book.pdf", "#{basedir}/#{bookname}.pdf")
+ FileUtils.cp("#{@path}/book.pdf", "#{basedir}/#{bookname}.pdf")
+end
+def output_chaps(chapsfile, values)
+ File.open(chapsfile) {|chaps|
+ chaps.each_line {|l|
+ next if l =~ /^#/
+ file_id = File.basename(l.chomp.strip,".*")
+ filename = "#{file_id}.tex"
+ fork {
+ STDOUT.reopen("#{@path}/#{filename}")
+ $stderr.puts "compiling #{l}"
+ exec("review-compile --target=latex --level=#{values["secnolevel"]} #{values["params"]} #{l}")
+ }
+ Process.waitall
+ @chaps_filenames[chapsfile] << %Q|\\input{#{filename}}\n|
+ }
+ }
end
def copy_images(from, to)
if File.exist?(from)
Dir.mkdir(to)
copyImagesToDir(from, to)
Dir.chdir(to) {
fork {
- exec("ebb *.png *.jpg")
+ begin
+ exec("extractbb *.png *.jpg */*.jpg */*.png;extractbb -m *.png *.jpg */*.jpg */*.png")
+ rescue
+ exec("ebb *.png *.jpg */*.jpg */*.png")
+ end
}
}
Process.waitall
end
end
+def make_titlepage(values, authors)
+ coverfile = values["coverfile"]
+ if coverfile
+ coverfile_sty = coverfile.sub(/\.[^.]+$/, ".tex")
+ if File.exist?(coverfile_sty)
+ titlepage = File.read(coverfile_sty)
+ return titlepage
+ end
+ end
+
+ ## use default titlepage template
+ titlepage = <<EOB
+\\begin{titlepage}
+EOB
+ if values["coverimage"]
+ titlepage += <<EOB
+ \\begin{center}
+ %%%\\mbox{}\\vskip5zw%
+ \\includegraphics[width=\\textwidth,height=\\textheight,keepaspectratio]{./images/#{values["coverimage"]}}
+ \\end{center}
+ \\clearpage
+EOB
+ end
+ titlepage += <<EOB
+\\thispagestyle{empty}
+\\begin{center}%
+ \\mbox{} \\vskip5zw
+ \\reviewtitlefont%
+ {\\Huge #{values["booktitle"]} \\par}%
+ \\vskip 15em%
+ {\\huge
+ \\lineskip .75em
+ \\begin{tabular}[t]{c}%
+ #{authors}
+ \\end{tabular}\\par}%
+ \\vfill
+ {\\large #{values["date"]} 版\\hspace{2zw}#{values["prt"]} 発行\\par}%
+\\vskip4zw\\mbox{}
+ \\end{center}%
+\\end{titlepage}
+EOB
+
+ return titlepage
+end
+
def get_template(values)
+ dclass = values["texdocumentclass"] || []
+ documentclass = dclass[0] || "jsbook"
+ documentclassoption = dclass[1] || "oneside"
+
+ okuduke = ""
+ authors = ""
+
+ if values["aut"]
+ okuduke += "著 者 & #{values["aut"]} \\\\\n"
+ authors = values["aut"]+ "\\vspace*{1zh} 著"
+ end
+ if values["trl"]
+ authors += " \\\\\n"+values["trl"]+ "\\vspace*{1zh} 訳"
+ okuduke += "翻 訳 & #{values["trl"]} \\\\\n"
+ end
+ if values["edt"]
+ okuduke += "編集者 & #{values["edt"]} \\\\\n"
+ end
+ okuduke += <<EOB
+発行所 & #{values["prt"]} \\\\
+EOB
+
+ titlepage = make_titlepage(values, authors)
+
str = <<EOB
-\\documentclass[oneside]{jsbook}
+\\documentclass[#{documentclassoption}]{#{documentclass}}
\\usepackage[deluxe]{otf}
\\usepackage[dvipdfmx]{color}
\\usepackage[dvipdfmx]{graphicx}
\\usepackage{framed}
\\usepackage{wrapfig}
@@ -180,21 +234,25 @@
\\newcommand{\\parasep}{\\vspace*{3zh}}
\\setlength{\\footskip}{30pt}
-\\usepackage[dvipdfm,bookmarks=true,bookmarksnumbered=true,colorlinks=true,%
- pdftitle={#{values["booktitle"]}},%
- pdfauthor={#{values["aut"]}}]{hyperref}
-
%% Bookmarkの文字化け対策(日本語向け)
\\ifnum 46273=\\euc"B4C1 % 46273 == 0xB4C1 == 漢(EUC-JP)
- \\AtBeginDvi{\\special{pdf:tounicode EUC-UCS2}}%
+ \\usepackage{atbegshi}%
+ \\AtBeginShipoutFirst{\\special{pdf:tounicode EUC-UCS2}}%
+ %%\\AtBeginDvi{\\special{pdf:tounicode EUC-UCS2}}%
\\else
- \\AtBeginDvi{\\special{pdf:tounicode 90ms-RKSJ-UCS2}}%
+ \\usepackage{atbegshi}%
+ \\AtBeginShipoutFirst{\\special{pdf:tounicode 90ms-RKSJ-UCS2}}%
+ %%\\AtBeginDvi{\\special{pdf:tounicode 90ms-RKSJ-UCS2}}%
\\fi
+\\usepackage[dvipdfm,bookmarks=true,bookmarksnumbered=true,colorlinks=true,%
+ pdftitle={#{values["booktitle"]}},%
+ pdfauthor={#{values["aut"]}}]{hyperref}
+
\\newenvironment{reviewimage}{%
\\begin{figure}[H]
\\begin{center}}{%
\\end{center}
\\end{figure}}
@@ -239,10 +297,16 @@
\\textbackslash{}}
\\newcommand{\\reviewlistcaption}[1]{%
\\medskip{\\small\\noindent #1}\\vspace*{-1.3zw}}
+\\newcommand{\\reviewemlistcaption}[1]{%
+ \\medskip{\\small\\noindent #1}\\vspace*{-1.3zw}}
+
+\\newcommand{\\reviewcmdcaption}[1]{%
+ \\medskip{\\small\\noindent #1}\\vspace*{-1.3zw}}
+
\\newcommand{\\reviewimageref}[1]{%
図 #1}
\\newcommand{\\reviewtableref}[1]{%
表 #1}
\\newcommand{\\reviewlistref}[1]{%
@@ -262,46 +326,37 @@
\\usefont{T1}{phv}{b}{n}\\gtfamily}
\\newcommand{\\reviewmainfont}[0]{%
}
+\\newcommand{\\reviewcolophon}[0]{%
+ \\backmatter
+ \\clearpage}
+\\newcommand{\\reviewappendix}[0]{%
+ \\appendix}
+
+\\makeatletter
+\\def\\maxwidth{%
+ \\ifdim\\Gin@nat@width>\\linewidth
+ \\linewidth
+ \\else
+ \\Gin@nat@width
+ \\fi
+}
+\\makeatother
+
#{values["usepackage"]}
\\usepackage[T1]{fontenc}
\\begin{document}
\\reviewmainfont
-
-\\begin{titlepage}
EOB
- if values["coverimage"]
- str += <<EOB
- \\begin{center}
- \\mbox{}\\vskip5zw%
- \\includegraphics[scale=1.0]{./images/#{values["coverimage"]}}
- \\end{center}
- \\clearpage
-EOB
- end
+
+ str += titlepage
str += <<EOB
-\\thispagestyle{empty}
-\\begin{center}%
- \\mbox{} \\vskip5zw
- \\reviewtitlefont%
- {\\Huge #{values["booktitle"]} \\par}%
- \\vskip 15em%
- {\\huge
- \\lineskip .75em
- \\begin{tabular}[t]{c}%
- #{values["aut"]}\\vspace*{1zh} 著
- \\end{tabular}\\par}%
- \\vfill
- {\\large #{values["date"]} 版\\hspace{2zw}#{values["prt"]} 発行\\par}%
-\\vskip4zw\\mbox{}
- \\end{center}%
-\\end{titlepage}
\\renewcommand{\\chaptermark}[1]{{}}
\\frontmatter
%% preface
@@ -313,17 +368,16 @@
\\mainmatter
#{values["chap_str"]}
\\renewcommand{\\chaptermark}[1]{\\markboth{\\appendixname\\thechapter~#1}{}}
-\\appendix
+\\reviewappendix
#{values["post_str"]}
%% okuduke
-\\backmatter
-\\clearpage
+\\reviewcolophon
\\thispagestyle{empty}
\\vspace*{\\fill}
{\\noindent\\reviewtitlefont\\Large #{values["booktitle"]}} \\\\
@@ -331,13 +385,11 @@
{\\noindent
#{values["pubhistory"].to_s.gsub(/\n/){"\n\n\\noindent"} }
}
\\begin{tabular}{ll}
-著 者 & #{values["aut"]} \\\\
-編集者 & #{values["edt"]} \\\\
-発行所 & #{values["prt"]} \\\\
+#{okuduke}
\\end{tabular}
\\\\
\\rule[0pt]{14cm}{1pt} \\\\
#{values["rights"]} \\\\
@@ -351,23 +403,28 @@
dir.each {|fname|
next if fname =~ /^\./
if FileTest.directory?("#{dirname}/#{fname}")
copyImagesToDir("#{dirname}/#{fname}", "#{copybase}/#{fname}")
else
- if fname =~ /\.(png|gif|jpg|jpeg|svg)$/i
+ if fname =~ /\.(png|gif|jpg|jpeg|svg|pdf)$/i
Dir.mkdir(copybase) unless File.exist?(copybase)
FileUtils.cp "#{dirname}/#{fname}", copybase
end
end
}
}
end
-def copyStyToDir(dirname, copybase)
+def copyStyToDir(dirname, copybase, extname = "sty")
+ unless File.directory?(dirname)
+ $stderr.puts "No such directory - #{dirname}"
+ return
+ end
+
Dir.open(dirname) {|dir|
dir.each {|fname|
next if fname =~ /^\./
- if fname =~ /\.(sty)$/i
+ if fname =~ /\.(#{extname})$/i
Dir.mkdir(copybase) unless File.exist?(copybase)
FileUtils.cp "#{dirname}/#{fname}", copybase
end
}
}