% \iffalse meta-comment % % Copyright (C) 2021-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: ltnews37.tex % % This is issue 37 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 parameters parameter} \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{} % 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 \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 % Undo ltnews's \verbatim@font with active < and > % (we have meta variables in verbatim, so keep it.) %\makeatletter %\def\verbatim@font{% % \normalsize\ttfamily} %\makeatother %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \providecommand\tubcommand[1]{} \tubcommand{\input{tubltmac}} % \publicationday{01} % change this if it's not released on 1st of a month \publicationmonth{June} %\publicationyear{2023 --- DRAFT version for upcoming release} \publicationyear{2023} \publicationissue{37} \begin{document} \tubcommand{\addtolength\textheight{4.1pc}} % only for TUB \maketitle {\hyphenpenalty=10000 \exhyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000 \tableofcontents} \setlength\rightskip{0pt plus 3em} % for ltnews37, squeeze to five pages. \tubcommand{\fontsize{9.6}{12}\selectfont} \medskip %\section{Introduction} \section{New functionality offered as part of the \enquote{\LaTeX{} Tagged PDF} project} We have now enabled new automatic tagging functionality for additional \LaTeX{} elements, among them most display environments, standard sectioning commands, content, figure and table listings, floats and graphics and bibliographies. This can be activated through \begin{verbatim} \DocumentMetadata{testphase=phase-III} \end{verbatim} At this point in time tagging support is only available for a restricted set of documents, i.e., those that use one of the basic document classes (\texttt{article}, \texttt{report}, and \texttt{book}) and only use commands and environments described in Lamport's \LaTeX{} manual. Using other document classes or adding additional packages in the preamble may work (or may partially work) but at this stage it is not very likely, at least not for packages or classes that excessively alter internals of \LaTeX{}. Also note that there are still several environments and commands described in the \LaTeX{} manual that do not have tagging support yet, notably tabulars, \texttt{tabbing}, the various math environment and a few others. They will get this support as part of \texttt{phase-III}, but some of them will be delayed until after the June release. A prototype for math tagging (including support for the \pkg{amsmath} environments) is already available, but it is mainly intended for experimentation and feedback and the resulting tagging is by no means the way we envision it to be eventually. If you would like to try it out use the following line: \begin{verbatim} \DocumentMetadata{testphase={phase-III,math}} \end{verbatim} Note that the math tagging code at this point in time will clash with packages that redefine the \texttt{\$} character (which then may lead to strange errors) and that packages that use math mode for non-mathematical constructs may result in surprising output as far as tagging is concerned. Feedback on which packages fail with the code in one or another way would be appreciated. The \texttt{latex-lab} bundle contains various (still untagged) documentation files about the new code that can be accessed with \verb|texdoc -l latex-lab|. Feedback is welcome! Please use \url{https://github.com/latex3/latex2e/discussions/1010}. \section{New or improved commands} \subsection{Extending hooks to take arguments} Hooks have always been containers for code whose outcome was entirely dependent on the contents of the hook alone. If any type of contextual information had to be passed to the hook, it had to be done by setting some variable before the hook so that the code in the hook could use that. But this is somewhat hard to keep track of, clumsy to implement, and it required the programmer to have some kind of \enquote{hook before the hook} to do that setup. To make things a bit easier, \pkg{lthooks} was enhanced to support hooks with arguments. Hooks can now be declared and used with arguments, then the code added to these hooks can reference the hook's arguments using \verb|#1|, \verb|#2|, etc., so now hooks can behave more like macros than like \emph{token lists} (using \pkg{expl3} terminology). Regular argument-less hooks continue to work exactly like they did before: this extension is completely compatible with older documents and packages. \AddToHook{cmd/verbatim@font/after}[hack]{\small} To declare a hook with arguments, use \begin{verbatim} \NewHookWithArguments {<hook>} {<num-args>} \end{verbatim} then, similarly, to use the code in the hook, supposing a hook declared with 2 arguments, write \begin{verbatim} \UseHookWithArguments {<hook>} {2} {<arg1>} {<arg2>} \end{verbatim} Or, if you want to add some code to a hook that takes arguments, write \begin{verbatim} \AddToHookWithArguments {<hook>} [<label>] {<code>} \end{verbatim} exactly like you would for regular hooks, except that the \meta{code} can use the arguments by referencing \verb|#1|, \verb|#2|, etc. In this case, if you want to add an actual parameter token (\verb|#|) to the \meta{code}, you have to double it, as usual. \RemoveFromHook{cmd/verbatim@font/after}[hack] Additionally, if you want to add \enquote{regular} code to a hook with arguments, you can still use \cs{AddToHook} --- in that case \verb|#| tokens are \emph{not} doubled. This means that a package author can decide to add arguments to an existing hook without worrying about compatibility: \cs{AddToHook} will do the right thing and will not mistakenly reference the newly added arguments. The commands \cs{NewReversedHookWithArguments}, \cs {NewMirroredHookPairWithArguments}, \cs {AddToHookNextWithArguments}, \cs{UseOneTimeHookWithArguments}, and the \pkg{expl3} counterparts of the commands discussed in this section were also added. The complete documentation can be found in the \pkg{lthooks} documentation \cite{37:lthooks-doc}. \subsubsection{Generic \texttt{cmd} hooks with arguments} Along with the possibility of passing arguments to a regular hook as discussed above, generic \hook{cmd} hooks can now access the arguments of the command they are patched into, using the interface described in the previous section. For example, if you were to add some code to the \cs{title} command using hooks, you could access the actual title given in the argument. Thus, to write the title of the document in the terminal you could use: \begin{verbatim} \AddToHookWithArguments{cmd/title/before} {\typeout{Document title: #1}} \end{verbatim} As with regular hooks, code added to a \hook{cmd} hook using \cs{AddToHook} will not be able to access the command's arguments. This means that, as with regular hooks, this change is completely backwards compatible, so previous usages of \hook{cmd} hooks will work exactly as they did before. \subsection{Providing copy and show functions for environments} To copy a command definition we introduced \cs{NewCommandCopy} in 2022. This even allows you to copy commands that consist of several internal components, such as robust commands or those with a complex signature. To do the same with environments, e.g., to define the environment \env{myitemize} to be equivalent to \env{itemize}, you can now write \begin{verbatim} \NewEnvironmentCopy{myitemize}{itemize} \end{verbatim} There are also \cs{Renew...}\ and \cs{Declare...}, which may be useful depending on the circumstances. In addition, we offer a \cs{ShowEnvironment} command, which displays the \cs{begin} and \cs{end} code of the environment passed as an argument. E.g., \verb=\ShowEnvironment{center}= results in the following output: \begin{verbatim} >> \begin{center}=environment: >> ->>\trivlist \centering \item \relax . <<recently read>> } l. ...\ShowEnvironment{center} >> \end{center}: >> ->>\endtrivlist . <<recently read>> } l. ...\ShowEnvironment{center} \end{verbatim} % \githubissue{963} \subsection{\cs{IfFileAtLeastTF}} The 2020-10-01 \LaTeX{} release introduced the CamelCase tests \cs{IfClassAtLeastTF} and \cs{IfPackageAtLeastTF} for checking class and package dates. We have now added \cs{IfFileAtLeastTF} to allow the same to happen for generic files which contain a \cs{ProvidesFile} line. % \githubissue{1015} \subsection{\cs{DeclareLowercaseMapping}, \cs{DeclareTitlecaseMapping} and \cs{DeclareUppercaseMapping}\texorpdfstring{\raggedright}{}} The move from a case-changing approach using \cs{lccode} and \cs{uccode} data to one where information is stored by a kernel-managed structure left a gap in the ability of the user to \emph{tune} the case changing outcomes. This has now been addressed by the addition of three commands \begin{itemize}\tubcommand{\setlength{\parskip}{0pt}}% \item \cs{DeclareLowercaseMapping} \item \cs{DeclareTitlecaseMapping} \item \cs{DeclareUppercaseMapping} \end{itemize} which can be used to customise the outcome for codepoints. This can be applied generally or to a specific locale (see also the next section). A small number of pre-defined customisations have been set up in the kernel where the outcomes for \pdfTeX{} should be different for those from Unicode engines. For example \begin{verbatim} \DeclareUppercaseMapping{"01F0}{\v{J}} \end{verbatim} allows \v{J} to be produced in 8-bit engines: without this customisation, an error would occur as there is no pre-composed \v{J} in Unicode. More detail is given in \texttt{usrguide}. % \githubissue{1033} \subsection{\cs{BCPdata}} Improvements in the Unicode handling for case changing have highlighted that the kernel has not to-date been locale-aware. The packages \pkg{babel} and \pkg{polyglossia} provide comprehensive locale support, but did not have an agreed unified interface to pass that information back to other code. Following discussion with the maintainers of those two bundles, the kernel now defines \cs{BCPdata} as a stub (so it is always defined), and \pkg{babel} and \pkg{polyglossia} will redefine it to provide the locale data. An agreed set of keywords mean that \cs{BCPdata} can be queried in a structured way by both the kernel and any other \enquote{consumer} packages. % \githubissue{1035} \subsection{Improve \cs{samepage}} The \cs{samepage} declaration sets various parameters to \texttt{10000} to prevent undesired page breaks. The \cs{predisplaypenalty} parameter has already by default a value of \texttt{10000}, and to save space in the past it was therefore not explicitly set. However, there are a few classes that change the parameter and as result the user might experience a page break in front of a display formula within the scope of \cs{samepage} when using such classes. This has now been corrected and \cs{predisplaypenalty} is also explicitly set to \texttt{10000}. % \githubissue{1022} \subsection{Groups in \cs{MakeUppercase}} % Prior to 2022, \cs{MakeUppercase} and \cs{MakeLowercase} used a brace group around their argument so providing a scope for any declarations within the argument. This grouping has been restored (also for \cs{MakeTitlecase}), although the underlying L3 text case commands do not use grouping. % \githubissue{1021} \subsection{Extension of the \cs{label} command} Previously, in standard \LaTeX{}, the \cs{label} command wrote a \cs{newlabel} declaration into the \texttt{.aux} file and stored two values in the second argument of this \cs{newlabel} command: \cs{@currentlabel}, which normally contains the state of the current counter and \cs{thepage} for the current page number. The packages \pkg{hyperref} and \pkg{nameref} then patched the \cs{label} command to store five values instead. In addition to the above they saved \cs{@currentlabelname}, which normally contains the current title text and can be retrieved with \cs{nameref}, and \cs{@currentHref}, which is the name of the destination needed to create an active link. The fifth argument was only used if external references were loaded with the \pkg{xr-hyper} package. Starting with this release, the number of values stored in \cs{newlabel} has been unified. \cs{label} now writes a \cs{newlabel} command that always contains five values in the second argument (each in a brace group): \cs{@currentlabel}, \cs{thepage}, \cs{@currentlabelname}, \cs{@currentHref}, and \cs{@kernel@reserved@label@data} (which is reserved for the kernel). Additionally, a hook with the name \texttt{label} has been added. It takes one argument: the label string. Code added to the hook can refer to this argument with~\verb+#1+. The hook is executed directly before the \cs{label} command writes to the \texttt{.aux} file but \emph{after} the \cs{@bsphack} command has done its spacing magic, and it is located \emph{inside} a group; thus, its code only affects the write operation. \section{Code improvements} \subsection{Performance in checking file existence} The addition of hooks, etc., to file operations had a side effect of making multiple checks that the file existed. In larger documents using many files, these file system operations caused non-trivial performance impact. We now cache the existence of files, such that these repeated filesystem calls are avoided. \subsection{\pkg{doc}: Handle \texttt{\textbackslash\textvisiblespace} correctly in the index} Due to some problems in the code it wasn't possible to prevent \verb*=\ = from showing up in the index\Dash \verb=\DoNotIndex{\ }=, etc.\ had no effect. This has now been corrected. % \githubissue{943} \subsection{\pkg{doc}: Support the \pkg{upquote} package} The default quote and backquote characters in typewriter fonts are typographical quotes, e.g., the input \begin{verbatim} \verb/`prog 'my input'`/ \end{verbatim} is rendered as \verb/`prog 'my input'`/ and not as % \begingroup % code to mimic upquote.sty \catcode`'=\active \catcode``=\active \makeatletter \g@addto@macro\@noligs {\let'\textquotesingle \let`\textasciigrave \ifx\encodingdefault\upquote@OTone \ifx\ttdefault\upquote@cmtt \def'{\char13 }% \def`{\char18 }% \fi\fi} \endgroup % \verb/`prog 'my input'`/ as preferred by many programmers. This can be adjusted, for example, with the \pkg{upquote} package, which results in the second output. However, for historical reasons \pkg{doc} had its own definition of \cs{verb} and \env{verbatim} and as a consequence the two packages did not cooperate. This has now been fixed and loading \pkg{upquote} together with \pkg{doc} has the desired effect. % \githubissue{953} \subsection{Default definition for \cs{do}} The command \cs{do} with its nice public name is in reality an internal command inherited from plain \TeX{} for list processing. However, it only got a definition when \verb=\begin{document}= was executed, with a result that a user definition in the preamble was unconditionally overwritten at this point. To properly alert the user that this command is not freely available we now make a definition in the format, so that \cs{newcommand} and friends produce a proper error message instead of allowing a definition that doesn't last. % \githubissue{975} \subsection{New key for \env{filecontents}} The \env{filecontents} environment warns on the terminal if a file gets overwritten even if that is intentional, e.g., when you write a temporary file over and over again. To make the warning less noisy in this case we added a new \texttt{nowarn} key that redirects the overwriting warning to the transcript file. We think that some record of the action is still required to help with debugging, thus it is not completely silenced. The warning that nothing gets written, because the file already exists (and the \texttt{force} key was not used), is not altered and still shows up on the terminal. % \githubissue{958} \subsection{A further hook for shipping out pages} Since October 2020 the shipout process offers a number of hooks to adjust what is happening before, during, and after the \cs{shipout}. For example, with the \hook{shipout/before} hook, packages can reset code they have altered (e.g., \cs{catcode}s during verbatim-like processing) and with \hook{shipout/background} and \hook{shipout/foreground} material can be added to the pages. Details are given in \cite{37:ltshipout-doc}. However, still missing was a hook that allows a package writer to manipulate the completed page (with foreground and background attached) just before the actual shipout happens. For this we now provide the additional hook \hook{shipout}. One use case (sometimes needed in print production) is to mirror the whole page via \cs{reflectbox} including all the extra data that may have been added into the fore- or background. % \githubissue{920} \subsection{Displaying release information in the \texttt{.log}} \LaTeX{} displays its release information at the very beginning of the \LaTeX{} run on the terminal, and also writes it to the transcript file if that is already opened at this point. While this is normally true, it is not the case if the \LaTeX{} run was started passing additional \TeX{} code on the command line, e.g., \begin{verbatim} pdflatex '\PassOptionsToClass{11pt}{article} \input{myarticle}' \end{verbatim} In this case the release information is displayed when \cs{PassOptionsToClass} is processed but the transcript file is only opened when the output file name is known, i.e., after \cs{input} has been seen, and as a result the release information is only shown on the terminal. To account for this scenario, we now repeat the release information also at the very end of the transcript file where we can be sure that it is open and ready to receive material. % \githubissue{944} \section{Bug fixes} \subsection{Incompatibility between \pkg{doc} and \pkg{unicode-math}} The \pkg{unicode-math} package alters the catcode of \verb=|= but does not adjust its value for use in \pkg{doc}, with the result that \enquote{or} modules, i.e., $\langle A | B \rangle$ are displayed in a strange way. This is now fixed with some firstaid code that will eventually be moved into \pkg{unicode-math}. % \githubissue{820} \subsection{A fix for \cs{hspace}} The change to \cs{hspace}, done in 2020 to make it \pkg{calc}-aware, had the unfortunate side effect that starting a paragraph with \cs{hspace} would result in the execution of \cs{everypar} inside a group (i.e., any local changes would immediately be revoked, breaking, for example, \pkg{wrapfig} in that special situation). % This got fixed with the 2022-11 PL1 hotfix, so was already corrected in the previous release, but is only now documented in the newsletter. % \githubissue{967} \subsection{Ensure that \cs{cs} is defined in \cls{ltxdoc}} The class \cls{ltxdoc} defined the command \cs{cs} to typeset a command name with a backslash in front. This definition was moved to the \pkg{doc} package itself. This meant that it was suddenly missing when reverting to the old \pkg{doc} package implementation via the class option \texttt{doc2}. This has now been corrected. % \githubissue{981} \subsection{Improve spacing at top of \env{minipage}s} A list and several other document elements add some vertical space in front of them. However this should not happen at the beginning of a box (such as a \env{minipage}) and normally it doesn't, because \TeX{} automatically drops such space at the start of a vertical list. However, if there is some invisible material, such as a \cs{color} command, a \pkg{hyperref} anchor, a \cs{write} or other such items, then the list is no longer empty and \TeX{} no longer drops the vertical space. With the new paragraph handling introduced in 2021 it is now finally possible to detect and avoid this problem and apply appropriate counter measures so that from now on the spacing will always be correct. % \githubissue{989} \subsection{A fix for \cs{NewCommandCopy} and \cs{ShowCommand}} When copying and showing definitions of (non-expandable) document commands (a.k.a.\ commands defined by \cs{NewDocumentCommand} and friends) containing empty or only \texttt{m}-type arguments, these commands were wrongly recognized as expandable ones. This is fixed in the present \LaTeX{} release. % \githubissue{1009} \subsection{Corrections for switching math version} Some internal code improvements improve support for switching math version when nested within an outer math expression. This will improve \cs{boldsymbol} and \cs{bm} and similar commands. % \githubissue{1028} \subsection{Allow par as a filename} \verb|\input{par}| or \verb|\includegraphics{par}| could give spurious errors. This has been fixed by making an internal command \cs{long}. % \githubissue{942} \subsection{Correct setting of \cs{endlinechar} in \texttt{+v} arguments} In the particular case of a document command with a \texttt{+v}-type argument used inside \cs{ExplSyntaxOn}\texttt{/Off}, newlines would be misinterpreted as spaces because the value of \cs{endlinechar} was set too late. This has been fixed, and now newlines are correctly translated to ``\verb|the character ^^M|''. % \githubissue{876} \subsection{Correct handling of hooks with only `next' code} When \cs{AddToHookNext} was used on a not-yet-declared hook, that hook would be incorrectly identified as empty by \cs{ShowHook}. Also, if that hook was later declared, that `next' code would not be executed. This has been fixed by correctly initializing the hook structure when \cs{AddToHookNext} is used. % \githubissue{1052} \subsection{Ignoring space after \texttt{\$\$}} Space is normally ignored after a closing \texttt{\$\$}, but internal \LaTeX{} font handling code could interfere if \cs{eqno} was used. \cs{eqno} and \cs{leqno} have been redefined to add \cs{ignorespaces} after the math group. % \githubissue{1059} \section{Documentation improvements} \subsection{Updates to the guides} When \LaTeXe{} was released, the team provided documentation for both document authors and package/class developers in the two files \texttt{usrguide} and \texttt{clsguide}. Over time, the team have augmented these documents as new methods have been added to the kernel. However, they retained their structure as assuming familiarity with \LaTeX{}~2.09. This meant that for new users, there was material which is no longer relevant, and less clarity than desirable regarding the approaches that are recommended today. The two files have now been (partially) re-written, with the versions available previously now frozen as \texttt{usrguide-historic} and \texttt{clsguide-historic}. More material has been carried forward in the class/package guide than in the user guide, but both are worth a re-read by experienced \LaTeX{} users. \subsection{Displaying the exact release dates for \LaTeX{}} In some situations it is necessary to find out the exact release dates for older versions of the \LaTeX{} format, for example, when you need to use different code in a package depending on the availability of a certain feature and you therefore want to use \cs{IfFormatAtLeastTF}\texttt\{\meta{date}\texttt\} or the rather horrible construction \verb/\@ifl@t@r\fmtversion{/\meta{date}\texttt\}, if you want to cater for formats that are older than 2020. Or you know that your package is definitely not going to work with a format before a certain \meta{date}, in which case you could use \verb/\NeedsTeXFormat{LaTeX2e}[/\meta{date}\texttt] to ensure that users are alerted if their format is too old. The big problem is knowing the exact \meta{date} to put into such commands; in the past, that was not that easy to find. You could have looked in the file \file{changes.txt}, but that is hidden somewhere in your installation and if you try \verb/texdoc -l changes.txt/ you get more than thirty results and the %* right file is by no means the first. Yukai Chou (\textsf{@muzimuzhi}) kindly provided a patch for this, so that we now have the exact dates for each \LaTeX{} format listed in an easy to remember place: in \file{ltnews.pdf} and that file conveniently also contains all major features and changes to \LaTeX{} over the years\Dash one of which is most likely the reason you need the \meta{date} in the first place. The date is now given in parentheses in the newsletter title, thus this newsletter tells you that on % \makeatletter \mbox{\expandafter\@gobblenonyear\@year\@nil -\@julianmonthtonum\@month-\two@digits\@day} \makeatother % the command \cs{NewEnvironmentCopy}, a new \texttt{shipout} hook, etc.\ was made available. And looking into \file{ltnews.pdf} you can now easily find out that the \LaTeX3 programming layer was added on 2020-02-02 (because the date was so nice) and not on the first of the month. % \githubissue{982} \subsection{Fresh from the press:\ \enquote{The \LaTeX{} Companion, third~edition} is now in print} The third edition of \emph{The \LaTeX{} Companion} is now available. This is the result of five years of careful work and we hope that it will provide our readers with all the information they need to successfully navigate the \LaTeX{} ecosystem and efficiently produce beautiful documents. Since the publication of the last edition (2004), a lot has happened in the \LaTeX{} world and thus a complete rewrite was necessary. All chapters have been thoroughly revised, and in many cases significantly extended, to describe new important functionality and features. More than 5,000 add-on packages have been analyzed in detail, out of which roughly 10\% have been chosen for inclusion in \emph{The \LaTeX{} Companion}. All important aspects of these packages are described to provide the user once again with a satisfying one-stop–shop experience for the decade to come. To cover what we thought worth describing today, the book nearly doubled in size. The print edition is therefore produced as a two-volume set and sold as a bundle. Both volumes come as hardcover with ribbons to easily mark pages in the book. To give you an idea of what is covered in the third edition you can find some excerpts at \begin{quote} \url{https://www.latex-project.org/news/2023/03/17/TLC3} \end{quote} The edition is also available as an eBook (Parts~I and~II combined) consisting of PDF and ePub format, without DRM\@. Finally, the publisher offers the combination of the printed books and the digital versions at a very attractive price not available anywhere else. %% bb -- add reference to TUGboat review here %\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{\pkg{multicol}: Better support for CJK languages} The default minimum depth of each column in a \env{multicols} corresponds to the depth of a \enquote{p} in the current font. This helps to get some uniformity if rules are used between the columns and makes sense for Latin-based languages. Until now it was hard-wired, but for CJK (Chinese/Japanese/Korean) languages it is better to use a zero depth, because there all characters have the same height and depth. And even with Latin-based languages one might want to use the depth of a \cs{strut} or that of a parenthesis. So we now offer a way to adjust this while maintaining backward compatibility: redefine \cs{multicolmindepthstring} to hold whatever you want to get measured for its depth (the width is not relevant). % \githubissue{698} \subsection{\pkg{multicol}: Fix handling of nested environments} If \env{multicols} environments have been nested into each other (the inner one boxed) it could fail if the boxed environment appeared near a page break. The problem was that the output routine was called while the \cs{hsize} was still altered to fit the column width of the inner \env{multicols} --- thereby messing up the placement of columns of the page. This has now been fixed. % \githubissue{1002} %\medskip \begin{thebibliography}{9} %\fontsize{9.3}{11.3}\selectfont \bibitem{37:ltshipout-doc} Frank Mittelbach, \LaTeX{}~Project~Team: \emph{The~\texttt{\upshape ltshipout} documentation}.\\ Run \texttt{texdoc} \texttt{ltshipout-doc} to view. \bibitem{37:lthooks-doc} Frank Mittelbach, Phelype Oleinik, \LaTeX{}~Project~Team: \emph{\LaTeX's hook management}.\\ Run \texttt{texdoc} \texttt{lthooks-doc} to view. %\bibitem{37: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{37:source2e} % \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\ % \url{https://latex-project.org/help/documentation/} %\bibitem{37:Lamport} %Leslie Lamport. %\newblock {\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{37:ltnews32} \LaTeX{} Project Team: % \emph{\LaTeXe{} news 32}.\\ % \url{https://latex-project.org/news/latex2e-news/ltnews32.pdf} % %\bibitem{37:ltnews34} \LaTeX{} Project Team: % \emph{\LaTeXe{} news 34}.\\ % \url{https://latex-project.org/news/latex2e-news/ltnews34.pdf} % %\bibitem{37:ltnews35} \LaTeX{} Project Team: % \emph{\LaTeXe{} news 35}.\\ % \url{https://latex-project.org/news/latex2e-news/ltnews35.pdf} % %\bibitem{37:fntguide} \LaTeX{} Project Team: % \emph{\LaTeXe{} font selection}.\\ % \url{https://latex-project.org/help/documentation/} % %\bibitem{37:ltfilehook-doc} Frank Mittelbach, Phelype Oleinik, \LaTeX{}~Project~Team: % \emph{The \texttt{\upshape ltfilehook} documentation}.\\ % Run \texttt{texdoc} \texttt{ltfilehook-doc} to view. \end{thebibliography} \end{document}