Skip to Content

LaTeX Makefile

Posted in

I have to write quite some stuff such as papers or letters. And because LaTeX produces far more fancy text than other wordprocessors do I usually do this with LaTeX. I do not use any WYSIWYG or other IDE but only rely on XEmacs and the shell. But I am far too lazy to remember and type all the common commands over and over again, so a wrote a generic LaTeX-Makefile that does all the work for me.

The following Makefile provides a make-based framework for compiling TeX/LaTex-documents

# ############################################################################
#     www.  //        //''                         //    '' //''//''
#    //''' //' //'// //' '''// ////   //''' //''' //'// // //' //' //'// //''
#   ///// //  ///// //  ///// // //  ///// //    // // // //  //  ///// //
#  ,,,// /// //,,, //  //,// // //, ,,,// //,,, // // // //  //  //,,, // .de
# ############################################################################
#
#            $Id: Makefile,v 1.1.1.1 2006/10/25 20:10:23 stf Exp $
#         author: Stefan Schiffer
#        license: this work can be redistributed under the terms of the GPLv2
#    description: Generic Makefile for LaTeX files
#
# ############################################################################

## MAIN ###################

PREFIX = filename
FOLDER = foldername

## FILES ##################

TEXFILE = $(PREFIX).tex
PSFILE  = $(PREFIX).ps
PDFFILE = $(PREFIX).pdf
DVIFILE = $(PREFIX).dvi
AUXFILE = $(PREFIX).aux
LOGFILE = $(PREFIX).log
BBLFILE = $(PREFIX).bbl
BLGFILE = $(PREFIX).blg
TARFILE = $(PREFIX).tgz
TILDEFILES = *~
RMFILES = *~ *.toc *.idx *.ilg *.ind *.bbl *.blg *.out *.aux \
          *.tmp *.log *.lot *.lof *.adx *.and *.abb *.ldx $(TARFILE)
VERSION = version.txt


########################################################################
## VARIABLE(S): ########################################################
SILENT = @
# commands ###############################
MAKE     = make -s
LATEX    = latex
BIBTEX   = bibtex
DVIPS    = dvips
DVIPSFLAGS = -Ppdf -G0
DVIPDF   = dvipdf
PS2PDF   = ps2pdf
PS2PDFFLAGS =  -sPAPERSIZE=a4 -dCompatibilityLevel=1.3 -dEmbedAllFonts=true
PSNUP    = psnup
PDFLATEX = pdflatex
MAKEIDX  = makeindex
GV       = gv
GV_OPT   = -geometry 676x920-0+0
XPDF     = xpdf
XPDF_OPT = -geometry 676x920-0+0
# tools ##################################
TAR      = tar -czvf
UNTAR    = tar -xzvf
RM       = rm -f
DBG      = echo
MSG      = echo

# COLORS #################################
RESET       = tput sgr0
#
BLACK       = tput setaf 0
BLACK_BG    = tput setab 0
DARKGREY    = tput setaf 0; tput bold
RED         = tput setaf 1
RED_BG      = tput setab 1
LIGHTRED    = tput setaf 1; tput bold
GREEN       = tput setaf 2
GREEN_BG    = tput setab 2
LIME        = tput setaf 2; tput bold
BROWN       = tput setaf 3
BROWN_BG    = tput setab 3
YELLOW      = tput setaf 3; tput bold
BLUE        = tput setaf 4
BLUE_BG     = tput setab 4
BRIGHTBLUE  = tput setaf 4; tput bold
PURPLE      = tput setaf 5
PURPLE_BG   = tput setab 5
PINK        = tput setaf 5; tput bold
CYAN        = tput setaf 6
CYAN_BG     = tput setab 6
BRIGHTCYAN  = tput setaf 6; tput bold
LIGHTGREY   = tput setaf 7
LIGHTGREYBG = tput setab 7
WHITE       = tput setaf 7; tput bold
# AND NOW FOR NAMED-HELPER:
MENU  = $(CYAN)
ITEM  = $(BRIGHTCYAN)
DONE  = $(CYAN)
CHECK = $(GREEN)
ERROR = $(RED)

## #######################################
##  RULES

all:    dolatex dolatex dobibtex dolatex dodvips dopdf wall

tar:
        $(SILENT) $(MENU); $(MSG) " -------------------------------------------------------------
