From 3d526b6514f2be6237ba130a8ef5fd0e2b6d814e Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Sun, 28 Mar 2021 12:07:51 +0200 Subject: build sets again Sets are generated from all tex card files in the Makefile. Sets tex now uses \includestandalone instead of input. The Makefiles language support is simplified. It now has a default language variable which propagates to all other relevant variables so we have to only pass one make argument to change the build language. --- latex/Makefile | 79 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 59 insertions(+), 20 deletions(-) (limited to 'latex/Makefile') diff --git a/latex/Makefile b/latex/Makefile index cef69dcc..a3739ff3 100644 --- a/latex/Makefile +++ b/latex/Makefile @@ -19,67 +19,106 @@ GAME_ROOT := $(MAKEFILE_DIR)/../ DATA_ROOT := $(GAME_ROOT)/data CARDS_YML_DIR := $(DATA_ROOT)/cards -CARDS_TEX_DIR ?= $(LATEX_ROOT)/cards +# the default language +LANGUAGE ?= en -BUILDDIR ?= $(LATEX_ROOT)/build +CARDS_TEX_DIR := $(LATEX_ROOT)/cards/$(LANGUAGE) + +BUILDDIR := $(LATEX_ROOT)/build/$(LANGUAGE) ASSETS_PATH := $(GAME_ROOT)/assets PDFLATEX_ENV := TEXINPUTS=".:$(ASSETS_PATH):" GENERATE_CARD := $(GAME_ROOT)scripts/generate_card.py -GENERATE_CARD_FLAGS ?= +GENERATE_CARD_FLAGS := --language=$(LANGUAGE) SETS := $(shell find $(CARDS_YML_DIR) -mindepth 1 -type d -printf "%f\n") SETS_SOURCEDIRS := $(foreach set, $(SETS), $(addprefix $(CARDS_YML_DIR)/, $(set))) + SETS_TEXDIRS := $(foreach set, $(SETS), $(addprefix $(CARDS_TEX_DIR)/, $(set))) SETS_BUILDDIRS := $(foreach set, $(SETS), $(addprefix $(BUILDDIR)/, $(set))) +# tex directory for sets collection tex +SETS_TEX_DIR := $(LATEX_ROOT)/sets/$(LANGUAGE) +SETS_TEX := $(foreach set, $(SETS), $(addprefix $(SETS_TEX_DIR)/, $(set).tex)) +SETS_PDF_DIR := $(BUILDDIR) +SETS_PDF := $(foreach set, $(SETS), $(addprefix $(SETS_PDF_DIR)/, $(set).pdf)) + # Add yml dirs to VPATH, the place make will look for the source files -VPATH = $(SETS_SOURCEDIRS) $(SETS_TEXDIRS) +VPATH = $(SETS_SOURCEDIRS) $(SETS_TEXDIRS) $(SETS_TEX_DIR) # Create a list of yaml card definitions -CARDS_YAML := $(foreach dir,$(SETS_SOURCEDIRS),$(wildcard $(dir)/*.yml)) -CARDS_TEX := $(subst $(CARDS_YML_DIR),$(CARDS_TEX_DIR),$(CARDS_YAML:.yml=.tex)) -CARDS_PDF := $(subst $(CARDS_YML_DIR),$(BUILDDIR),$(CARDS_YAML:.yml=.pdf)) +CARDS_YML := $(foreach dir,$(SETS_SOURCEDIRS),$(wildcard $(dir)/*.yml)) +CARDS_TEX := $(subst $(CARDS_YML_DIR),$(CARDS_TEX_DIR),$(CARDS_YML:.yml=.tex)) +CARDS_PDF := $(subst $(CARDS_YML_DIR),$(BUILDDIR),$(CARDS_YML:.yml=.pdf)) CARDS_PNG = $(CARDS_PDF:.pdf=.png) VERBOSE ?= @ MAKEFILE_LIST = Makefile -# Define the functions that will generate each rule -define generatePdfRules -$(1)/%.pdf: %.tex $(COMMON_TEX_FILES) $(MAKEFILE_LIST) - @echo building $$@ +define generateSetTexRules +$(SETS_TEX_DIR)/$(1).tex: $(wildcard $(CARDS_TEX_DIR)/$(1)/*.tex) $(MAKEFILE_LIST) + @echo "generating $(1) tex" @if test \( ! \( -d $$(@D) \) \) ;then mkdir -p $$(@D);fi - $(VERBOSE)$(PDFLATEX_ENV) $(PDFLATEX) --output-directory $$(@D) $$< + $(VERBOSE) echo "\documentclass[a4paper,landscape]{article}" > $$@ + $(VERBOSE) echo "\usepackage[margin=6mm,top=5mm]{geometry}" >> $$@ + $(VERBOSE) echo "\input{libs.tex}" >> $$@ + $(VERBOSE) echo "\input{colors.tex}" >> $$@ + $(VERBOSE) echo "\input{tikzcards.tex}" >> $$@ + $(VERBOSE) echo "\usepackage{standalone}" >> $$@ + $(VERBOSE) echo "\begin{document}" >> $$@ + $(VERBOSE) echo "\begin{center}" >> $$@ + $(VERBOSE) echo "\pagestyle{empty}" >> $$@ + $(VERBOSE)for card in $(wildcard $(CARDS_TEX_DIR)/$(1)/*.tex); do \ + echo "\includestandalone{$$$${card%.tex}}" >> $$@; done + $(VERBOSE) echo "\end{center}" >> $$@ + $(VERBOSE) echo "\end{document}" >> $$@ endef -define generateTexRules +# Generate set tex rules +$(foreach set, $(SETS), $(eval $(call generateSetTexRules,$(set)))) + +define generateCardTexRules $(1)/%.tex: %.yml $(GENERATE_CARD) @echo building $$@ @if test \( ! \( -d $$(@D) \) \) ;then mkdir -p $$(@D);fi $(VERBOSE)$(GENERATE_CARD) $(GENERATE_CARD_FLAGS) $$< > $$@ endef -# Generate tex rules -$(foreach texdir, $(SETS_TEXDIRS), $(eval $(call generateTexRules, $(texdir)))) +# Generate cards tex rules +$(foreach texdir, $(SETS_TEXDIRS), $(eval $(call generateCardTexRules, $(texdir)))) + +define generatePdfRules +$(1)/%.pdf: %.tex $(COMMON_TEX_FILES) $(MAKEFILE_LIST) + @echo building $$@ + @if test \( ! \( -d $$(@D) \) \) ;then mkdir -p $$(@D);fi + $(VERBOSE)$(PDFLATEX_ENV) $(PDFLATEX) --output-directory $$(@D) $$< +endef -# Generate pdf rules +# Generate cards pdf rules $(foreach pdfdir, $(SETS_BUILDDIRS), $(eval $(call generatePdfRules, $(pdfdir)))) +# Generate sets pdf rule +$(eval $(call generatePdfRules, $(SETS_PDF_DIR))) + .PHONY: all de en all: de en de: - @echo "building german cards" - $(MAKE) cards-all CARDS_TEX_DIR=$(CARDS_TEX_DIR)/de BUILDDIR=$(BUILDDIR)/de GENERATE_CARD_FLAGS="--language=de" + $(MAKE) cards-all sets LANGUAGE=de en: - @echo "building englisch cards" - $(MAKE) cards-all CARDS_TEX_DIR=$(CARDS_TEX_DIR)/en BUILDDIR=$(BUILDDIR)/en GENERATE_CARD_FLAGS="--language=en" + $(MAKE) cards-all sets + +.PHONY: sets sets-tex sets-pdf +sets: sets-tex sets-pdf +sets-tex: $(SETS_TEX) +sets-pdf: $(SETS_PDF) .PHONY: cards-all cards-tex cards-pdf cards-png cards-all: cards-tex cards-pdf cards-png + @echo "building $(LANGUAGE) cards" + cards-tex: $(CARDS_TEX) cards-pdf: $(CARDS_PDF) cards-png: $(CARDS_PNG) -- cgit v1.2.3