Newer
Older
Handbook / make-includes / standard_rules.make
################################################################################
#
# File: $Id$
#
# Standard rules for a variety of situations. Includes standard suffixes and
# paths.
# 
#
################################################################################


################################################################################
#
# Required make variables. These should be defined by the calling makefile.
#
# SUBJECT_CODE
#	The paper number for the current paper, e.g., 212.
#
PAPER_NUMBER?=$(error The required make variable PAPER_NUMBER has not been defined. Please set it to the correct value)
#
# IMGDIR
#	The path to the directory that contains images, e.g., images.
#
IMGDIR?=$(error The required make variable IMGDIR has not been defined. Please set it to the directory in which images are located)


################################################################################
#
# Default rules.
#
#
# PDF from LaTeX via DVI, typically for images drawn using PSTricks).
# 
%.pdf %-print.pdf: $(IMGDIR)/%.tex
	latex --jobname=$(IMGDIR)/$* $<
	dvips -q -f $(IMGDIR)/$* | ps2eps -q -l | epstopdf -f -o=$(IMGDIR)/$@
#
# PDF from LaTeX.
#
%.pdf: %.tex
	pdflatex $<
	pdflatex $<
#
# 2-up PDF from 1-up PDF.
#
%-2up.pdf: %.pdf
	pdfnup $< --nup 2x1 --outfile $@
#
# Derived XML with inclusions from source XML without inclusions.
#
# This is done by simply running the original source through xmllint
# with the --xinclude option to process any xi:include elements.
# The result of this could just be piped into the XSLT processor,
# except that (a) not all of the processors support input from stdin,
# and (b) combining both xmllint and XSLT processing into one command
# means that make won't stop if there's any errors from xmllint.
#
# Sed is used to add a comment to the derived XML file, warning that this
# is generated and shouldn't be edited. Sed was used because the <?xml?>
# processing instruction MUST be on the first line. The implication here
# is that all input source files have an <?xml?> processing instruction
# (which they should anyway).
#
%-derived.xml: %.xml
	xmllint --xinclude $< > $@
	@sed -i -e '1a <!-- THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT! -->' $@
#
# LaTeX from derived XML.
#
%.tex: %-derived.xml
	$(call xslt,$<,xml2latex.xsl,$(call xslt_parameter,paper,$(PAPER_NUMBER))) > $@
#
# HTML from derived XML.
#
%.html: %-derived.xml
	$(call xslt,$<,xml2html.xsl,$(call xslt_parameter,paper,$(PAPER_NUMBER))) > $@
#
# PNG from TIFF (normal)
#
%.png %-print.png %-web.png: %.tif
	convert "$<" $(IMGDIR)/$@
#
# PNG from TIFF (slide background)
#
# We lighten these so that they don't overwhelm the text. Note that 15% is
# too light for most data projectors, so let's try 33% and see what
# happens... (this looks far too much on screen, but data projectors tend
# to wash things out much, much more).
#
# Includes both blurred and unblurred versions, use as required.
#
%-BG.png: $(IMGDIR)/%.tif
	convert $< -threshold "-1" -depth 16 - | composite -dissolve 33% $< - $(IMGDIR)/$@
#
%-BG-blur.png: %.tif
	convert -blur 0.5 $< $(IMGDIR)/$*.png
	convert $(IMGDIR)/$*.png -threshold "-1" -depth 16 - | composite -dissolve 33% $(IMGDIR)/$*.png - $(IMGDIR)/$@
#
# PNG from PICT.
#
%.png %-print.png %-web.png: %.pict
	convert "$<" $(IMGDIR)/$@
#
# PDF from Ploticus.
#
%.pdf %-print.pdf: %.plo
	ploticus -eps -tightcrop -o stdout $< | shiftbbox | epstopdf --filter --outfile=$(IMGDIR)/$@
#
# PDF from R.
# This assumes that the first argument to the R script is the output filename
# for the resultant PDF.
#
%.pdf %-print.pdf: %.R
	R --slave --file=$< --args "$(IMGDIR)/$@"
	pdfcrop $(IMGDIR)/$@ $(IMGDIR)/$*-crop.pdf
	-mv $(IMGDIR)/$*-crop.pdf $(IMGDIR)/$@
#
# PDF from PS
#
%.pdf %-print.pdf: %.ps
	ps2eps --ignoreBB --nohires --loose < $< | ps2pdf -dEPSCrop - $(IMGDIR)/$@
#
# PDF from EPS
#
%.pdf %-print.pdf: %.eps
	ps2eps --ignoreBB --nohires --loose < $< | ps2pdf -dEPSCrop - $(IMGDIR)/$@
#
# PDF from SVG (via Inkscape)
# The --export-area-drawing option now appears to behave correctly with
# PDFs (previously it over-cropped slightly).
#
%.pdf %-print.pdf: %.svg
	inkscape --file=$< --without-gui --export-area-drawing --export-pdf=$(IMGDIR)/$@
#
# PNG from SVG (via Inkscape)
#
%.png %-print.png %-web.png: %.svg
	inkscape --file=$< --without-gui --export-area-drawing --export-background-opacity=1.0 --export-dpi=96 --export-png=$(IMGDIR)/$@

%-web-zoom.png: %.svg
	inkscape --file=$< --without-gui --export-area-drawing --export-background-opacity=1.0 --export-dpi=144 --export-png=$(IMGDIR)/$@
#
# PNG from PNG (change the name)
#
%-web.png: %.png
	cp $< $(IMGDIR)/$@

%-print.png: %.png
	cp $< $(IMGDIR)/$@