20
0

Document the ltx-talk port and what is still missing

Covers the build targets, why only the slides build is expected to
validate, and how the notes are captured. Also records the known gaps so
they are not rediscovered later: frame titles are not emitted as
headings despite the role map declaring frametitle -> H4, overlay
tagging has an open upstream bug for the \only forms, and talk-notes.sty
depends on two ltx-talk internals that a future release may rename.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-13 19:12:23 -07:00
parent 95a368afc6
commit 109d9dc5c2

View File

@@ -0,0 +1,114 @@
================================
=== ltx-talk port ==============
================================
This branch is the presentation template ported from beamer to the
ltx-talk class. It is experimental and kept apart from master, where the
beamer template is still the one in daily use.
The reason to move is accessibility. Beamer cannot produce a genuinely
tagged PDF: the master template validates as PDF/UA-2 only because
tagpdf marks everything it was not told about as decorative, so a screen
reader gets the frame titles and nothing else. Beamer 3.77 has since made
this worse by refusing \DocumentMetadata outright, which breaks tagging
on TeX Live 2025 entirely.
ltx-talk was written by the LaTeX Project with tagging as a design goal,
and the difference in the output is not subtle. Slides built here carry
real paragraphs, lists as L/LI/Lbl/LBody, sections as headings, formulas
as MathML, and alt text that actually reaches the PDF. veraPDF passes on
the strength of that structure rather than in spite of its absence.
================================
=== Requirements ===============
================================
* TeX Live 2025 or newer (ltx-talk needs LaTeX 2025-11-01 or later)
* LuaLaTeX; XeTeX is not supported
* Python 3 with pypdf, for assembling the notes PDF
* veraPDF, to check conformance
Fonts and figures are the same ones the beamer template used and sit
beside the source. They have to: LuaTeX fails to resolve a
parent-relative Path= for fonts and dies with an unhelpful
empty-filename error.
================================
=== Building ===================
================================
make slides the deck; this is what gets uploaded
make notes double-width slide + notes pages for presenting
make validate check the deck against PDF/UA-2
make pdfpc build the notes PDF and open it in pdfpc
Only the slides build is expected to validate. The notes PDF is
assembled by hand from two PDFs, which destroys the tag tree, and that is
fine: it exists to be read while talking and is never shared.
================================
=== Speaker notes ==============
================================
ltx-talk has no \note command. Its README and website describe speaker
notes as part of what the class is for, but the feature has not been
written: the request is open upstream as issue #156, where the maintainer
has said notes are wanted but that the interface needs thought first. As
of v0.5.3 nothing has landed.
Notes here are therefore captured rather than typeset. talk-notes.sty
defines \note so that it contributes nothing to the slides and instead
records its text to a side file, and mknotes reads that file afterwards
to build the presenter PDF.
The awkward part is that a frame is not a page. Overlays expand one frame
into several slides, and how many is not knowable from the source. So
talk-notes.sty writes a record for every page from the shipout hook,
which is the first moment at which the frame and slide identity of a page
is settled:
PAGE 3|FRAME 3|SLIDE 1
PAGE 4|FRAME 3|SLIDE 2
PAGE 5|FRAME 3|SLIDE 3
Notes take the same overlay specifications as everything else, so
\note<1>{...} appears only beside the first slide of its frame and
\note<3->{...} only from the third on. A note without a specification
runs alongside the whole frame.
The assembled page puts the slide on the left and, on the right, a grey
band carrying the section and the position in the talk, a thumbnail of
the current slide flush into the corner, and the notes below. Previous
and next slides are left to dspdfviewer and pdfpc, which show them
already.
================================
=== Theme ======================
================================
trantor.sty is Marco Pompili's Metropolis-like theme for ltx-talk,
vendored here under its MIT license (see LICENSE.trantor) and modified in
two places: font selection has been moved out to the document, since this
template ships OpenSans and RobotoMono, and the Euler maths font it
loaded by default is not packaged in Debian's TeX Live.
Upstream: https://github.com/mrc-pop/trantor
================================
=== Known gaps =================
================================
Frame titles are not headings. ltx-talk's role map declares
frametitle -> H4, but no such elements are emitted, so the tag tree has
sections but no per-slide headings. The manual calls the relationship
between frame titles and sectioning "still very much open".
Overlay tagging has an open upstream bug, issue #33, where \only<1> and
\only<2> produce output that fails validation. The \pause and <+-> forms
used here are the well-supported case.
ltx-talk is version 0.5.x and warns that almost all interfaces may still
change. talk-notes.sty reads two of its private internals,
\g__talk_frame_int and \g__talk_slide_int, which is the price of getting
an exact page mapping and the first thing to check if a future release
breaks the notes build.