Makefile

Download
makefile 255 lines 10.2 KB
  1# Makefile for LaTeX examples compilation
  2# Automates building LaTeX documents with proper dependencies
  3
  4# Compiler and flags
  5LATEX = pdflatex
  6BIBTEX = bibtex
  7BIBER = biber
  8LATEXMK = latexmk
  9LATEXMK_FLAGS = -pdf -interaction=nonstopmode -halt-on-error
 10
 11# Directories
 12BIBLIOGRAPHY_DIR = ../08_bibliography
 13TIKZ_BASICS_DIR = ../10_tikz_basics
 14TIKZ_ADVANCED_DIR = ../11_tikz_advanced
 15BEAMER_DIR = ../12_beamer
 16CUSTOM_COMMANDS_DIR = ../13_custom_commands
 17PROJECTS_DIR = .
 18
 19# Source files
 20BIBLIOGRAPHY_SRC = $(BIBLIOGRAPHY_DIR)/bibliography_demo.tex
 21TIKZ_SHAPES_SRC = $(TIKZ_BASICS_DIR)/tikz_shapes.tex
 22TIKZ_DIAGRAM_SRC = $(TIKZ_BASICS_DIR)/tikz_diagram.tex
 23PGFPLOTS_SRC = $(TIKZ_ADVANCED_DIR)/pgfplots_demo.tex
 24NEURAL_NET_SRC = $(TIKZ_ADVANCED_DIR)/neural_network.tex
 25PRESENTATION_SRC = $(BEAMER_DIR)/presentation.tex
 26CUSTOM_MACROS_SRC = $(CUSTOM_COMMANDS_DIR)/custom_macros.tex
 27ACADEMIC_PAPER_SRC = $(PROJECTS_DIR)/academic_paper.tex
 28
 29# PDF outputs
 30BIBLIOGRAPHY_PDF = $(BIBLIOGRAPHY_DIR)/bibliography_demo.pdf
 31TIKZ_SHAPES_PDF = $(TIKZ_BASICS_DIR)/tikz_shapes.pdf
 32TIKZ_DIAGRAM_PDF = $(TIKZ_BASICS_DIR)/tikz_diagram.pdf
 33PGFPLOTS_PDF = $(TIKZ_ADVANCED_DIR)/pgfplots_demo.pdf
 34NEURAL_NET_PDF = $(TIKZ_ADVANCED_DIR)/neural_network.pdf
 35PRESENTATION_PDF = $(BEAMER_DIR)/presentation.pdf
 36CUSTOM_MACROS_PDF = $(CUSTOM_COMMANDS_DIR)/custom_macros.pdf
 37ACADEMIC_PAPER_PDF = $(PROJECTS_DIR)/academic_paper.pdf
 38
 39# All PDFs
 40ALL_PDFS = $(BIBLIOGRAPHY_PDF) $(TIKZ_SHAPES_PDF) $(TIKZ_DIAGRAM_PDF) \
 41           $(PGFPLOTS_PDF) $(NEURAL_NET_PDF) $(PRESENTATION_PDF) \
 42           $(CUSTOM_MACROS_PDF) $(ACADEMIC_PAPER_PDF)
 43
 44# Colors for output
 45COLOR_RESET = \033[0m
 46COLOR_GREEN = \033[32m
 47COLOR_YELLOW = \033[33m
 48COLOR_BLUE = \033[34m
 49
 50# Default target: build all PDFs
 51.PHONY: all
 52all: $(ALL_PDFS)
 53	@echo "$(COLOR_GREEN)All LaTeX examples compiled successfully!$(COLOR_RESET)"
 54
 55# Individual targets
 56.PHONY: bibliography
 57bibliography: $(BIBLIOGRAPHY_PDF)
 58
 59.PHONY: tikz-shapes
 60tikz-shapes: $(TIKZ_SHAPES_PDF)
 61
 62.PHONY: tikz-diagram
 63tikz-diagram: $(TIKZ_DIAGRAM_PDF)
 64
 65.PHONY: pgfplots
 66pgfplots: $(PGFPLOTS_PDF)
 67
 68.PHONY: neural-network
 69neural-network: $(NEURAL_NET_PDF)
 70
 71.PHONY: presentation
 72presentation: $(PRESENTATION_PDF)
 73
 74.PHONY: custom-macros
 75custom-macros: $(CUSTOM_MACROS_PDF)
 76
 77.PHONY: academic-paper
 78academic-paper: $(ACADEMIC_PAPER_PDF)
 79
 80# Bibliography compilation (requires biber)
 81$(BIBLIOGRAPHY_PDF): $(BIBLIOGRAPHY_SRC) $(BIBLIOGRAPHY_DIR)/references.bib
 82	@echo "$(COLOR_BLUE)Compiling bibliography demo...$(COLOR_RESET)"
 83	cd $(BIBLIOGRAPHY_DIR) && $(LATEX) bibliography_demo.tex
 84	cd $(BIBLIOGRAPHY_DIR) && $(BIBER) bibliography_demo
 85	cd $(BIBLIOGRAPHY_DIR) && $(LATEX) bibliography_demo.tex
 86	cd $(BIBLIOGRAPHY_DIR) && $(LATEX) bibliography_demo.tex
 87	@echo "$(COLOR_GREEN)Bibliography demo compiled!$(COLOR_RESET)"
 88
 89# TikZ basic shapes
 90$(TIKZ_SHAPES_PDF): $(TIKZ_SHAPES_SRC)
 91	@echo "$(COLOR_BLUE)Compiling TikZ shapes...$(COLOR_RESET)"
 92	cd $(TIKZ_BASICS_DIR) && $(LATEX) tikz_shapes.tex
 93	cd $(TIKZ_BASICS_DIR) && $(LATEX) tikz_shapes.tex
 94	@echo "$(COLOR_GREEN)TikZ shapes compiled!$(COLOR_RESET)"
 95
 96# TikZ diagrams
 97$(TIKZ_DIAGRAM_PDF): $(TIKZ_DIAGRAM_SRC)
 98	@echo "$(COLOR_BLUE)Compiling TikZ diagrams...$(COLOR_RESET)"
 99	cd $(TIKZ_BASICS_DIR) && $(LATEX) tikz_diagram.tex
100	cd $(TIKZ_BASICS_DIR) && $(LATEX) tikz_diagram.tex
101	@echo "$(COLOR_GREEN)TikZ diagrams compiled!$(COLOR_RESET)"
102
103# PGFPlots (may require --shell-escape for some plots)
104$(PGFPLOTS_PDF): $(PGFPLOTS_SRC)
105	@echo "$(COLOR_BLUE)Compiling PGFPlots demo...$(COLOR_RESET)"
106	cd $(TIKZ_ADVANCED_DIR) && $(LATEX) -shell-escape pgfplots_demo.tex
107	cd $(TIKZ_ADVANCED_DIR) && $(LATEX) -shell-escape pgfplots_demo.tex
108	@echo "$(COLOR_GREEN)PGFPlots demo compiled!$(COLOR_RESET)"
109
110# Neural network visualization
111$(NEURAL_NET_PDF): $(NEURAL_NET_SRC)
112	@echo "$(COLOR_BLUE)Compiling neural network diagrams...$(COLOR_RESET)"
113	cd $(TIKZ_ADVANCED_DIR) && $(LATEX) neural_network.tex
114	cd $(TIKZ_ADVANCED_DIR) && $(LATEX) neural_network.tex
115	@echo "$(COLOR_GREEN)Neural network diagrams compiled!$(COLOR_RESET)"
116
117# Beamer presentation
118$(PRESENTATION_PDF): $(PRESENTATION_SRC)
119	@echo "$(COLOR_BLUE)Compiling Beamer presentation...$(COLOR_RESET)"
120	cd $(BEAMER_DIR) && $(LATEX) presentation.tex
121	cd $(BEAMER_DIR) && $(LATEX) presentation.tex
122	@echo "$(COLOR_GREEN)Beamer presentation compiled!$(COLOR_RESET)"
123
124# Custom commands
125$(CUSTOM_MACROS_PDF): $(CUSTOM_MACROS_SRC)
126	@echo "$(COLOR_BLUE)Compiling custom macros example...$(COLOR_RESET)"
127	cd $(CUSTOM_COMMANDS_DIR) && $(LATEX) custom_macros.tex
128	cd $(CUSTOM_COMMANDS_DIR) && $(LATEX) custom_macros.tex
129	@echo "$(COLOR_GREEN)Custom macros example compiled!$(COLOR_RESET)"
130
131# Academic paper
132$(ACADEMIC_PAPER_PDF): $(ACADEMIC_PAPER_SRC)
133	@echo "$(COLOR_BLUE)Compiling academic paper...$(COLOR_RESET)"
134	cd $(PROJECTS_DIR) && $(LATEX) academic_paper.tex
135	cd $(PROJECTS_DIR) && $(LATEX) academic_paper.tex
136	cd $(PROJECTS_DIR) && $(LATEX) academic_paper.tex
137	@echo "$(COLOR_GREEN)Academic paper compiled!$(COLOR_RESET)"
138
139# Using latexmk (alternative compilation method)
140.PHONY: latexmk
141latexmk:
142	@echo "$(COLOR_YELLOW)Compiling all documents with latexmk...$(COLOR_RESET)"
143	cd $(BIBLIOGRAPHY_DIR) && $(LATEXMK) $(LATEXMK_FLAGS) -bibtex bibliography_demo.tex
144	cd $(TIKZ_BASICS_DIR) && $(LATEXMK) $(LATEXMK_FLAGS) tikz_shapes.tex
145	cd $(TIKZ_BASICS_DIR) && $(LATEXMK) $(LATEXMK_FLAGS) tikz_diagram.tex
146	cd $(TIKZ_ADVANCED_DIR) && $(LATEXMK) $(LATEXMK_FLAGS) -shell-escape pgfplots_demo.tex
147	cd $(TIKZ_ADVANCED_DIR) && $(LATEXMK) $(LATEXMK_FLAGS) neural_network.tex
148	cd $(BEAMER_DIR) && $(LATEXMK) $(LATEXMK_FLAGS) presentation.tex
149	cd $(CUSTOM_COMMANDS_DIR) && $(LATEXMK) $(LATEXMK_FLAGS) custom_macros.tex
150	cd $(PROJECTS_DIR) && $(LATEXMK) $(LATEXMK_FLAGS) academic_paper.tex
151	@echo "$(COLOR_GREEN)All documents compiled with latexmk!$(COLOR_RESET)"
152
153# Clean auxiliary files
154.PHONY: clean
155clean:
156	@echo "$(COLOR_YELLOW)Cleaning auxiliary files...$(COLOR_RESET)"
157	find .. -type f \( -name "*.aux" -o -name "*.log" -o -name "*.out" \
158	     -o -name "*.toc" -o -name "*.bbl" -o -name "*.blg" -o -name "*.bcf" \
159	     -o -name "*.run.xml" -o -name "*.fls" -o -name "*.fdb_latexmk" \
160	     -o -name "*.nav" -o -name "*.snm" -o -name "*.vrb" \) -delete
161	@echo "$(COLOR_GREEN)Auxiliary files cleaned!$(COLOR_RESET)"
162
163# Clean all generated files including PDFs
164.PHONY: cleanall
165cleanall: clean
166	@echo "$(COLOR_YELLOW)Cleaning all generated files including PDFs...$(COLOR_RESET)"
167	find .. -type f -name "*.pdf" -delete
168	@echo "$(COLOR_GREEN)All generated files removed!$(COLOR_RESET)"
169
170# Help target
171.PHONY: help
172help:
173	@echo "$(COLOR_BLUE)LaTeX Examples Makefile$(COLOR_RESET)"
174	@echo ""
175	@echo "Available targets:"
176	@echo "  $(COLOR_GREEN)all$(COLOR_RESET)              - Build all LaTeX examples (default)"
177	@echo "  $(COLOR_GREEN)bibliography$(COLOR_RESET)     - Build bibliography demo"
178	@echo "  $(COLOR_GREEN)tikz-shapes$(COLOR_RESET)      - Build TikZ shapes example"
179	@echo "  $(COLOR_GREEN)tikz-diagram$(COLOR_RESET)     - Build TikZ diagrams example"
180	@echo "  $(COLOR_GREEN)pgfplots$(COLOR_RESET)         - Build PGFPlots demo"
181	@echo "  $(COLOR_GREEN)neural-network$(COLOR_RESET)   - Build neural network visualization"
182	@echo "  $(COLOR_GREEN)presentation$(COLOR_RESET)     - Build Beamer presentation"
183	@echo "  $(COLOR_GREEN)custom-macros$(COLOR_RESET)    - Build custom macros example"
184	@echo "  $(COLOR_GREEN)academic-paper$(COLOR_RESET)   - Build academic paper template"
185	@echo "  $(COLOR_GREEN)latexmk$(COLOR_RESET)          - Build all using latexmk (alternative)"
186	@echo "  $(COLOR_GREEN)clean$(COLOR_RESET)            - Remove auxiliary files"
187	@echo "  $(COLOR_GREEN)cleanall$(COLOR_RESET)         - Remove all generated files including PDFs"
188	@echo "  $(COLOR_GREEN)help$(COLOR_RESET)             - Show this help message"
189	@echo ""
190	@echo "$(COLOR_YELLOW)Requirements:$(COLOR_RESET)"
191	@echo "  - pdflatex"
192	@echo "  - biber (for bibliography)"
193	@echo "  - latexmk (optional, for alternative compilation)"
194	@echo ""
195	@echo "$(COLOR_YELLOW)Examples:$(COLOR_RESET)"
196	@echo "  make                    # Build all examples"
197	@echo "  make presentation       # Build only the presentation"
198	@echo "  make clean              # Clean auxiliary files"
199	@echo "  make cleanall           # Remove all generated files"
200
201# Check if required tools are installed
202.PHONY: check
203check:
204	@echo "$(COLOR_BLUE)Checking for required tools...$(COLOR_RESET)"
205	@command -v $(LATEX) >/dev/null 2>&1 || \
206	    (echo "$(COLOR_YELLOW)Warning: pdflatex not found$(COLOR_RESET)" && exit 1)
207	@echo "  ✓ pdflatex found"
208	@command -v $(BIBER) >/dev/null 2>&1 || \
209	    echo "$(COLOR_YELLOW)Warning: biber not found (required for bibliography)$(COLOR_RESET)"
210	@command -v $(BIBER) >/dev/null 2>&1 && echo "  ✓ biber found"
211	@command -v $(LATEXMK) >/dev/null 2>&1 || \
212	    echo "$(COLOR_YELLOW)Note: latexmk not found (optional)$(COLOR_RESET)"
213	@command -v $(LATEXMK) >/dev/null 2>&1 && echo "  ✓ latexmk found"
214	@echo "$(COLOR_GREEN)Tool check complete!$(COLOR_RESET)"
215
216# Quick build (single pass, for testing)
217.PHONY: quick
218quick:
219	@echo "$(COLOR_YELLOW)Quick build (single pass)...$(COLOR_RESET)"
220	cd $(BIBLIOGRAPHY_DIR) && $(LATEX) bibliography_demo.tex
221	cd $(TIKZ_BASICS_DIR) && $(LATEX) tikz_shapes.tex
222	cd $(TIKZ_BASICS_DIR) && $(LATEX) tikz_diagram.tex
223	cd $(TIKZ_ADVANCED_DIR) && $(LATEX) -shell-escape pgfplots_demo.tex
224	cd $(TIKZ_ADVANCED_DIR) && $(LATEX) neural_network.tex
225	cd $(BEAMER_DIR) && $(LATEX) presentation.tex
226	cd $(CUSTOM_COMMANDS_DIR) && $(LATEX) custom_macros.tex
227	cd $(PROJECTS_DIR) && $(LATEX) academic_paper.tex
228	@echo "$(COLOR_GREEN)Quick build complete!$(COLOR_RESET)"
229
230# Watch for changes and rebuild (requires inotify-tools on Linux)
231.PHONY: watch
232watch:
233	@echo "$(COLOR_BLUE)Watching for changes... (Ctrl+C to stop)$(COLOR_RESET)"
234	@while true; do \
235	    inotifywait -qre modify --include '.*\.tex$$' .. && \
236	    make all; \
237	done
238
239# Create a distribution tarball
240.PHONY: dist
241dist: cleanall
242	@echo "$(COLOR_BLUE)Creating distribution archive...$(COLOR_RESET)"
243	tar czf latex_examples.tar.gz \
244	    $(BIBLIOGRAPHY_DIR)/*.tex $(BIBLIOGRAPHY_DIR)/*.bib \
245	    $(TIKZ_BASICS_DIR)/*.tex \
246	    $(TIKZ_ADVANCED_DIR)/*.tex \
247	    $(BEAMER_DIR)/*.tex \
248	    $(CUSTOM_COMMANDS_DIR)/*.tex \
249	    $(PROJECTS_DIR)/*.tex \
250	    $(PROJECTS_DIR)/Makefile
251	@echo "$(COLOR_GREEN)Archive created: latex_examples.tar.gz$(COLOR_RESET)"
252
253.PHONY: .SILENT
254.SILENT: