% \iffalse meta-comment % % Copyright 2025 % 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: ltnews41.tex % % This is issue 42 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} %% 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 more) \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{2025 --- DRAFT version for upcoming release} \publicationissue{42} \begin{document} \maketitle {\hyphenpenalty=10000 \exhyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000 \tableofcontents} \setlength\rightskip{0pt plus 3em} \medskip \section{Introduction} \emph{to write} \section{News from the Tagged PDF project} \subsection{Expanding the \cs{DocumentMetadata} command} In 2022 we introduced the \cs{DocumentMetadata} with a twofold purpose: to provide a dedicated place for document wide settings and metadata, and to act as a trigger command to identify documents that want to load new code. The latter allows the use of the new, extended interfaces essential for the Tagging Project but also useful also without tagging. Initially, using \cs{DocumentMetadata} with an empty argument loaded only the PDF management code and a new hyperref driver was used. Since November 2024 \cs{DocumentMetadata} changes the default encoding from OT1 to T1; and since June 2025 it also changes the default PDF version from 1.7 to 2.0. Additional code in latex-lab (needed, e.g., for the tagging project) had to be loaded explicitly by using the \texttt{testphase} or the new \texttt{tagging} key in the argument of \cs{DocumentMetadata}. Whilst this allowed for the selective loading and testing of the new code, it also produced problems for classes and packages adapting their code for the tagging project since it was difficult to test which parts of the latex-lab code were active. In this release we therefore extend \cs{DocumentMetadata} even further: it will now load directly all the code that one get also when using the \texttt{tagging=off} or the \texttt{testphase=latest} key. The values \texttt{phase-I}, \texttt{phase-II}, \texttt{phase=III} of the \texttt{testphase} key will no longer load different code variants but only activate tagging. Extra modules not yet incorporated in the \texttt{latest} set of modules can still be loaded by using the \texttt{testphase} key. For documents that want to load the PDF management but do not want the new tagging support code we provide a dedicated package. Such documents should replace \begin{verbatim} \DocumentMetadata{pdfversion=1.7,pdfstandard=a-3b} \end{verbatim} by \begin{verbatim} \RequirePackage{pdfmanagement} \SetKeys{document/metadata}{pdfversion=1.7,pdfstandard=a-3b} \end{verbatim} \subsection{Requiring or testing for the Tagging support code} Classes or packages that are written only for the new code loaded by \cs{DocumentMetadata} can use the new command \cs{NeedsDocumentMetadata} at the begin of the class or package file. It will produce a suitable error message if the tagging support code has not been loaded. Classes and package that want to support both legacy documents and newer documents using \cs{DocumentMetadata} can now use \cs{IfDocumentMetadataTF} to test whether the new code has been loaded -- eventually in combination with a test of the date of the format. To test whether the PDF management has been loaded, the test \cs{IfPDFManagementActiveTF} is provided. \subsection{Normalizing key names for block environments} \emph{to write} \subsection{Contexts in typesetting} \emph{to write if latex-lab-context makes it to the next stage before 2025/11/01} \section{New or improved commands} \subsection{Support separate font families for script fonts} In \TeX's math processing separate fonts can be selected for text, script and scriptscript sizes. \LaTeX's NFSS traditionally uses the same font family at different sizes, handling adjustment needed for making fonts appear better in a script location through the use of optical sizes. This works great for traditional \TeX{} fonts, but for OpenType fonts this leads to issues. OpenType MATH assumes the font in a script location has separate features set and therefore received specific adjustments. To support this without relying on heuristics based on the font size, a new command \verb+\DeclareMathScriptfontMapping+ has been added. It takes 3 pairs of encoding/family arguments to indicate that for the first pair when used as the math main font the second and the third should be used as the script and scriptscript font, respectively. % \githubissue{1707} \section{Code improvements} \subsection{Avoid strange warnings about font substitutions} A font series value such as \texttt{sbc} contains both the weight (\texttt{sb}, i.e.\ ``semibold'') and the width (\texttt{c}, i.e.\ ``condensed'') of the font. If you want to reset only one of the two to ``medium'' and keep the other, you can use \verb+\fontseries{m?}+ or \verb+\fontseries{?m}+: The former switches \texttt{sbc} to \texttt{c}, the latter switches \texttt{sbc} to \texttt{sb}. However, if the resulting series did not exist, you got strange warnings, e.g.: \begin{verbatim} LaTeX Font Warning: Font shape `OT1/cmss/c/n' undefined using `OT1/cmss/m?/n' instead on input line 7. LaTeX Font Warning: Font shape `OT1/cmss/m?/n' undefined using `OT1/cmss/m/n' instead on input line 7. \end{verbatim} This has now been corrected so that you get a single, more meaningful warning: \begin{verbatim} LaTeX Font Warning: Font shape `OT1/cmss/c/n' undefined using `OT1/cmss/m/n' instead on input line 7. \end{verbatim} If the \texttt{m} series does not exist either, you will still get strange warnings, but this should only affect very few fonts. The source file was also tidied up a little on this occasion. % \githubissue{1727} \subsection{Allow multiple family names in \cs{ProcessKeyOptions}} The ability to process key--value options was introduced into the kernel in the June 2022 release~\cite{42:ltnews35}, with the command \cs{ProcessKeyOptions} carrying out the option assignment. In the original version, this takes an optional argument which can select one key family (namespace) for options. We have now extended this to take a comma list of possible families. % \githubissue{1756} \subsection{Control of value expansion in keys} Normally, key--value input is treated ``as is'', with no expansion of either key names or values. However, there are occasions when the expansion of selected values is useful. We have now extended the key handling for templates (\cs{DeclareInstance}, etc.) and for keys created using the L3 programming layer to allow selective expansion. In both cases, the syntax uses a trailing colon and a single letter specifier: these letters are those used in \cs{ExpandArgs} or the L3 programming layer. For example, to use the values of the \LaTeXe{} variable \cs{@itemdepth}, one could have settings \begin{verbatim} key-a:c = @itemdepth , key-b:v = @itemdepth \end{verbatim} This facility will \emph{automatically} be available in any package setup macro using the L3 programming layer, for example \pkg{siunitx}. % \githubissue{1801} \subsection{Support word exclusion in case changing} Work on improving automatic case changing over previous releases has continued. We have now added the ability to `register' words for exclusion from case changing, using \cs{DeclareLowercaseExclusions}, \cs{DeclareTitlecaseExclusions} and \cs{DeclareUppercaseExclusions}. \section{Bug fixes} \subsection{Support active characters correctly with \cs{DeclareRobustCommand}} The mechanism used by \cs{DeclareRobustCommand} creates an internal command which has a space added to the name of the document one: so \verb*|\foo | for a command \verb|\foo|. That fails if applied to an active character: unlike normal commands, these have to be exactly one character long. Due to the way the implementation works, to date this would result in redefining \verb*|\ | every time \cs{DeclareRobustCommand} was used with an active character. This has now been corrected: robust active characters are now created using the engine \cs{protected} mechanism and do not use an internal auxiliary. They still work in file names and labels to give the character itself. % \githubissue{345} %\subsection{A fix} %% Some text % %%\githubissue{XXXX} %\section{Changes to packages in the \pkg{amsmath} category} %\section{Changes to packages in the \pkg{graphics} category} \section{Changes to packages in the \pkg{tools} category} \subsection{Updating the status of some components} The \pkg{tools} bundle contains a range of packages with different usage profiles. Some of these were necessary in the transition from \LaTeX{}~2.09 to \LaTeXe{}, while others are very widely used in current documents (for example \pkg{array}). We have therefore marked a small number of packages in \pkg{tools} as \emph{retained only for historical and stability reasons}, and where relevant pointed to more up-to-date alternatives; the list is: \begin{itemize} \item \pkg{enumerate}: use \pkg{enumitem} instead \item \pkg{rawfonts}: retained as part of \LaTeX{}~2.09 support \item \pkg{somedefs}: retained as part of \LaTeX{}~2.09 support \item \pkg{theorem}: use \pkg{amsthm} instead \item \pkg{verbatim}: use \pkg{fancyvrb} instead \end{itemize} %\section{Changes to files in the \pkg{cyrillic} category} \begin{thebibliography}{9}\frenchspacing %\fontsize{9.3}{11.3}\selectfont \bibitem{42: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{42:ltnews} \LaTeX{} Project Team. \emph{\LaTeXe{} news 1--42}. November 2025. \url{https://latex-project.org/news/latex2e-news/ltnews.pdf} \bibitem{42:ltnews35} \LaTeX{} Project Team. \emph{\LaTeXe{} news 35}. June 2022. \url{https://latex-project.org/news/latex2e-news/ltnews35.pdf} \bibitem{42:ltnews41} \LaTeX{} Project Team. \emph{\LaTeXe{} news 41}. June 2025. \url{https://latex-project.org/news/latex2e-news/ltnews41.pdf} \end{thebibliography} \end{document}