BeMyLifeEasy

Recent site activity

Makefile para LaTeX

#  File: Makefile
#  Author: J. F. Mitre <http://jfmitre.com>
#  Created: Sex 29 Mai 2009 10:14:33 BRT
#  Last Update: Qui 04 Jun 2009 21:30:21 BRT
#  Notes: Arquivo Makefile para compilar códigos em LaTeX
#         Execute "make help" para ajuda
###############################################################################

# Programas Selecionados {{{
########################## PROGRAMAS SELECIONADOS #############################

# Comando que gera compila o código LaTeX. Escolha entre: latex ou pdflatex
TEX = latex
# Comando que visualiza o arquivo .dvi
DVIVIEW = kdvi
# Comando que visualiza o arquivo .pdf
PDFVIEW = evince
# Comando que converte o arquivo .dvi em .ps
DVIPS = dvips

# }}}

# Opções dos comandos {{{
############################ OPÇÕES DOS COMANDOS ##############################

# Opções do comando TEX especificado acima
OPTDVI =  -halt-on-error
# Opções do comando dvips, que converte o arquivo .dvi para o .ps
OPTPS = -Z
# Opções do comando comando "pdflatex"
OPTPDF =
# Formato de conversão utilizado pelo ps2pdf (necessário especificar)
FORMATO = a4
# Estilos dos glossários, nomenclaturas, etc.
STYLENLS = nomencl.ist
STYLEGLS = nomencl.ist
# Opções do comando make
OPTMAKE = -s

# }}}

# Outros programas {{{
############################# OUTROS PROGRAMAS ################################

# Comando que gera o índice, a nomenclatura, etc. Não existe outro atualmente
MAKEINDEX = makeindex
# Comando que gera a bibliografia, não existe outro atualmente
BIB = bibtex
# Conversão entre arquivo .ps e arquivo .pdf, existem outros, mas esse é o
# melhor para o GNU/Linux.
PSPDF = ps2pdf
# Eliminar arquivo. Não é razoável fazer de outra forma.
RM = rm -fv
# Comando make (até existem outros, mas não para esse Makefile).
MAKE = make

# }}}

# Execução dos comandos {{{
################################ EXECUÇÃO #####################################

# Indentificação do nome do arquivo
DOC   := $(shell egrep -l '^[^%]*\\begin\{document\}' *.tex |rev|cut -b5- |rev)
# Verificando se existe bibliografia
BIBFILE := $(shell egrep -l '^[^%]*\\bibliography\{' $(DOC).tex)

# Verifica se é uma apresentação do prosper
PROSPER   := $(shell egrep -l '^[^%]*\\documentclass\[.*\]\{prosper\}' *.tex)

# Gerando o "arquivo" DVI ...
$(DOC).dvi:
# mas ele é esperto o bastando para saber que não gera-se DVI com o pdflatex.
# E também gerará o PDF caso seja o proper seja utilizado.
   @if [ ! -z $(PROSPER) ]; then \
    $(MAKE) dvi; \
    $(DVIPS) $(OPTPS) $(DOC).dvi; \
    $(PSPDF) -sPAPERSIZE=$(FORMATO) $(DOC).ps $(DOC).pdf; \
   elif [ $(TEX) == latex ]; then \
    $(MAKE) dvi; \
   elif [ $(TEX) == pdflatex ]; then \
    $(MAKE) $(DOC).pdf; \
   fi

# Gera o arquivo PDF...
$(DOC).pdf:
# de um arquivo DVI, convertendo-o para PS e em seguida para PDF caso
# o comando padrão seja o latex ou diretamente, caso o comando padrão seja
# o pdflatex.
# Também diminuimos o esforço caso o prosper esteja sendo usado.
   @if [ ! -z $(PROSPER) ]; then \
    $(MAKE) $(DOC).dvi; \
   elif [ $(TEX) = latex ]; then \
    $(MAKE) $(DOC).dvi; \
    $(DVIPS) $(OPTPS) $(DOC).dvi; \
    $(PSPDF) -sPAPERSIZE=$(FORMATO) $(DOC).ps $(DOC).pdf; \
   elif [ $(TEX) = pdflatex ]; then \
    $(MAKE) pdflatex; \
   fi

# Gerando o arquivo DVI com o latex
dvi:
# Compliação inicial do arquivo tex
   $(TEX) $(OPTDVI) $(DOC).tex
# Se existe bibliografia ...
   @if [ ! -z $(BIBFILE) ]; then\
    $(BIB) $(DOC).aux; \
    $(TEX) $(OPTDVI) $(DOC).tex; \
    $(BIB) $(DOC).aux; \
    $(TEX) $(OPTDVI) $(DOC).tex; \
   fi
# Se existe glossário, nomenclatura ou indice...
   @if [ -f "$(DOC).nlo" ]; then \
    $(MAKEINDEX) $(DOC).nlo $(STYLENLS) -o $(DOC).nls; \
    $(TEX) $(OPTDVI) $(DOC).tex; \
   fi
   @if [ -f "$(DOC).glo" ]; then \
    $(MAKEINDEX) $(DOC).glo -s $(STYLEGLS) -o $(DOC).gls; \
    $(TEX) $(OPTDVI) $(DOC).tex; \
   fi
   @if [ -f "$(DOC).nlo" ]; then \
    $(MAKEINDEX) $(DOC).nlo $(STYLENLS) -o $(DOC).nls; \
    $(TEX) $(OPTDVI) $(DOC).tex; \
   fi
   @if [ -f "$(DOC).glo" ]; then \
    $(MAKEINDEX) $(DOC).glo -s $(STYLEGLS) -o $(DOC).gls; \
    $(TEX) $(OPTDVI) $(DOC).tex; \
   fi
   @if [ -f "$(DOC).idx" ]; then \
    $(MAKEINDEX) $(DOC).idx; \
    $(TEX) $(OPTDVI) $(DOC).tex; \
    $(MAKEINDEX) $(DOC).idx; \
    $(TEX) $(OPTDVI) $(DOC).tex; \
   fi
# Uma última vez apenas para confirmar que tudo está ok...
   $(TEX) $(OPTDVI) $(DOC).tex

# Gerando o arquivo PDF, com o pdflatex.
pdflatex:
# Compliação inicial do arquivo tex
   $(TEX) $(OPTPDF) $(DOC).tex
# Se existe bibliografia ...
   @if [ ! -z $(BIBFILE) ]; then\
    $(BIB) $(DOC).aux; \
    $(TEX) $(OPTPDF) $(DOC).tex; \
    $(BIB) $(DOC).aux; \
    $(TEX) $(OPTPDF) $(DOC).tex; \
   fi
# Se existe glossário, nomenclatura ou indice...
   @if [ -f $*.nls ]; then \
    $(MAKEINDEX) $(DOC).nlo $(STYLENLS) -o $(DOC).nls; \
    $(TEX) $(OPTPDF) $(DOC).tex; \
   fi
   @if [ -f $*.gls ]; then \
    $(MAKEINDEX) $(DOC).glo -s $(STYLEGLS) -o $(DOC).gls; \
    $(TEX) $(OPTPDF) $(DOC).tex; \
   fi
   @if [ -f $*.nls ]; then \
    $(MAKEINDEX) $(DOC).nlo $(STYLENLS) -o $(DOC).nls; \
    $(TEX) $(OPTPDF) $(DOC).tex; \
   fi
   @if [ -f $*.gls ]; then \
    $(MAKEINDEX) $(DOC).glo -s $(STYLEGLS) -o $(DOC).gls; \
    $(TEX) $(OPTPDF) $(DOC).tex; \
   fi
   @if [ -f $*.idx ]; then \
    $(MAKEINDEX) $(DOC).idx; \
    $(TEX) $(OPTPDF) $(DOC).tex; \
    $(MAKEINDEX) $(DOC).idx; \
    $(TEX) $(OPTPDF) $(DOC).tex; \
   fi
# Uma última vez apenas para confirmar que tudo está ok...
   $(TEX) $(OPTPDF) $(DOC).tex

# Limpando o básico dos arquivos gerados pelo compilador
clean:
   @$(RM) *.aux *.log
   @$(RM) *.toc *.lot *.lof
   @$(RM) *.ttt *.fff *.blg *.out
   @$(RM) *.ind *.ilg *.idx *.aux *.glo
   @$(RM) *.gls *.abx *.nlo *.syx *.nls
   @$(RM) *.ps
   @$(RM) *.tex.backup
   @$(RM) *.bib.backup *.bib.bak
   @$(RM) *.tex.bak
   @$(RM) *.bbl
   @$(RM) *.*~
   @$(RM) Makefile~

