# 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/ # #}}} |