Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

Make/Examples

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

LaTeX Makefile This makefile seems to work well in CentOS. ################################################# # Makefile for LaTeX/Linux # # Author: Petter Kallstrom (petterk es.isy.liu.se) # # Handles SVG, EPS and PDF image formats for compilation into PDFs or DVIs # Handles one bibliography file # # Tested with CentOS, GNU Make 3.81, /bin/sh 3.2.25, /usr/bin/[ 5.97, (pdf)latex 3.1415926-1.40.10-2.2, inkscape 0.47 r22583. #++++++++++++++++++++++++++++++++++++++++++++++++ # # Set up this Makefile: # Place all image files in a subdirectory. # Update all variables in the first section below. # # Use this Makefile: # Run "make help", or see end of file. # # Description of file: # Keep the images in lists, one list per format. # When compiling into for instance a .dvi file, the target.dvi rule is used. # Bibtex and convertion between .eps and .pdf images are handled within this rule. # (I found no way to generate multiple rules from a list) # Converting from .svg files into .eps or .pdf files are done in their own rules. # Some make/shell help is written in the end of this file. # ################################################# # Image sources: Only include the original files (not files created by this script). SVGs=drawing1 drawing2 # excluding .svg EPSs=graph1 graph2 # excluding .eps PDFs=logo # excluding .pdf OTHERS=img1.png img1.eps # files without conversion support from this script. Include file extension. IMG=img # path to images, excluding trailing "/" # Latex top file (excl .tex): NAME=main # excl .tex # When to run bibtex. 0=never, 1=if .bib was changed, 2=always. see help RUNBIB=1 # Bibliography file name, used only for dependencis: BNAME=bibliography.bib # including .bib # Spam filter for latex outputs FilterLatex=egrep -v "/sw/|Babel|german|bulgarian|estonia|hungarian|latvia|romanian|swedish|entering|LaTeX2e|Transcript|Document Class|For additional" # ===== Fix leading and trailing spaces from critical variables (do not change this). ===== IMG:=$(strip $(IMG)) NAME:=$(strip $(NAME)) #============== PHONY COMMANDS (except help) ================ .PHONY : dvi dvipdf kdvi dviacro pdf acro bib clean help default : help dvi : $(NAME).dvi dvipdf : $(NAME).dvi.pdf kdvi : $(NAME).dvi; /bin/tcsh -c 'kdvi $(NAME).dvi' & #by doing like this, KDVI will auto reload when DVI was changed dviacro : $(NAME).dvi.pdf; acroread $(NAME).dvi.pdf & pdf : $(NAME).pdf acro : $(NAME).pdf; acroread $(NAME).pdf & bib : $(NAME).bbl clean : ; rm -f *~ *aux *backup *log *toc *bbl *blg *lot *lof superclean : clean rm -f $(NAME).pdf $(NAME).dvi $(NAME).dvi.pdf rm -f $(SVG2PDF) $(foreach x,$(EPSs),$(IMG)/$(x).pdf) # remove generated pdf images rm -f $(SVG2EPS) $(foreach x,$(PDFs),$(IMG)/$(x).eps) # remove generated eps files #============== STRING MANIPULATIONS ================ SVG2PDF=$(foreach x,$(SVGs),$(IMG)/$(x).pdf) # "img/svg1.pdf img/svg2.pdf ", if SVGs="svg1 svg2" SVG2EPS=$(foreach x,$(SVGs),$(IMG)/$(x).eps) # "img/svg1.eps img/svg2.eps ", if SVGs="svg1 svg2" PDF2=$(foreach x,$(PDFs),$(IMG)/$(x).pdf) # "img/pdf1.pdf img/pdf2.pdf ", if PDFs="pdf1 pdf2" EPS2=$(foreach x,$(EPSs),$(IMG)/$(x).eps) # "img/eps1.pdf img/eps2.pdf ", if EPSs="eps1 eps2" #============== COMPILATIONS / CONVERSIONS ================ # ===== SVG Images ===== %.eps : %.svg @echo "======= Converting SVG to EPS: $< =======" @inkscape --without-gui --file=$< --export-eps=$@ #--export-text-to-path %.pdf : %.svg @echo "======= Converting SVG to PDF: $< =======" @inkscape --without-gui --file=$< --export-pdf=$@ #--export-text-to-path # ===== .tex -> .dvi ===== $(NAME).dvi : $(NAME).tex $(BNAME) $(EPS2) $(PDF2) $(SVG2EPS) $(OTHERS) ifneq ($(strip $(PDFs)),) # convert pdf->eps. # Generate own "rules" for eps dependencies of the pdf files in list PDFs @for x in $(PDFs) ; do \ if [ $(IMG)/$${x}.pdf -nt $(IMG)/$${x}.eps ] ; then \ echo "======= Converting PDF to EPS: $(strip $(IMG))/$${x}.pdf ======="; \ pdf2ps $(IMG)/$${x}.pdf /dev/stdout | ps2eps > $(IMG)/$${x}.eps; \ fi; \ done endif ifneq ($(RUNBIB), 0) @if [ $(RUNBIB) -eq 2 -o $(BNAME) -nt $(NAME).bbl ] ; then \ @if [ $(NAME).tex -nt $(NAME).log ] ; then \ echo "======= Running LaTeX (for bibtex purpose) =======" ;\ latex $(NAME).tex | $(FilterLatex) ;\ fi; \ echo "======= Running BibTeX =======" ;\ bibtex $(NAME) ; \ fi endif @echo "======= Running LaTeX =======" @while (latex $(NAME).tex | $(FilterLatex) ; grep -q "Rerun to get" $(NAME).log ) do echo "======= Rerunning LaTeX =======" ; done # ===== .dvi -> .pdf ===== $(NAME).dvi.pdf : $(NAME).dvi @echo "======= Converting DVI to PDF =======" @dvipdf $(NAME).dvi $(NAME).dvi.pdf # ===== .tex -> .pdf ===== $(NAME).pdf : $(NAME).tex $(BNAME) $(EPS2) $(PDF2) $(SVG2PDF) $(OTHERS) ifneq ($(strip $(EPSs)),) # convert eps->pdf # Generate own "rules" for pdf dependencies of the eps files in list EPSs @for x in $(EPSs) ; do \ if [ $(IMG)/$${x}.eps -nt $(IMG)/$${x}.pdf ] ; then \ echo "======= Converting EPS to PDF: $(strip $(IMG))/$${x}.eps ======="; \ epstopdf $(IMG)/$${x}.eps ;\ fi; \ done endif ifneq ($(RUNBIB), 0) @if [ $(RUNBIB) -eq 2 -o $(BNAME) -nt $(NAME).bbl ] ; then \ @if [ $(NAME).tex -nt $(NAME).log ] ; then \ echo "======= Running pdfLaTeX (for bibtex purpose) =======" ;\ pdflatex $(NAME).tex | $(FilterLatex) ;\ fi; \ echo "======= Running BibTeX =======" ;\ bibtex $(NAME) ; \ fi endif @echo "======= Running PDFLaTeX =======" @while (pdflatex $(NAME).tex | $(FilterLatex) ; grep -q "Rerun to get" $(NAME).log ) do echo "======= Rerunning PDFLaTeX =======" ; done # ===== The bibliography, as a stand-alone command (this is not called normally) ===== $(NAME).bbl : $(NAME).tex $(BNAME) @echo "======= Runnin BibTeX =======" @bibtex $(NAME) #============== PHONY HELP ================ help: @echo "" @echo "make <cmd> [NAME=<main name>] [RUNBIB=0/1/2]" @echo "" @echo " <cmd>:" @echo " dvi - latex: .tex -> .dvi." @echo " dvipdf - latex + dvipdf: .tex -> .dvi -> .dvi.pdf." @echo " kdvi - latex + kdvi: .tex -> .dvi, view in KDVI." @echo " dviacro - latex + dvipdf + acroread: .tex -> .dvi -> .dvi.pdf, view in acroread." @echo " pdf - pdflatex: .tex -> pdf." @echo " acro - pdflatex + acroread: .tex -> .pdf, view in acroread." @echo " bib - bibtex: .aux,.bib -> .bbl (independent of RUNBIB)." @echo " clean - rm *~ *aux *backup *log *toc *bbl *blg *lot *lof." @echo " superclean - clean + rm generated images and dvi/pdf files" @echo " help - show this message. This is default, if no <cmd> are given." @echo "" @echo " NAME: optional name of main latex file (excl. \".tex\"). Actual=$(NAME)." @echo "" @echo " RUNBIB: Decide whether to update the bibliography file or not. Actual=$(RUNBIB)." @echo " =0: Never run bibtex (more then by the bib command)." @echo " =1: Run bibtex if .bib was changed, or .bbl is missing." @echo " =2: Run bibtex every time." @echo "" @echo " Example (without bibtex): make dviacro NAME=report" @echo " -> latex report.tex; dvipdf report.dvi report.dvi.pdf; acroread report.dvi.pdf" @echo " Example (with bibtex): make dviacro NAME=report" @echo " -> latex report.tex; bibtex report; latex report.tex; latex report.tex; dvipdf report.dvi report.dvi.pdf; acroread report.dvi.pdf" @echo "" @echo " PS. .tex->.dvi can only handle .eps files." @echo " .tex->.pdf can NOT handle .eps files, but e.g. PDF/PNG files." @echo " This makefile will automatically convert from svg images to eps or pdf formats." @echo " This makefile will automatically convert from pdf images to eps formats." @echo " This makefile will automatically convert from eps images to pdf formats." @echo " This makefile has no support for other image formats (which does not mean they cannot be used)." @echo "" # Some shell command syntax (see "man sh", "man test"): # > for VAR in LIST ; do COMMANDS; done # > if [ ... ]; then COMMANDS; fi # > ...: -o = logical OR, -eq = numerical equal, -e = exist, ! = not, -nt = newer than. # "A -nt B" = true if file A is newer than file B, or if (only) file B is missing. # "A -nt B" = false if file B is not older than file A, or if file A is missing. # # The complete make manual: http://www.gnu.org/software/make/manual/