Repository navigation
Expand file tree
/
Copy pathmakefile
More file actions
156 lines (129 loc) · 6.99 KB
/
Copy pathmakefile
File metadata and controls
156 lines (129 loc) · 6.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# ==================== Configuración general ====================
EMACS ?= emacs
SCIMAX_INIT ?= $(HOME)/Software/scimax/init.el
#EMACS_BATCH := $(EMACS) --batch --load "$(SCIMAX_INIT)"
EMACS_BATCH := $(EMACS) --batch --load "$(SCIMAX_INIT)" --load "lisp/mb-org-export-filters.el"
LESSONS_DIR := org-lessons
LESSONS_IMG_DIR := $(LESSONS_DIR)/img
CUADERNOS_DIR := CuadernosElectronicos
PRACT_DIR := org-pract
# ---- org-lessons: pdf, html, ipynb y slides reveal.js ----
LESSONS_ORG := $(wildcard $(LESSONS_DIR)/*.org)
LESSONS_PDF := $(LESSONS_ORG:.org=.pdf)
LESSONS_HTML := $(LESSONS_ORG:.org=.html)
# Los apéndices (Apendice-*.org) se exportan a PDF y HTML, pero no a cuaderno ni a transparencias.
LESSONS_IPYNB := $(filter-out $(LESSONS_DIR)/Apendice-%,$(LESSONS_ORG:.org=.ipynb))
LESSONS_SLIDES := $(filter-out $(LESSONS_DIR)/Apendice-%,$(LESSONS_ORG:.org=.slides.html))
# ficheros auxiliares que deja la exportación LaTeX
LESSONS_TEXAUX := $(LESSONS_ORG:.org=.tex) $(LESSONS_ORG:.org=.aux) \
$(LESSONS_ORG:.org=.log) $(LESSONS_ORG:.org=.out) \
$(LESSONS_ORG:.org=.toc)
# ---- CuadernosElectronicos: solo ipynb ----
CUADERNOS_ORG := $(wildcard $(CUADERNOS_DIR)/*.org)
CUADERNOS_IPYNB := $(CUADERNOS_ORG:.org=.ipynb)
# ---- org-pract: tangle .inp -> ejecutar gretl -> pdf, html ----
PRACT_ORG := $(wildcard $(PRACT_DIR)/*.org)
PRACT_PDF := $(PRACT_ORG:.org=.pdf)
PRACT_HTML := $(PRACT_ORG:.org=.html)
PRACT_STAMPS := $(PRACT_DIR)/.stamps
PRACT_GUIONES := $(PRACT_DIR)/guiones
# directorios de salida que gretl crea junto a cada .org de prácticas
# (mismo nombre que el .org, sin extensión)
PRACT_OUTDIRS := $(PRACT_ORG:.org=)
PRACT_TEXAUX := $(PRACT_ORG:.org=.tex) $(PRACT_ORG:.org=.aux) \
$(PRACT_ORG:.org=.log) $(PRACT_ORG:.org=.out) \
$(PRACT_ORG:.org=.toc)
.PHONY: all lessons cuadernos pract clean figures
all: lessons cuadernos pract index
lessons: figures $(LESSONS_PDF) $(LESSONS_HTML) $(LESSONS_IPYNB) $(LESSONS_SLIDES)
cuadernos: $(CUADERNOS_IPYNB)
pract: $(PRACT_PDF) $(PRACT_HTML)
# ==================== figuras ====================
# Recursive make: el makefile de img/ decide él solo (por timestamps
# .org vs .png) si algo necesita regenerarse. Lo invocamos siempre como
# prerrequisito de las lecciones para no tener que duplicar esa lógica
# aquí. No limpiamos tex/ aquí: así latexmk conserva su caché
# incremental entre invocaciones (solo se borra en "make clean").
figures:
$(MAKE) -C $(LESSONS_IMG_DIR) all
# ==================== org-lessons ====================
# Prerrequisito de orden ("| figures") también en las reglas de patrón,
# por si algún día se invoca "make org-lessons/S01-Lecc01.pdf" a mano
# sin pasar por el target "lessons".
$(LESSONS_DIR)/%.pdf: $(LESSONS_DIR)/%.org | figures
$(EMACS_BATCH) --eval '(progn (setq org-confirm-babel-evaluate nil) (find-file "$<") (org-babel-execute-buffer) (org-latex-export-to-pdf))'
$(LESSONS_DIR)/%.html: $(LESSONS_DIR)/%.org | figures
$(EMACS_BATCH) --eval '(progn (setq org-confirm-babel-evaluate nil) (find-file "$<") (org-babel-execute-buffer) (org-html-export-to-html))'
$(LESSONS_DIR)/%.ipynb: $(LESSONS_DIR)/%.org | figures
$(EMACS_BATCH) --eval \
'(progn (setq org-confirm-babel-evaluate nil) (require (quote ox-ipynb)) (find-file "$<") (org-babel-execute-buffer) (mb/org-flatten-custom-id-links) (ox-ipynb-export-to-ipynb-file))'
# $(LESSONS_DIR)/%.pdf: $(LESSONS_DIR)/%.org | figures
# $(EMACS_BATCH) --eval '(progn (find-file "$<") (org-latex-export-to-pdf))'
#
# $(LESSONS_DIR)/%.html: $(LESSONS_DIR)/%.org | figures
# $(EMACS_BATCH) --eval '(progn (find-file "$<") (org-html-export-to-html))'
#
# $(LESSONS_DIR)/%.ipynb: $(LESSONS_DIR)/%.org | figures
# $(EMACS_BATCH) --eval \
# '(progn (require (quote ox-ipynb)) (find-file "$<") (ox-ipynb-export-to-ipynb-file))'
$(LESSONS_DIR)/%.slides.html: $(LESSONS_DIR)/%.ipynb
cd $(LESSONS_DIR) && jupyter nbconvert \
--config ../mycfg-GitHubPages.py \
--to slides \
--reveal-prefix "https://unpkg.com/reveal.js@5.2.1" \
--execute $(notdir $<)
# MathJax 2 (el de las slides) no tiene el dígito 1 en blackboard bold y pinta
# \mathbb 1 como un 1 normal; el PDF lo resuelve con dsfont y el HTML usa MathJax 3.
# Aquí se sustituye por un 1 y una l de palo seco superpuestos, de trazo fino
# (\mathsf{1}\mkern-3.5mu\mathsf{l}), que solo usa órdenes básicas de TeX y no
# depende de las fuentes del navegador (\unicode{x1D7D9} fallaba con la copia
# de cdnjs que usa el medidor de transparencias; 1\!\!1 salía demasiado grueso).
sed -i -E 's/\\mathbb *(\{1\}|1)/{\\mathsf{1}\\mkern-3.5mu\\mathsf{l}}/g' $@
# ==================== CuadernosElectronicos ====================
$(CUADERNOS_DIR)/%.ipynb: $(CUADERNOS_DIR)/%.org
$(EMACS_BATCH) --eval \
'(progn (require (quote ox-ipynb)) (find-file "$<") (ox-ipynb-export-to-ipynb-file))'
# ==================== org-pract ====================
$(PRACT_GUIONES):
mkdir -p $@
$(PRACT_STAMPS):
mkdir -p $@
$(PRACT_STAMPS)/%.tangled: $(PRACT_DIR)/%.org | $(PRACT_STAMPS) $(PRACT_GUIONES)
$(EMACS_BATCH) --eval '(progn (find-file "$<") (org-babel-tangle))'
touch $@
$(PRACT_STAMPS)/%.executed: $(PRACT_STAMPS)/%.tangled $(PRACT_GUIONES)
$(EMACS_BATCH) --eval '(progn (find-file "$(PRACT_DIR)/$*.org") (org-babel-execute-buffer))'
touch $@
# IMPORTANTE: hay que volver a ejecutar el buffer (no solo find-file)
# en el MISMO proceso de Emacs que exporta a PDF. El preámbulo de cada
# .org de prácticas fija variables Elisp (org-latex-minted-langs,
# org-latex-pdf-process, org-latex-listings) necesarias para que
# minted resalte correctamente el código "gretl" (mapeado al lexer
# "octave" de Pygments). Esas variables solo existen mientras vive el
# proceso Emacs que las fijó: si se exporta en un proceso batch nuevo
# (como haría "find-file + org-latex-export-to-pdf" a secas), el
# preámbulo nunca se ejecuta ahí y los recuadros de código salen
# vacíos, aunque el PDF se genere sin error.
$(PRACT_DIR)/%.pdf: $(PRACT_STAMPS)/%.executed $(PRACT_GUIONES)
$(EMACS_BATCH) --eval '(progn (find-file "$(PRACT_DIR)/$*.org") (org-babel-execute-buffer) (org-latex-export-to-pdf))'
$(PRACT_DIR)/%.html: $(PRACT_STAMPS)/%.executed $(PRACT_GUIONES)
$(EMACS_BATCH) --eval '(progn (find-file "$(PRACT_DIR)/$*.org") (org-babel-execute-buffer) (org-html-export-to-html))'
clean:
rm -f $(LESSONS_PDF) $(LESSONS_HTML) $(LESSONS_IPYNB) $(LESSONS_SLIDES)
rm -f $(LESSONS_TEXAUX)
find $(LESSONS_DIR) -maxdepth 1 -type d -name '_minted-*' -exec rm -rf {} +
rm -f $(CUADERNOS_IPYNB)
rm -f $(PRACT_PDF) $(PRACT_HTML)
rm -f $(PRACT_TEXAUX)
find $(PRACT_DIR) -maxdepth 1 -type d -name '_minted-*' -exec rm -rf {} +
rm -rf $(PRACT_GUIONES)
rm -rf $(PRACT_STAMPS)
rm -rf $(PRACT_OUTDIRS)
$(MAKE) -C $(LESSONS_IMG_DIR) distclean
# ==================== index.org (portada de gh-pages) ====================
INDEX_ORG := index.org
INDEX_HTML := index.html
.PHONY: index
index: $(INDEX_HTML)
$(INDEX_HTML): $(INDEX_ORG)
$(EMACS_BATCH) --eval '(progn (find-file "$<") (org-html-export-to-html))'