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>
115 lines
4.9 KiB
Plaintext
115 lines
4.9 KiB
Plaintext
================================
|
|
=== 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.
|