% \iffalse meta-comment
%
% Copyright 2026
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
% This file is part of the LaTeX base system.
% -——————————————
%
% It may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
%    https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2008 or later.
%
% This file has the LPPL maintenance status "maintained".
%
% The list of all files belonging to the LaTeX base distribution is
% given in the file `manifest.txt'. See also `legal.txt' for additional
% information.
%
% The list of derived (unpacked) files belonging to the distribution
% and covered by LPPL is defined by the unpacking scripts (with
% extension .ins) which are part of the distribution.
%
% \fi
% Filename: ltnews44.tex
%
% This is issue 44 of LaTeX News.

\NeedsTeXFormat{LaTeX2e}[2020-02-02]
\DocumentMetadata{tagging=on,pdfstandard=ua-2,tagging-setup={math/setup=mathml-SE}}
\documentclass{ltnews}
\usepackage{lua-unicode-math}

%% Maybe needed only for Chris' inadequate system:
\providecommand\Dash {\unskip \textemdash}

%% NOTE: Chris' preferred hyphens!
%% \showhyphens{parameters}
%% \hyphenation{because}


\usepackage{url,hologo}

\usepackage{csquotes}
\usepackage{multicol}
\usepackage{color}

\providecommand\hook[1]{\texttt{#1}}

\providecommand\key[1]{\texttt{#1}}
\providecommand\keyvalue[1]{\texttt{#1}}

\providecommand\struct[1]{\texttt{<#1>}}

\providecommand\meta[1]{$\langle$\textrm{\itshape#1}$\rangle$}
\providecommand\option[1]{\texttt{#1}}
\providecommand\env[1]{\texttt{#1}}
\providecommand\Arg[1]{\texttt\{\meta{#1}\texttt\}}


\providecommand\eTeX{\hologo{eTeX}}
\providecommand\XeTeX{\hologo{XeTeX}}
\providecommand\LuaTeX{\hologo{LuaTeX}}
\providecommand\pdfTeX{\hologo{pdfTeX}}
\providecommand\MiKTeX{\hologo{MiKTeX}}
\providecommand\CTAN{\textsc{ctan}}
\providecommand\TL{\TeX\,Live}

\providecommand\githubissue[2][]{\ifhmode\unskip\fi
     \quad\hfil\penalty500\strut\nobreak\hfill
     \mbox{\small\slshape(%
       \href{https://github.com/latex3/latex2e/issues/\getfirstgithubissue#2 \relax}%
          	    {github issue#1 #2}%
           )}%
     \par\smallskip}

% simple solution right now (just link to the first issue if there are more)
%
% one needs "xxx \unskip, yyy" if a comma should follow the first number

\def\getfirstgithubissue#1 #2\relax{#1}

% issues from the tagging-project:

\providecommand\taggingissue[2][]{\ifhmode\unskip\fi
     \quad\hfil\penalty500\strut\nobreak\hfill
     \mbox{\small\slshape(%
       \href{https://github.com/latex3/tagging-project/issues/\getfirstgithubissue#2 \relax}%
          	    {tagging-project issue#1 #2}%
           )}%
     \par\smallskip}

\providecommand\sxissue[1]{\ifhmode\unskip
     \else
       % githubissue preceding
       \vskip-\smallskipamount
       \vskip-\parskip
     \fi
     \quad\penalty500\strut\nobreak\hfill
     \mbox{\small\slshape(\url{https://tex.stackexchange.com/#1})}\par}

\providecommand\gnatsissue[2]{\ifhmode\unskip\fi
     \quad\hfil\penalty500\strut\nobreak\hfill
     \mbox{\small\slshape(%
       \href{https://www.latex-project.org/cgi-bin/ltxbugs2html?pr=#1\%2F\getfirstgithubissue#2 \relax}%
          	    {gnats issue #1/#2}%
           )}%
     \par}

\let\cls\pkg
\providecommand\env[1]{\texttt{#1}}
\providecommand\acro[1]{\textsc{#1}}

\vbadness=1400  % accept slightly empty columns


\let\finalpagebreak\pagebreak % for TUB (if they use it)
\let\finalvspace\vspace       % for document layout fixes

\makeatletter
% maybe not the greatest design but normally we wouldn't have subsubsections
\renewcommand{\subsubsection}{%
   \@startsection {subsubsection}{2}{0pt}{1.5ex \@plus 1ex \@minus .2ex}%
                  {-1em}{\@subheadingfont\colonize}%
}
\providecommand\colonize[1]{#1:}
\makeatother


% Undo ltnews's \verbatim@font with active < and >
\makeatletter
\def\verbatim@font{\normalsize\ttfamily}
\makeatother


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\providecommand\tubcommand[1]{}
\tubcommand{\input{tubltmac}}

\publicationmonth{November}
\publicationyear{2026  --- DRAFT version for upcoming release}
%\publicationyear{2026}

\publicationissue{44}

\begin{document}

\maketitle
{\hyphenpenalty=10000 \exhyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000
\tableofcontents}


\setlength\rightskip{0pt plus 3em}

\newpage

\section{Introduction}

As with the previous releases of \LaTeX{}, our major focus remains on
improving the out-of-the-box accessibility of \LaTeX{}; it is
gratifying to see how well this now works, and that more and more
people embark on this journey with us. Not surprisingly, a large
portion of this newsletter therefore covers improvements in that space.

Of course, there are also other improvements and corrections, as you
will find out if you read on.


\section{News from the Tagged PDF project}

\subsection{TUG 2026, Calgary}

This year's TUG conference was held in Calgary, Canada. There were
many talks related to accessibility, all worth checking out on
YouTube~\cite{44:videos}. Many of them have been written up in the
conference issue of TUGboat~\cite{44:isssue47}.  Among them are two
talks from \LaTeX{} team members: Ulrike's \enquote{News from the
  \LaTeX{} Tagged PDF project: 2026}~\cite{44:ufi} and Frank's
\enquote{Towards accessible document classes}~\cite{44:fmi}.  Timothy
Prescott gave two presentations: one about \enquote{Converting a PDF
  textbook to be accessible} with the help of the recent \LaTeX{}
release~\cite{44:tpr}; and one about \enquote{Creating accessible
  presentations with \cls{ltx-talk}}~\cite[p.\,208]{44:isssue47}
describing the recent work by Joseph Wright on \cls{ltx-talk} that
offers a \cls{beamer} replacement with which one can produce
accessible slides.  John Lienhard discussed his work on
\enquote{Modernizing MIT's thesis template:
  \cls{mitthesis.cls}}~\cite[p.\,212]{44:isssue47}, again making use
of work by the \LaTeX{} team.  On the general struggle with
non-accessible material Aarush Bhat (a blind student) and Timothy
Erickson, his tutor, gave a talk on \enquote{Visual impairment meets
  mathematics: Bypassing institutional
  inertia}~\cite[p.\,195]{44:isssue47}\Dash all these, and many more,
are worth listening to or reading.



\subsection{\cls{ltx-talk}:\ an accessible class for presentations}

Early in the planning for the accessible PDF project, we decided that the
\cls{beamer} class would not be able to follow the pattern of
\enquote{upgrading in-place} that we are using for most documents. Whilst
\cls{beamer} has a (generally) very good \emph{user} interface, the code
internals are complex, and the entre class has no tests or comments which would
allow adjustment.

Joseph therefore started on a brand-new class for presentations,
\cls{ltx-talk};\footnote{Joseph is rather accidentally the maintainer of
\cls{beamer}!} work commenced in 2023 but moved slowly to the first testing
release last June. The key aims of \cls{ltx-talk} are to keep the (good)
\cls{beamer} syntax for users, but to write the code from the outset to support
tagging.

At the time of writing, the \cls{ltx-talk} class has reached v0.6.10, with
$55$~releases in total. Those have seen new features added and a large number
of issues addressed, but there is still more to do. The first priority for
class development has been to provide suitable logic structure, with design
aspects more limited to date. Getting \cls{ltx-talk} right also needs supporting
work in the kernel and the L3 programming layer, but this is all progressing
well.

A typical \cls{ltx-talk} document looks pretty much the same as a \cls{beamer}
one, other than requiring \cs{DocumentMetadata}
\begin{verbatim}
\DocumentMetadata{tagging = on}
\documentclass{ltx-talk}
\begin{document}
\begin{frame}
  \frametitle{Some things we did}
  \begin{itemize}[<+->]
    \item Get cape,
    \item Wear cape,
    \item \dots{}
  \end{itemize}
\end{frame}
\end{document}
\end{verbatim}
This will produce three slides, with the list revealed one item at a time, in
the visual output, but in the tagging is a single list without repetition.

Some aspects of the input syntax for \cls{ltx-talk} are still open, most
notably whether all frames should have a title or, as at present, this should
be given using an optional \cs{frametitle} command (as shown). However, the
majority of the input syntax is sufficiently-stable that users can convert
their \cls{beamer} content: see Timothy Prescott's presentation at TUG'26, for
example.

Presentation design in \cls{ltx-talk} is driven by templates, but at present
these are very much placeholders. We therefore expect that users will need to
revise some aspects of their preambles as the class moves forward. However,
this does not affect the \emph{content}, which is the bulk of most presentation
sources. As such, we strongly encourage users to transition to \cls{ltx-talk}.

\subsection{Tags for paragraphs}

Most of the time a \emph{paragraph} contains only some sentences,
without any further structure. However, it is also possible that it
has a more complicated structure, e.g., it may contain a quote, or a
list, with some text before or after, all belonging to the same
paragraph. For example:
\begin{verbatim}
  Don Knuth sends a warm welcome from afar
  and writes:
  \begin{quote}
    \sffamily Happy TeX'ing in Calgary
  \end{quote}
  This is what we did!
\end{verbatim}
To model this in the PDF structure, \LaTeX{} surrounds the whole
paragraph with a \struct{semantic-para} tag; then, inside this, each
individual text block has its own tag: i.e., in the above example, the
text \texttt{Don ... writes:} and the text \texttt{This is ...!} each
have a \struct{text-block} tag and the quote has a \struct{quote}
tag\footnote{Note that HTML does not have the context of a semantic
paragraph and so would mark each of the texts, before and after the
quote, with a \struct{P}, thus effectively claiming that they are
individual paragraphs whilst in reality they together make a single
paragraph.}, so you end up with
\begin{verbatim}
 <semantic-para>
  <text-block>
    Don Knuth sends a warm welcome from afar
    and writes:
  </text-block>
  <quote>
   <text-block>
      Happy TeX'ing in Calgary
   </text-block>
  </quote>
  <text-block>
    This is what we did!
  <text-block>
 <semantic-para>
\end{verbatim}

We initially called these paragraph-related tags \struct{text-unit}
(now \struct{semantic-para}) and \struct{text} (now
\struct{text-block}), but the original names were difficult to
understand, so we changed them.

We also introduced the \struct{text-fragment} tag for use inside a
\struct{text-block} when there is a need for a sub-structure.



\subsection{Provide an \key{order} key mechanism for templates}

Templates often have to typeset several items of textual data (from
keys and/or from template arguments) with slight variations from
instance to instance: e.g., the ordering and the separation between
the items might differ, or in other cases only a subset of the items
are present (or supported). For example, a theorem-like environment
typically wants to have a fixed title, a number, some punctuation, and
possibly a note (provided through document input). However, one design
might ask for \enquote{Lemma 3.2 (note)}, the next for \enquote{3.2
  Lemma. (note)}, and another for \enquote{3.2 Lemma \textit{note}.}
with a different ordering and changes in the punctuation.

We have now provided code to support this in a general way: e.g.,
templates can offer an \enquote{order} key in which the designer
specifies the data items and their separation. Tagging support is
automatically provided. The documentation is currently available via
\texttt{texdoc latex-lab-template}.  In due course this will be moved
to \texttt{lttemplate} in the kernel.


\section{Tagged PDF: theorem-like environments}

\subsection{Use the \key{order} key mechanism for theorem-like environments and proofs}

The theorem-like templates have been rewritten to make use of the new
\key{order} key mechanism.  As a result a number of keys got replaced
with new (more standardized) ones. Thus, for \key{title},
\key{number}, \key{note}, and \key{punct} there are now keys for
customization with the names \key{title-decls}, \key{number-decls},
etc., as well as \key{title-format}, \key{number-format}, etc., and
these keys all expect an argument.

The default for the \key{order} key in theorem-like environments is
\begin{verbatim}
  order={title,separator-1,number,
         separator-2,note,punct}
\end{verbatim} 
To put the number first, or the punctuation directly after the number,
simply switch around the  names in the comma list. 

Also note that two distinct separator items are supported (both
defaulting to a space), which means that one can easily alter one or
both spaces individually simply by setting the keys \key{separator-1}
and/or \key{separator-2} on the instance.

The default for \key{order} in proofs is slightly simpler because
proofs aren't numbered so that the template has no \key{number},
\key{number-decls} or \key{number-format} keys and consequently there
can be at most a single separator:
\begin{verbatim}
  order={title,separator,note,punct}
\end{verbatim}

This also means proofs can now have a note (which is an extension to
\pkg{amsthm}) 
that could be given as
\begin{verbatim}
  \begin{proof}[note={my note}]
\end{verbatim}
The default setting of the \key{note-format} key makes the note get
surrounded with parentheses.



\subsection{Fix a color leakage in theorem-like environments}

If the \key{body-decls} key was given a color specification, then that
color leaked back into the caption of that theorem: this is because
placing the caption was delayed until a paragraph got started, by
which time the body declarations were already in force.\footnote{Color
in \TeX{} is different to, say, font attributes: if you have already
placed some text in a box it still reacts to the current color when
the box is placed into the document. In contrast, font changes would
have no effect whatsoever at this point.} This was fixed as part of
the \key{order} key rewrite.
%
\taggingissue[s]{1225 and 1350}



\subsection{Subtle improvement for theorem-like captions}

If a theorem caption uses a mixture of italic and upright glyphs,
e.g., \enquote{\textit{Remark} 2.}, then an italic correction should
be added to ensure that text doesn't get too close together. In the
original implementation that simply worked through the automated
mechanisms provided with \cs{textit} or \cs{textup} but the way the
caption is now constructed the support for tagging (e.g.,
\cs{pdffakespace}) intervenes and the commands can no longer
automatically detect whether an italic correction needs adding. We
have therefore explicitly added a \cs{/} where necessary.
%
\taggingissue{1632}



\subsection{Theorem-like environment instances for AMS classes}

The AMS classes do not load the \pkg{amsthm} package but inline its
code (with the help of \pkg{docstrip}) which makes it complicated to
provide first aid code for tagging. The classes also have their own
defaults for environments defined with \cs{newtheorem}. These layouts
are now replicated when the classes are used together with
\cs{DocumentMetadata} to produce accessible documents.
%
\taggingissue{1632}



\section{Tagged PDF: block and list environments}

\subsection{Revisiting the para-handling logic for block environments}

In \LaTeX{}, block environments like \env{itemize} or \env{quote}
typically scan for a following empty line and if there is none then
the text following the environment is treated as being part of the
current semantic paragraph, continuing it: no paragraph indentation is
therefore added, nor anything else that signals the start of a new
semantic paragraph.

In some situations, or for some types of block environments (such as
theorem-like environments), this behavior of continuing the current
semantic paragraph is not wanted. We have therefore added a new
boolean template key \key{standalone} which, when set to
\keyvalue{true}, causes the environment to surround itself with
implicit \cs{par} commands, mimicking the effect of explicit empty
lines in the source.

We took the opportunity to also fix a couple of subtle problems with
the mechanism determining the end of the semantic paragraph so that it
hopefully works better in a few unusual situations.
%
\taggingissue[s]{1402 and 1415 among others}



\subsection{Replaced \key{legacy-code} key in blockenv template}

The \texttt{blockenv} template had a \key{legacy-code} key, used to
support some legacy setup for the generic \env{list} environment and
for the \env{verbatim} extension offered by the \cls{ltugboat} class
(where you can write \verb=\begin{verbatim}[\small]= to get a verbatim
display in a smaller font size).

However, if the \env{verbatim} was directly preceded by text, then the
content of the key was evaluated while still in horizontal mode. In
that case the \cs{small} changed not only the verbatim display but, as
a side effect, also altered the \cs{baselineskip} of the preceding
text. This has been corrected by providing two keys:
\key{early-legacy-code}, which is evaluated near the start of the
template, whilst possibly still in horizontal mode (used by
\env{list}); and \key{late-legacy-code}, which is evaluated after
returning to vertical mode (used by \env{verbatim}).
%
\taggingissue{1503}



\subsection{Make \cs{item}\texttt{[]} produce an empty item label}

After switching to key/value support in \cs{item} a side effect was
that an empty optional argument was understood as an empty key/value
list and not as a request for replacing the generated item label with
an empty one. This has now been changed for better compatibility with
existing usage.
%
\taggingissue{1557}

\subsection{Extending the \pkg{enumitem} emulation}

The package \pkg{enumitem} is not compatible with the new list code and in the 
last release we provided an emulation which supports most of the keys and the 
\cs{newlist} and \cs{setlist} commands. This emulation has now been extended. 
The key \key{labelindent} has been added, and the keys \key{leftmargin}, \key{labelsep}, 
\key{labelwidth}, \key{labelindent} and  \key{itemindent} now support the special value 
\enquote{\texttt{!}}. The value \enquote{\texttt{*}} no longer gives a low-level error, 
but for now falls back (with a warning) to the \enquote{\texttt{!}} value. 
Initial support for the \key{ref} key has been added too. 

\section{Tagged PDF: heading commands}


\subsection{New tag names for heading structures}

Until now, heading structures used a mix of PDF tags (\texttt{Sect),
  \texttt{Span}} and tags from the \LaTeX{} namespace
(\texttt{section}, \texttt{section-number}).  This has now been
consolidated and the \LaTeX{} namespace is used for all heading
structure tags.

In the \LaTeX{} namespace we now denote by \texttt{chapter} the
complete chapter text (i.e., what was previously the \texttt{Sect})
and use \texttt{chapter-heading} to denote the heading title for the
chapter (i.e., the mandatory argument of \cs{chapter}).  All other
document divisions are handled in the same manner, e.g., the namespace
now has \texttt{section} and \texttt{section-heading}, etc., right
down to \texttt{subparagraph} and \texttt{subparagraph-heading}.



\subsection{Use the \key{order} key mechanism for heading commands}

In \LaTeX{} release 2026-06-01 we provided a reimplementation of
heading commands using templates. The initial set of templates had
only limited flexibility, modeling layouts closely related to those
from the standard \LaTeX classes. As a consequence, they used keys
such as \key{number-title-sep} to define the space between heading
number and title, on the assumption that both are placed exactly in
that order.

We have now written new extended templates to allow for reordering of
heading elements and more flexible spacing between them, but in that
scenario such keys no longer make sense and they have therefore been
replaced with more generic keys such as \key{separator-a},
\key{separator-b}, etc., which do not take a length value but accept
general code.

As part of this change we also replaced the \key{prefix} key (for the
fixed text such as \enquote{Chapter}) by a key named \key{text} (short
for \emph{fixed text}) since this text is not always used as a prefix
depending on the design.

If you have defined instances using the first template version then
you can (for now) continue to use them simply by changing the template
names in your instance declarations from \meta{name} to
\meta{name}\texttt{-v1}: for example, you have to change from this
\begin{verbatim}
 \DeclareInstance
     {heading}{chapter}{display} {...}
 \DeclareInstance{headformat}
     {heading}{chapter}{display} {...}

 \DeclareInstance{heading}
     {section}{display} { ... }
 \DeclareInstance{headformat}
     {section}{hang} { ... }
 ...
\end{verbatim}
  to this 
\begin{verbatim}
 \DeclareInstance
     {heading}{chapter}{display-v1} {...}
 \DeclareInstance{headformat}
     {heading}{chapter}{display-v1} {...}

 \DeclareInstance{heading}
     {section}{display-v1} { ... }
 \DeclareInstance{headformat}
     {section}{hang-v1} { ... }
 ...
\end{verbatim}
No other changes are necessary for now. However, going forward you
should switch to the extended templates because the \texttt{-v1}
templates will eventually be dropped.
%
How to upgrade to the new templates is explained in \texttt{texdoc
  latex-lab-sec-template}.



\subsection{Support \key{force-unnumbered} key in heading templates}

When designing heading commands there are occasions where you want to
always enforce that a heading remains unnumbered even though it should
be listed in the table of contents, in bookmarks or in the running
header. For this, the heading templates now offer the boolean
\key{force-unnumbered}. It defaults to \texttt{false} in which case
numbering is determined in the usual way, e.g., though
\texttt{secnumdepth}, etc.
%
\taggingissue{1473}



\subsection{Support \key{placement=ragged} in heading templates}

The \key{placement} key in heading templates was augmented to support
the value \keyvalue{ragged} in addition to \keyvalue{page},
\keyvalue{top}, and \keyvalue{normal}. This key value works like
\keyvalue{normal} (i.e., the heading can appear anywhere on the page)
but if the heading happens to trigger a page break then the previous
page will be set \enquote{raggedbottom} and not spread out to fill the
page in the \cls{book} or \cls{report} classes. This is useful on
pages that do not have a lot of stretchability in the first place and
thus the space between paragraphs is used for stretching which often
looks ugly.

It can either be specified on the instance level by setting the
\key{placement} key to \keyvalue{ragged} or for individual headings in
the document by setting it in the optional argument to the heading.
%
\githubissue{1844}



\subsection{Heading templates now support column spanning}

In two-column documents top-level headings usually start on a new page
and span both columns. In \LaTeXe{} this was hardwired and headings
such as \cs{chapter} showed this behavior. In the new template-based
implementation this is now more flexible and one sets this
independently from forcing a new page by setting the key
\key{column-spanning} to \keyvalue{true} (default for \cs{chapter}) or
\keyvalue{false} (default for other headings).  Thus
\begin{verbatim}
 \section[column-spanning=true]{title}
\end{verbatim}
generates a one-off \cs{section} heading that spans both columns. Due
to the way the \LaTeX{} output routine is currently implemented that
automatically also starts a new page, i.e., one can't generate
spanning headings in the middle of a page (that can only be done with
the \pkg{multicol} package at the moment). That restriction may be
lifted when the output routine is redefined.
%
\taggingissue{1436}


\subsection{Setting left and right margins for (some) headings}

To provide more flexibility in the design of headings the
\texttt{headformat} templates \texttt{display} and \texttt{hang} now
support the keys \key{left-margin} and \key{right-margin}. With their
help you can indent or outdent the whole heading on either or both
sides. This is in addition to the key \key{heading-indent} which is a
horizontal space at the beginning of the first and often only line.

The \texttt{headformat} template \texttt{runin} only offers the latter
key as in a run-in heading the heading is on the same line as
following text so the concept of margins for the heading does not
really apply.



\subsection{Logic of \key{after-penalty-vspace} key slightly improved}

If a page break happens before a heading, then the heading is placed
at the very top of the next page without any space (more exactly
\cs{topskip} is applied for the first line of text, but as this is
normally equal to 10pt and headings are typically larger the glyphs in
the heading title normally touch the top of the text area of the
page).

This behavior changes if the key \key{after-penalty-vspace} is set to
any value different from its sentinel default (\cs{maxdimen}). In that
case the baseline of the first line of the heading will be a
\cs{baselineskip} plus the value of this key down from the top of the
page. This means that with \key{after-penalty-vspace}\texttt{=0pt} the
baseline of the heading text will be a full \cs{baselineskip} away
from the top of text area and its glyphs will no longer touch the top.

The most common use for this key is in headings like \cs{chapter} that
always start a new page and want the heading text to drop down by a
noticeable amount. But setting it in other circumstances can be useful 
too: e.g., use \texttt{0pt} to ensure that the heading is always placed 
in the same position, regardless of the glyphs in its title. 
%
\taggingissue{1623}


\subsection{Conditional heading template instances}

In some document designs, different layouts for headings are used
depending on the page they are placed on. For example, the heading
text always extends into the outer margin, i.e., to the right on
recto (odd) pages and to the left on verso pages.  The design of
headings without a number is also fairly often quite different from
that for headings with a number.

Capturing such variations in every \texttt{heading} template is
possible but fairly complicated and inefficient. For that reason we
offer a different interface (similar to that for document
\enquote{contexts}~\cite[p.\,121,~127]{44:ltnews}).  If the
\texttt{heading} template instance for the heading command is
\meta{name} then
\begin{description}
  \item[\ttfamily\meta{name}:recto] if defined is the instance name
    for recto (odd) pages;
  \item[\ttfamily\meta{name}:verso] is the instance name for verso
    pages;
  \item[\ttfamily\meta{name}:\meta{recto-or-verso-or-empty}:unnumbered]
    is the instance name for unnumbered headings on recto, verso, or
    all pages.
\end{description}
If some of these instances are defined then the most specific one
matching the current context is used, e.g., a \cs{section*} command on
an odd page will try to use \texttt{section:recto:unnumbered} or
\texttt{section::unnumbered} or \texttt{section:recto} or
\texttt{section} in that order.

Instead of, or in addition to, setting up special \texttt{heading}
instances it is also possible to use \cs{IfVersoHeadingTF} inside
instance keys. It executes the true or false branch depending on
the page the heading is typeset. \texttt{T} and \texttt{F}
variants are also available.



\subsection{Replaced \key{start-code} and \key{final-code} keys in heading templates}

The \key{placement} key in heading templates is responsible for
defining the pagination behavior of a heading: e.g., \texttt{top}
makes the heading start on a new page; and \texttt{normal} allows the
heading anywhere on a page but requires at least two lines of text
afterwards, etc.

Internally, this key did reset two other keys (\key{start-code} and
\key{final-code}) to carry out the necessary actions. These keys could
also be explicitly set if the available options for \key{placement}
needed further adjustments (in which case \key{placement} was
ignored). Thus, these keys are strongly tied to \key{placement} (but
this wasn't obvious from their names): e.g., you couldn't just set
\key{final-code} without breaking the layout of the heading in
surprising ways.

To make this dependency clearer, we have changed the key names to
\key{placement-start-code} and \key{placement-end-code}, and also
updated the documentation of all three keys. The old key names will
remain usable for a while, but users who had used them in instances
should update their code as these names will eventually get removed.
%
\taggingissue{1617}


\subsection{Run-In headings followed by displayed math}

When a run-in heading, such as \cs{paragraph}, was immediately
followed by a displayed math environment the heading was inserted too
late which confused the tagging support (as the tagging for the
formula had already started). This has now been corrected.
%
\taggingissue{1571}



\subsection{Heading template instances for AMS classes}

In making documents using the AMS document classes accessible we have
now reimplemented their headings using the new heading templates (that
support tagging). Further work is necessary to make these document
classes fully accessible, but the current heading support is a big
step towards this.
%
\taggingissue{1477}


\subsection{Emulation of \pkg{titlesec} package started}

Until now, loading the \pkg{titlesec} package in a document that
started with \cs{DocumentMetadata} (with or without tagging enabled)
was not possible: the combination would spit out a number of warnings
and then errors because it didn't understand the new template-based
heading commands.

We have therefore started to provide an emulation of \pkg{titlesec}
that eventually implements all of its interfaces and can then be
automatically loaded as as replacement package.

At the moment all it does is implementing the package options, e.g.,
you can already use
\begin{alltt}
 \cs{usepackage}[sf,sl,\meta{more options}]\{titlesec\}
\end{alltt}
and get slanted sans serif headings, etc. However, other important
customization commands, such as \cs{titleformat}, are still missing
and will be added in the 2027 June release. Nevertheless, we already
now replace \pkg{titlesec} by this emulation when
\cs{DocumentMetadata} is used because this improves the situation (no
errors and some aspects already work) and can be used for testing.

The progress of this work is tracked in the file
\texttt{latex-lab-titlesec.pdf}.

\subsection{Tagging of headings in minipages and parboxes}

By default the title and the body of chapters, sections and so forth are surrounded 
by a \struct{Sect} structure. For this, a heading command first ends previous \struct{Sect} 
structures of the same and higher level and then starts a new one.
If a heading command is used inside a minipage or parbox these \struct{Sect} structures
overlap with the box structures and so break the structure tree. We therefore now simplify 
the tagging of headings inside such boxes: they only tag the heading title and
do not try to produce \struct{Sect} structures. To end a previous \struct{Sect} structure
manually before such a minipage, e.g., \verb+\tagpdfsetup{sec/end=section}+ can be used.


\section{Tagged PDF: other fixes and improvments}


\subsection{Package \pkg{fncychap} is now tagging compatible}

The \pkg{fncychap} package defines some half-a-dozen chapter layouts
that can be selected through options to the package. These layouts can
then be further customized through a series of commands defined by the
package. Due to its age, and the fact that it overwrote various
internals, the resulting chapter headings were not usable when
producing a tagged and accessible document.

We have now provided a simple template with appropriate tagging
support (but without any customization keys) that makes use of the
code in the package and, in this way, supports all the heading designs
offered by the package, as well as the customization possibilities it
provides. With these fairly minor adjustments the package is now
compatible with tagging and can be used when making accessible
documents.
%
Because of the customization possibilities that allow for arbitrary
rewrites, we have to make the tagging support fairly general to cover
such variants. There is a downside to this: in several designs we end
up with a number of empty \texttt{heading-fragment} structures. While
this is allowed and doesn't do any harm (other than resulting in some
unnecessary processing by the PDF reader) it is not as elegant as a
solution with standard templates would be.
%
\taggingissue{570}


\subsection{Package \pkg{listings} is now (mostly) tagging compatible}

The \pkg{listings} package offers various verbatim-like environments
and commands for pretty-printing source code. We now created a style
that is loaded automatically after the \pkg{listings} package to make
it compatible with tagging.

There are still some open points, e.g., frames are not perfectly
tagged, when escaping to math the math is not tagged; when using
braces to delimit the argument of \cs{lstinline} there is no tagging,
but for most standard cases it is now possible to use the package.
%
\taggingissue[s]{70 and 1074}




\subsection{\cs{newlist} failed for \texttt{description} lists}

The emulation of \pkg{enumitem}'s \cs{newlist} declaration failed when
the source list was \texttt{description}. This has now been corrected.
%
\taggingissue{1518}


\subsection{Storing more titles for named references}

When using the \pkg{nameref} package it is possible to reference the
names of theorems (as given by the optional argument) and to reference
the optional argument of items in description lists. \pkg{nameref}
made this possible by patching the internal commands of theorems and
lists. These patches no longer worked with the new theorem and list
code when \cs{DocumentMetadata} is used. This has now been repaired:
Theorems and items with optional arguments will update
\cs{@currentlabelname} and so allow \cs{label} to store this value for
later reference. Items will also store the optional argument in
\cs{@currentlabel} and so \cs{ref} will reference this value.  For
example, given the following input
\begin{verbatim}
  \begin{enumerate}
  \item                  First item 
  \item[1b] \label{item} Second item
  \end{enumerate}
  See \ref{item} ...
\end{verbatim}
then the \cs{ref} in last line will produce \enquote{1b}.
%
\taggingissue{1538}



\subsection{Fixed issue with \texttt{end} hooks for math environments}

Due to an issue in the definition of
\cs{math\string_register\string_env:nn}, adding to the
\hook{env/\meta{env}/end} hook for a math environment such as
\env{equation} produced an error.  The definition of
\cs{math\string_register\string_env:nn} has been fixed and made
equivalent to what was previously called
\cs{math\string_register\string_halign\string_env:nn}. The latter
command has been removed.
%
\taggingissue{1603}


\subsection{More control over the tagging of title and headings}

HTML pages and accessibility API typically do not distinguish titles
as distinct from section headings. Titles are marked up as
\verb|<h1>|, and following heading commands are then marked up as
\verb|<h2>| etc. This allows title to be announced by screen readers
and take part in navigation.

For PDF 1.7 the PDF association recommends to tag a title like a
normal paragraph and to start the tagging of the heading commands with
\verb|<h1>|. Such titles are not announced and do not take part of the
navigation.

PDF 2.0 introduced a new \textbf{Title} structure element which should
in principle allow titles to be distinguished, however at the present
time it has no defined mapping to the System Accessibility API, and
the
\enquote{\href{https://pdfa.org/deriving-pdf-to-html-version-1-2/}{Deriving
    PDF to HTML~1.2}} maps it to \verb|<div>|. As such, tagging with
\textbf{Title} is equivalent to tagging with \textbf{Div} or
\textbf{NonStruct} and does not produce accessible titles. Titles are in that case
simply read as ordinary text.

Given that the standard mappings to the Accessibility API and to HTML
may change, it is not always clear what is the best tagging to use at
the present time.  The code therefore introduces some options to allow
document authors some control here. These options can be set with the
tagging setup key \texttt{title} which can take the values
\texttt{Title} (the default), \texttt{H1}, \texttt{html} and
\texttt{aria}.  The default settings maps the title text and part
headings to \textbf{Title} and the tagging of the other heading
commands then starts with \texttt{H1}.  The option \texttt{H1} maps
the title text and part headings to \textbf{H1} and the other heading
commands then start with \textbf{H2}.  This gives currently the best
accessibility experience.  A full description of the key and its
values can be found in \texttt{latex-lab-title.pdf}.




\section{New or improved commands}

\subsection{Testing whether a certain template is defined}

To better support the declaration of template instances we now provide
the conditional \cs{IfTemplateExistsTF} (and its \texttt{T} and
\texttt{F} variants) so that it is possible to take different actions
depending on whether or not a certain template is defined.


\subsection{New Lua helper \texttt{luatexbase.new\_luacommand}}

Binding a Lua function to a control sequence with \LuaTeX{} normally
requires three steps: allocate a Lua function slot with
\texttt{luatexbase.new\_luafunction}, store the function in the Lua
functions table at that index, and then call \texttt{token.set\_lua}
to bind the control sequence to the slot. The new helper
\texttt{luatexbase.new\_luacommand(\meta{csname}, \meta{fn},
  \meta{\ldots})} combines these three steps into one call; any
additional arguments are passed on unchanged to \texttt{token.set\_lua}.
%
\githubissue{2191}



\subsection{Conditional punctuations}

The AMS classes already had a mechanism to conditionally add
punctuation characters, e.g., at the end of a heading title if that
title didn't already end in a punctuation character. We have now
adopted that idea for general use by offering \cs{AddPunct} (normally
for use in template instances) so that one can write, for example
\begin{verbatim}
  title-format = #1\AddPunct{.}
\end{verbatim}
As a result, the heading title has a period at its end unless it
already ends in a punctuation, e.g, a \enquote{!}.
%
\taggingissue{1477}




\subsection{Providing \cs{strongemph}}

In addition to \cs{emph} to indicate emphasis there is a second
concept in PDF and HTML called \enquote{strong emphasis} typically
signaled using bold face. Some support for this was available in
\pkg{fontspec} but not as part of the \LaTeX{} kernel. We have now
implemented \cs{strongemph} directly in the kernel so that it can be
used in any document and in particular can generate appropriate tags
when accessible documents are produced.

To allow for adjusting its layout we also provide 
\cs{DeclareStrongEmphSequence}, \cs{strongemreset} and \cs{strongemforce}, 
acting similarly to \cs{DeclareEmphSequence}, \cs{emreset}, and
\cs{emforce} for the \cs{emph} command.

The  default declarations are
\begin{verbatim}
 \DeclareRobustCommand\strongemreset
                   {\bfseries\upshape\ulcshape}
 \DeclareStrongEmphSequence{\bfseries,\itshape}
\end{verbatim}
which makes \cs{strongemph} alternate between bold and bold italic (if
the font family supports the latter). For font families that offer
different grades of boldness a possibly better setup would be to
alternate between bold, extra bold, ultra bold (or whatever the font
provides). This could be easily adjusted by changing the above
declarations.

The mechanism tries to be \enquote{smart} by verifying that the given
declarations actually alter the current font. If not, it continues and
tries the next level or the reset---the assumption being that there
was already a manual font change in the document to the font that is
now supposed to be used for \enquote{strong emphasis}.
%
Of course, this only works if the declarations in the list's entries
actually change the font and not, for example, just the color. In such
a scenario one has to add \cs{strongemforce} to the entry, which
directs the mechanism to use the entry, even if the font attributes
appear to be unchanged.
%
\taggingissue{1620}

\subsection{Supporting alternative template key names}

To allow template keys to be accessed using multiple names, we have we
have added the command \cs{DeclareTemplateInterfaceEquivalents}.  This
allows key names to be mapped to other key names, either as simple
aliases or with more complex relationships. This will enable support
for meta-keys (a single richer key which sets multiple simple keys) or
for renaming keys as part of development, or providing interfaces that
work with slightly different input formats, for example
\begin{alltt}
 \cs{DeclareTemplateInterfaceEquivalents}
   \Arg{type} \Arg{template} 
   \{ key-e : alias = key-a ,
     key-f : meta  = \{ key-b = \{\#1\},
                       key-c = \{\#1\} \},
     key-g : meta  = \{ key-d = \cs{UseName}\{\#1\} \}
   \}
\end{alltt}  
To support deprecation, the interface offers to specify a date in an
optional argument. If given, then using a deprecated key generates a
warning (before the date) to alert users to the need for updating
their sources or an error if the date is already in the past, e.g.
\begin{alltt}
 \cs{DeclareTemplateInterfaceEquivalents}
   \Arg{type} \Arg{template} [\meta{date}]
   \{ old-key : alias base-key , ... \}
\end{alltt}  


\subsection{Modifying template key values}

When making design changes to templates, it is sometimes the case that
you want to modify the existing value of a key, rather than set it
from scratch. For example, you might have template where the change
required is \enquote{make the margins $1\,\mathrm{cm}$ narrower}
without knowing the current margin value. We have extended the keyval
syntax for templates to support this using a \verb|+=| syntax
\begin{verbatim}
 margin-width += 1cm
\end{verbatim}
This approach is supported for all key types where it makes sense, for example
\texttt{length} or \texttt{tokenlist}, but not for those that cannot have the
value modified, such as \texttt{boolean} and \texttt{function}.



\section{Code improvements}

\subsection{Support for \cs{UseName} in template key bindings}

We have extended the logic in the key-binding argument for
\cs{DeclareTemplateCode} so that, when using templates, the keyword
\texttt{name} can be used (in addition to \texttt{global}) without any
performance impact. This allows automatic variable creation with
\enquote{awkward} characters, most notably \texttt{-} and numerals. Of
course, such variables then also need to be referred to via
\cs{UseName} or some equivalent method in the code, so this is only
useful if there is a pressing need for such special names.


\subsection{Further removal of \enquote{fake math} from the kernel}

For the previous release, we removed from the kernel most uses of
\enquote{fake math} (any use of math-mode that does not denote a
formula, but is used only for positioning or manipulating
text)~\cite{44:ltnews}. The use of \cs{underline} in text mode was
missed in that update: this has now been addressed.



\section{Bug fixes}

\subsection{Avoid problems with page breaks in the middle of
  verbatim-like environments}

The fix we announced in \LaTeX{} News~41~\cite[p.\,116]{44:ltnews} was
incomplete: we missed out resetting the \cs{catcode} of comma. This
is now corrected.
%
\githubissue{2056}



\subsection{Support nested requests for class or package target dates}

If one loads a package with
\begin{alltt}
 \cs{usepackage}\{\meta{package}\}[=\meta{date}]
\end{alltt}
then the package version current at \meta{date} should be loaded.  For
document classes, \cs{documentclass} offers the same interface.
Inside a package or a class a developer can produce conditional code
that depends on the requested target date (if any) by using the
command \cs{IfTargetDateBefore}; see \cite{44:rollback} for an article
on this functionality.

Unfortunately, using the the optional argument on one package had
effects on the behavior of \cs{IfTargetDateBefore} in all the
following code, i.e., it was not confined to that package code for
which this request was made. This has now been corrected.
%
\githubissue{828}




\section{First aids}

\subsection{Fix \cls{amsbook} running headers}

The AMS document classes all use the old mark mechanism, but this is
no longer provided by \LaTeX{} and therefore these classes need
updates. As these are still outstanding we have now made an attempt to
provide first aid for \cls{amsbook} so that running headers hopefully
work again.
%
\githubissue{2040}


\subsection{First aid for \pkg{subcaption} used with the corrected \pkg{amsmath}}

In the June 2025 release, \pkg{amsmath} corrected a typo that had been
there for some 30 years, so that it now also resets \cs{label} in
\cs{@arrayparboxrestore}. As a side effect, the \texttt{sub@} labels
that the \pkg{subcaption} package writes for \cs{subref} were no
longer written to the \texttt{.aux} file, and every \cs{subref}
printed ``??'' (with only a warning). Because the \pkg{caption} bundle
is currently not actively maintained, the \pkg{latex-firstaid} package
now restores the expected behavior when both packages are loaded. In
the long run the proper fix belongs in \pkg{subcaption} itself.
%
\githubissue{2172}



\section{Changes to packages in the \pkg{amsmath} category}

\subsection{Drop special handling for \LuaTeX\ in \cs{genfrac}}

The \cs{genfrac} command relied on engine functionality to place
delimiters around fractions in traditional \TeX\ engines but emulated
this functionality in \XeTeX\ and \LuaTeX. For \LuaTeX\ this emulation
was broken; but it is not needed and it interferes with tagging, so it
has been removed.
%
\githubissue{432}

%\section{Changes to packages in the \pkg{graphics} category}


\section{Changes to packages in the \pkg{tools} category}

\subsection{\pkg{trace}:\ support use with tagging}

The \pkg{trace} package adds (to every math formula) code that
suppresses unnecessary debugging output; but unfortunately it did this
in a way that conflicted with the tagging code for formulas. This has
now been corrected.
%
\taggingissue{1633}


\subsection{\pkg{bm} support for \pkg{(lua-)unicode-math}}

The \pkg{bm} package has been extended to support some uses with
OpenType Math fonts.  This will also offer some improvements with
classic \TeX\ fonts, adding support for ``implicit characters''
(command names \verb|\let| to math characters).

As with classic \TeX\ fonts, \cs{bm} does require that the
\textsf{bold} math version is set up.  For \pkg{unicode-math} this
typically requires declaring a bold font using declarations such as
the following setting up TeX Gyre Pagella.
\begin{verbatim}
 \usepackage{unicode-math}
 \setmathfont{TeX Gyre Pagella Math}
 \setmathfont{TeX Gyre Pagella Math}
             [version=bold,FakeBold=2]
 \usepackage{bm}
\end{verbatim}
The \pkg{lua-unicode-math} package is distributed with packages
corresponding to most of the common OpenType math fonts. These
packages typically set up the \textsf{bold} version by default.  So
the corresponding declaration for TeX Gyre Pagella is
\begin{verbatim}
 \usepackage{lum-pagella}
 \usepackage{bm}
\end{verbatim}
%
\githubissue[s]{748 \unskip, 974, 1991, 2180}


\subsection{\pkg{afterpage} could lose pages in some contexts}

If a page break occurred near an over-large page, \pkg{afterpage}
could fail to reconstruct the document and lose content. The output
routine has been adjusted to detect this case, and re-insert the page
before inserting the after-page material.
%
\githubissue{1698}

\subsection{\pkg{showkeys}:\ avoid double printing}

Labels could be double printed if the \pkg{amsmath} option
\verb|leqno| was used with \pkg{showkeys}. This has should now be
fixed. Also labels for \verb|eqnarray| were sometimes not shown by
this package.
%
\githubissue{118}

\subsection{\pkg{longtable}:\ separate data for unnumbered tables}

Since version~4.21 an empty \cs{LTcaptype} produces a \env{longtable}
without caption counter. In that case the internal counter for
\env{longtable}s was not stepped either, so such a table shared its
link target and the column widths stored in the \texttt{.aux} file
with the previous table. This could give duplicate destinations with
\pkg{hyperref}, wrong column widths in a long table, and a
\enquote{Table widths have changed} warning that never went away. The
counter is now stepped for every \env{longtable}.
%
\githubissue{2227}


%\section{Changes to files in the \pkg{cyrillic} category}

\section{Documentation changes}

\subsection{Tagging \LaTeX{} News}

We have adjusted the sources for \emph{\LaTeX{} News} (including this
news!) to enable tagging (PDF/UA-2) automatically. This applies to the
combined newsletters in \texttt{ltnews.pdf} and each individual file
\texttt{ltnews\meta{number}.pdf}.  This is part of our effort to make
all \LaTeX{} documentation fully accessible over time.

\subsection{US Spelling}

We have (finally) decided that standardizing the spelling in the
\LaTeX{} sources to use US-English is the realistic
position.\footnote{None of the native English speakers on the team are
from the US! But the command names of \LaTeX{} are in US-English so
\ldots} This means that the documentation better aligns with the 
code. Note that idioms may still be more varied: this is harder to
adjust than spelling.



\begin{thebibliography}{9}\frenchspacing

%\fontsize{9.3}{11.3}\selectfont

\iffalse
  
\bibitem{44:Lamport}
Leslie Lamport.
\newblock \emph{{\LaTeX}: {A} Document Preparation System: User's Guide and Reference
  Manual}.
\newblock \mbox{Addison}-Wesley, Reading, MA, USA, 2nd edition, 1994.
\newblock ISBN 0-201-52983-1.
\newblock Reprinted with corrections in 1996.

\fi

\bibitem{44:ltnews} \LaTeX{} Project Team.
  \emph{\LaTeXe{} news 1--44}. November, 2026.
  \url{https://latex-project.org/news/latex2e-news/ltnews.pdf}

\bibitem{44:rollback} Frank Mittelbach
  \emph{A rollback concept for packages and classes}. \textsl{TUGboat} 39:2, 2018.
  \url{https://latex-project.org/publications/2018-FMi-TUB-tb122mitt-version-rollback.pdf}
  
\bibitem{44:videos}  \TeX{} Users Group.
  \emph{TUG 2026 talks, Calgary}. \textsl{YouTube} 2026.
  \url{https://youtube.com/playlist?list=PLF0YCVuRyY-o}

  
\bibitem{44:isssue47} \TeX{} Users Group.
  \emph{TUG 2026 Proceedings}. \textsl{TUGboat} 47:2, 2026.
  Available to members and freely available to everyone in spring 2027.
  \url{https://tug.org/TUGboat/tb47-2/}

\bibitem{44:ufi} Ulrike Fischer.
  \emph{News from the \LaTeX{} Tagged Project: 2026}. \textsl{TUGboat} 47:2, 2026.
  \url{https://latex-project.org/publications/2026-UFi-TUG-tb146fischer-tagging26.pdf}
  
\bibitem{44:fmi} Frank Mittelbach.
  \emph{Towards accessible document classes}. \textsl{TUGboat} 47:2, 2026.
  \url{https://latex-project.org/publications/2026-FMi-TUG-tb146mittelbach-accessibleclasses.pdf}
  

\bibitem{44:tpr} Timothy Prescott.
  \emph{Converting a PDF textbook to be accessible}. \textsl{TUGboat} 47:2, 2026.
  \url{https://tug.org/TUGboat/tb47-2/tb146prescott-book-accessibility.pdf}

  \iffalse
\bibitem{44:} 
  \emph{}. \textsl{TUGboat} 47:2, 2026.
  \url{}

\bibitem{44:} 
  \emph{}. \textsl{TUGboat} 47:2, 2026.
  \url{}
\fi  

  
\end{thebibliography}

\end{document}
