-
-
Save famuvie/dc6ff6c0a0155e0e2d7f281f1a6d4d69 to your computer and use it in GitHub Desktop.
generic Makefile using latexmk and/or pandoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# (c) 2018 Facundo Muñoz | |
# Latex Makefile using latexmk | |
# Modified by Dogukan Cagatay <dcagatay@gmail.com> | |
# Originally from : http://tex.stackexchange.com/a/40759 | |
# Modified for compilation of Markdown files with ideas from | |
# http://plain-text.co/pull-it-together.html | |
## What extension (e.g. md, markdown, mdown) is being used | |
## for markdown files MEXT = md | |
MEXT = md | |
## Expands to a list of all markdown files in the working directory | |
SRC = $(wildcard *.$(MEXT)) | |
## working bibliography file (make sure there is only one) | |
BIB = $(wildcard *.bib) | |
## Target file names with extensions (use substitution references) | |
## x.pdf depends on x.md, x.html depends on x.md, etc | |
## https://www.gnu.org/software/make/manual/make.html#Substitution-Refs | |
## pdfs can be built from all md and tex files | |
## the sort function removes duplicates | |
PDF_TEX = $(SRC:.tex=.pdf) | |
PDF_MD = $(SRC:.md=.pdf) | |
PDFS = $(sort $(PDF_MD) $(PDF_TEX)) | |
HTML = $(SRC:.md=.html) | |
TEX = $(SRC:.md=.tex) | |
DOCX = $(SRC:.md=.docx) | |
## Compile commands | |
# MAIN LATEXMK RULE | |
# -pdf tells latexmk to generate PDF directly (instead of DVI). | |
# -pdflatex="" tells latexmk to call a specific backend with specific options. | |
# -use-make tells latexmk to call make for generating missing files. | |
# -interactive=nonstopmode keeps the pdflatex backend from stopping at a | |
# missing file reference and interactively asking you for an alternative. | |
LATEXMK = latexmk -use-make -pdf -pdflatex="pdflatex -interactive=nonstopmode" | |
PANDOC = pandoc -V papersize:a4 -V urlcolor:blue \ | |
--from markdown+autolink_bare_uris+simple_tables+table_captions+yaml_metadata_block | |
ifeq ($(strip $(BIB)),) | |
else | |
PANDOC += --filter pandoc-citeproc --bibliography=$(BIB) | |
endif | |
# You want latexmk to *always* run, because make does not have all the info. | |
# Also, include non-file targets in .PHONY so they are run regardless of any | |
# file of the given name existing. | |
.PHONY: $(PDF_TEX) all clean bib | |
## Rules -- make all, make pdf, make html. The `clean` rule is below. | |
# The first rule in a Makefile is the one executed by default ("make"). It | |
# should always be the "all" rule, so that "make" and "make all" are identical. | |
## all: $(PDFS) $(HTML) $(TEX) $(DOCX) | |
all: clean bib $(PDFS) | |
pdf: clean bib $(PDFS) | |
html: $(HTML) | |
tex: $(TEX) | |
docx: $(DOCX) | |
## Implicit rules | |
## https://www.gnu.org/software/make/manual/html_node/Using-Implicit.html#Using-Implicit | |
## Each implicit rule has a target pattern and prerequisite patterns. | |
## There may be many implicit rules with the same target pattern | |
## The rule that actually applies is the one whose prerequisites exist or can be made | |
## '$@' is a variable holding the name of the target, | |
## and '$<' is a variable holding the (first) dependency of a rule. | |
%.pdf: %.md | |
$(PANDOC) -o $@ $< | |
%.pdf: %.tex | |
$(LATEXMK) $< | |
cleanall: | |
latexmk -C | |
clean: | |
-latexmk -c | |
# download publications with bib tag from CiteULike | |
# the first download must be manual so that the bib file exists a priori | |
# from whose name the tag is taken | |
bib: | |
ifeq ($(strip $(BIB)),) | |
else | |
wget http://www.citeulike.org/bibtex/user/famuvie/tag/$(basename $(BIB)) -O $(BIB) | |
# use UTF8 accented letters which renders better | |
sed -i 's/\\'\''{\\i}/í/g' $(BIB) | |
# remove URLs containing amazon or worldcat | |
sed -i '/amazon\|worldcat/d' $(BIB) | |
endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment