403 lines
11 KiB
Makefile
403 lines
11 KiB
Makefile
|
#
|
||
|
# LaTeX Makefile
|
||
|
# --------------
|
||
|
#
|
||
|
# Author : s.m.vandenoord@student.utwente.nl (Stefan van den Oord)
|
||
|
# Date : July 15, 1999
|
||
|
#
|
||
|
# This Makefile is a generic makefile for LaTeX documents. Distribute it
|
||
|
# as you wish, but please don't edit or remove this initial comment.
|
||
|
#
|
||
|
# The Makefile can be used by setting the environment variable "MAKEFILES",
|
||
|
# e.g. export MAKEFILES=~/data/TeX/Makefile.
|
||
|
# It requires GNU Make and bash or better, like zsh. Simply sh is not
|
||
|
# sufficient, I believe. The first few lines of the Makefile contains
|
||
|
# the executables that are used, edit them to point to the executables
|
||
|
# on your system.
|
||
|
#
|
||
|
# DISCLAIMER: Using this Makefile is fully at your own risk. I am not
|
||
|
# responsible for anything! So if crucial files are removed
|
||
|
# by the Makefile, it is your own problem. But you should
|
||
|
# have backups anyway. :-)
|
||
|
#
|
||
|
# Usage
|
||
|
# -----
|
||
|
# The Makefile can do the following things for you:
|
||
|
# - generate PostScript equivalents of XFig figures;
|
||
|
# - run makeindex and BibTeX, but only if necessary;
|
||
|
# - compile the .dvi file, running LaTeX as many times as needed;
|
||
|
# - run XDvi with the compiled .dvi file;
|
||
|
# - create a PostScript equivalent of the .dvi file;
|
||
|
# - generate a HTML equivalent of the .dvi file (if Latex2HTML is
|
||
|
# installed);
|
||
|
# - remove all generated output.
|
||
|
# The Makefile is in some points even RCS aware.
|
||
|
#
|
||
|
# In many cases, you don't even have to tell the Makefile which LaTeX
|
||
|
# file it has to compile. The Makefile uses the following strategy:
|
||
|
# 1. Check if the environment variable LATEXTARGET is set; if it is,
|
||
|
# generate $LATEXTARGET.dvi.
|
||
|
# 2. If there is only one .tex file, use that one.
|
||
|
# 3. Check if there is a LaTeX file that has the same basename as the
|
||
|
# directory. For example, if the directory is named "Thesis" and
|
||
|
# there is a file "Thesis.tex", "Thesis.dvi" is generated.
|
||
|
#
|
||
|
# Invocation
|
||
|
# ----------
|
||
|
# When the MAKEFILES environment variable is set, you can use the
|
||
|
# following commands:
|
||
|
# - make latexhelp
|
||
|
# Prints an overview of the available commands.
|
||
|
# - make latexfigures
|
||
|
# Only generate the PostScript equivalents of XFig figures.
|
||
|
# - make file.dvi
|
||
|
# Generates the specified DVI file.
|
||
|
# - make file.ps
|
||
|
# Generates the DVI file and then runs dvips.
|
||
|
# - make latex
|
||
|
# Use the above explained strategy to find out what has to be
|
||
|
# generated, and generate it.
|
||
|
# - make view
|
||
|
# Do a make latex and then run XDvi.
|
||
|
# - make latexps
|
||
|
# Do a make latex and then run dvips.
|
||
|
# - make html
|
||
|
# Do a make latex and then use LaTeX2HTML to create the HTML equivalent.
|
||
|
# To do this, the following environment variables are used:
|
||
|
# * HTMLDIR : the base dir in which the output is written. For example,
|
||
|
# if HTMLDIR=~/public_html/LaTeX, and the file that is
|
||
|
# generated is "Thesis", the output will be written in the
|
||
|
# directory ~/public_html/LaTeX/Thesis.
|
||
|
# * LATEX2HTML_OPTS : if you want to pass options to LaTeX2HTML, put
|
||
|
# them in this variable.
|
||
|
# - make latexclean
|
||
|
# This command removes all generated output. CAUTION: the files that are
|
||
|
# removed are thought out pretty well, but it is possible that files are
|
||
|
# removed that you wanted to keep! Check below what files are removed if
|
||
|
# you want to be certain!
|
||
|
# Note that a file figure.eps is only removed if a file figure.fig exists.
|
||
|
# (Even if the file figure.fig exists, but is checked in using RCS, the
|
||
|
# file figure.eps will be removed.)
|
||
|
#
|
||
|
# Tip
|
||
|
# ---
|
||
|
# For some projects it is useful to have a separate Makefile in the project's
|
||
|
# directory. For example, when you use RCS, you could add functionality for
|
||
|
# automatic checkouts of the right files (adding dependencies is sufficient;
|
||
|
# GNU Make rocks :-).
|
||
|
# The command "latexclean" is declared so that you can add your own
|
||
|
# functionality in the project's Makefile; instead of one colon, declare it
|
||
|
# with two colons if you want to do that.
|
||
|
# For example:
|
||
|
# latexclean::
|
||
|
# rm -f foo.bar
|
||
|
# This way both the origional definition in this Makefile and your own are
|
||
|
# used.
|
||
|
#
|
||
|
# Changes:
|
||
|
# - March 22, 1999:
|
||
|
# Added -o $@ to the dvips invocation.
|
||
|
# - June 3, 1999:
|
||
|
# Removed the target "all" from the help output.
|
||
|
# - June 4, 1999:
|
||
|
# 'latexclean' now only removes a DVI files if there is a TeX file
|
||
|
# with the same name.
|
||
|
# - June 17, 1999:
|
||
|
# Removed the `find' command in the latexclean target. This is because
|
||
|
# the option '-maxdepth' is Linux-specific. And `ls' is simpler anyway.
|
||
|
# :-)
|
||
|
# - July 15, 1999:
|
||
|
# The variables "LATEX", "BIBTEX", etc. are now taken from the environment
|
||
|
# if they are defined there.
|
||
|
|
||
|
#.SILENT:
|
||
|
|
||
|
SHELL=/bin/bash
|
||
|
|
||
|
ifndef LATEX
|
||
|
LATEX=latex
|
||
|
endif
|
||
|
|
||
|
ifndef BIBTEX
|
||
|
BIBTEX=bibtex
|
||
|
endif
|
||
|
|
||
|
ifndef DVIPS
|
||
|
DVIPS=dvips
|
||
|
endif
|
||
|
|
||
|
ifndef MAKEINDEX
|
||
|
MAKEINDEX=makeindex
|
||
|
endif
|
||
|
|
||
|
ifndef DVIVIEWER
|
||
|
DVIVIEWER=xdvi
|
||
|
endif
|
||
|
|
||
|
ifndef LATEX2HTML
|
||
|
LATEX2HTML=latex2html
|
||
|
endif
|
||
|
|
||
|
ifndef SED
|
||
|
SED=sed
|
||
|
endif
|
||
|
|
||
|
ifndef PDFLATEX
|
||
|
PDFLATEX=pdflatex
|
||
|
endif
|
||
|
|
||
|
ifndef THUMBPDF
|
||
|
THUMBPDF=thumbpdf
|
||
|
endif
|
||
|
|
||
|
FIGURES=$(wildcard *.fig)
|
||
|
FIGUREOBJS=$(FIGURES:.fig=.eps)
|
||
|
|
||
|
TEXFILES=$(wildcard *.tex)
|
||
|
|
||
|
#test: latexhelp
|
||
|
|
||
|
# Disable standard pattern rule:
|
||
|
%.dvi: %.tex
|
||
|
|
||
|
# Do not delete the following targets:
|
||
|
.PRECIOUS: %.aux %.bbl %.eps %.ind
|
||
|
|
||
|
%.aux: %.tex $(FIGUREOBJS) $(TEXFILES)
|
||
|
@$(LATEX) $*
|
||
|
# Look for citations. Make sure grep never returns an error code.
|
||
|
@grep "^\\\\citation" *.aux > .btmp.new || true
|
||
|
|
||
|
# If the citations are not changed, don't do anything. Otherwise replace
|
||
|
# the .btmp file to make sure Bibtex will be run.
|
||
|
@if ( diff .btmp.new .btmp >& /dev/null ); then \
|
||
|
rm .btmp.new; \
|
||
|
else \
|
||
|
mv .btmp.new .btmp; \
|
||
|
fi
|
||
|
|
||
|
@if [ -f $*.idx ]; then cp $*.idx .itmp.new; else touch .itmp.new; fi
|
||
|
@if ( diff .itmp.new .itmp >& /dev/null ); then \
|
||
|
rm .itmp.new; \
|
||
|
else \
|
||
|
mv .itmp.new .itmp; \
|
||
|
fi
|
||
|
|
||
|
.btmp:
|
||
|
|
||
|
%.bbl: $(BIBFILES) .btmp
|
||
|
# Only use BibTeX if \bibliography occurs in the document. In that case,
|
||
|
# run BibTeX and recompile. .btmp is touched to prevent useless making
|
||
|
# next time.
|
||
|
@if ( grep "^\\\\bibliography{" $*.tex > /dev/null ); then \
|
||
|
$(BIBTEX) $*; \
|
||
|
touch .rerun; \
|
||
|
fi
|
||
|
@touch .btmp
|
||
|
|
||
|
.itmp:
|
||
|
|
||
|
%.ind: .itmp
|
||
|
@if [ -f $*.idx ]; then \
|
||
|
cat $*.idx | $(SED) -e 's/ *{/{/g;s/ *}/}/g;s/ *=/=/g' > temp.idx; \
|
||
|
rm $*.idx; \
|
||
|
mv temp.idx $*.idx; \
|
||
|
$(MAKEINDEX) -g -s rene.ist $*; \
|
||
|
touch .rerun; \
|
||
|
touch .itmp; \
|
||
|
fi
|
||
|
|
||
|
%.eps:%.fig
|
||
|
@echo Generating figure $@...
|
||
|
@fig2dev -L ps $< $@
|
||
|
|
||
|
%.dvi: %.aux %.ind %.bbl
|
||
|
# Make sure the dvi-file exists; if not: recompile.
|
||
|
@if [ ! -f $*.dvi ]; then \
|
||
|
touch .rerun; \
|
||
|
fi
|
||
|
|
||
|
@if [ -f .rerun ]; then \
|
||
|
rm .rerun; \
|
||
|
$(LATEX) $*; \
|
||
|
else \
|
||
|
$(MAKE) $*.aux; \
|
||
|
fi
|
||
|
|
||
|
# While references et al. are changed: recompile.
|
||
|
@while ( grep Rerun $*.log > /dev/null ); do \
|
||
|
$(LATEX) $*; \
|
||
|
done
|
||
|
|
||
|
# Touch the figureobjects to prevent making next time
|
||
|
@if [ -n "$(FIGUREOBJS)" ]; then \
|
||
|
touch $(FIGUREOBJS); \
|
||
|
touch $*.aux; \
|
||
|
fi
|
||
|
|
||
|
@if [ -f $*.ind ]; then \
|
||
|
touch $*.ind; \
|
||
|
fi
|
||
|
|
||
|
%.pdf: %.aux %.ind %.bbl
|
||
|
# Make sure the pdf-file exists; if not: recompile.
|
||
|
@if [ ! -f $*.pdf ]; then \
|
||
|
touch .rerun; \
|
||
|
fi
|
||
|
|
||
|
@if [ -f .rerun ]; then \
|
||
|
rm .rerun; \
|
||
|
$(PDFLATEX) $*; \
|
||
|
$(THUMBPDF) $*; \
|
||
|
$(PDFLATEX) $*; \
|
||
|
else \
|
||
|
$(MAKE) $*.aux; \
|
||
|
fi
|
||
|
|
||
|
# While references et al. are changed: recompile.
|
||
|
@while ( grep Rerun $*.log > /dev/null ); do \
|
||
|
$(PDFLATEX) $*; \
|
||
|
$(THUMBPDF) $*; \
|
||
|
$(PDFLATEX) $*; \
|
||
|
done
|
||
|
|
||
|
# Touch the figureobjects to prevent making next time
|
||
|
@if [ -n "$(FIGUREOBJS)" ]; then \
|
||
|
touch $(FIGUREOBJS); \
|
||
|
touch $*.aux; \
|
||
|
fi
|
||
|
|
||
|
@if [ -f $*.ind ]; then \
|
||
|
touch $*.ind; \
|
||
|
fi
|
||
|
|
||
|
latex:
|
||
|
# Below the 'true' is included to prevent unnecessarily many errors.
|
||
|
@if [ -n "${LATEXTARGET}" ]; then \
|
||
|
$(MAKE) ${LATEXTARGET}.dvi; \
|
||
|
true; \
|
||
|
else \
|
||
|
if [ `ls *.tex | wc -l` = "1" ]; then \
|
||
|
$(MAKE) `basename \`ls *.tex\` .tex`.dvi; \
|
||
|
true; \
|
||
|
else \
|
||
|
$(MAKE) `echo $$PWD|tr '/' '\n'|tail -1`.dvi; \
|
||
|
true; \
|
||
|
fi; \
|
||
|
fi
|
||
|
|
||
|
pdflatex:
|
||
|
# Below the 'true' is included to prevent unnecessarily many errors.
|
||
|
@if [ -n "${LATEXTARGET}" ]; then \
|
||
|
$(MAKE) ${LATEXTARGET}.pdf; \
|
||
|
true; \
|
||
|
else \
|
||
|
if [ `ls *.tex | wc -l` = "1" ]; then \
|
||
|
$(MAKE) `basename \`ls *.tex\` .tex`.pdf; \
|
||
|
true; \
|
||
|
else \
|
||
|
$(MAKE) `echo $$PWD|tr '/' '\n'|tail -1`.pdf; \
|
||
|
true; \
|
||
|
fi; \
|
||
|
fi
|
||
|
|
||
|
latexfigures:
|
||
|
@for i in $(FIGUREOBJS); do \
|
||
|
$(MAKE) $$i; \
|
||
|
done
|
||
|
|
||
|
view:
|
||
|
# Below the 'true' is included to prevent unnecessarily many errors.
|
||
|
@if [ -n "${LATEXTARGET}" ]; then \
|
||
|
$(MAKE) ${LATEXTARGET}.dvi && \
|
||
|
$(DVIVIEWER) ${LATEXTARGET}.dvi; \
|
||
|
true; \
|
||
|
else \
|
||
|
if [ `ls *.tex | wc -l` = "1" ]; then \
|
||
|
$(MAKE) `basename \`ls *.tex\` .tex`.dvi && \
|
||
|
$(DVIVIEWER) `basename \`ls *.tex\` .tex`.dvi; \
|
||
|
true; \
|
||
|
else \
|
||
|
$(MAKE) `echo $$PWD|tr '/' '\n'|tail -1`.dvi && \
|
||
|
$(DVIVIEWER) `echo $$PWD|tr '/' '\n'|tail -1`.dvi; \
|
||
|
true; \
|
||
|
fi; \
|
||
|
fi
|
||
|
|
||
|
%.ps: %.dvi
|
||
|
$(DVIPS) -o $@ $<
|
||
|
|
||
|
latexps:
|
||
|
@if [ -n "${LATEXTARGET}" ]; then \
|
||
|
$(MAKE) ${LATEXTARGET}.ps && \
|
||
|
true; \
|
||
|
else \
|
||
|
if [ `ls *.tex | wc -l` = "1" ]; then \
|
||
|
$(MAKE) `basename \`ls *.tex\` .tex`.ps && \
|
||
|
true; \
|
||
|
else \
|
||
|
$(MAKE) `echo $$PWD|tr '/' '\n'|tail -1`.ps && \
|
||
|
true; \
|
||
|
fi; \
|
||
|
fi
|
||
|
|
||
|
html: .html
|
||
|
|
||
|
.html:
|
||
|
@if [ -n "${LATEXTARGET}" ]; then \
|
||
|
if [ -n "${HTMLDIR}" ]; then \
|
||
|
$(MAKE) ${LATEXTARGET}.dvi; \
|
||
|
$(LATEX2HTML) $(LATEX2HTML_OPTS) -dir $(HTMLDIR)/$(LATEXTARGET) $(LATEXTARGET) && \
|
||
|
chmod a+rx $(HTMLDIR)/$(LATEXTARGET) && \
|
||
|
chmod a+r $(HTMLDIR)/$(LATEXTARGET)/* && \
|
||
|
touch .html; \
|
||
|
else \
|
||
|
echo Set variable HTMLDIR\!; \
|
||
|
fi; \
|
||
|
else \
|
||
|
echo Set variable LATEXTARGET\!; \
|
||
|
fi
|
||
|
|
||
|
latexhelp:
|
||
|
@echo "LaTeX Makefile Options"
|
||
|
@echo "----------------------"
|
||
|
@echo ""
|
||
|
@echo "Environment variables:"
|
||
|
@echo " LATEXTARGET Filename to make (without extension)"
|
||
|
@echo " HTMLDIR Directory for HTML-output"
|
||
|
@echo " FIGURES Figures that have to be compiled"
|
||
|
@echo ""
|
||
|
@echo "Targets:"
|
||
|
@echo " <name>.dvi Make the given dvi file"
|
||
|
@echo " latex Make the LATEXTARGET or <dirname>.dvi"
|
||
|
@echo " pdflatex Make the LATEXTARGET or <dirname>.pdf"
|
||
|
@echo " latexps Make the LATEXTARGET or <dirname>.ps"
|
||
|
@echo " view Make and view the LATEXTARGET or <dirname>.dvi"
|
||
|
@echo " html Make the LATEXTARGET or <dirname>.dvi and generate HTML output"
|
||
|
@echo " latexhelp This overview"
|
||
|
@echo " latexclean Remove all generated files"
|
||
|
|
||
|
latexclean::
|
||
|
@rm -f *.log *.aux *.bbl *.blg *.ilg *.toc *.lof *.lot *.idx *.ind .html .btmp .itmp .rerun *~
|
||
|
@rm -f thumb[0-9][0-9][0-9].png
|
||
|
@rm -f thumbdta.tex thumbpdf.pdf
|
||
|
|
||
|
@for i in *.eps; do \
|
||
|
if [ -f "`basename $$i .eps`.fig" ]; then \
|
||
|
rm -f $$i; \
|
||
|
elif ( rcs `basename $$i .eps`.fig >& /dev/null ); then \
|
||
|
rm -f $$i; \
|
||
|
fi \
|
||
|
done
|
||
|
@for i in *.dvi; do \
|
||
|
if [ -f "`basename $$i .dvi`.tex" ]; then \
|
||
|
rm -f $$i; \
|
||
|
fi \
|
||
|
done
|
||
|
@for i in *.pdf; do \
|
||
|
if [ -f "`basename $$i .pdf`.tex" ]; then \
|
||
|
rm -f $$i; \
|
||
|
fi \
|
||
|
done
|
||
|
|