• qjkxbmwvz@startrek.website
      ·
      6 months 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@startrek.website
        ·
        6 months 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@startrek.website
      ·
      6 months 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}}