diff options
Diffstat (limited to 'macros/latex/required/l3kernel/l3syntax-changes.tex')
-rw-r--r-- | macros/latex/required/l3kernel/l3syntax-changes.tex | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/macros/latex/required/l3kernel/l3syntax-changes.tex b/macros/latex/required/l3kernel/l3syntax-changes.tex new file mode 100644 index 0000000000..85f83bf0e3 --- /dev/null +++ b/macros/latex/required/l3kernel/l3syntax-changes.tex @@ -0,0 +1,190 @@ +\iffalse meta-comment + +File: l3syntax-changes.tex + +Copyright (C) 2011,2012,2017-2024 The LaTeX Project + +It may be distributed and/or modified under the conditions of the +LaTeX Project Public License (LPPL), either version 1.3c of this +license or (at your option) any later version. The latest version +of this license is in the file + + https://www.latex-project.org/lppl.txt + +This file is part of the "l3kernel bundle" (The Work in LPPL) +and all files in that bundle must be distributed together. + +The released version of this bundle is available from CTAN. + +\fi + +\documentclass{l3doc} + + +\title{% + Syntax changes in \LaTeX3 functions% +} +\author{% + The \LaTeX{} Project\thanks + {% + E-mail: + \href{mailto:latex-team@latex-project.org}% + {latex-team@latex-project.org}% + }% +} +\date{Released 2024-04-11} + +\newcommand{\TF}{\textit{(TF)}} + +\begin{document} + +\maketitle + +This file describes functions that were expected to be completely +stable, but whose syntax has changed in ways that may potentially +require code relying on them to be changed. This file does not include +bug-fixes, nor backward-compatible extensions of the syntax, +nor functions that were completely +deprecated: the latter are listed in \texttt{l3obsolete.txt}. Only +changes after August 2011 are listed, with an approximate date. + +\section{August 2011} + +\begin{itemize} + \item \cs{tl_if_single:n\TF} recognized any non-zero number of + explicit spaces as \meta{true}, and did not ignore trailing spaces. + Now it is \meta{true} for + \[ + \meta{optional spaces} + \meta{normal token or brace group} + \meta{optional spaces}. + \] + \item \cs{tl_reverse:n} stripped outer braces and lost unprotected spaces. + Now it keeps spaces, leaves unbraced single tokens unbraced, and + braced groups braced. + \item \cs{tl_trim_spaces:n} only removed one leading and trailing space. + Now removes recursively. Also, on the left it used to strip implicit + and explicit spaces with any character code. Now it strips only explicit + space characters $(32,10)$. +\end{itemize} + +\section{September 2011} + +\begin{itemize} +\item clist functions which receive an \texttt{n}-type comma list argument + now trim spaces from each item in the argument. +\end{itemize} + +\section{May 2012} + +\begin{itemize} + \item The \pkg{l3fp} code has been completely rewritten with a new + expandable interface. + \item Getting/popping from a comma list or sequence or property list + that is empty (or missing the given key) now gives the quark + \cs{q_no_value}. +\end{itemize} + +\section{June 2012} + +\begin{itemize} + \item Access to list functions now indexes from~$1$, not from~$0$. + This applies to multiple choices in the \pkg{l3keys} module and + the \cs{clist_item:Nn}, \cs{seq_item:Nn} and \cs{tl_item:Nn} + functions. + \item \cs{tl_trim_spaces:n} now requires a variable number of + expansions to fully expand, rather than exactly two. Of course, + \texttt{x}-type or \texttt{e}-type expansion still correctly evaluates this function. +\end{itemize} + +\section{July 2012} + +\begin{itemize} + \item The \cs{tl_if_head_eq_meaning:nN}, \cs{tl_if_head_eq_catcode:nN} + and \cs{tl_if_head_eq_charcode:nN} conditionals now never match when + their first argument is empty. +\end{itemize} + +\section{August 2012} + +\begin{itemize} + \item \cs{lua_now:x} is now a standard \texttt{x}-type expansion of + \cs{lua_now:n}, which does no expansion. Engine-level expansion is moved + to \cs{lua_now:e}, reflecting the fact that this is non-standard in the + same way as for example \cs{str_if_eq_x:nn(TF)}. +\end{itemize} + +\section{December 2013} + +\begin{itemize} + \item In \pkg{l3fp} expressions, the badly named functions |round0|, + |round-|, |round+| are now named |trunc|, |floor|, |ceil|. +\end{itemize} + +\section{May 2014} + +\begin{itemize} + \item Now \cs{int_step_function:nnnN} evaluates its first three + arguments (start, step, stop) up front, rather than evaluating them + at each step in the loop. The same holds for the related mappings + \cs{int_step_inline:nnnn}, \cs{int_step_variable:nnnNn}, and their + analogues for \texttt{dim} and \texttt{fp} datatypes. +\end{itemize} + +\section{July 2014} + +\begin{itemize} + \item In \pkg{l3fp} expressions, juxtaposition is interpreted as + multiplication. Now the precedence of juxtaposition is set to be + the same as if there was an explicit multiplication + sign~\texttt{*}. Previously, juxtaposition would bound more tightly + than any other operation. +\end{itemize} + +\section{August 2015} + +\begin{itemize} + \item The \cs{hbox:n} and related \pkg{l3box} commands now take an + \texttt{n}-type argument and provide it braced to the underlying + \TeX{} primitive. The functions \cs{hbox:w} and \cs{hbox_end:} in + contrast do not read the contents of the box as a macro argument. +\end{itemize} + +\section{2016} + +No change. + +\section{July 2017} + +\begin{itemize} + \item Boolean expressions are now evaluated eagerly, namely both + operands of logical \texttt{and} (|&&|) and \texttt{or} (\verb"||") + are evaluated even when the result of the logical operation is fixed + after determining the first operand. For lazy evaluation, + \cs{bool_lazy_and_p:nn} and related functions are provided. +\end{itemize} + +\section{November 2017} + +\begin{itemize} + \item Spaces are now preserved inside keys in \pkg{l3keys}, and + trimmed at both ends. + \item \cs{cs_generate_variant:Nn} is now stricter: it only allows to + change \texttt{N}-type arguments to \texttt{c}, and \texttt{n} to + \texttt{o}, \texttt{V}, \texttt{v}, \texttt{f}, \texttt{x}. On the + one hand the latter argument types typically give rise to more than + one token, not suitable for use by an \texttt{N}-type base function. + On the other hand, \texttt{c} variants of \texttt{n} arguments + should often be \texttt{v} variants (when the argument is eventually + evaluated) or mistakes where the programmer thought the base + function was \texttt{N}-type. +\end{itemize} + +\section{February 2020} + +\begin{itemize} + \item \cs{keyval_parse:NNn} now works by expansion, returning + the parsed list inside \cs{exp_not:n}. +\end{itemize} + +\end{document} |