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:
114
slides_template/README.ltx-talk
Normal file
114
slides_template/README.ltx-talk
Normal 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.
|
||||
Reference in New Issue
Block a user