----------"
; $(RESET)
        $(SILENT) $(ITEM); $(MSG) "  -- Creating zipped tarball '$(TARFILE)'"; $(RESET)
        $(SILENT) $(TAR) $(TARFILE) -C.. $(DIR_NAME)
        $(SILENT) $(DONE); $(MSG) " -------------------------------------------------------------
 done. ---"
; $(RESET)

untar:
        $(SILENT) $(MENU); $(MSG) " -------------------------------------------------------------
----------"
; $(RESET)
        $(SILENT) $(ITEM); $(MSG) "  -- Deflating zipped tarball '$(TARFILE)'"; $(RESET)
        $(SILENT) $(UNTAR) $(TARFILE) -C..
        $(SILENT) $(DONE); $(MSG) " -------------------------------------------------------------
 done. ---"
; $(RESET)

dopdf:
        $(SILENT) $(MENU); $(MSG) " -------------------------------------------------------------
----------"
; $(RESET)
        $(SILENT) $(ITEM); $(MSG) "  -- Running ps2pdf on '$(PSFILE)'"; $(RESET)
        $(SILENT) $(PS2PDF) $(PS2PDFFLAGS) $(PSFILE)
        $(SILENT) $(DONE); $(MSG) " -------------------------------------------------------------
 done. ---"
; $(RESET)

dolatex:
        $(SILENT) $(MENU); $(MSG) " -------------------------------------------------------------
----------"
; $(RESET)
        $(SILENT) $(ITEM); $(MSG) "  -- Running latex on '$(TEXFILE)'"; $(RESET)
        $(SILENT) $(LATEX) $(TEXFILE)
        $(SILENT) $(DONE); $(MSG) " -------------------------------------------------------------
 done. ---"
; $(RESET)

dobibtex:
        $(SILENT) $(MENU); $(MSG) " -------------------------------------------------------------
----------"
; $(RESET)
        $(SILENT) $(ITEM); $(MSG) "  -- Running 1st latex for bibtex on '$(TEXFILE)'"; $(RESET)
        $(SILENT) $(MSG) "  -- "
        $(SILENT) $(LATEX) $(TEXFILE)
        $(SILENT) $(ITEM); $(MSG) "  -- Running 2nd latex for bibtex on '$(TEXFILE)'"; $(RESET)
        $(SILENT) $(MSG) "  -- "
        $(SILENT) $(LATEX) $(TEXFILE)
        $(SILENT) $(ITEM); $(MSG) "  -- Running bibtex on '$(PREFIX)'"; $(RESET)
        $(SILENT) $(MSG) "  -- "
        $(SILENT) $(BIBTEX) $(PREFIX)
        $(SILENT) $(ITEM); $(MSG) "  -- Running 3rdlatex for bibtex on '$(TEXFILE)'"; $(RESET)
        $(SILENT) $(MSG) "  -- "
        $(SILENT) $(LATEX) $(TEXFILE)
        $(SILENT) $(DONE); $(MSG) " -------------------------------------------------------------
 done. ---"
; $(RESET)

dodvips:
        $(SILENT) $(MENU); $(MSG) " -------------------------------------------------------------
----------"
; $(RESET)
        $(SILENT) $(ITEM); $(MSG) "  -- Running dvips on '$(PREFIX)'"; $(RESET)
        $(SILENT) $(DVIPS) $(DVIPSFLAGS) $(PREFIX) -o$(PSFILE)
        $(SILENT) $(DONE); $(MSG) " -------------------------------------------------------------
 done. ---"
; $(RESET)

do2up:
        $(SILENT) $(MENU); $(MSG) " -------------------------------------------------------------
----------"
; $(RESET)
        $(SILENT) $(ITEM); $(MSG) "  -- Creating 2up version of '$(PSFILE)'"; $(RESET)
        $(SILENT) $(PSNUP) -2 $(PSFILE) $(PREFIX).2.ps
        $(SILENT) $(DONE); $(MSG) " -------------------------------------------------------------
 done. ---"
; $(RESET)

viewps:
        $(SILENT) $(MENU); $(MSG) " -----------------------------------------------------------------------"; $(RESET)
        $(SILENT) $(ITEM); $(MSG) "  -- View $(PSFILE) with $(GV)"; $(RESET)
        $(SILENT) $(GV) $(GV_OPT) $(PSFILE) &
        $(SILENT) $(DONE); $(MSG) " ------------------------------------------------------------- done. ---"; $(RESET)

doshort: dolatex dodvips dopdf

 

try latexmk

http://www.phys.psu.edu/~collins/software/latexmk-jcc/