Skip to contents

lese 0.6.0

  • Rename topic to chapter for consistency when referring to slide paths, i.e. lecture_i2ml/slides/<chapter>/foo.tex

Slide status reporting

  • Moved slide_status.Rmd and slide_status_pr.Rmd into inst/ so they are bundled with the package and retrieved via system.file().
  • New wrapper functions render_slide_status() and render_slide_status_pr() to render the reports from the installed templates. These replace direct rmarkdown::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_stamp stamp file for incremental build tracking, with make clean calling slide_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 .tex source) and fls (reads .fls recorder files from latexmk). The fls method is more accurate as it reflects what LaTeX actually reads during compilation (respects comments, \iffalse conditionals, etc.). Default method = "auto" uses fls when available, falling back to regex.
  • Both figure/ and figure_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 to dry_run = TRUE for safety. Never deletes attic/ figures.
  • parse_slide_figures(): Parse .tex slides for figure references (\includegraphics, \image, \imageFixed, etc.).
  • render_chapter_audit(): Render HTML audit reports from within any lecture directory. Bundled chapter_audit.Rmd template is installed with the package.
  • All audit functions accept lecture_dir parameter, defaulting to here::here(), so they work both from lecture_service/ and from within individual lecture repos.

Script Execution and Dependencies

  • run_chapter_scripts() / run_script(): Execute chapter scripts in isolated callr subprocesses 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 of library(), require(), pkg::fn calls).
  • 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 runs audit_chapter() per lecture/chapter after compilation, detecting orphaned and missing figures using .fls recorder 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-lese target: installs the lese R package from GitHub via pak (bootstraps pak if needed). Accepts ref=<branch/tag> for specific versions.
  • Split clean into texclean (auxiliary files only, keeps PDFs) and clean (auxiliary files and PDFs), mirroring the chapter-level tex.mk targets.
  • New audit target: renders HTML audit report for all chapters.
  • New deps / install-deps targets: check or install R package dependencies across all chapters.
  • New init-makefiles target: creates Makefiles in slides/<chapter>/ and slides/<chapter>/rsrc/ directories if missing.

Chapter-level (service/slides/tex.mk)

  • New audit target: run figure audit for a single chapter.
  • New clean-orphaned-figures target: delete orphaned figures in figure/ and figure_man/ (git-tracked, reversible). Never deletes attic/ figures.
  • New check-repro target: end-to-end reproducibility validation — deletes figure/ (preserving attic/), runs rsrc/ scripts, then compiles slides.

Script-level (service/slides/R.mk)

  • New rsrc-level Makefile included via include ../../R.mk.
  • make / make all: run all .R scripts in isolated subprocesses. Accepts timeout=<seconds>.
  • make deps / make install-deps: check or install missing R package dependencies.

Bug fixes

  • Fix MultisessionFuture warnings about open FIFO connections when running check_slides_many() in parallel. The processx supervision was unnecessarily creating connections inside future workers.
  • Package installation checks in audit_chapter() and check_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). Previously fs::dir_ls(..., type = "directory") skipped symlinks.

lese 0.5.0

  • New service file: The root Makefile in 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_service Makefile to not error if no lectures are cloned (to allow just using make install etc.)
  • Warn if R is not installed for targets that need it, and link to rig as an installation suggestion.
  • Convert file_count.qmd to RMarkdown for backwards compatibility and consistency with other docs.

R package

  • Add Biblatex utility functions for references.bib processing 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 .log file was unexpectedly missing for checks.
  • Fix: Use fs::path_norm() instead of fs::path_real() for path normalization in collect_lectures() because the former expected log files to exist which may not exist.
  • Add flexibility for find_slide_tex() to allow compile_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 all target, new release target that does all the important things and copies to slides-pdf
    • Renamed most to slides
    • Option to use docker (make slides DOCKER=true),
  • Logo is now expected at ./local/logo.pdf
  • The \image macro now can take a url (starting with http[s]) to create clickable source link without having to create entry in references.bib.
  • New \imageFixed macro for fixed-position image placement
  • Slide check workflows now exit 1 if at least one slide does not compile correctly
  • Renamed frame2 to framev to avoid internal beamer package issues
  • framei and framev now override global itemize/enumerate font size control when using a custom font size, and itemizeM etc. now correctly inherit their surrounding font sizes when not specified.
  • framei and framev now support align argument for beamer frame alignment passthrough.
  • Add new ref-buttons furtherreading{} and sourceref{}, the later superseding \citelink{}. \image and friends internally use \sourceref now.
  • Add chapter-literature.tex in style to compile simple chapter-wise literature lists. Also adds make target literature.

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

lecheck cli:

  • Gains --docker argument, passed to compile_slide() to use latexmk_docker().
    • Currently uses a TeX Live 2023 image as default
    • Allows fully encapsulate compilation of slides with a static environment
  • Gains --postclean argument to run latexmk -c after compilation, removing all detritus but keeping the .pdf file.

LaTeX (service/style)

  • Discouraging the use of automatic and explicit \framebreaks, which cause rendering issues after some TeXLive version post 2023 cutoff:
    • The vbframe environment is considered deprecated and should be replaced with “regular” beamer frames.
    • Removed framenumber continuation counter from lmu-lecture.sty for simplification
  • Related: The vframe environment (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):

  • splitV now maps to splitVCC, not splitVTT.
  • itemizefill is renamed to itemizeF

New macros (see the wiki for usage instructions)

  • Extended itemizeS, itemizeM etc. to take argument for font size control, e.g. \begin{itemizeM}[small].
    • Built upon modular kitemize environment.
  • Added framei environment which automatically wraps content in flexible itemize environments with font size and spacing controls.
  • Added frame2, like frame but also has font size control like itemizeM etc. and behaves like a regular frame otherwise.

lese 0.3.0

  • Rename check_all_slides to check_slides_many(), which in turn is a wrapper around check_slides_single()
  • Make documentation more consistent, e.g. by inheriting the slide_file parameter doc from find_slide_tex().
  • slide_status_pr.Rmd and slide_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 lecheck cli for more control and better error messages, or
    • Running make in selected chapter directories in a shell as needed
  • Add battery of new layout macros:
    • \image and \imageC for \includegraphics
    • \splitVXY family for predefined positioning within columns (see the wiki)

lese 0.2.2

lese 0.2.1

  • Added check_slides() argument compare_slides defaulting to FALSE, making the no longer pressingly needed slide comparisons against slides-pdf reference slides an optional step rather than default behavior.

lese 0.2.0

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.tex is included in lecture_sl and lecture_advml, but the former is more recent.
  • Extend LaTeX dependencies install via make install-tex based on requirements of exercises in lecture_sl
  • Explicitly document that TeX Live 2024 is assumed for the entire setup.

lese 0.1.0

  • lecheck: Add clean subcommand to run latexmk -C and nothing else.
  • lecheck: Add --pdf-copy flag to copy compiled slides to slides-pdf/<slide-name>.tex.
  • lecheck: Add --no-comparison-pdf flag to avoid creating diff PDFs via compare_slides().
  • lecheck: Add --no-margin flag that compiles slides without speaker margin.
  • Add margin flag to compile_slides( and compile_slides_tinytex( to facilitate with/without margin compilation
  • Add lese::set_margin_token_file utility 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.