aboutsummaryrefslogtreecommitdiff
path: root/reproduce/analysis/make/paper.mk
diff options
context:
space:
mode:
Diffstat (limited to 'reproduce/analysis/make/paper.mk')
-rw-r--r--reproduce/analysis/make/paper.mk105
1 files changed, 90 insertions, 15 deletions
diff --git a/reproduce/analysis/make/paper.mk b/reproduce/analysis/make/paper.mk
index b5b5b29..00bd3b5 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 `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.tex' hasn't
+# 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)
if [ x"$$macros" != x ]; then
+ # 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 `biber') and then run `biber' to generate the `.bbl' file.
- p=$$(pwd)
export TEXINPUTS=$$p:
cd $(texbdir);
@@ -122,15 +143,61 @@ $(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.
- 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)
@@ -155,13 +223,20 @@ paper.pdf: $(mtexdir)/project.tex paper.tex $(texbdir)/paper.bbl
p=$$(pwd)
export TEXINPUTS=$$p:
cd $(texbdir)
+
# 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