• @qjkxbmwvz
      link
      English
      51 month ago

      Sure thing. This also includes the beamer bit which I used for my defense. It’s all pretty hacky but hope it’s useful!

      #
      # Errors aren't handled gracefully (tex doesn't write to stderr, it seems)
      # If you encounter errors, use "make verbose"
      #
      # For small changes (probably those without references), use "make quick"
      #
      # Thanks to https://gist.github.com/Miliox/4035649 for dependency outline
      
      TEX = pdflatex
      BTEX = biber
      MAKE = make -s
      TEXFLAGS = -halt-on-error
      # $(MAIN).log is dumb if we have multiple targets!
      SILENT = > /dev/null || cat $(MAIN).log
      SILENT_NOER = 2>/dev/null 1>/dev/null
      EDITOR = vim -p
      PDFVIEW = evince
      MAIN = main
      PRES = presentation
      ALL = $(MAIN).pdf
      RECURS = media/ manuscripts/
      VERSION := $(shell git rev-parse --short HEAD | cut -c 1-4)$(shell git diff-index --quiet HEAD && (echo -n ' ';git log -1 --format=[%cd]) || (echo -n '* '; date -u '+[%c]'))
      
      all: recurs $(ALL)
      pres: $(PRES).pdf
      scratch: scratch.pdf
      
      scratch.pdf: scratch.tex
      	@echo "TEX	(final)	$<"
      	@$(TEX) $(TEXFLAGS) $< $(SILENT)
      
      verbose: SILENT = ''
      verbose: $(ALL)
      
      recurs: $(RECURS)
      	@$(foreach DIR, $(RECURS), \
      		echo "MAKE	(CD)	$(CURDIR)/$(DIR)"; \
      		$(MAKE) -C $(DIR) $(MAKECMDGOALS);)
      	@echo "MAKE	(CD)	./"
      
      clean:
      	@echo "SH	(RM)	Not recursing; 'make allclean' to clear generated files."
      	@rm -f *.aux *.log *.out *.pdf *.bbl *.blg *.toc *.lof *.lot *.bcf *.run.xml
      
      allclean: recurs
      	@echo "SH	(RM)	A clean directory is a happy directory"
      	@rm -f *.aux *.log *.out *.pdf *.bbl *.blg *.toc *.lof *.lot *.bcf *.run.xml
      version:
      	@echo "SH      (ver) $(VERSION)"
      	@echo $(VERSION) > VERSION.tex
      
      nixpages: main.pdf
      	@echo "PDF     (pdftk)"
      	@pdftk main.pdf cat 1 4-end output final.pdf
      
      quick: $(MAIN).tex version
      	@echo "TEX	(final)	$<"
      	@$(TEX) $(TEXFLAGS) $< $(SILENT)
      
      $(MAIN).pdf: $(MAIN).tex $(MAIN).bbl all.tex tex/abstract.tex tex/intro.tex tex/appendix.tex tex/some_section.tex tex/some_other_section.tex
      	@echo "TEX	(draft)	$<"
      	@$(TEX) $(TEXFLAGS) --draftmode  $< $(SILENT)
      	@echo "TEX	(final)	$<"
      	@$(TEX) $(TEXFLAGS) $< $(SILENT)
      
      $(MAIN).bbl: $(MAIN).aux
      	@echo "BIB	(bib)	$(MAIN)"
      	@$(BTEX) $(MAIN) > /dev/null
      	
      $(MAIN).aux: $(MAIN).tex $(MAIN).bib version
      	@echo "TEX	(draft)	$<"
      	@$(TEX) $(TEXFLAGS) --draftmode  $< $(SILENT)
      
      $(PRES).pdf: $(PRES).tex $(PRES).bbl tex/beamer*.tex tex/slides/*.tex
      	@echo "TEX	(draft)	$<"
      	@$(TEX) $(TEXFLAGS) --draftmode  $< $(SILENT)
      	@echo "TEX	(final)	$<"
      	@$(TEX) $(TEXFLAGS) $< $(SILENT)
      $(PRES).bbl: $(PRES).aux
      	@echo "BIB	(bib)	$(PRES)"
      	@$(BTEX) $(PRES) > /dev/null
      $(PRES).aux: $(PRES).tex $(MAIN).bib
      	@echo "TEX	(draft)	$<"
      	@$(TEX) $(TEXFLAGS) --draftmode  $< $(SILENT)
      
      edit:
      	@echo "EDIT	(fork)	$(EDITOR)"
      	@$(EDITOR) ./tex/*.tex *.tex
      
      view:
      	@echo "VIEW	(fork)	$(PDFVIEW)"
      	@$(PDFVIEW) $(ALL) $(SILENT_NOER) &
      
      • @qjkxbmwvz
        link
        English
        31 month ago

        I also had some Makefiles in other directories, e.g., for my media/ I had:

        MAKE = make -s
        RECURS = svgs/
        
        recurs: $(RECURS)
                @$(foreach DIR, $(RECURS), \
                        echo "MAKE      (CD)    $(CURDIR)/$(DIR)"; \
                        $(MAKE) -C $(DIR) $(MAKECMDGOALS);)
                @echo "MAKE     (CD)    $(CURDIR)/"
        
        all: recurs
        
        clean:
        
        allclean: recurs clean
        

        and for media/svgs/:

        SVG_FILES := $(wildcard *.svg)
        PDFDIR := ./
        PDF_FILES := $(patsubst %.svg,$(PDFDIR)/%.pdf,$(SVG_FILES))
        
        all: $(PDF_FILES)
        
        clean:
                @rm -f $(PDF_FILES)
                @echo "SH       (RM)    Tidying up derived PDFs"
        
        allclean: clean
        
        $(PDFDIR)/%.pdf: %.svg
                @inkscape -T --export-pdf=$@ $<
                @echo "INK      (PDF)   $<"
        
        
    • @qjkxbmwvz
      link
      English
      51 month ago

      Makefile in other comments. You’ll need something like this on the title page (this assumes you use my Makefile which puts the version in VERSION.tex [that’s the literal name of the file, not a placeholder]):

      {\bf{\color{red}DOCUMENT REVISION:}} {\color{blue}\input{VERSION}}