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