Changelog
lese 0.6.0
- Rename
topictochapterfor consistency when referring to slide paths, i.e.lecture_i2ml/slides/<chapter>/foo.tex
Slide status reporting
- Moved
slide_status.Rmdandslide_status_pr.Rmdintoinst/so they are bundled with the package and retrieved viasystem.file(). - New wrapper functions
render_slide_status()andrender_slide_status_pr()to render the reports from the installed templates. These replace directrmarkdown::render()calls in the Makefile. - New
slide_cache_path()returns the path to the slide check cache, now stored in the user data directory (rappdirs::user_data_dir("lese")) rather than the working directory. - New
slide_cache_clean()deletes the cache file. - The Makefile uses a
.slide_check_stampstamp file for incremental build tracking, withmake cleancallingslide_cache_clean().
Figure Auditing
New system to audit the figure-slide dependency chain for slides/<chapter>/figure/ and slides/<chapter>/figure_man/:
-
audit_chapter(): Main entry point — audits a single chapter’s figure and slide dependencies. Identifies orphaned figures, missing figures, and missing packages. - Two figure detection methods: regex (parses
.texsource) and fls (reads.flsrecorder files fromlatexmk). Theflsmethod is more accurate as it reflects what LaTeX actually reads during compilation (respects comments,\iffalseconditionals, etc.). Defaultmethod = "auto"usesflswhen available, falling back to regex. - Both
figure/andfigure_man/directories are audited independently. - Figures in
attic/subdirectories are reported separately as informational — they represent intentionally “parked” content, not problems. -
clean_orphaned_figures(): Bulk-delete orphaned figures identified by audit. Defaults todry_run = TRUEfor safety. Never deletesattic/figures. -
parse_slide_figures(): Parse.texslides for figure references (\includegraphics,\image,\imageFixed, etc.). -
render_chapter_audit(): Render HTML audit reports from within any lecture directory. Bundledchapter_audit.Rmdtemplate is installed with the package. - All audit functions accept
lecture_dirparameter, defaulting tohere::here(), so they work both fromlecture_service/and from within individual lecture repos.
Script Execution and Dependencies
-
run_chapter_scripts()/run_script(): Execute chapter scripts in isolatedcallrsubprocesses with before/after figure directory diffing. - Scripts that error are tracked separately from orphaned scripts — a failed script cannot be classified as orphaned since it may have produced figures if it had succeeded.
- Scripts that succeed but produce zero figures get a warning.
-
extract_script_deps()/check_script_deps(): Detect and install R package dependencies from scripts (static analysis oflibrary(),require(),pkg::fncalls). -
check_lecture_deps(): Lecture-level dependency check across all chapters.
Figure audit in CI status report
- The HTML slide status report (
slide_status.Rmd) now includes a “Figure Audit” section that runsaudit_chapter()per lecture/chapter after compilation, detecting orphaned and missing figures using.flsrecorder files. - Orphaned figures are now reported with full filenames (including extension) for actionable output. Missing figures remain as basenames (extension unknown from LaTeX references).
Makefile Targets
Lecture-level (service/Makefile)
- New
install-lesetarget: installs theleseR package from GitHub viapak(bootstrapspakif needed). Acceptsref=<branch/tag>for specific versions. - Split
cleanintotexclean(auxiliary files only, keeps PDFs) andclean(auxiliary files and PDFs), mirroring the chapter-leveltex.mktargets. - New
audittarget: renders HTML audit report for all chapters. - New
deps/install-depstargets: check or install R package dependencies across all chapters. - New
init-makefilestarget: creates Makefiles inslides/<chapter>/andslides/<chapter>/rsrc/directories if missing.
Chapter-level (service/slides/tex.mk)
- New
audittarget: run figure audit for a single chapter. - New
clean-orphaned-figurestarget: delete orphaned figures infigure/andfigure_man/(git-tracked, reversible). Never deletesattic/figures. - New
check-reprotarget: end-to-end reproducibility validation — deletesfigure/(preservingattic/), runsrsrc/scripts, then compiles slides.
Bug fixes
- Fix
MultisessionFuturewarnings about open FIFO connections when runningcheck_slides_many()in parallel. Theprocessxsupervision was unnecessarily creating connections inside future workers. - Package installation checks in
audit_chapter()andcheck_script_deps()no longer load package namespaces, avoiding spurious conflict warnings (e.g. mlr3 vs mlr, paradox vs ParamHelpers). -
collect_lectures()now discovers symlinked lecture directories (e.g.lecture_sl -> ../lecture_sl). Previouslyfs::dir_ls(..., type = "directory")skipped symlinks.
lese 0.5.0
- New service file: The root
Makefilein each lecture was a placeholder, but now it actually does something:- Update latex-math (not just via GitHub action now)
- Update service files
- Clean LaTeX detritus and PDFs in slide directories
- Robustify the
lecture_serviceMakefile to not error if no lectures are cloned (to allow just usingmake installetc.) - Warn if R is not installed for targets that need it, and link to
rigas an installation suggestion. - Convert
file_count.qmdto RMarkdown for backwards compatibility and consistency with other docs.
R package
- Add Biblatex utility functions for
references.bibprocessing to render per-chapter/lecture literature lists - Normalize file paths in
collect_lectures()(should help path-agnostic usage) - Change default
compile_slide(..., post_clean = FALSE)to avoid “file not found” error when.logfile was unexpectedly missing for checks. - Fix: Use
fs::path_norm()instead offs::path_real()for path normalization incollect_lectures()because the former expected log files to exist which may not exist. - Add flexibility for
find_slide_tex()to allowcompile_slide()etc. to work with a direct path to a slide file for interactive use in arbitrary directories - Bump TeXLive version used by
latexmk_docker()to 2025.
LaTeX (service/style etc.)
- Makefile in
slides/gets big refactors:- Remove
alltarget, newreleasetarget that does all the important things and copies toslides-pdf - Renamed
mosttoslides - Option to use docker (
make slides DOCKER=true),
- Remove
- Logo is now expected at ./local/logo.pdf
- The
\imagemacro now can take a url (starting withhttp[s]) to create clickable source link without having to create entry inreferences.bib. - New
\imageFixedmacro for fixed-position image placement - Slide check workflows now exit 1 if at least one slide does not compile correctly
- Renamed
frame2toframevto avoid internal beamer package issues -
frameiandframevnow override global itemize/enumerate font size control when using a custom font size, anditemizeMetc. now correctly inherit their surrounding font sizes when not specified. -
frameiandframevnow supportalignargument for beamer frame alignment passthrough. - Add new ref-buttons
furtherreading{}andsourceref{}, the later superseding\citelink{}.\imageand friends internally use\sourcerefnow. - Add
chapter-literature.texinstyleto compile simple chapter-wise literature lists. Also addsmaketargetliterature.
GitHub Action workflows (service/.github/workflows)
- In both workflows using tinytex, we experimentally pin the used version to 2024.12 for safety. This is likely to change in the future but currently this is the only version generally compatible with everything as far as we know. Ideally, we keep bumping this to a recent version, also on Overleaf.
- The Makefile in ./slides/ use a docker image defaulting to 2024 as well
lese 0.4.0
R package
- Add experimental
latexmk_docker()to runlatexmkwrapped in a docker image with a fixed TeXLive version -
compile_slide()gainsmethodargument, defaulting to"system"to use locallatexmk. Can be"docker"to use the newlatexmk_docker()instead. - Remove
compile_slide_tinytex()and convert it to the somewhat simplerlatexmk_tinytex()for use withcompile_slide() -
clean_slide()gainskeep_pdfoption, defaulting toFALSEfor previous behavior. -
clean_slide()gainscheck_statusoption, analogous to that incompile_slide(). The same argument incompile_slide()is passed toclean_slide(). -
compare_slide()gains additional optioneps_signif([0.5]) to manually filter output fromdiff-pdf-visuallyto decrease number of false-positives. - Add
check_docker()to check whetherdockeris available and running.
lecheck cli:
- Gains
--dockerargument, passed tocompile_slide()to uselatexmk_docker().- Currently uses a TeX Live 2023 image as default
- Allows fully encapsulate compilation of slides with a static environment
- Gains
--postcleanargument to runlatexmk -cafter compilation, removing all detritus but keeping the.pdffile.
LaTeX (service/style)
- Discouraging the use of automatic and explicit
\framebreaks, which cause rendering issues after some TeXLive version post 2023 cutoff:- The
vbframeenvironment is considered deprecated and should be replaced with “regular” beamerframes. - Removed framenumber continuation counter from
lmu-lecture.styfor simplification
- The
- Related: The
vframeenvironment (rarely used) is now removed. - Add cheatsheet preamble content from I2ML. Might need further refactor and adaptation if other lectures also use these.
Breaking changes for recently introduced macros (see the wiki):
-
splitVnow maps tosplitVCC, notsplitVTT. -
itemizefillis renamed toitemizeF
New macros (see the wiki for usage instructions)
- Extended
itemizeS,itemizeMetc. to take argument for font size control, e.g.\begin{itemizeM}[small].- Built upon modular
kitemizeenvironment.
- Built upon modular
- Added
frameienvironment which automatically wraps content in flexibleitemizeenvironments with font size and spacing controls. - Added
frame2, likeframebut also has font size control likeitemizeMetc. and behaves like a regularframeotherwise.
lese 0.3.0
- Rename
check_all_slidestocheck_slides_many(), which in turn is a wrapper aroundcheck_slides_single() - Make documentation more consistent, e.g. by inheriting the
slide_fileparameter doc fromfind_slide_tex(). -
slide_status_pr.Rmdandslide_status.Rmd: Only show slide comparison column in output if comparison has been conducted (no longer the case by default) - Remove
make_slides()as it was effectively superseded by either- Running
compile_slide()on a file of interest directly, or - Using the
lecheckcli for more control and better error messages, or - Running
makein selected chapter directories in a shell as needed
- Running
- Add battery of new layout macros:
-
\imageand\imageCfor\includegraphics -
\splitVXYfamily for predefined positioning within columns (see the wiki)
-
lese 0.2.2
- Ignore
chapter-order-slides-all.texslide name incollect_lectures()
lese 0.2.1
- Added
check_slides()argumentcompare_slidesdefaulting toFALSE, making the no longer pressingly needed slide comparisons againstslides-pdfreference slides an optional step rather than default behavior.
lese 0.2.0
- Add new layout helpers
\splitV,\twobytwoand others, see https://github.com/slds-lmu/teaching_devops_issues/issues/18
lese 0.1.1
- Add heuristic to handle duplicate slide matches.
- If chapters move between lectures, the current heuristic prefers the most recently edited one.
- Example:
slides-gp-bayes-lm.texis included inlecture_slandlecture_advml, but the former is more recent.
- Extend LaTeX dependencies install via
make install-texbased on requirements of exercises inlecture_sl - Explicitly document that TeX Live 2024 is assumed for the entire setup.
lese 0.1.0
-
lecheck: Addcleansubcommand to runlatexmk -Cand nothing else. -
lecheck: Add--pdf-copyflag to copy compiled slides toslides-pdf/<slide-name>.tex. -
lecheck: Add--no-comparison-pdfflag to avoid creating diff PDFs viacompare_slides(). -
lecheck: Add--no-marginflag that compiles slides without speaker margin. - Add
marginflag tocompile_slides(andcompile_slides_tinytex(to facilitate with/without margin compilation - Add
lese::set_margin_token_fileutility to manage the token file for the above. - Improve robustness of lecture directory listing in
collect_lectures(). - Add
file_counts.qmd(still needs some cleanup and ideally a subdirectory, but paths…) - Start taking versioning somewhat seriously.