% Copyright 2017-2018 The LaTeX3 Project \documentclass{ltnews} \PassOptionsToPackage{colorlinks}{hyperref} \usepackage{csquotes} \usepackage{hologo} \usepackage{ragged2e} \usepackage{underscore} %%% wrong in ltnews.cls ... so some tmp fix here at the moment: \makeatletter \renewcommand{\subsubsection}{% \@startsection {subsubsection}{2}{\leftmargini}{-1.5ex \@plus -1ex \@minus -.2ex}% {1sp}{\@subheadingfont}% } \makeatother \AtBeginDocument{% \renewcommand*{\LaTeXNews}{\LaTeX3~News}% \RaggedRight \setlength\parindent{1em}% } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \publicationmonth{February} \publicationyear{2018} \publicationissue{11} % Avoid hyphenation of csnames \makeatletter \protected\edef\cs#1{% \noexpand\path{\@backslashchar#1}% } \makeatother \hyphenpenalty=10000 \exhyphenpenalty=10000 \begin{document} \maketitle \tableofcontents \section{Move of sources from Subversion to Git} The \LaTeX{} team have used a variety of version control systems over the life of the \LaTeX3 sources. For a long time we maintained the \LaTeX3 sources in Subversion (\texttt{svn}) but also provided a read-only clone of them on GitHub using SubGit from TMate Software~\cite{SubGit} to synchronize the two repositories---a solution that worked very well. We have now retired the Subversion repository and completely moved over to Git, with the master \LaTeX3 repository hosted on GitHub: \url{https://github.com/latex3/latex3}. This new approach means we are (slowly) adopting some new approaches to development, for example branches and accepting pull requests. \subsection{Version identifiers} Following this change, we have removed Subversion \verb=$Id= lines from the \LaTeX3 sources. At present, we will be retaining \cs{GetIdInfo} as there are several possible use cases. The \LaTeX3 sources now have only release date strings as identifiers. However, the team recommend that package authors include version information directly in \cs{ProvidesExplPackage} (or similar) lines. \section{\pkg{expl3} updates and extensions} Work has continued on the codebase over the last year, with both small changes/fixes and more substantial changes taking place. The following sections summarise some of the more notable changes. \subsection{\pkg{l3sort} moves to the kernel} Sorting is an important ability, and for some time the team have provided a stand-alone \pkg{l3sort} to support this. The functionality has seen wide take up, and so has now been integrated directly into the kernel. This took place in parallel with some interface changes to \enquote{round out} the code. \subsection{Boolean functions} For some time, the team have been aware that boolean expressions can fail in certain circumstances, leading to low-level errors. This is linked to two features of the long-standing \cs{bool_if:n(TF)} function: expandable operation and short-circuit evaluation. Addressing that has meant two changes: altering \cs{bool_if:n(TF)} to \emph{always} evaluate each part of the expression, and introducing new short-circuit functions without the issue. The latter are \verb|lazy| in \pkg{expl3} terms: \begin{itemize} \item \cs{bool_lazy_all:n(TF)} \item \cs{bool_lazy_and:nn(TF)} \item \cs{bool_lazy_any:n(TF)} \item \cs{bool_lazy_or:nn(TF)} \end{itemize} These new, stable functions are now the recommended way of handling boolean evaluations. Package authors are encouraged to employ these new functions as appropriate. \subsection{Revision of \pkg{l3file}} Large parts of \pkg{l3file} have been revised to give a better separation of path/file/extension. This has resulted in the addition of a number of new support functions and variables. At the same time, new experimental functions have been added to utilise a number of useful primitives in \hologo{pdfTeX}{}: \cs{file_get_mdfive_hash:nN}, \cs{file_get_size:nN} and \cs{file_get_timestamp:nN}. Currently, \hologo{XeTeX} does not support getting file size/timestamp information: this is available in other engines. Paralleling these changes, we have added (experimental) support for shell escape to the \pkg{l3sys} module, most notably \cs{sys_shell_now:n}. A range of test booleans are also available to check whether shell escape is enabled. \subsection{Detection of \cs{cs_generate_variant:Nn} errors} The ability to generate variants is an important feature of \pkg{expl3}. At the same time, there are crucial aspects of this approach that can be misunderstood by users. In particular, the requirement that variants map correctly to an underlying \verb|N|- or \verb|n|-type base function is sometimes misunderstood. To help detect and correct these cases, \cs{cs_generate_variant:Nn} now carries out error checking on its arguments, and raises a warning where it is mis-applied. At present, the team have avoided making this an error as it is likely to be seen by end users rather than directly by package developers. In time, we are likely to revisit this and tighten up further on this key requirement. \subsection{Accessing random data} To support randomised data selection, we have introduced a family of experimental functions which use under\-lying engine support for random values, and provide one entry at random from the data type. At the same time, we have addressed some issues with uniformity stemming from the random number function used by \hologo{pdfTeX}{} and inherited by other engines. This means that \pkg{expl3}'s FPU will generate \emph{pseudo}-random values across the range of possible outputs. \subsection{More powerful debugging} A new set of debugging functions have been added to the kernel. These allow debug code to be enabled locally using the new option \verb|enable-debug| along with functions \cs{debug_on:n} and \cs{debug_off:n}. Accompanying this change, we have improved the handling of global/local consistency in variable setting. \subsection{Mark-up changes in \pkg{l3doc}} Since the introduction of the \verb|__| syntax to mark internal functions, the need for explicit markup of internal material in sources has been negated. As such, we have now dropped the requirement to mark internal material with \verb|[aux]| when using \pkg{l3doc}. Instead, the status of functions and variables is auto-detected from the presence of \verb|__|. For cases where non-standard names are used for internal code, the mark-up \verb|[int]| is retained, \emph{e.g.} \begin{verbatim} \begin{macro}[int]{\l@expl@enable@debug@bool} \end{verbatim} \newpage \section{\pkg{l3build} updates} Work on \pkg{l3build} has continued in parallel with \pkg{expl3} work, in particular continuing to develop features to allow wider use of the tool. Paralleling the move of the \LaTeX3 codebase to Git, \pkg{l3build} now has its own separate Git repository: \url{https://github.com/latex3/l3build}. This will enable us to involve other developers in the Lua code required for the build system. At the same time, we have split the code into a number of small source files, again to ease development both for the team ourselves and for potential collaborators. Another major change is that \pkg{l3build} can now retain the structure of source repositories when creating a CTAN archive. Whilst the team favor `flat' source setups, other users prefer structured approaches. Most notably, this new \pkg{l3build} functionality means that it is now used to carry out \pkg{beamer} releases. The other major new feature is a new approach to multiple test setups, which replaces the older \verb|--testfiledir| option. In the new approach, separate configuration files are listed in the main \verb|build.lua| script, and can be selected manually using a new \verb|--config| switch. This new approach allows complex test setups to be run in a totally automated fashion, which is important for kernel testing. Some changes to the normalisation routines have been carried out, some to deal with upcoming \hologo{LuaTeX} changes, others to address aspects which show up only in some tests. This has required \verb|.tlg| updates in some cases: as far as possible, we strive to avoid requiring changes to the reference files. \begin{thebibliography}{10} \raggedright \bibitem{SubGit} \emph{SubGit}, TMate Software, \url{https://subgit.com} \bibitem{11:project-publications} Links to various publications by members of the \LaTeX{} Project Team. \newblock \url{https://www.latex-project.org/publications} \end{thebibliography} \end{document}