• qjkxbmwvz@startrek.website
    ·
    6 months ago

    I also added a Makefile for mine (LaTeX), and it would add the commit hash to the front page (with an asterisk if the repository had uncommitted changes).

    So, if I gave a draft to someone and got feedback, I'd know exactly which revision it was.

      • 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}}