# Limpando tudo, inclusive os arquivos finais.
cleanall:
   $(MAKE) clean
   @$(RM) *.dvi *.pdf

# Mostra o resultado, compila se necessário.
# Esperto para saber se é um DVI ou um PDF
# de acordo com o comando padrão
show:
   @if [ ! -z $(PROSPER) ]; then \
    $(MAKE) $(DOC).dvi; \
    $(PDFVIEW) $(DOC).pdf; \
   elif [ $(TEX) == latex ]; then \
    $(MAKE) $(DOC).dvi; \
    $(DVIVIEW) $(DOC).dvi; \
   elif [ $(TEX) == pdflatex ]; then \
    $(MAKE) $(DOC).pdf; \
    $(PDFVIEW) $(DOC).pdf; \
   fi

# Idem ao "show", a diferença é que aqui
# é feito uma nova compilação, de um jeito ou de outro
shownew:
   $(MAKE) cleanall
   @if [ ! -z $(PROSPER) ]; then \
    $(MAKE) $(DOC).dvi; \
    $(PDFVIEW) $(DOC).pdf; \
   elif [ $(TEX) == latex ]; then \
    $(MAKE) $(DOC).dvi; \
    $(DVIVIEW) $(DOC).dvi; \
   elif [ $(TEX) == pdflatex ]; then \
    $(MAKE) $(DOC).pdf; \
    $(PDFVIEW) $(DOC).pdf; \
   fi

# Idem ao "show", mas para arquivos PDF apenas
showpdf:
   $(MAKE) $(DOC).pdf
   $(PDFVIEW) $(DOC).pdf

# Idem ao "shownew", mas para arquivos PDF apenas
shownewpdf:
   $(MAKE) cleanall    
   $(MAKE) $(DOC).pdf
   $(PDFVIEW) $(DOC).pdf

# }}}

# Ajuda {{{
################################### AJUDA #####################################
help:
   @echo "# "
   @echo "# AJUDA COM O COMANDO MAKE"
   @echo "# "
   @echo "#    make             : comando padrão. Cria um arquivo .dvi, se utilizar o "
   @echo "#                       comando latex ou .pdf se uzar o pdflatex "
   @echo "#    make $(DOC).dvi : é o mesmo que make sem argumentos."
   @echo "#    make $(DOC).pdf : cria um arquivo .pdf. Convertendo o .dvi para um .ps e"
   @echo "#                       em seguida convertendo o .ps para .pdf ou cria um .pdf "
   @echo "#                       diretamente com o pdflatex"
   @echo "#    make show        : mostra o arquivo gerado pelo comando \"make $(DOC).dvi\""
   @echo "#    make shownew     : mostra o arquivo gerado pelo comando \"make $(DOC).dvi\","
   @echo "#                       após criar uma nova cópia do documento."
   @echo "#    make showpdf     : mostra o arquivo gerado pelo comando \"make $(DOC).pdf\""
   @echo "#    make shownew     : mostra o arquivo gerado pelo comando \"make $(DOC).pdf\","
   @echo "#                       após criar uma nova cópia do documento."
   @echo "#    make clean       : elimina os arquivos criados no processo de geração do"
   @echo "#                       documento, mas mantém o(s) arquivo(s) de resultado, seja"
   @echo "#                       .dvi ou .pdf."
   @echo "#    make cleanall    : elimina todos os arquivos criados pelo processo de geração"
   @echo "#                       do documento, incluindo os arquivos de resultado."
   @echo "#    make help        : mostra a ajuda"
   @echo "# "
   @echo "# CONFIGURAÇÕES DO ARQUIVO Makefile"
   @echo "# "
   @echo "#      Toda a configuração resume-se em escolher os programas e as opções "
   @echo "#      associadas a esses programas no cabeçalho do arquivo Makefile, que "
   @echo "#      está devidamente comentado."
   @echo "# "
   @echo "# OUTRAS INFORMAÇÕES"
   @echo "# "
   @echo "# http://jfmitre.com/2009/05/makefile-para-latex.html"      
   @echo "# "

# }}}

# Referências {{{
############################## REFEREÊNCIAS ###################################
#
# How to write documents in LaTeX
# http://www.cs.berkeley.edu/~jaein/notes/latexhowto.html
#
# GNU Make Manual
# http://www.gnu.org/software/make/manual/
#
#}}}

Attachments (1)

  • Makefile - on Jun 4, 2009 5:34 PM by J. F. Mitre (version 1)
    9k Download