% \iffalse meta-comment % % Copyright 2024 % 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: ltnews40.tex % % This is issue 40 of LaTeX News. \NeedsTeXFormat{LaTeX2e}[2020-02-02] \documentclass{ltnews} %% Maybe needed only for Chris' inadequate system: \providecommand\Dash {\unskip \textemdash} %% NOTE: Chris' preferred hyphens! %% \showhyphens{parameters} %% \hyphenation{because} \usepackage[T1]{fontenc} \usepackage{lmodern,url,hologo} \usepackage{csquotes} \usepackage{multicol} \usepackage{color} \providecommand\hook[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\penalty500\strut\nobreak\hfill \mbox{\small\slshape(% \href{https://github.com/latex3/latex2e/issues/\getfirstgithubissue#2 \relax}% {github issue#1 #2}% )}% \par\smallskip} % same for issues in the tagging repository: \providecommand\taggingissue[2][]{\ifhmode\unskip\fi \quad\penalty500\strut\nobreak\hfill \mbox{\small\slshape(% \href{https://github.com/latex3/tagging-project/issues/\getfirstgithubissue#2 \relax}% {github tagging issue#1 #2}% )}% \par\smallskip} %% But Chris has to mostly disable \href for his TEXPAD app: %% \def\href #1#2{#2} % Only For Chris' deficient TeX engine % simple solution right now (just link to the first issue if there are several) \def\getfirstgithubissue#1 #2\relax{#1} \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\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{2024 --- DRAFT version for upcoming release} \publicationyear{2024} \publicationissue{40} \begin{document} \maketitle {\hyphenpenalty=10000 \exhyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000 \tableofcontents} \setlength\rightskip{0pt plus 3em} \medskip \section{Thirty years of \LaTeXe{}} In summer 1994, i.e., thirty years ago, \LaTeXe{} saw its first public release. Back then it was meant to be an intermediate version (hence the $\varepsilon$) on the way to a major new version (the mythical \LaTeX3) that we expected to take a couple of more years to reach maturity. It took much more than that in the end\Dash nominally, \LaTeXe{} is still with us today. However, under the hood, \LaTeXe{} changed a lot throughout these thirty years, as one can see, for example, when looking through the forty newsletters~\cite{40:ltnews} that accompanied the \LaTeX{} releases that happened in the meantime. During the first two decades, the \LaTeX{} kernel was kept largely stable with only minimal bug fix activities. During that period additional functionality was mostly provided through new or extended packages that could be loaded in the document preamble. This included many of the ideas targeted for \LaTeX3{}, e.g., \pkg{expl3} (\LaTeX3 programming language), \pkg{xparse} (new document command interface), \pkg{xtemplate} (a configuration mechanism), and many others. Initially, this approach worked well and provided good backward compatibility; however, over time it became apparent that keeping all developments confined to packages was more and more problematical. Features or bug fixes that should have been generally available, i.e., part of the kernel, were only available in packages, so a lot of dependencies between packages were introduced and resulted in convoluted code that was difficult to manage. For example, \pkg{hyperref} had to rewrite a lot of kernel (and package) macros, so the code and behavior of other packages had to change depending on whether or not \pkg{hyperref} was loaded or not. Thus, in 2015 the \LaTeX{} team decided to change the policy and (re)start active kernel development, see~\cite{40:ltnews22}. To ensure continuous backward compatibility we introduced at the same time the \pkg{latexrelease} package that enables users to roll back changes to the \LaTeX{} kernel to an earlier release, in case this is necessary to successfully rerun a document produced at that time. As a consequence of this policy change the last decade saw a larger number of enhancements and corrections that were made part of the \LaTeX{} kernel. Overall, we can confidently say that the new approach has worked well and enabled us to modernize \LaTeX{} and ensure that it remains relevant without compromising one of the cornerstones of \LaTeX{}: its outstanding ability to reprocess old documents written many years ago. \tubcommand\newpage Being able to update and modernize the kernel sources allowed us to embark in 2019 on the multi-year \enquote{\LaTeX{} Tagged PDF} project with the goal of automatically providing accessible PDF documents with \LaTeX{}. While there are several more project phases to complete, the milestones already reached allow users to generate PDF/UA compliant documents if the input is restricted to a (growing) subset of packages and document classes; see next section and previous newsletters. A big change happened with the 2020-02-02 release as part of the project activity, albeit somewhat obfuscated by us as \enquote{Improved load-times for \pkg{expl3}}. While technically correct, what it really meant is that we had finally integrated the programming layer of \LaTeX3, i.e., the ideas originally sketched out around 1992. Or saying it differently: with that date the original ideas for \LaTeX3 became a reality as part of the standard \LaTeX{} kernel. With the programming layer available under the hood we were then able to provide new concepts and extensions as part of \LaTeX{}, e.g., the hook management system, a new mark mechanism, core functionality for tagging and PDF resource management, a consistent key/value interface, and more recently the socket and plug mechanism. More will follow while we continue to work on modernizing \LaTeX{} and bringing the Tagged PDF project to a truly successful completion\Dash so stay tuned and watch this space for future announcements in the next newsletters. \section{News from the \enquote{\LaTeX{} Tagged PDF} project} \subsection{Engine support:\ An important update} As detailed below, work is progressing on the Tagged PDF project. There are many drivers for this work, including legal changes in many places which will increasingly require well-tagged PDFs including full support for mathematics. As part of the work on this, we are looking at the technical abilities of the \TeX{} engines. With \XeTeX{}, it is impossible to reliably produce tagged PDFs due to engine limitations. The increasing importance of tagged PDFs means that this requires a move away from \XeTeX{}. We will continue to address issues with \XeTeX{} support in team-maintained \LaTeX{} code on a best-effort basis. No \emph{new} functionality will be added for \XeTeX{} by the \LaTeX{} team. It is likely that over time functionality may become more restricted, and users are urged to migrate \XeTeX{} documents to \LuaTeX{}. For \pdfTeX{}, tagging is available and we are able to support mathematics by including relevant \TeX{} source or by using externally-generated MathML. Only \LuaTeX{} is capable of \emph{automatic} generation of MathML as part of a \LaTeX{} run. Thus \pdfTeX{} continues to be supported for existing material, but for new documents, moving to \LuaTeX{} is recommended. We cannot make statements about the support for other engines such as (u)p\TeX{}, as we don't use these programs nor have in depth knowledge of their functionalities. To the best of our knowledge, core \LaTeX{} works well with these engines, but if and to what extent tagging can be supported will remain to be seen. If relevant information becomes available to us we will provide an update in future editions of the \LaTeX{} newsletter. \subsection{Tagging support for external packages} At \url{https://latex3.github.io/tagging-project/tagging-status/} we show the status of many \LaTeX{} packages and classes with respect to PDF tagging. We also started to improve tagging support in external packages. If the \texttt{firstaid} key is used in addition to the \texttt{phase-III} key, basic commands of several packages, including \pkg{amsthm} and \pkg{fancyvrb}, can now be used. \subsection{Improved table tagging} The tagging of tabulars has been extended: it is now possible to tag row headers and to create cells that span more than one row. The interface to this functionality is not finalized but can be accessed in the current release by specifying the row and columns to be treated as headers. For example % \begin{verbatim} \tagpdfsetup{ table/header-rows={1,2}, table/header-columns={1} } \end{verbatim} would specify that in the following tables the first two rows and first column of each row should be tagged as heading entries. Similarly you may add a RowSpan attribute to tag a cell that spans two rows using: \begin{verbatim} \tagpdfsetup{table/multirow={2}} \end{verbatim} \subsection{Automatic MathML tagging} When Lua\LaTeX{} is being used, and the \pkg{luamml} package is available, and if the document uses the \pkg{unicode-math} package, then the math module will automatically convert each math formula to MathML and use it to attach MathML associated files (or MathML Structure elements) to the tagged PDF. This new feature can be disabled with \verb+\tagpdfsetup{math/mathml/luamml/load=false}+. More options to configure MathML tagging can be found in the documentation of \pkg{latex-lab-math}. \subsection{Change behavior of tagging sockets with two arguments} When calling tagging sockets with two arguments using \cs{UseTaggingSocket} when tagging is suspended, previous versions of \LaTeXe{} dropped both arguments. This behavior has been changed to drop the first argument and preserve the second one instead, thereby allowing tagging sockets to be used to wrap existing content which should still appear in a non-tagging context. Since no tagging sockets currently provided by \LaTeX{} use two arguments we do not expect this change to affect any existing documents, but if a custom tagging socket has been defined outside of the kernel it might need to be adapted to be compatible with the new behavior. % \githubissue{1500} \section{Changes to the \LaTeX{} kernel} \subsection{Handling paragraph continuation} Already \LaTeX~2.09 offered some automation to detect whether or not text after a list or some other display environment is meant to be a continuation of the current paragraph or should start a new one. The document-level syntax for this is that a blank line after such an environment signals to \LaTeX{} that it should start a new paragraph; whilst no blank line signals that there should be no new paragraph and the text should be considered a continuation. Unfortunately, there were a number of cases where the original 2.09 approach failed, e.g., with \begin{flushleft} \ttfamily \ \ \{\meta{local customizations}\\ \ \ \cs{begin}\{equation\} a'. But this is in conflict with a rollback request to YYYY-MM-DD. \end{verbatim} In some cases this message showed a wrong file type, i.e., \verb|document class ''| or \verb|package ''|. This has now been corrected. % \githubissue{870} \subsection*{Fix existence check of document environments} \cs{NewDocumentEnvironment} and friends define (or redefine) a document environment using the space-trimmed \meta{envname}, but the existence check for \meta{envname} was done without space trimming. Thus when the user-specified \meta{envname} consists of leading and/or trailing space(s), it may lead to erroneously silent environment declaration. For example, in \begin{flushleft} \ttfamily \ \ \verb=\NewDocumentEnvironment{myenv}{}{begin}{end}=\\ \ \ \verb*=\NewDocumentEnvironment{ myenv }{}{begin}{end}=\kern-1cm \end{flushleft} the first line defines a new environment \env{myenv} but the second line would check existence for \verb*| myenv | (which is not yet defined), then redefine \env{myenv} environment without raising any errors. This has now been corrected. % \githubissue{1399} \subsection{Handling of global keys with spaces} If the global (class) options contained spaces around key names, \cs{ProcessKeyOptions} would fail to remove known keys from the list of unused global options and \cs{OptionNotUsed} would mistakenly add space-surrounded key names to that list. The first issue was corrected as a hotfix in patch level 1 of the November 2023 release (but unfortunately not mentioned in~\cite{40:ltnews38}) and the second in the current release. % \githubissue{1238} \subsection{File list entries for rolled back packages/classes} When the rollback mechanism for packages and classes was introduced in 2018~\cite{40:ltnews28}, loading of the selected historic release was not recorded in the file list used by \cs{listfiles}. This has now been corrected so that the extended usage~\cite{40:ltnews39} \begin{verbatim} \listfiles[hashes,sizes] \end{verbatim} now gives more complete and less confusing info. % \githubissue{1413} \subsection{\pkg{doc}:\ \cs{PrintDescribeMacro} in preamble} In \pkg{doc} version 2 it was possible to alter the definition of \cs{PrintDescribeMacro} and similar commands in preamble. In version 3 this stopped working because they were reset at the end of the preamble. This has now been implemented differently and changes in the preamble are possible again. % \githubissue{1000} \subsection{Avoid low-level error if \cs{ShowHooks} is used late} If \cs{ShowHooks} was used to examine a package hook after the package was loaded, a low level error resulted. This has now been corrected. % \githubissue{1513} \subsection{Avoid code duplication in rollback} When the kernel uses \cs{AddToHook} in a region that might be rolled back (which happens in a few places) and a document requests a rollback, then we have the situation that the hook already contains code to which we added the same (or slightly different) code during the rollback; this results in code duplication or, worse, in errors. This has now been corrected by dropping any such code chunk (if there is one) prior to adding the rollback code. % \githubissue{1407} \subsection{Passing template keys using \cs{KeyValue}} With the move of the template code to the kernel, internal functions were reviewed to improve efficiency. However, there was an oversight in how passing key values from one setting to another was implemented, such that using \cs{KeyValue} could result in an infinite loop. This has now been fixed. % \githubissue{1486} \section{Changes to packages in the \pkg{amsmath} category} \subsection{Extend support for \cs{dots}} The implementation of \cs{dots} in \pkg{amsmath} has the feature that it selects different dots depending on the symbol that follows: e.g., dots between commas would normally be on the baseline, while dots between binary or relational symbols would be raised. However, when symbols such as \cs{cong} were protected from expansion in moving arguments (so that they worked in places such as headings) it had the unfortunate side-effect that the \cs{dots} magic stopped working for them. This has now been corrected. % \githubissue{1265} %\section{Changes to packages in the \pkg{graphics} category} \section{Changes to packages in the \pkg{tools} category} \subsection{Modification to generation of the \file{.tex} from \pkg{fileerr}} The \pkg{fileerr} extraction has been modified to write \texttt{rename-to-empty-base.tex} rather than \texttt{.tex} to comply with an expected security change in \TeX{}~Live 2025. The \texttt{build.lua} file for the \pkg{tools} has been modified to rename \texttt{rename-to-empty-base.tex} to \texttt{.tex} after unpacking. However if using \textsf{docstrip} directly rather than using \textsf{l3build} or the unpacked zip file from \CTAN{}, the user must now rename the file and install as \texttt{.tex}. % \githubissue{1412} \subsection{\pkg{array}:\ Improve \texttt{>\{...\}} specifier} If the argument of \texttt{>\{...\}} ended with a command accepting a trailing optional argument, e.g., defined for example with \verb=\NewDocumentCommand\foo{o}{...}=, one could get low-level parsing errors. This has now been corrected. % \githubissue{1468} \subsection{\pkg{array}:\ Tagging support for \cs{cline}} In the last release we added tagging support for \pkg{array}, \pkg{longtable} and other tabular packages, but we overlooked that the kernel definition for \cs{cline} also needs modification because the rule generated by the command needs to be tagged as an artifact. Furthermore, the processing of a \cs{cline} looks to the algorithm as if another row is added (which is technically what happens), thus it was also necessary to decrement the internal row counter to get a correct row count. This has now been corrected in \pkg{array}, which is automatically loaded for tagging, so that all these packages are now fully compatible with the tagging code if it is turned on. % \taggingissue{134} \subsection{\pkg{longtable}:\ Extend caption type} The \pkg{longtable} package has been extended and now provides the command \cs{LTcaptype} (stemming from the \pkg{ltcaption} package) to change the counter and caption type used by the \cs{caption} command from longtable. So with \verb+\renewcommand\LTcaptype{figure}+, a longtable will step the figure counter instead of the table counter and produce an entry in the list of figures. An empty definition, \verb+\renewcommand\LTcaptype{}+, will suppress increasing of the counter. This makes it easy to define an unnumbered variant of longtable: \begin{verbatim} \newenvironment{longtable*} {\renewcommand\LTcaptype{}\longtable} {\endlongtable} \end{verbatim} \subsection{\pkg{longtable}:\ Prevent \cs{pagegoal} exceeding maximum value} An internal guard has been added to avoid \TeX\ errors if \verb=\pagegoal= is increased beyond the maximum value for a \TeX\ dimension. % \githubissue{1495} \section{Changes to \pkg{l3build}} To support third-party developers testing their code against pre-release \LaTeX{}, a new switch \verb|--dev| has been added to \pkg{l3build}. This allows the developer to run \begin{verbatim} l3build check \end{verbatim} to run their test suite against the current release of \LaTeX{} and \begin{verbatim} l3build check --dev \end{verbatim} to run exactly the same tests using the development release of \LaTeX{}. %\section{Changes to files in the \pkg{cyrillic} category} \begin{thebibliography}{9}\frenchspacing %\fontsize{9.3}{11.3}\selectfont \bibitem{40: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. \bibitem{40:ltnews} \LaTeX{} Project Team. \emph{\LaTeXe{} news 1--39}. June 2024. \url{https://latex-project.org/news/latex2e-news/ltnews.pdf} \bibitem{40:ltnews22} \LaTeX{} Project Team. \emph{\LaTeXe{} news 22}. January 2015. \url{https://latex-project.org/news/latex2e-news/ltnews22.pdf} \bibitem{40:ltnews28} \LaTeX{} Project Team. \emph{\LaTeXe{} news 28}. April 2018. \url{https://latex-project.org/news/latex2e-news/ltnews28.pdf} \bibitem{40:ltnews35} \LaTeX{} Project Team. \emph{\LaTeXe{} news 35}. June 2022. \url{https://latex-project.org/news/latex2e-news/ltnews35.pdf} \bibitem{40:ltnews38} \LaTeX{} Project Team. \emph{\LaTeXe{} news 38}. November 2023. \url{https://latex-project.org/news/latex2e-news/ltnews38.pdf} \bibitem{40:ltnews39} \LaTeX{} Project Team. \emph{\LaTeXe{} news 39}. June 2024. \url{https://latex-project.org/news/latex2e-news/ltnews39.pdf} \end{thebibliography} \end{document}