% \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: ltnews30.tex % % This is issue 30 of LaTeX News. \documentclass{ltnews} \usepackage[T1]{fontenc} \usepackage{lmodern,url,hologo} \usepackage{csquotes} \providecommand\acro[1]{\textsc{#1}} \providecommand\meta[1]{$\langle$\textit{#1}$\rangle$} \providecommand\option[1]{\texttt{#1}} \providecommand\env[1]{\texttt{#1}} \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#2}% {gnats issue #1/#2}% )}% \par} \let\cls\pkg \providecommand\env[1]{\texttt{#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \iffalse % only for TUB production \usepackage{graphicx} \makeatletter % Xe\TeX{} requires reflecting the first E, hence we complain if the % graphics package is not present. (For plain documents, this can be % loaded via Eplain.) Also, at Barbara's suggestion, if the current % font is slanted, we rotate by 180 instead of reflecting so there is at % least a chance to look ok. (The magic values here seem more or less % ok for \texttt{cmsl} and \texttt{cmti}.) % % \begin{macrocode} \def\tubreflect#1{% \@ifundefined{reflectbox}{% \TBerror{A graphics package must be loaded for \string\XeTeX}% }{% \ifdim \fontdimen1\font>0pt \raise 1.6ex \hbox{\kern.1em\rotatebox{180}{#1}}\kern-.1em \else \reflectbox{#1}% \fi }% } \def\tubhideheight#1{\setbox0=\hbox{#1}\ht0=0pt \dp0=0pt \box0 } \def\XekernbeforeE{-.125em} \def\XekernafterE{-.1667em} \DeclareRobustCommand{\Xe}{\leavevmode \tubhideheight{\hbox{X% \setbox0=\hbox{\TeX}\setbox1=\hbox{E}% \ifdim \fontdimen1\font>0pt \def\XekernbeforeE{0em}\fi \lower\dp0\hbox{\raise\dp1\hbox{\kern\XekernbeforeE\tubreflect{E}}}% \kern\XekernafterE}}} \def\XeTeX{\Xe\TeX} \def\XeLaTeX{\Xe{\kern.11em \LaTeX}} \fi %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \publicationmonth{October} \publicationyear{2019} \publicationissue{30} \begin{document} %\addtolength\textheight{4.2pc} % only for TUB \maketitle \tableofcontents \setlength\rightskip{0pt plus 3em} %\newpage \medskip %%CCC Does it need an intro? %% \section{Introduction} %% This document is under construction \ldots \section{\LaTeX\texttt{-dev} formats now available} We know that many of you, especially developers and maintainers of important packages, have a strong interest in a stable \LaTeX{} environment. In order to keep \LaTeX{} very stable for users whilst allowing for further development to continue, we now have a development branch of \LaTeX{} on GitHub containing development code for the upcoming release. When this code is ready for wider consumption and testing, we generate a pre-release of \LaTeX{} from this development branch and make it available on \CTAN. For users of the \TL{} and \MiKTeX{} distributions it is therefore now straightforward to test their documents and code against the upcoming \LaTeX{} release with ease, simply by selecting a different program name (when using the command line) or by selecting a menu entry (after setting it up; see below). If you do this then the latest version of the \LaTeX{} development format will be used to process your document, allowing you to test the upcoming release with your own documents and packages. For example, if you run \begin{verbatim} pdflatex-dev myfile \end{verbatim} then you will be greeted on the screen with something like \texttt{LaTeX2e <2019-10-01> pre-release-2} (identifying the pre-release format) instead of the normal \texttt{LaTeX2e <2018-12-01>}. In this pre-release you will find the latest new features that we have developed. \subsection{Our hopes} We don’t expect everybody to start using the development formats to participate in testing, but we hope that people with a strong interest in a stable \LaTeX{} environment (especially developers and maintainers of important packages) will use the new facilities and help us to ensure that future public releases of \LaTeX{} do not (as has happened in the past) require some immediate patches because of issues that were not identified by our internal regression test suite or by other testing we do. Any issue identified when using the development format should preferably be logged as an issue on GitHub, following the procedure outlined on our website at \url{https://www.latex-project.org/bugs/} including the use of the \pkg{latexbug} package as described. Our bug reporting process normally states that issues involving third-party software are out of scope as we can’t correct external packages; see~\cite{30:Mittelbach:TB39-1}. However, in the particular case of the development format showing an incompatibility with a third-party package, it is fine to open an issue with us (in addition, please, to informing the maintainer of that package) so that we know about the problem and can jointly work on resolving it. \subsection{Details please \ldots} More details and some background information about the concepts and the process are available in an upcoming \textsl{TUGboat} article: \enquote{The \LaTeX{} release workflow and the \LaTeX{} dev formats}~\cite{devformat}. \subsection{Setting up menu items} While the command line call works out of the box if you have a recent \TL{} or \MiKTeX{} installation, its use within an integrated editing environment doesn’t at this point in time (maybe the developers of these editors will include it in the future). However, it is normally fairly simple to enable it as most (or even all?)\ of them provide simple ways to call your own setup. How this works in detail depends very much on the environment you use, so we can’t give much help here. But as an example: to provide an additional menu entry for \texttt{XeLaTeX-dev} on a MacBook all that is necessary is to copy the file \texttt{XeLaTeX.engine} to \texttt{XeLaTeX-dev.engine} and change the call from \texttt{xelatex} to \texttt{xelatex-dev} inside. \section{Improving Unicode handling in \pdfTeX{}} Perhaps the most important improvement in this release is even better support for \acro{utf}-8 characters when using \pdfTeX{}.\footnote{The Japanese engines e-p\TeX{} and e-up\TeX{} can't use these features yet as they don't support the primitive \cs{ifincsname}. Work is under way to resolve this in the engines.} When using a \enquote{Unicode engine}, any Unicode character (that is not acting as a command, i.e., is not \enquote{active}) can be used as part of the \cs{label}/\cs{ref} mechanism or can be displayed in a message or written to a file. In 8-bit engines, however, this was severely restricted: essentially you had to limit yourself to using \acro{ascii} letters, digits and a few punctuation symbols. With the new release, most of these restrictions have been removed and you now can write labels such as \begin{verbatim} \label{eq:größer} \end{verbatim} or use accented characters, etc., as part of a \cs{typeout} message. The only requirement remaining is that only those \acro{utf}-8 characters that are also available for typesetting can be used, i.e., only those characters for which adequate font support is loaded. Otherwise you will get an error message stating that the particular Unicode character is not set up for use with \LaTeX{}. Note, however, that the restrictions on what characters can be used in the names of commands have not changed. What is not possible when using an 8-bit engine such as \pdfTeX{} is to use characters other than \acro{ascii} letters as part of a command name. This is due to the fact that all other characters in such engines are not single character tokens, but in fact consist of a sequence of bytes and this is not supported in command names. \section{Improving file name handling in \pdfTeX{}} A related change is that file names used as part of \cs{input}, \cs{includegraphics}, etc., commands can now contain any Unicode characters allowed by the file system in use, including spaces. In this case, even characters that can't be typeset (due to lack of font support) can be used. \section{Improving the \env{filecontents} environment} The \env{filecontents} environment now supports an optional argument in which you can specify that it is allowed to \option{overwrite} an already existing file; by default nothing is written if a file with the given name exists anywhere in the search tree. An alternative name for this option is \option{force}. Even then the environment will refuse to write to \cs{jobname}\texttt{.tex} to avoid clobbering its own input file. However, if you use a different extension on your input file you could still overwrite it (there is no way to test for that). There is also an option \option{nosearch}, which specifies that only the current directory is examined for an existing file, not the whole \TeX{} inputs tree. This is useful if you want to write a local copy of a standard system file. Finally, \option{noheader} prevents writing a preamble to the file (this is the same as using the star form of the environment). Another change is that this environment is now allowed anywhere in the document, which means it provides everything (and more) of what the now obsolete \pkg{filecontents} package provided. \section{Making more user commands robust} In the early days of \LaTeX{} many commands were fragile, i.e., they needed \cs{protect} in front of them when used in places such as section headings and other \enquote{moving arguments}, etc. In \LaTeXe{} many of these commands were made robust, but still a fairly large number remained unnecessarily fragile. In this release of \LaTeX{} we have now made a lot more commands robust. There is a very small collection of commands that must stay fragile because their expansion (maybe partially) at just the right time is critical. Yet others are unlikely to ever be needed in a \enquote{moving argument}. Doing this for \cs{begin} and \cs{end} was rather tricky as the standard mechanism with \cs{DeclareRobustCommand} doesn't work here, at least not for \cs{end} as that needs to expand during typesetting without generating a \cs{relax} (from the \cs{protect}). Such a token would start a new row in table environments, such as \env{tabular}, etc. Furthermore, some packages try to look into the definition of \cs{end} by expanding it several times. Thus expansion with \cs{expandafter} had to produce exactly the same result as before. But in the end we overcame that hurdle too, so now environments are automatically robust if used in places like headings or \verb=\typeout= and so forth. %%CCC do we need to say something about possible problems if other packages %% or documents have redefined commands whose robustness has changed? What hasn't been tackled yet is the redefinitions in \pkg{amsmath}: this package redefines a number of basic math constructs that are now robust, so that they become fragile again once the package is loaded. This area will be addressed in a followup release. % \githubissue{123} \section{Other changes to the \LaTeX{} kernel} \subsection{Guard against \cs{unskip} in tabular cells} If a \env{tabular} or \env{array} cell started with a command that started with an \cs{unskip} then centering the column broke because the stretching glue on the left got removed. The fix for this was to add a minuscule, and hence unnoticeable, additional space after the stretching space: removing this extra space causes no problems. This change was also applied in the \pkg{array} package. \githubissue{102} \subsection{Fix Unicode table data} \texttt{U+012F} which is \enquote{i with ogonek} produced a \enquote{dotless i with ogonek} by mistake. This has been corrected. \githubissue{122} The Unicode slots \texttt{27E8} and \texttt{27E9} have been mapped to \cs{textlangle} and \cs{textrangle} which is the recommended mapping. In the past they raised a \\ \LaTeX{} error. % \githubissue{110} When doing cut-and-paste from other documents or websites, f-ligatures and others ligatures might end up as single Unicode characters in your file. In the past those got rejected by \LaTeX{}. We now define those Unicode slots and map them back to the sequence of individual characters constituting the ligature. If supported by the current font (which is normally the case) they are then reconstructed as ligatures and thus get typeset as desired. Otherwise they will come out as individual characters which is still better than an error message. \githubissue{154} \subsection{Improve \cs{InputIfFileExists}'s handling of file names} In rare circumstances it was possible that \cs{InputIfFileExists} would work incorrectly, e.g., a construction such as \begin{verbatim} \InputIfFileExists{foo}{\input{bar}}{} \end{verbatim} would not load the files \file{foo.tex} and \file{bar.tex} but would load \file{bar.tex} twice. This has been corrected. \githubissue{109} \subsection{Improve interface for cross-references} %%CCC should be 'provide' as they still exist. FMi - no they no longer do that The packages \pkg{fncylab} and \pkg{varioref} provided a slightly improved definition of \cs{refstepcounter} which allowed the internal \cs{p@..} commands to receive the counter value as an argument, instead of acting as a simple prefix. This supports more complex formatting of the value in the reference. These packages also provided the command \cs{labelformat} to help in the specification of such formatting in an easy way. For example, \verb=\labelformat{equation}{eq.~(#1)}= specifies that references to equations automatically come out as \enquote{eq.~(5)} or similar. As such a \cs{labelformat} declaration means a \cs{ref} command can no longer be successfully used at the start of a sentence, the packages also provided \cs{Ref} for such scenarios. Both of these commands, \cs{labelformat} and \cs{Ref}, are now removed from the packages and instead made available in the kernel so there is no need to load additional packages. \subsection{Improve wording of a warning message} The kernel now says \enquote{Trying to load \ldots} instead of \enquote{Try loading \ldots} in one of its informal messages to match style of similar messages. % \githubissue{107} \subsection{Avoid bad side-effects of \cs{DeclareErrorFont}} As a side effect of setting up the error font for \acro{nfss}, this declaration also changed the current font size back to 10pt. In most circumstances that doesn't matter, because that declaration was meant to be used only during the format generation and not during a \LaTeX{} run. However, it has turned out to be used by some developers in other places (incorrectly in fact: e.g., inside some \texttt{.fd} files) where resetting the size causes havoc seemingly at random. The command has now changed to not produce such side effects. \gnatsissue{latex}{4399} \subsection{\pkg{nfssfont}: Make font table generation the default action} With the small file \file{nfssfont.tex} it is possible to produce font tables and other font tests in the style set up by Don Knuth. In nearly all cases a font table is wanted, so this action has been made the default. Now one can simply hit enter instead of having to write \verb=\table\bye=. \subsection{\pkg{trace}: Add package support in the kernel} The \pkg{trace} package implements the commands \cs{traceon} and \cs{traceoff} that work like \cs{tracingall} but skip certain code blocks that produce a lot of tracing output. %%CCC being of no interest to anyone!! -- FMi I love your encouragement This is useful when debugging, to suppress uninteresting tracing from, for example, loading a font. Code blocks that should not be traced need to be surrounded by the commands \cs{conditionally@traceoff} and \cs{conditionally@traceon}. The \LaTeX{} kernel now provides dummy definitions for these two commands so that package writers can use them in their packages regardless of \pkg{trace} being loaded or not. \section{Changes to packages in the \pkg{tools} category} \subsection{\pkg{array}: Warn if primitive column specifiers are overwritten} With \cs{newcolumntype} it is possible to define your own column specifiers for a \env{tabular} preamble; it is also possible to change existing ones. However, doing that for a primitive column specifier, such as \texttt{c}, is seldom a good idea, since then its functionality becomes unavailable. The package was therefore supposed to warn the user in this case, but due to a missing \cs{expandafter} in the code it never did---now it does. % \githubissue{148} \subsection{\pkg{multicol}: Introduce \texttt{minrows} counter for balancing} When there are only a few lines of text on a page at the end of a \env{multicols} environment, balancing the columns often looks rather odd: such as three columns each containing a single line. The balancing behavior can now be controlled through the counter \texttt{minrows} (default is~1) which specifies that, after balancing, there must be at least that many lines in the first column. Thus, if you set \texttt{minrows} to \texttt{2} then you would get a distribution of \texttt{2+1+0} lines and if set to three, the result would be \texttt{3+0+0} instead of the default \texttt{1+1+1}. What is most appropriate really depends on the circumstances, but this now gives you the tools to make local or global adjustments. \subsection{\pkg{varioref}: Better support for \pkg{cleveref}} The \pkg{varioref} package has been internally updated to provide better interfaces for packages such as \pkg{hyperref} and \pkg{cleveref}. It also has a new package option \option{nospace} that stops \pkg{varioref} from meddling with space in front of its commands. The original behavior was always somewhat problematical and it is suggested that all new documents use this option (which should really have been the default). Support was also added for the Arabic language through the option \option{arabic}. \subsection[\pkg{xr}: Support citations to bibliographies in\\ external documents] {\pkg{xr}: Support citations to bibliographies in external documents} The \pkg{xr} package can be used to cross-reference an external \LaTeX{} document. This means that even when a work is split over different documents (that need to be processed separately), \cs{ref} or \cs{pageref} can use labels from any document, creating links between them. This facility has now been extended so that \cs{cite} commands and their cousins can now also reference bibliographies in external documents; this feature was first provided in the package \pkg{xcite} by Enrico Gregorio. Note that for technical reasons \pkg{xr} doesn't work with \pkg{hyperref}. Use \pkg{xr-hyper} instead if you need the latter package. \section{Changes to packages in the \pkg{amsmath} category} \subsection{\pkg{amsmath}: Introduce \cs{overunderset} command} The \pkg{amsmath} package has always offered the commands \cs{overset} and \cs{underset} to produce binary operators with something set above or below. But sometimes one needs to put something above and something below: The newly added \cs{overunderset} makes this easily possible. \section{Documentation updates} There are a number of %small documentation updates in files on the documentation page of the project website~\cite{30:site-doc}. \subsection{Highlighting the standard \texorpdfstring{\acro{nfss}}{NFSS} codes for series} The \emph{Font Selection Guide}~\cite{fntguide} has been updated to strongly recommend that the standard codes should be used when providing font support. The reason for this recommendation is explained here. The font selection scheme uses a number of standard codes for \cs{fontseries} and \cs{fontshape} to ensure that different fonts are comparable, e.g., that you get a \enquote{light} weight if you specify \texttt{l} and \enquote{extra bold} when you write \texttt{eb}, etc. Over the years people came up with a number of other creative short codes like \texttt{k}, \texttt{j}, \texttt{t} and others with the result that changing a font family required different codes and thus prevented users from easily mixing and matching different families. Some work has been undertaken to get back to a coherent scheme and all the font families supported through the program \texttt{autoinst} are now producing the standard codes again. \subsection{\LaTeX{} \textsf{base} and \textsf{doc} distribution reunited} For a long time the \LaTeX{} distribution available from \CTAN{} was split into several parts to allow them to be uploaded or downloaded separately. As this is these days more confusing than helpful we have recombined the base part with the documentation part (as both are anyway always updated together). Thus the package \textsf{latex-doc} is no longer separately available from \CTAN{} but contained in the \textsf{latex-base} distribution. \begin{thebibliography}{9} %\fontsize{9.3}{11.3}\selectfont \bibitem{30:Mittelbach:TB39-1} Frank Mittelbach: \emph{New rules for reporting bugs in the \LaTeX{} core software}. In: TUGboat, 39\#1, 2018. \url{https://latex-project.org/publications/} \bibitem{devformat} Frank Mittelbach: \emph{The \LaTeX{} release workflow and the \LaTeX{} dev formats}. In: TUGboat, 40\#2, 2019. \url{https://latex-project.org/publications/} \bibitem{fntguide} \LaTeX{} Project Team: \emph{\LaTeXe{} font selection}.\\ \url{https://latex-project.org/documentation/} \bibitem{30:site-doc} \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\ \url{https://latex-project.org/documentation/} %\bibitem{30:site-pub} % \emph{\LaTeX{} Project publications on the \LaTeX{} Project Website}.\\ % \url{https://latex-project.org/publications/} \end{thebibliography} \end{document}