% \iffalse meta-comment % % Copyright (C) 2019-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: ltnews33.tex % % This is issue 33 of LaTeX News. \NeedsTeXFormat{LaTeX2e}[2020-02-02] \documentclass{ltnews} %%CCC Temporary definitions: \providecommand\Dash {\unskip ---} %% NOTE: Chris' preferred hyphens! %%\showhyphens{parameters} \hyphenation{because para-me-ters} \usepackage[T1]{fontenc} \usepackage{lmodern,url,hologo} \usepackage{csquotes} \usepackage{multicol} \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} % 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\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 \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 \let\finalvspace\vspace % for document layout fixes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \providecommand\tubcommand[1]{} \tubcommand{\input{tubltmac}} \publicationmonth{June} \publicationyear{2021} %% --- Draft Version 3p \publicationissue{33} \begin{document} \tubcommand{\addtolength\textheight{4.2pc}} % only for TUB \maketitle {\hyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000 \tableofcontents} \setlength\rightskip{0pt plus 3em} \medskip \section{Introduction} The focus of the June 2021 release is to provide further important building blocks for the future production of reliable tagged PDF output (see \cite{33:blueprint}); these enhancements are discussed in the next two sections. Subsequent sections describe quite a number of recent smaller enhancements and fixes. As usual, more detail on individual changes can be found in the \file{changes.txt} files in the distribution and, of course, in the documented sources~\cite{33:source2e}. \section{Extending the hook concept to paragraphs} Largely triggered by the need for better control of paragraph text processing, in particular when producing tagged PDF output, we have changed \LaTeX{} so that the kernel gains control both at the start and at the end of each paragraph. This is done in a manner that is (or should be) transparent to both packages and documents. Besides the addition of internal control points for the exclusive use of the \LaTeX{} kernel, we also implemented four public hooks that can be used in packages or documents (via the normal hook management declarations) to achieve special effects, etc. Until now, such enhancements required redefinitions of \cs{everypar} or \cs{par}, which led to the usual issues since such changes can easily conflict with changes made by other packages. The documentation of these new \enquote{paragraph hooks}, together with a few examples, is in \file{ltpara-doc.pdf} and, for those who want to study it, the (quite interesting) code can be found in \file{ltpara-code.pdf}. Additionally, both of these files are included as part of the full kernel documentation in \file{source2e.pdf}. \section{Extending the hook concept to commands} Up to now, hook management covered hooks for only a few core areas, such as the hooks for the \cs{shipout} process or those in the \env{document} environment, as well as some \enquote {generic} hooks, both for file loading (helpful for patching such files) and for arbitrary environments (the hooks executed within \cs{begin} and \cs{end}). This concept of \enquote{generic hooks} has now been extended to provide \hook{/before} and \hook{/after} hooks for any (document-level) command\Dash in theory at least. In practice, these new generic \hook{cmd} hooks, especially the \hook{cmd/.../after}, hooks may fail with commands that are too complex to be automatically patched, breaking if the hook contains any code. These restrictions are documented in \file{ltcmdhooks-doc.pdf}. % However, given that these hooks are mainly meant for developers who wish to provide better interoperability between different packages, and between packages and the \LaTeX{} kernel, these restrictions are, we hope, of minor importance. Indeed, for commands where this mechanism can't be applied, one is in the same situation as before; and for all others there will be a noticeable improvement. These hooks will be especially important for our current project to provide accessible and tagged PDF output~\cite{33:blueprint} because we will eventually have to patch many third-party packages, and this must be done in controlled and standardized ways. \section{Other hook business} \subsection{Shipping out a page while bypassing hooks} In the 2020 October release, several hooks were added to control the process of constructing and shipping out a page box: these support, for example, the addition of background or foreground material to some or all pages. We have now added a command, called \cs{RawShipout}, which does not do any rebuilding of the page box and so does not run most of these hooks. When using this new command, essential internal book-keeping is still carried out, such as updating the \texttt{totalpages} counter and adding \texttt{shipout/firstpage} or \texttt{shipout/lastpage} material when appropriate. \subsection{A new Lua callback in \pkg{ltshipout}, for custom attributes} For use just before shipping out a page, there is now a \LuaTeX{} callback \texttt{pre\_shipout\_filter} to contain final adjustments to the box being shipped out. This is particularly useful for Lua\TeX\ packages which flag (using, for example, attributes or properties) elements on a page in order to apply effects (such as the insertion of \enquote{color commands}) to these elements at shipout. \section{Improved handling of file names} \subsection[File names with spaces, multiple dots or\\ \acro{utf-8} characters] {File names with spaces, multiple dots or \acro{utf-8} characters} In one of the recent \LaTeX{} releases we improved the interface for specifying file names so that they can now safely contain spaces (as is common these days), more than one dot character, and also \acro{utf-8} characters outside the \acro{ascii} range. In the past this was only possible by applying a special syntax in the case of spaces, while file names with several dots often failed, as did most \acro{utf-8} characters. \subsubsection{Consequences for file names in \cs{include}} \TeX{} has a built-in rule saying that you can normally leave out the extension if it is \texttt{.tex}. Thus \verb=\input{file}= and \verb=\input{file.tex}= both load \file{file.tex} (if it exists). While this is convenient most of the time, it is a little awkward in some scenarios (for example, when both \file{file} and \file{file.tex} exist) and also when you manually try to implement the rule. \LaTeX{} therefore had one special syntax for \cs{include} and \cs{includeonly}: they always expected that their arguments contain a file name\footnote{In the case of \cs{includeonly}, a comma-separated list of such names.} with no extension given, so that it had to be \texttt{.tex}. Thus, when you mistakenly wrote \verb=\include{mychap.tex}= (for example, because you changed from \cs{input} to \cs{include}), \LaTeX{} went ahead and looked for the file \file{mychap.tex.tex} for inclusion and tried to use the file \file{mychap.tex.aux} for internal (auxiliary) information. The reason was that \cs{include} had to construct both of these file names from the given argument and it didn't bother to do anything special with the supplied extension \texttt{.tex}. With the new implementation this has changed: the extension \texttt{.tex} now gets removed/ignored if it was supplied. Thus \verb=\include{mychap.tex}= now no longer looks for \file{mychap.tex.tex} but loads \file{mychap.tex} and uses \file{mychap.aux}. % \githubissue{486} \subsection{Normalization of robust commands in file names} The handling of file names has been modified so that \verb|\string| is applied to normalize robust commands within the file name. Previously, for example, \verb|\input{\sqrt{2}}| would cause \LaTeX\ to loop indefinitely whereas with the new normalization it looks for the file named \verb|sqrt {2}.tex| (and therefore very likely reports ``file not found''). % \githubissue{481} \subsection{Fix for \env{filecontents} with \acro{utf-8} chars in the file name} Since a few releases back, the \env{filecontents} environment has allowed \acro{utf-8} characters in the file name. There was, however, a bug that would not allow \emph{over}writing a file with \acro{utf-8} characters in its name. This has been fixed and now \env{filecontents} allows any characters in the file name. % \githubissue{415} \section{Updates to the font selection scheme} \subsection{A new hook in \cs{selectfont}} After \cs{selectfont} has changed the font, we now run a hook (\hook{selectfont}) so that packages can make final \mbox{adjustments}. This functionality was originally provided by the \pkg{everysel} package but our implementation is slightly different and uses the standard hook management. % \githubissue{444} \subsection{Change of font series/shape delayed until \cs{selectfont}} With the NFSS extensions introduced in 2020, the font series and shape settings can be influenced by changes to the font family. The settings of these two are now therefore delayed until \cs{selectfont} is executed; this avoids unnecessary or incorrect substitutions that may otherwise happen due to the order of declarations. % \githubissue{444} \section{Glyphs, characters \& encodings} \subsection{Improved copy\,\&\,paste for \pdfTeX{} documents} When compiling with \pdfTeX{}, additional information (from the file \file{glyphtounicode.tex}) is now added automatically to the PDF file in order to improve copying from, and searching in, text. In particular, this allows the most common ligatures to be copied as intended from all generated PDF files without the need to explicitly load the package \pkg{cmap}. % \githubissue{465} \subsection{Support for more Unicode characters} \LaTeX\ is quite capable of typesetting characters such as \enquote{\d{m}}, but until now it could not access some Unicode characters from the Latin Extended Additional block. This meant that, for example, there were no Unicode mappings for some characters that are used to write Sanskrit words in Latin transliteration (as seen in books about yoga, Buddhist philosophy, etc.). % These characters have now been added so that they can be entered directly instead of using \verb=\d{m}=, etc. % \githubissue{484} \subsection{More ``dashes'' in encodings \texttt{OT1}, \texttt{T1} and \texttt{TU}} When pasting in text from external sources, one can encounter these three Unicode characters % \texttt{"2011} (non-breaking hyphen), \texttt{"2012} (figure dash) and \texttt{"2015} (horizontal bar), % in addition to the more common % \texttt{"2013} (en-dash) and \texttt{"2014} (em-dash). % In the past, these first three produced an error message when used with \pdfTeX{} (since they are not available in \texttt{OT1} or \texttt{T1} encoded fonts). They now typeset an approximation to the glyph: e.g., the ``figure dash'' is approximated by an en-dash. With Unicode engines they either work (when the glyph is contained in the selected Unicode font) or they typeset nothing, producing a ``Missing character'' warning in the log file. With all engines these characters can also now be accessed using the command names \cs{textnonbreakinghyphen}, \cs{textfiguredash} and \cs{texthorizontalbar}, respectively. % \githubissue{404} \subsection{Poor man's \cs{textasteriskcentered}} The \cs{textasteriskcentered} symbol, used as part of the set of footnote symbols in \LaTeX{}, is assumed to be implemented by every font with the \texttt{TS1} encoding (when \pdfTeX{} is used) or with the \texttt{TU} encoding for the Unicode engines. That assumption is unfortunately not correct for all fonts since, for example, the \texttt{stix2} fonts don't provide this glyph. A result is that one gets missing glyph messages when using \cs{thanks}, etc. Therefore \cs{textasteriskcentered} now checks whether there is such a glyph and, if not, uses a normal \enquote{*}, but slightly enlarged and lowered. This may not be perfect in all cases, but it is certainly better than no glyph showing up. % \githubissue{502} \subsection {The characters from \pkg{textcomp} are in the kernel} A couple of releases back, the functionality of the \pkg{textcomp} package was integrated into the \LaTeX{} kernel. Thus it is no longer necessary to load this package in order to access glyphs such as \cs{textcopyright}, \cs{texteuro} or \cs{textyen}. At this time the opportunity was also taken to bring some order to the chaos surrounding the question: \enquote{which glyphs from the \texttt{TS1} encoding are available in a given font?}. This was done using an approach based on font families and collections, with the differing glyph coverage of the \enquote*{text symbols} being indicated by assigning to a font family or collection a ``sub-encoding number'' that indicates which glyphs from the \texttt{TS1} encoding are guaranteed to be available when using a font from that family or collection. This assignment ensures that \LaTeX{} always errs on the side of caution, possibly claiming that a glyph is not available even when it in fact is. \iffalse %%FMi but drop that The documented code for this can be found now in the file \file{lttextcomp.dtx} but we hope to publish a full explanation of the approach very soon now. \fi %% FMi potential drop \subsubsection [A note on the history of ``text symbols''] {A note on the history of ``text symbols'' and the \texttt{TS1} encoding} The \enquote{text symbol encoding} (\texttt{TS1}) was originally designed at the Cork Conference as a companion to the \texttt{T1} encoding. In it various symbols that are not subject to hyphenation got assembled and the \pkg{textcomp} package was developed to make them accessible. Unfortunately the \TeX{} community was a bit too enthusiastic and included several symbols only available in a few \TeX{} fonts and some, such as the capital accents, not available at all but developed as part of the reference font implementation. In hindsight that was a very bad idea because it meant that other existing fonts (at the time) and later new fonts that got developed were unable to provide the full set of glyphs that made up the \texttt{TS1} encoding. For existing free PostScript fonts people took the extra effort and produced virtual fonts that faked (some) of the missing glyphs. But this was and is a time-consuming effort so it was done for only a few basic fonts. But even then, only some fonts included all glyphs from \texttt{TS1} so the \pkg{textcomp} already back then contained a long list, dividing fonts into 5 categories according to which glyphs were implemented and which were missing. When we recently integrated the functionality of the \pkg{textcomp} into the \LaTeX{} kernel many new free fonts had appeared and unfortunately the chaos around the question \enquote{which glyphs of the \texttt{TS1} encoding are implemented by which font} had increased with it. Not only did one find many new holes, it was next to impossible to order the set of fonts into a reasonable set of sub-encodings that are contained in each other in a single sequence. In the end we decided on nine or ten sub-encodings with a reasonable number of fonts in each so that all fonts implemented all glyphs of the sub-encoding they got mapped to. Thus when typesetting with a font one could be sure that a command like \cs{textcopyleft} would either typeset the requested character (if the glyph was part of the sub-encoding the font belonged to) or it would raise an error, saying that the glyph is unavailable in that font. The mapping would ensure that \LaTeX{} always errs on the side of caution, because it might claim a glyph is unavailable even though in fact it is.\looseness-1 For example, the old \texttt{pcr} (PostScript Courier) font (as well as most other older PS fonts) is mapped to sub-encoding 5 and therefore claims that \cs{textasciigrave} is unavailable even though in fact for Courier this is not true. If one uses such a font and this becomes an issue then there are a couple (suboptimal) possibilities. For one, one can alter the mapping of Courier and pretend that belongs to a fuller sub-encoding, e.g. \begin{verbatim} \DeclareEncodingSubset{TS1}{pcr}{2} \end{verbatim} The downside is, that \LaTeX{} then believes other glyphs that are in fact unavailable are also there, so that it is important to check that the final document doesn't have some missing glyphs. An alternative is to pretend that \cs{textasciigrave} can always be taken from the \texttt{TS1} encoding (no questions asked): \begin{verbatim} \DeclareTextSymbolDefault{\textasciigrave}{TS1} \end{verbatim} Again there is a danger that this is not true when it is used with a different font and would then generate a missing glyph. Finally, and possibly the best solution, if not impossible for other reasons, is to simply use a different font, for example, to use the \TeX{} Gyre Cursor font (a reimplementation of Courier with a much more complete glyph set). \section{New or improved commands} \subsection{Adjusting \env{itemize} labels with \cs{labelitemfont}} The command \cs{labelitemfont} was introduced already with the \LaTeX\ release 2020-02-02, but back then we forgot to describe it, so we do this now. Its purpose is to resolve some bad formatting issues with the \env{itemize} environment and also to make it easier to adjust the layout when necessary. What could happen in the past was that the \env{itemize} labels (e.g., the \textbullet{}) would sometimes react to surrounding font changes and could then suddenly change shape, for example to \textit{\textbullet}. This new command \cs{labelitemfont}, which defaults to \cs{normalfont}, can be used to provide additional control in the typesetting of each label. Thus by choosing different settings other effects can be achieved. Here are two examples: \begin{verbatim} \renewcommand\labelitemfont {\normalfont\fontfamily{lmss}\selectfont} \renewcommand\labelitemfont {\rmfamily\normalshape} \end{verbatim} The first definition will take the symbols from the font Latin Modern Sans, so that you get % \def\myfont#1{{\let\labelitemfont\empty\fontfamily{lmss}\selectfont#1}}% % \myfont\labelitemi, \myfont\labelitemii, \myfont\labelitemiii\ and \!\!\myfont\labelitemiv\,; while the second variant freezes the font family and shape, but leaves the series as a variable quantity, so that an \env{itemize} in a bold context would show bolder symbols. Making \cs{labelitemfont} empty would give you back the buggy old behavior. % \githubissue{497} \subsection{Producing several marks for one footnote} It is sometimes necessary to reference the same footnote several times: i.e., to produce several footnote marks using the same number or symbol. This is now easily possible by placing a \cs{label} within the referenced \cs{footnote} and referencing this label by using the new command \cs{footref}. This means that footnote marks can be generated to refer to arbitrary footnotes (including those in \env{minipage}s). This \cs{footref} command has previously been available, but only when using certain classes or the \pkg{footmisc} package. % \githubissue{482} \subsection{Allow \cs{nocite} in the preamble} A natural place for \verb=\nocite{*}= would be the preamble of the document, but for historical reasons \LaTeX{} issued an error message if it was placed there. This command is now allowed in the preamble. % \githubissue{424} \subsection{Made \cs{\textbackslash} generally robust} In 2018 most \LaTeX{} user-level commands were made robust, including the \cs{\textbackslash} command. However, \cs{\textbackslash} gets redefined in various environments and not all these cases were caught: such as, in particular, its use as the row delimiter in \env{tabular} structures. This has been corrected so that \cs{\textbackslash} should now be robust in all circumstances. This change also fixed one anomaly present in the past: in a tabular preamble of the form \finalvspace*{-.3\baselineskip} \begin{quote} \hspace*{-.15em}\verb={l=\texttt{\string>}\verb={\raggedright}p{10cm}r}= % stupid class \end{quote} \finalvspace*{-.3\baselineskip} a \cs{\textbackslash} in the second column would have the definition used within \cs{raggedright} and so it would not indicate the (premature) end of the \env{tabular}. Thus, for example,% \finalvspace*{-.3\baselineskip} \begin{quote} \verb=a & b1 \\ b2 & c \\= \end{quote} \finalvspace*{-.3\baselineskip} was interpreted as a single row of the \env{tabular} (as intended), whereas \finalvspace*{-.3\baselineskip} \begin{quote} \verb=a & \\ b2 & c \\= \end{quote} \finalvspace*{-.3\baselineskip} resulted in two rows! This happened because the \cs{\textbackslash} directly following the \verb=&= got interpreted while it still had the \enquote{end the row} meaning and not yet the \enquote{start a new line within the second column} meaning. With \cs{\textbackslash} now being robust, the special scanning mode initiated by the \verb=&= ends immediately when this command is seen: the second column is therefore then started, which results in the \cs{\textbackslash} being interpreted as being within that column and hence as having its expected, within-column, meaning. We have restored consistency here: now both of the above lines produce a single \env{tabular} row. % As before, you can put \cs{raggedright}\cs{arraybackslash} in the \env{tabular}'s preamble for a column to ensure that \cs{\textbackslash} is always interpreted as a tabular row separator when used in that column. And you can use \cs{tabularnewline} to explicitly ask for a new table row, even when \cs{\textbackslash} has a different meaning within the current column. % \githubissue{548} \subsection{Allow extra space between name and address in \pkg{letter} class} The \cs{opening} command in the \pkg{letter} class expects the name and address to be separated by \verb=\\=, but it didn't allow the use of an optional argument to add some extra space after the name. The code has now been slightly altered to allow this. % \githubissue{427} \subsection{Additions to \cs{tracingall}} In July 2020 David Jones suggested an extension to \TeX{} engines, that added the possibility to set \cs{tracinglostchars}\texttt{=3} in order to generate an error message in case some character is missing from a font. In previous years, a warning about a missing character was silently printed to the \texttt{.log} file\linebreak (if $\cs{tracinglostchars}>0$) and to the terminal\linebreak (if ${}>1$). This extension was added for \TL{} and \MiKTeX{} (except in Knuth's \TeX, of course), so that with $\cs{tracinglostchars}>2$ you now also get an error message for each missing glyph. Later, in January 2021, Petr Olšák suggested yet another extension: a new primitive \mbox{parameter} % \cs{tracingstacklevels} that, when both it and \cs{tracingmacros} are positive, will add to the \mbox{tracing} information for each macro a visual indication (using dots) of its nesting level in the macro expansion stack. These changes have both now been added to \LaTeX's debugging macros \cs{tracingall} and \cs{tracingnone}, so that these two new extensions are activated/deactivated as appropriate, so long as the \TeX{} engine supports them. An example document demonstrating these parameters is in the linked GitHub issue. % \githubissue{524} \section{Code improvements} \subsection{Execute \cs{par} at the end of \cs{marginpar}} Previously, \LaTeX{} ended a \cs{marginpar} without ever explicitly calling \cs{par}. This command is now explicitly added because it is essential to the correct working of the paragraph hooks. Another case where this issue caused problems was the \pkg{lineno} package, where the last line was not numbered if the \cs{marginpar} ended without an explicit \cs{par}. % \githubissue{489} \subsection{Execute \cs{AtEndDocument} hook in vertical mode} Until now \verb=\end{document}= executed the code from the \cs{AtEndDocument} hook as its first action. This meant that this hook was executed in horizontal mode if the user left no empty line after the last paragraph. As a result, one could get a spurious space added when, for example, that code contained a \cs{write} statement. This was fixed and now \cs{enddocument} first issues a \cs{par} to ensure that it always goes into vertical mode. % \githubissue{385} \subsection{Color groups made permanent} The use of color in certain \LaTeX{} constructs, especially boxes, needs an extra layer of grouping to ensure that the color setting does not \emph{escape} and continue outside the box when it shouldn't. % To support this, the \LaTeX{} kernel defines a number of commands, e.g., \cs{color@begingroup} to be used in such places. Until now, these commands were initially set as no-ops and only the color packages redefined them to become real groups; this methodology complicates the coding as one has to account for a group being present or not (\mbox{depending} on what is loaded in the document). % The kernel therefore now permanently adds these \enquote{color groups}. % \githubissue{488} \subsection{Provide the raw option list to key/value option handlers} Before any further processing of the option list, the original (un-normalized, \enquote{raw} and unchanged) list of package or class options is now saved, as \cs{@raw@opt@...}; this list is not used by the standard option processing code but it is now available for use by extended class/package processing systems. Note that, for compatibility reasons, the standard option processing code has not been changed. One aspect of this change does affect the standard \mbox{processing}: any tokens to the right of an \texttt{=} sign are \mbox{removed} from consideration when constructing the \enquote{\mbox{unused} option list}. For example, in this release \texttt{clip=true} and \texttt{clip=false} both contribute \texttt{clip} to the list of options that have been used. % \githubissue{85} \subsection{New for \pkg{latexrelease}\,: \cs{NewModuleRelease}} To explain the need for this new feature, we shall consider the following example: in the 2020-10-01 release, \LaTeX's new hook management system was added to the kernel (see \cite{33:ltnews32}) and, as with all changes to the kernel, it was added to \pkg{latexrelease}; this made it possible to roll back to a date where this module didn't yet exist, or to roll forward from an older \LaTeX{} release to get the hook management system (by loading the \pkg{latexrelease} package). % However, this method of rolling back from a later release to the 2020-10-01 release didn't quite work because it would try to define all the commands from \pkg{lthooks} again; and this would of course result in the expected errors from commands defined with \cs{newcommand} or (as in \pkg{lthooks}) \cs{cs\_new:Npn}. To solve such issues, we now provide \cs{NewModuleRelease} so that completely new modules can be defined using the facilities of \pkg{latexrelease} in such a way that, when rolling back or forward, the system will know whether the code of the new module has to be read or completely ignored. More details on this can be found in the \pkg{latexrelease} documentation (get this with \verb|texdoc latexrelease|). % \githubissue{479} \subsection{Small fix for rolling back prior to 2020-02-02} Whereas the \pkg{latexrelease} package can usually emulate an older \LaTeX{} kernel without much problem, rolling back to before the 2020-02-02 release didn't work properly: this is because the management of the \cs{ExplSyntaxOn/Off} status for packages (after an \pkg{expl3}-based package is loaded) cannot be removed by the rollback without messing up the catcodes. This has been fixed so that rollback is now more careful not to leave \cs{ExplSyntaxOn} after a package ends. % \githubissue{504} \section{Changes to packages in the \pkg{graphics} category} \subsection{Removed warning when loading graphics files} A previous release sometimes mistakenly caused a (false) warning message to appear when \mbox{using} a generic graphics rule to find and load a graphics file with an unknown \mbox{extension}. %%CCC removing hyphenation here makes this one line longer. This warning would incorrectly say that the file was not found, whereas the file would in fact be correctly loaded. The warning now doesn't show up in that case. % \githubissue{516} \subsection{Fixed loading of \texttt{gzip}ped PostScript files} A previous release mistakenly changed the file searching mechanism so that compressed PostScript graphics files would raise an error when being loaded with \cs{includegraphics}. This has been fixed so that \texttt{gzip}ped graphics files now load correctly. % \githubissue{519} \section{Changes to packages in the \pkg{tools} category} \subsection{\pkg{layout}: Added language options} This package now recognizes \option{japanese} and \option{romanian} as language options. % \githubissue[s]{353 and 529} \subsection{\pkg{array} and \pkg{longtable}: Make \cs{\textbackslash} generally robust} The fix for this issue was also applied to these packages; see above. % \githubissue{548} \subsection{\pkg{longtable}: General bug fix update} This is a minor update to the \pkg{longtable} package that fixes several reported bugs: notably the possibility of incorrect page breaks when floats appear on the page where a \env{longtable} starts. As this may affect page breaking in existing documents, a rollback to \pkg{longtable 4.13} (\file{longtable-2020-01-07.sty}) is supported. % \gnatsissue{tools}{2914 3396 3512} \githubissue{133 137 183 464 561} \subsection{\pkg{trace}: Additions to \cs{traceon}} The \cs{tracingstacklevels} and \cs{tracinglostchars} extensions to \cs{tracingall} (see above) were also added to \cs{traceon} in the \pkg{trace} package, so its users can also benefit from these new debugging possibilities. % \githubissue{524} \subsection{\pkg{bm}: Better support for commands with optional arguments} Some uses of optional arguments in \cs{bm} stopped being supported (in 2004) when \cs{kernel@ifnextchar} was used internally by the format instead of \cs{@ifnextchar}. This update handles both versions of this command and restores the original \mbox{behavior}. In addition, package options for guiding the use of \enquote{poor man's bold} in fallback situations were added. % \githubissue{554} \section{Changes to packages in the \pkg{amsmath} category} The fix for issue 548 was also applied in \pkg{amsmath}; see above. % \githubissue{548} \medskip \begin{thebibliography}{9} \fontsize{9.3}{11.3}\selectfont \bibitem{33:blueprint} Frank Mittelbach and Chris Rowley: \emph{\LaTeX{} Tagged PDF \Dash A blueprint for a large project}.\\ \url{https://latex-project.org/publications/indexbyyear/2020/} \bibitem{33:source2e} \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\ \url{https://latex-project.org/help/documentation/} \bibitem{33:ltnews32} \LaTeX{} Project Team: \emph{\LaTeXe{} news 32}.\\ \url{https://latex-project.org/news/latex2e-news/ltnews32.pdf} \end{thebibliography} \end{document}