diff options
Diffstat (limited to 'reproduce/analysis/make/paper.mk')
-rw-r--r-- | reproduce/analysis/make/paper.mk | 74 |
1 files changed, 43 insertions, 31 deletions
diff --git a/reproduce/analysis/make/paper.mk b/reproduce/analysis/make/paper.mk index d8f18b3..1776363 100644 --- a/reproduce/analysis/make/paper.mk +++ b/reproduce/analysis/make/paper.mk @@ -18,6 +18,7 @@ + # LaTeX macros for paper # ---------------------- # @@ -55,8 +56,8 @@ $(mtexdir)/project.tex: $(mtexdir)/verify.tex done # Possibly print the appendix in the final PDF. - if [ x"$(noappendix)" = x1 ]; then - echo "\newcommand{\noappendix}{}" >> $$projecttex + if [ x"$(separatesupplement)" = x1 ]; then + echo "\newcommand{\separatesupplement}{}" >> $$projecttex fi # Possibly highlight the '\new' parts of the text. @@ -99,17 +100,18 @@ $(mtexdir)/project.tex: $(mtexdir)/verify.tex # The bibliography # ---------------- # -# We need to run the `biber' program on the output of LaTeX to generate the -# necessary bibliography before making the final paper. So we'll first have -# one run of LaTeX (similar to the `paper.pdf' recipe), then `biber'. +# We need to run the `bibtex' program on the output of LaTeX to generate +# the necessary bibliography before making the final paper. So we'll first +# have one run of LaTeX (similar to the `paper.pdf' recipe), then `biber'. # # NOTE: `$(mtexdir)/project.tex' is an order-only-prerequisite for # `paper.bbl'. This is because we need to run LaTeX in both the `paper.bbl' # recipe and the `paper.pdf' recipe. But if `tex/src/references.bib' hasn't # been modified, we don't want to re-build the bibliography, only the final # PDF. -$(texbdir)/paper.bbl: tex/src/references.tex $(mtexdir)/dependencies-bib.tex \ - | $(mtexdir)/project.tex +bbls = $(foreach t,$(subst .pdf,,$(top-pdfs)),$(texbdir)/$(t).bbl) +$(bbls): $(texbdir)/%.bbl: tex/src/references.tex \ + $(mtexdir)/dependencies-bib.tex | $(mtexdir)/project.tex # If `$(mtexdir)/project.tex' is empty, don't build PDF. @macros=$$(cat $(mtexdir)/project.tex) @@ -120,14 +122,14 @@ $(texbdir)/paper.bbl: tex/src/references.tex $(mtexdir)/dependencies-bib.tex \ # building directory. p=$$(pwd) if ! [ -L $(texbdir)/references.bib ]; then - ln -s $$p/tex/src/references.tex $(texbdir)/references.bib + ln -sf $$p/tex/src/references.tex $(texbdir)/references.bib fi # Copy the improved IEEE bst file into the build directory. # The improved bst file provides ArXiv clickable URLs and # if available, open-access URLs based on the DOIs, with # closed-access URLs as a fallback, via https://oadoi.org . - cp -pv $$p/tex/src/IEEEtran_openaccess.bst $(texbdir) + ln -sf $$p/tex/src/IEEEtran_openaccess.bst $(texbdir)/ # We'll run LaTeX first to generate the `.bcf' file (necessary # for `biber') and then run `biber' to generate the `.bbl' file. @@ -140,19 +142,27 @@ $(texbdir)/paper.bbl: tex/src/references.tex $(mtexdir)/dependencies-bib.tex \ # it. It will be built anyway once this rule is done. rm -f $@ + # Put a link to the main LaTeX source that we want to build. + if [ $* = paper ]; then sdir="$$p" + else sdir="$$p"/tex/src + fi + ln -sf "$$sdir"/$*.tex ./ + # The pdflatex option '-shell-escape' is "normally disallowed for # security reasons" according to the `info pdflatex' manual, but # is enabled here in order to allow the use of PGFPlots. If you - # do not use PGFPlots, then you should remove the `-shell-escape' + # do not use PGFPlots, then you can remove the `-shell-escape' # option for better security. See # https://savannah.nongnu.org/task/?15694 for details. - latex -shell-escape -halt-on-error "$$p"/paper.tex - - # Since we have multiple bibliographies (one for the main body, - # and one for the appendix), we use 'multibib'. Multibib creates - # a separate '.aux' file for each bibliography. - bibtex paper - if [ x"$(noappendix)" != x1 ]; then + latex -shell-escape -halt-on-error $*.tex + + # When we are building the main paper and the appendices are to + # be built within the main paper's PDF, we need two + # bibliographies: one for the main body, and one for the + # appendix. For this, we use 'multibib'. Multibib creates a + # separate '.aux' file for each bibliography. + bibtex $* + if [ x"$(separatesupplement)" != x1 ]; then bibtex appendix fi @@ -160,14 +170,14 @@ $(texbdir)/paper.bbl: tex/src/references.tex $(mtexdir)/dependencies-bib.tex \ # TODO (better): read Part 4 of # http://mirrors.ctan.org/info/bibtex/tamethebeast/ttb_en.pdf # and fix the .bst style properly. - cp -pv paper.bbl paper-tmp.bbl \ - && sed -e "s/\'/EOLINE/g" paper-tmp.bbl \ + cp -pv $*.bbl $*-tmp.bbl \ + && sed -e "s/\'/EOLINE/g" $*-tmp.bbl \ | tr -d '\n' \ | sed -e 's/\([0-9]\)\( \|EOLINE\)}/\1}/g' \ | sed -e 's/\([^,]\) *\( \|EOLINE\) *\\eprint/\1, \\eprint/g' \ | sed -e 's/\([^,]\) *\( \|EOLINE\) *\\doi/\1, \\doi/g' \ - | sed -e 's/EOLINE/\n/g' > paper.bbl - if [ x"$(noappendix)" != x1 ]; then + | sed -e 's/EOLINE/\n/g' > $*.bbl + if [ x"$(separatesupplement)" != x1 ]; then cp -pv appendix.bbl appendix-tmp.bbl \ && sed -e "s/\'/EOLINE/g" appendix-tmp.bbl \ | tr -d '\n' \ @@ -178,18 +188,19 @@ $(texbdir)/paper.bbl: tex/src/references.tex $(mtexdir)/dependencies-bib.tex \ fi # Paper-specific hacks for reducing very-long author lists. - cp -pv paper.bbl paper-tmp.bbl \ - && sed -e "s/\'/EOLINE/g" paper-tmp.bbl \ + cp -pv $*.bbl $*-tmp.bbl \ + && sed -e "s/\'/EOLINE/g" $*-tmp.bbl \ | tr -d '\n' \ | sed -e 's;, D\..Chong[^{]*Forstag; et al.\\/;' \ | sed -e 's;, V\..Khodiyar[^{]*Whyte; et al.\\/;' \ - | sed -e 's/EOLINE/\n/g' > paper.bbl + | sed -e 's/EOLINE/\n/g' > $*.bbl + # The pre-final run of LaTeX after 'paper.bbl' was created. - latex -shell-escape -halt-on-error "$$p"/paper.tex + latex -shell-escape -halt-on-error $*.tex fi -# | sed -e 's;Chong;HELLO MUM;' \ + # The final paper @@ -200,7 +211,8 @@ $(texbdir)/paper.bbl: tex/src/references.tex $(mtexdir)/dependencies-bib.tex \ # to run everything cleanly from there, it is necessary to add the current # directory (top project directory) to the `TEXINPUTS' environment # variable. -paper.pdf: $(mtexdir)/project.tex paper.tex $(texbdir)/paper.bbl +$(top-pdfs): %.pdf: $(mtexdir)/project.tex paper.tex \ + tex/src/appendix-*.tex $(texbdir)/%.bbl # If `$(mtexdir)/project.tex' is empty, don't build the PDF. @macros=$$(cat $(mtexdir)/project.tex) @@ -213,17 +225,17 @@ paper.pdf: $(mtexdir)/project.tex paper.tex $(texbdir)/paper.bbl # See above for a warning and brief discussion on the the # pdflatex option `-shell-escape'. - latex -shell-escape -halt-on-error "$$p"/paper.tex + latex -shell-escape -halt-on-error $*.tex # Convert the DVI to PostScript, and the PostScript to PDF. The # `-dNOSAFER' option to GhostScript allows transparencies in the # conversion from PostScript to PDF, see # https://www.ghostscript.com/doc/current/Language.htm#Transparency - dvips paper.dvi - ps2pdf paper.ps + dvips $*.dvi + ps2pdf $*.ps # Come back to the top project directory and copy the built PDF # file here. cd "$$p" - cp $(texbdir)/$@ $(final-paper) + cp $(texbdir)/$*.pdf $@ fi |