################################################
# file: Makefile
# Makefile for latex
#
# @Author: SUN, Tong
# Copyright (c)2001, Tong SUN, all right reserved
# @Version: $Date: 2001/09/04 06:21:20 $ $Revision: 1.2.1.4 $
# @Home URL:
http://xpt.sourceforge.net/
#
# CREDIT:
# Skeleton from: chris beggy
[email protected]
# Skeleton Id: skel-make-latex.el,v 1.3 2001/01/17 23:52:17 chrisb Exp
#
# Readme begins:
#
# This is a generic makefile to create output from a Latex file.
#
# It will run the designated LaTeX FILE through TeX in turn until all
# cross-references are resolved, building all indices. The directory
# containing each FILE is searched for included files.
#
# It can also generate .html, .txt or .rtf files.
#
# To get help, type 'make help'
#
# Distribute freely, but please include the author's info & copyright,
# the file's version & url with the distribution.
#
# Support free software movement! Please send you comments, suggestions, bug
# reports, patches to the author from the xpt project home URL. They are
# warmly welcome. Thank you for using the tools from the xpt project.
#
# Readme ends.
# cat Makefile | sed -n '/# [R]eadme /,/# [R]eadme / p' | cut -c3- > latexmake/README
#
# {{{ Commentary:
#
# To make the latex file latex_file.tex, issue:
#
# make TEX_SOURCE_BASE=latex_file
# or rather:
# export TEX_SOURCE_BASE=latex_file
# make
#
# Basically you need to set the TEX_SOURCE_BASE variable before invoking make
# but using 'make check' can have 'make' makes suggestion for you:
# If there is only one .tex file in current dirctory, make will suggest it.
# else suggest the directory name. For example, if the directory is named
# "thesis", make will assume that your will work on the file "thesis.tex".
# The benefit of setting this variable is that you can clean all the generated
# files easily using 'make clean'.
# If the TEX_DEST_DIR variable is set, all generated files (.ps, .pdf...) will
# end up in that particular directory. This is mandatory if you want to build
# an HTML (or .txt) version from the .tex file. The default is current dir.
#
# It default makes only .dvi file, and no output unless errors occur
# You can also issue 'make view' to view the result right after the make
#
# To generate other formats, issue
#
# make ps
# and/or,
# make pdf
# make html
# make txt
# make rtf
#
# or simply:
# make all rtf
#
# The general procedure would be
# 'make view' repeatly until you are fully satisfied
# 'make all', or 'make ps pdf html' for the final blast
#
# Targets Explanation
# -------------------------------------------
# dvi dvi format
# ps postscript
# pdf pdf Adobe
# html for web browser
# txt normal plain text file
# rtf for M$ Word/WordPad
#
# .tex Latex source file
# .chk check latex syntax with chktex
#
# The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO, TEX (or
# PDFTEX), and TEXINDEX environment variables are used to run those commands,
# if they are set.
#
# All tools used in this Makefile are well-known tools. They can all be easily
# located on the web using any search engines. Most of them may have already
# been included in your *nix distribution.
#
# }}} end commentary.
#
################################################
# {{{ Code:
# .............................................................. &ss ...
# here's the system dependent stuff
#
ifndef SYNTAXCHK
SYNTAXCHK = chktex
endif
ifndef LATEX
LATEX = texi2dvi -q
endif
ifndef DVIPS
DVIPS=dvips
endif
ifndef DVIVIEWER
DVIVIEWER=xdvi
endif
ifndef PDFLATEX
PDFLATEX = pdflatex
PDFLATEX = texi2pdf -q -p
PDFLATEX = ps2pdf
endif
ifndef LATEX2HTML
LATEX2HTML=latex2html -verbosity 0 -split 0 -nonavigation -dir ${TEX_DEST_DIR}
endif
ifndef HTML2TEXT
HTML2TEXT=w3m -dump -cols 78
endif
ifndef LATEX2RTF
LATEX2RTF=`which ltx2rtf`
endif
ifndef MAKEFILE
MAKEFILE=Makefile
endif
# .............................................................. &ss ...
# here are the default rules
#
# Disable standard pattern rule:
%.dvi: %.tex
# Do not delete the following targets:
PRECIOUS: %.chk %.aux %.bbl
%.chk: %.tex
# $(SYNTAXCHK) -o $@ $<
latex $<
@touch $@
# .dvi file is always generated to the current dir,
# regardless of the ${TEX_DEST_DIR} setting
%.dvi: %.tex %.chk
$(LATEX) $<
%.ps : %.dvi %.chk
$(DVIPS) -o $@ $<
@[ $${TEX_DEST_DIR:+T} ] && mv $@ ${TEX_DEST_DIR} || true
%.pdf : %.ps %.tex %.chk
$(PDFLATEX) $<
@[ $${TEX_DEST_DIR:+T} ] && mv $@ ${TEX_DEST_DIR} || true
${TEX_DEST_DIR}/%.html : %.tex %.chk
$(LATEX2HTML) $<
rm -f ${TEX_DEST_DIR}/index.html ${TEX_DEST_DIR}/labels.pl ${TEX_DEST_DIR}/WARNINGS
@printf "\n\n"
${TEX_DEST_DIR}/%.txt : ${TEX_DEST_DIR}/%.html
@echo $(HTML2TEXT) $<
@cd ${TEX_DEST_DIR}; \
$(HTML2TEXT) $< | perl \
-pn000e 's{\n\s*\n\s*\n-}{\n-}g; s/\n/\r\n/g; s/\xa0//g; exit if /^About this document \./' > $@
# sed "s/$$/`printf '\r'`/" > $@
%.rtf : %.tex %.chk
$(LATEX2RTF) $<
@[ $${TEX_DEST_DIR:+T} ] && mv $@ ${TEX_DEST_DIR} || true
# .............................................................. &ss ...
# here are the targets
#
# default is to build dvi
# it will be recreated if any .tex in current dir changed
dvi : $(TEX_SOURCE_BASE).chk $(TEX_SOURCE_BASE).dvi
$(TEX_SOURCE_BASE).dvi: $(wildcard *.tex)
view: $(TEX_SOURCE_BASE).dvi
$(DVIVIEWER) ${TEX_SOURCE_BASE}.dvi &
# You can change the 'meaning' of 'all' the way you want
# by adding or deleting targets
all : dvi ps pdf txt # txt implies html
ps : $(TEX_SOURCE_BASE).ps
@printf " == The $@ version of the target generated\n\n\n"
pdf : $(TEX_SOURCE_BASE).pdf
@printf " == The $@ version of the target generated\n\n\n"
html : ${TEX_DEST_DIR}/$(TEX_SOURCE_BASE).html
@printf " == The $@ version of the target generated\n\n\n"
${TEX_DEST_DIR}/$(TEX_SOURCE_BASE).html: $(TEX_SOURCE_BASE).tex
txt : ${TEX_DEST_DIR}/$(TEX_SOURCE_BASE).txt
@printf " == The $@ version of the target generated\n\n\n"
rtf : $(TEX_SOURCE_BASE).rtf
@printf " == The $@ version of the target generated\n\n\n"
# .............................................................. &ss ...
# here is the source
#
#TEX_SOURCE_BASE is get from environment or command line
check:
# Make sure the TEX_SOURCE_BASE is set and help set it if not.
@if [ $${TEX_SOURCE_BASE:+T} ]; then \
printf "TEX_SOURCE_BASE=${TEX_SOURCE_BASE}\nTEX_DEST_DIR=${TEX_DEST_DIR}\n"; \
else { \
if [ `ls *.tex | wc -l` = "1" ]; then \
TEX_SOURCE_BASE=`basename \`ls *.tex\` .tex`; \
true; \
else \
TEX_SOURCE_BASE=`echo $$PWD|tr '/' '\n'|tail -1`; \
true; \
fi; \
printf "\nPlease set\n\n export TEX_SOURCE_BASE=$$TEX_SOURCE_BASE\nor,\n setenv TEX_SOURCE_BASE $$TEX_SOURCE_BASE\n"; \
}; fi
# .............................................................. &ss ...
PHONY : help usage check clean cleangen clean-bak clean-th
help:
@echo "To see the usage of this make file, type 'make usage'"
@echo " (need to set the environment var MAKEFILE if you "
@echo " have change the default name/location of this Makefile"
@echo " which requires the -f parameter for the make)"
usage:
@cat ${MAKEFILE} | sed -n '/ [Cc]ommentary/,/ [Cc]ommentary/ p' | cut -c3-
@echo
@echo To get the help from the tools used:
@echo type \'texi2pdf --help\'
# texi2pdf --help
clean:
rm -f ${TEX_SOURCE_BASE}.chk ${TEX_SOURCE_BASE}.dvi ${TEX_SOURCE_BASE}.log ${TEX_SOURCE_BASE}.aux ${TEX_SOURCE_BASE}.bbl ${TEX_SOURCE_BASE}.blg ${TEX_SOURCE_BASE}.ilg ${TEX_SOURCE_BASE}.toc ${TEX_SOURCE_BASE}.lof ${TEX_SOURCE_BASE}.lot ${TEX_SOURCE_BASE}.idx ${TEX_SOURCE_BASE}.ind ${TEX_SOURCE_BASE}.out
cleangen :
rm -f *.chk *.dvi *.log *.aux *.bbl *.blg *.ilg *.toc *.lof *.lot *.idx *.ind *.out *.ps *.pdf
clean-bak : clean
rm -f *~
clean-th : clean
rm -f *.txt *.html *.css
# .............................................................. &ss ...
# }}}
## end of Makefile