diff options
Diffstat (limited to 'reproduce/analysis/make/paper.mk')
-rw-r--r-- | reproduce/analysis/make/paper.mk | 102 |
1 files changed, 88 insertions, 14 deletions
diff --git a/reproduce/analysis/make/paper.mk b/reproduce/analysis/make/paper.mk index 740dc7d..da2702c 100644 --- a/reproduce/analysis/make/paper.mk +++ b/reproduce/analysis/make/paper.mk @@ -18,6 +18,7 @@ + # LaTeX macros for paper # ---------------------- # @@ -44,7 +45,7 @@ $(mtexdir)/project.tex: $(mtexdir)/verify.tex # If no PDF is requested, or if LaTeX isn't available, don't continue # to building the final PDF. Otherwise, merge all the TeX macros into # one for building the PDF. - @if [ -f .local/bin/pdflatex ] && [ x"$(pdf-build-final)" = xyes ]; then + @if [ -f .local/bin/latex ] && [ x"$(pdf-build-final)" = xyes ]; then # Put a LaTeX input command for all the necessary macro files. # 'hardware-parameters.tex' is created in 'configure.sh'. @@ -54,6 +55,11 @@ $(mtexdir)/project.tex: $(mtexdir)/verify.tex echo "\input{tex/build/macros/$$t.tex}" >> $$projecttex done +# Possibly print the appendix in the final PDF. + if [ x"$(separatesupplement)" = x1 ]; then + echo "\newcommand{\separatesupplement}{}" >> $$projecttex + fi + # Possibly highlight the '\new' parts of the text. if [ x"$(highlightnew)" = x1 ]; then echo "\newcommand{\highlightnew}{}" >> $$projecttex @@ -95,24 +101,39 @@ $(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 'bibtex'. # # 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.tex' 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) if [ x"$$macros" != x ]; then -# We'll run LaTeX first to generate the '.bcf' file (necessary for -# 'biber') and then run 'biber' to generate the '.bbl' file. +# Unfortunately I can't get bibtex to look into a special directory +# for the references, so we'll copy it into the LaTeX building +# directory. p=$$(pwd) + if ! [ -L $(texbdir)/references.bib ]; then + 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 . + ln -sf $$p/tex/src/IEEEtran_openaccess.bst $(texbdir)/ + +# We'll run LaTeX first to generate the '.bcf' file (necessary for +# 'bibtex') and then run 'bibtex' to generate the '.bbl' file. export TEXINPUTS=$$p: cd $(texbdir); @@ -122,15 +143,61 @@ $(texbdir)/paper.bbl: tex/src/references.tex $(mtexdir)/dependencies-bib.tex \ # 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' option # for better security. See https://savannah.nongnu.org/task/?15694 # for details. - pdflatex -shell-escape -halt-on-error "$$p"/paper.tex - biber paper + 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 + +# Hack: tidy up eprint+doi style that didn't work in .bst file. +# TODO (better): read Part 4 of +# http://mirrors.ctan.org/info/bibtex/tamethebeast/ttb_en.pdf and +# fix the .bst style properly. + 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' > $*.bbl + if [ x"$(separatesupplement)" != x1 ]; then + cp -pv appendix.bbl appendix-tmp.bbl \ + && sed -e "s/\'/EOLINE/g" appendix-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' > appendix.bbl + fi + +# Paper-specific hacks for reducing very-long author lists. + 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' > $*.bbl +# The pre-final run of LaTeX after 'paper.bbl' was created. + latex -shell-escape -halt-on-error $*.tex fi @@ -145,7 +212,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) @@ -158,11 +226,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'. - pdflatex -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 $*.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 |