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: