diff options
Diffstat (limited to 'Master/texmf-dist')
53 files changed, 727 insertions, 1453 deletions
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3dt/l3dt.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3dt/l3dt.pdf Binary files differindex 3188a560f7d..b0f1e85648d 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3dt/l3dt.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3dt/l3dt.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf Binary files differindex 3d97aadb65e..d4044fc0472 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf Binary files differindex 88d16377d53..17efa980005 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf Binary files differindex aed9faa8626..f09fb1a01f0 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf Binary files differindex 1def57701cd..9c3c9998874 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str.pdf Binary files differindex 054011fb6d9..fcb4377c251 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf Binary files differindex 569b2812b5b..f4ee54d310d 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf Binary files differindex 246eaa85d21..0dd9dece003 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf Binary files differindex 23cd24d82cd..bc5fc5f54d1 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf Binary files differindex 6e6a13a08cf..6459492122d 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf Binary files differindex 21480eab557..27d8cb3baf7 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf Binary files differindex 9fce016693f..54e01e470b8 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf Binary files differindex 078b6ba6ec5..50eb5626747 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex deleted file mode 100644 index 4c0a2761e92..00000000000 --- a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex +++ /dev/null @@ -1,89 +0,0 @@ -% \iffalse meta-comment -% -%% File: interfaces3.tex Copyright (C) 1990-2011 The LaTeX3 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 -%% -%% http://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. -%% -%% ----------------------------------------------------------------------- -%% -%% The development version of the bundle can be found at -%% -%% http://www.latex-project.org/svnroot/experimental/trunk/ -%% -%% for those people who are interested. -%% -%%%%%%%%%%% -%% NOTE: %% -%%%%%%%%%%% -%% -%% Snapshots taken from the repository represent work in progress and may -%% not work or may contain conflicting material! We therefore ask -%% people _not_ to put them into distributions, archives, etc. without -%% prior consultation with the LaTeX3 Project. -%% -%% ----------------------------------------------------------------------- -% -% \fi - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% This document will typeset the LaTeX3 interface descriptions a single -% document. This will produce quite a large file (more than 170 pages -% currently). -% -% There is also a full version of the sources (source3.tex) which additionally -% also typesets the command implementations. -% -% Do not forget to generate the index (as explained on the terminal output -% near the end of the run)! -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -\documentclass{l3doc} -\listfiles - -\begin{document} - -\title{The \LaTeX3 Interfaces} -\author{% - The \LaTeX3 Project\thanks - {% - E-mail: - \href{mailto:latex-team@latex-project.org} - {latex-team@latex-project.org}% - }% -} - -\pagenumbering{roman} -\maketitle - -% -% First load all modules and typeset the documentation parts -% - -\input{source3body} % all the individual modules - -\clearpage - -\begingroup - \def\endash{--} - \catcode`\-\active - \def-{\futurelet\temp\indexdash} - \def\indexdash{\ifx\temp-\endash\fi} - \DelayPrintIndex -\endgroup - -\end{document} - - diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf Binary files differdeleted file mode 100644 index 7fc4478083e..00000000000 --- a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf Binary files differindex eb85cd4ae51..797805c3110 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex deleted file mode 100644 index 18ee23a814c..00000000000 --- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex +++ /dev/null @@ -1,206 +0,0 @@ -\iffalse meta-comment - -File l3styleguide.tex Copyright (C) 2011,2012 The LaTeX3 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 - - http://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} -\usepackage{svn-multi} - -\svnid{$Id: l3styleguide.tex 2772 2011-09-07 15:07:41Z joseph $} -\def\filedate{\svnfileyear/\svnfilemonth/\svnfileday} - -\title{% - The \LaTeX3 kernel: style guide for code authors% - \thanks - {% - This file describes v\svnfilerev, - last revised \filedate. - }% -} -\author{% - The \LaTeX3 Project\thanks - {% - E-mail: - \href{mailto:latex-team@latex-project.org}% - {latex-team@latex-project.org}% - }% -} -\date{Released \filedate} - -\begin{document} - -\maketitle - -\tableofcontents - -\section{Introduction} - -This document is intended as a style guide for authors of code and -documentation for the \LaTeX3 kernel. It covers both aspects of coding -style and the formatting of the sources. The aim of providing these -guidelines is help ensure consistency of the code and sources from -different authors. Experience suggests that in the long-term this helps -with maintenance. There will of course be places where there are -exceptions to these guidelines: common sense should always be -applied! - -\section{Documentation style} - -\LaTeX3 source and documentation should be written using the document -class \cls{l3doc} in \file{dtx} format. This class provides a number -of logical mark up elements, which should be used where possible. -In the main, this is standard \LaTeX{} practice, but there are a -few points to highlight: -\begin{itemize} - \item - Where possible, use \cs{cs} to mark up control sequences - rather than using a verbatim environment. - \item - Arguments which are given in braces should be marked using - \cs{Arg} when code-level functions are discussed, but using - \cs{marg} for document functions. - \item - The names \TeX{}, \LaTeX{}, \emph{etc}.\ use the normal logical mark - up followed by an empty group (|{}|), with the exception of |\LaTeX3|, - where the number should follow directly. - \item - Where in line verbatim text is used, it should be marked up - using the \verb=|...|= construct (\emph{i.e.}~vertical bars delimit - the verbatim text). - \item In line quotes should be marked up using the \cs{enquote} - function. - \item - Where numbers in the source have a mathematical meaning, - they should be included in math mode. Such in-line math mode - material should be marked up using |$...$| and \emph{not} - |\(...\)|. -\end{itemize} - -Line length in the source files should to be under $80$ -characters where possible, as this helps keep everything on the screen -when editing files. In the \file{dtx} format, documentation lines start -with a \texttt{\%}, which is usually followed by a space to leave a -\enquote{comment margin} at the start of each line. - -As with code indenting (see later), nested environments and arguments -should be indented by (at least) two spaces to make the nature of the nesting -clear. Thus for example a typical arrangement for the \env{function} -environment might be -\begin{verbatim*} -\begin{function}{\seq_gclear:N, \seq_gclear:c} - \begin{syntax} - \cs{seq_gclear:N} \meta{sequence} - \end{syntax} - Clears all entries from the \meta{sequence} globally. -\end{function} -\end{verbatim*} -The \enquote{outer} \verb*|% \begin{function}| should have the customary -space after the |%| character at the start of the line. - -In general, a single \env{function} or \env{macro} environment should be -used for a group of closely-related functions, for example argument -specification variants. In such cases, a comma-separated list should be -used, as shown in the preceding example. - -\section{Format of the code itself} - -The requirement for less than $80$ characters per line applies to the code -itself as well as the surrounding documentation. A number of the general -style principals for \LaTeX3 code apply: these are described in the following -paragraph and an example is then given. - -With the exception of simple runs of parameter (|{#1}|, |#1#2|, -\emph{etc.}), everything should divided up using spaces to make the code -more readable. In general, these will be single spaces, but in some -places it makes more sense to align parts of the code to emphasise -similarity. (Tabs should not be used for introducing white space.) - -Each conceptually-separate step in a function should be on a separate -line, to make the meaning clearer. Hence the \texttt{false} branch -in the example uses two lines for the two auxiliary function uses. - -Within the definition, a two-space indent should be used to show each -\enquote{level} of code. Thus in the example \cs{tl_if_empty:nTF} is -indented by two spaces, but the two branches are indented by four -spaces. Within the \texttt{false} branch, the need for multiple lines -means that an additional two-space indent should be used to show that -these lines are all part of the brace group. - -The result of these lay-out conventions is code which will in general -look like the example: -\begin{verbatim*} -\cs_new:Npn \module_foo:nn #1#2 - { - \tl_if_empty:nTF {#1} - { \module_foo_aux:n { X #2 } } - { - \module_foo_aux:nn {#1} {#2} - \module_foo_aux:n {#1#2} - } - } -\end{verbatim*} - -\section{Code conventions} - -All code-level functions should be \enquote{long} if they accept any -arguments, even if it seems \enquote{very unlikely} that a \cs{par} token -will be passed. Thus \cs{cs_new_nopar:Npn} and so forth should only be used -to create functions which accept no arguments at all. - -The expandability of each function should be well-defined. Functions which -cannot be fully expanded must be \texttt{protected}. This means that expandable -functions must themselves only contain expandable material. Functions which -use any non-expandable material must be defined using \cs{cs_new_protected:Npn} -or similar. - -When using \cs{cs_generate_variant:Nn}, group related variants together -to make the pattern clearer. A common example is variants of a function -which has an \texttt{N}-type first argument: -\begin{verbatim} - \cs_generate_variant:Nn \foo:Nn { NV , No } - \cs_generate_variant:Nn \foo:Nn { c , cV , co } -\end{verbatim} - -There are cases where omitting braces from \texttt{o}-type arguments -is desirable for performance reasons. This should only be done if the -argument is a single token, thus for example -\begin{verbatim} - \tl_set:No \l_some_tl \l_some_other_tl -\end{verbatim} -remains clear and can be used where appropriate. - -\section{Private and internal functions} - -Private functions (those starting \cs{__}) should not be used between modules. -The only exception is where a \enquote{family} of modules share some -\enquote{internal} methods: this happens most obviously in the kernel itself. -Any internal functions or variables \emph{must} be documented in the same way -as public ones. - -The \pkg{l3docstrip} method should be used for internal functions in a module. -This requires a line -\begin{quote} - \ttfamily - \%<@@=\meta{module}> -\end{quote} -at the start of the source (\texttt{.dtx}) file, with internal functions -then written in the form -\begin{verbatim} - \cs_new_protected:Npn \@@_function:nn #1#2 - ... -\end{verbatim} - -\end{document} diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf Binary files differindex faff73c2004..c3fd0751fe7 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex deleted file mode 100644 index 4dfc70e0e97..00000000000 --- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex +++ /dev/null @@ -1,110 +0,0 @@ -\iffalse meta-comment - -File l3syntax-changes.tex Copyright (C) 2011-2012 The LaTeX3 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 - - http://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} - -\usepackage{svn-multi} - -\svnid{$Id: l3syntax-changes.tex 4048 2012-08-02 09:49:10Z joseph $} -\def\filedate{\svnfileyear/\svnfilemonth/\svnfileday} - -\title{% - Syntax changes in \LaTeX3 functions - \thanks - {% - This file describes v\svnfilerev, - last revised \filedate. - }% -} -\author{% - The \LaTeX3 Project\thanks - {% - E-mail: - \href{mailto:latex-team@latex-project.org}% - {latex-team@latex-project.org}% - }% -} -\date{Released \filedate} - -\newcommand{\TF}{\textit{(TF)}} - -\begin{document} - -\maketitle - -This file lists functions whose syntax has changed after August 2011, -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{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 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_x:n}, reflecting the fact that this is non-standard in the - same way as for example \cs{str_if_eq_x:nn(TF)}. -\end{itemize} - - -\end{document} diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf Binary files differindex ec3908fb73a..e90014d7b03 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.tex b/Master/texmf-dist/doc/latex/l3kernel/source3.tex deleted file mode 100644 index d669eeb079a..00000000000 --- a/Master/texmf-dist/doc/latex/l3kernel/source3.tex +++ /dev/null @@ -1,106 +0,0 @@ -% \iffalse meta-comment -% -%% File: source3.tex Copyright (C) 1990-2011 The LaTeX3 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 -%% -%% http://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. -%% -%% ----------------------------------------------------------------------- -%% -%% The development version of the bundle can be found at -%% -%% http://www.latex-project.org/svnroot/experimental/trunk/ -%% -%% for those people who are interested. -%% -%%%%%%%%%%% -%% NOTE: %% -%%%%%%%%%%% -%% -%% Snapshots taken from the repository represent work in progress and may -%% not work or may contain conflicting material! We therefore ask -%% people _not_ to put them into distributions, archives, etc. without -%% prior consultation with the LaTeX3 Project. -%% -%% ----------------------------------------------------------------------- -% -% \fi - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% This document will typeset the LaTeX3 sources as a single document. -% This will produce quite a large file (more than 400 pages). -% -% There is also a shorter version (interface3.tex) that only typesets the -% command % interface descriptions. -% -% Do not forget to generate the index (as explained on the terminal output -% near the end of the run)! -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\documentclass{l3doc} -\listfiles - -\begin{document} - -\title{The \LaTeX3 Sources} -\author{% - The \LaTeX3 Project\thanks - {% - E-mail: - \href{mailto:latex-team@latex-project.org} - {latex-team@latex-project.org}% - }% -} - -\pagenumbering{roman} -\maketitle - -% -% First load all modules and typeset the documentation parts -% - -\input{source3body} % all the individual modules - -% -% Now reload all modules and typeset the implementation parts -% - -\part{Implementation} - -\def\maketitle{} -\EnableImplementation -\DisableDocumentation -\DocInputAgain - -\clearpage -\pagestyle{headings} - -% Make TeX shut up. -\hbadness=10000 -\newcount\hbadness -\hfuzz=\maxdimen - -\PrintChanges -\clearpage - -\begingroup - \def\endash{--} - \catcode`\-\active - \def-{\futurelet\temp\indexdash} - \def\indexdash{\ifx\temp-\endash\fi} - - \DelayPrintIndex -\endgroup - -\end{document} diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex deleted file mode 100644 index c5dbc33a7b3..00000000000 --- a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex +++ /dev/null @@ -1,448 +0,0 @@ -% \iffalse meta-comment -% -%% File: source3body.tex Copyright (C) 1990-2012 The LaTeX3 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 -%% -%% http://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. -%% -%% ----------------------------------------------------------------------- -%% -%% The development version of the bundle can be found at -%% -%% http://www.latex-project.org/svnroot/experimental/trunk/ -%% -%% for those people who are interested. -%% -%%%%%%%%%%% -%% NOTE: %% -%%%%%%%%%%% -%% -%% Snapshots taken from the repository represent work in progress and may -%% not work or may contain conflicting material! We therefore ask -%% people _not_ to put them into distributions, archives, etc. without -%% prior consultation with the LaTeX3 Project. -%% -%% ----------------------------------------------------------------------- -% -% \fi - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% This file is used by -% -% source3.tex % documentation including implementation -% -% interface3.tex % only interface documentation -% -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -\begin{abstract} - -\setlength\parindent{0pt} -\setlength\parskip{\baselineskip} - -\noindent -This is the reference documentation for the \pkg{expl3} -programming environment. The \pkg{expl3} modules set up an experimental -naming scheme for \LaTeX{} commands, which allow the \LaTeX{} programmer -to systematically name functions and variables, and specify the argument -types of functions. - -The \TeX{} and \eTeX{} primitives are all given a new name according to -these conventions. However, in the main direct use of the primitives is -not required or encouraged: the \pkg{expl3} modules define an -independent low-level \LaTeX3 programming language. - -At present, the \pkg{expl3} modules are designed to be loaded on top of -\LaTeXe{}. In time, a \LaTeX3 format will be produced based on this code. -This allows the code to be used in \LaTeXe{} packages \emph{now} while a -stand-alone \LaTeX3 is developed. - -\begin{bfseries} - While \pkg{expl3} is still experimental, the bundle is now regarded as - broadly stable. The syntax conventions and functions provided are now - ready for wider use. There may still be changes to some functions, but - these will be minor when compared to the scope of \pkg{expl3}. - - New modules will be added to the distributed version of \pkg{expl3} as - they reach maturity. -\end{bfseries} - -\end{abstract} - -\clearpage - -{% - \def\\{:}% fix "newlines" in the ToC - \tableofcontents -} - -\clearpage -\pagenumbering{arabic} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Each of the following \DocInput lines includes a file with extension -% .dtx. Each of these files may be typeset separately. For instance -% pdflatex l3box.dtx -% will typeset the source of the LaTeX3 box commands. If you use the -% Makefile, the index will be generated automatically; e.g., -% make doc F=l3box -% -% If this file is processed, each of these separate dtx files will be -% contained as a part of a single document. -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\makeatletter -\def\partname{Part} -\def\maketitle{\clearpage\part{\@title}} -\let\thanks\@gobble -\let\DelayPrintIndex\PrintIndex -\let\PrintIndex\@empty -\makeatother - -\part{Introduction to \pkg{expl3} and this document} - -This document is intended to act as a comprehensive reference manual -for the \pkg{expl3} language. A general guide to the \LaTeX3 -programming language is found in \href{expl3.pdf}{expl3.pdf}. - -\section{Naming functions and variables} - -\LaTeX3 does not use \texttt{@} as a \enquote{letter} for defining -internal macros. Instead, the symbols |_| and \texttt{:} -are used in internal macro names to provide structure. The name of -each \emph{function} is divided into logical units using \texttt{_}, -while \texttt{:} separates the \emph{name} of the function from the -\emph{argument specifier} (\enquote{arg-spec}). This describes the arguments -expected by the function. In most cases, each argument is represented -by a single letter. The complete list of arg-spec letters for a function -is referred to as the \emph{signature} of the function. - -Each function name starts with the \emph{module} to which it belongs. -Thus apart from a small number of very basic functions, all \pkg{expl3} -function names contain at least one underscore to divide the module -name from the descriptive name of the function. For example, all -functions concerned with comma lists are in module \texttt{clist} and -begin \cs{clist_}. - -Every function must include an argument specifier. For functions which -take no arguments, this will be blank and the function name will end -\texttt{:}. Most functions take one or more arguments, and use the -following argument specifiers: -\begin{description} - \item[\texttt{D}] The \texttt{D} specifier means \emph{do not use}. - All of the \TeX{} primitives are initially \cs{let} to a \texttt{D} - name, and some are then given a second name. Only the kernel - team should use anything with a \texttt{D} specifier! - \item[\texttt{N} and \texttt{n}] These mean \emph{no manipulation}, - of a single token for \texttt{N} and of a set of tokens given in - braces for \texttt{n}. Both pass the argument through exactly as - given. Usually, if you use a single token for an \texttt{n} argument, - all will be well. - \item[\texttt{c}] This means \emph{csname}, and indicates that the - argument will be turned into a csname before being used. So - So \cs{foo:c} |{ArgumentOne}| will act in the same way as \cs{foo:N} - \cs{ArgumentOne}. - \item[\texttt{V} and \texttt{v}] These mean \emph{value - of variable}. The \texttt{V} and \texttt{v} specifiers are used to - get the content of a variable without needing to worry about the - underlying \TeX{} structure containing the data. A \texttt{V} - argument will be a single token (similar to \texttt{N}), for example - \cs{foo:V} \cs{MyVariable}; on the other hand, using \texttt{v} a - csname is constructed first, and then the value is recovered, for - example \cs{foo:v} |{MyVariable}|. - \item[\texttt{o}] This means \emph{expansion once}. In general, the - \texttt{V} and \texttt{v} specifiers are favoured over \texttt{o} - for recovering stored information. However, \texttt{o} is useful - for correctly processing information with delimited arguments. - \item[\texttt{x}] The \texttt{x} specifier stands for \emph{exhaustive - expansion}: every token in the argument is fully expanded until only - unexpandable ones remain. The \TeX{} \tn{edef} primitive carries out - this type of expansion. Functions which feature an \texttt{x}-type - argument are in general \emph{not} expandable, unless specifically - noted. - \item[\texttt{f}] The \texttt{f} specifier stands for \emph{full - expansion}, and in contrast to \texttt{x} stops at the first - non-expandable item (reading the argument from left to right) without - trying to expand it. For example, when setting a token list - variable (a macro used for storage), the sequence - \begin{verbatim} - \tl_set:Nn \l_mya_tl { A } - \tl_set:Nn \l_myb_tl { B } - \tl_set:Nf \l_mya_tl { \l_mya_tl \l_myb_tl } - \end{verbatim} - will leave |\l_mya_tl| with the content |A\l_myb_tl|, as |A| cannot - be expanded and so terminates expansion before |\l_myb_tl| is considered. - \item[\texttt{T} and \texttt{F}] For logic tests, there are the branch - specifiers \texttt{T} (\emph{true}) and \texttt{F} (\emph{false}). - Both specifiers treat the input in the same way as \texttt{n} (no - change), but make the logic much easier to see. - \item[\texttt{p}] The letter \texttt{p} indicates \TeX{} - \emph{parameters}. Normally this will be used for delimited - functions as \pkg{expl3} provides better methods for creating simple - sequential arguments. - \item[\texttt{w}] Finally, there is the \texttt{w} specifier for - \emph{weird} arguments. This covers everything else, but mainly - applies to delimited values (where the argument must be terminated - by some arbitrary string). -\end{description} -Notice that the argument specifier describes how the argument is -processed prior to being passed to the underlying function. For example, -\cs{foo:c} will take its argument, convert it to a control sequence and -pass it to \cs{foo:N}. - -Variables are named in a similar manner to functions, but begin with -a single letter to define the type of variable: -\begin{description} - \item[\texttt{c}] Constant: global parameters whose value should not - be changed. - \item[\texttt{g}] Parameters whose value should only be set globally. - \item[\texttt{l}] Parameters whose value should only be set locally. -\end{description} -Each variable name is then build up in a similar way to that of a -function, typically starting with the module\footnote{The module names are - not used in case of generic scratch registers defined in the data - type modules, e.g., the - \texttt{int} module contains some scratch variables called \cs{l_tmpa_int}, - \cs{l_tmpb_int}, and so on. In such a case adding the module name up front - to denote the module - and in the back to indicate the type, as in - \cs{l_int_tmpa_int} would be very unreadable.} name -and then a descriptive part. -Variables end with a short identifier to show the variable type: -\begin{description} - \item[\texttt{bool}] Either true or false. - \item[\texttt{box}] Box register. - \item[\texttt{clist}] Comma separated list. - \item[\texttt{coffin}] a \enquote{box with handles} --- a higher-level data - type for carrying out |box| alignment operations. - \item[\texttt{dim}] \enquote{Rigid} lengths. - \item[\texttt{fp}] floating-point values; - \item[\texttt{int}] Integer-valued count register. - \item[\texttt{prop}] Property list. - \item[\texttt{seq}] \enquote{Sequence}: a data-type used to implement lists - (with access at both ends) and stacks. - \item[\texttt{skip}] \enquote{Rubber} lengths. - \item[\texttt{stream}] An input or output stream (for reading from or - writing to, respectively). - \item[\texttt{tl}] Token list variables: placeholder for a token list. -\end{description} - -\subsection{Terminological inexactitude} - -A word of warning. In this document, and others referring to the \pkg{expl3} -programming modules, we often refer to \enquote{variables} and -\enquote{functions} as if they -were actual constructs from a real programming language. In truth, \TeX{} -is a macro processor, and functions are simply macros that may or may not take -arguments and expand to their replacement text. Many of the common variables -are \emph{also} macros, and if placed into the input stream will simply expand -to their definition as well~--- a \enquote{function} with no arguments and a -\enquote{token list variable} are in truth one and the same. On the other -hand, some \enquote{variables} are actually registers that must be -initialised and their values set and retrieved with specific functions. - -The conventions of the \pkg{expl3} code are designed to clearly separate the -ideas of \enquote{macros that contain data} and -\enquote{macros that contain code}, and a -consistent wrapper is applied to all forms of \enquote{data} whether they be -macros or -actually registers. This means that sometimes we will use phrases like -\enquote{the function returns a value}, when actually we just mean -\enquote{the macro expands to something}. Similarly, the term -\enquote{execute} might be used in place of \enquote{expand} -or it might refer to the more specific case of -\enquote{processing in \TeX's stomach} -(if you are familiar with the \TeX{}book parlance). - -If in doubt, please ask; chances are we've been hasty in writing certain -definitions and need to be told to tighten up our terminology. - -\section{Documentation conventions} - -This document is typeset with the experimental \pkg{l3doc} class; -several conventions are used to help describe the features of the code. -A number of conventions are used here to make the documentation clearer. - -Each group of related functions is given in a box. For a function with -a \enquote{user} name, this might read: -\begin{function}{\ExplSyntaxOn, \ExplSyntaxOff} - \begin{syntax} - \cs{ExplSyntaxOn} \dots{} \cs{ExplSyntaxOff} - \end{syntax} - The textual description of how the function works would appear here. The - syntax of the function is shown in mono-spaced text to the right of - the box. In this example, the function takes no arguments and so the - name of the function is simply reprinted. -\end{function} - -For programming functions, which use \texttt{_} and \texttt{:} in their name -there are a few additional conventions: If two related functions are given -with identical names but different argument specifiers, these are termed -\emph{variants} of each other, and the latter functions are printed in grey to -show this more clearly. They will carry out the same function but will take -different types of argument: -\begin{function}{\seq_new:N, \seq_new:c} - \begin{syntax} - \cs{seq_new:N} \meta{sequence} - \end{syntax} - When a number of variants are described, the arguments are usually - illustrated only for the base function. Here, \meta{sequence} indicates - that \cs{seq_new:N} expects the name of a sequence. From the argument - specifier, \cs{seq_new:c} also expects a sequence name, but as a - name rather than as a control sequence. Each argument given in the - illustration should be described in the following text. -\end{function} - -\paragraph{Fully expandable functions} -\hypertarget{expstar}{Some functions are fully expandable}, -which allows it to be used within -an \texttt{x}-type argument (in plain \TeX{} terms, inside an \cs{edef}), -as well as within an \texttt{f}-type argument. -These fully expandable functions are indicated in the documentation by -a star: -\begin{function}[EXP]{\cs_to_str:N} - \begin{syntax} - \cs{cs_to_str:N} \meta{cs} - \end{syntax} - As with other functions, some text should follow which explains how - the function works. Usually, only the star will indicate that the - function is expandable. In this case, the function expects a \meta{cs}, - shorthand for a \meta{control sequence}. -\end{function} - -\paragraph{Restricted expandable functions} -\hypertarget{rexpstar}{A few functions are fully expandable} but cannot be fully expanded within -an \texttt{f}-type argument. In this case a hollow star is used to indicate -this: -\begin{function}[rEXP]{\seq_map_function:NN} - \begin{syntax} - \cs{seq_map_function:NN} \meta{seq} \meta{function} - \end{syntax} -\end{function} - -\paragraph{Conditional functions} -\hypertarget{explTF}{Conditional (\texttt{if}) functions} -are normally defined in three variants, with -\texttt{T}, \texttt{F} and \texttt{TF} argument specifiers. This allows -them to be used for different \enquote{true}/\enquote{false} branches, -depending on -which outcome the conditional is being used to test. To indicate this -without repetition, this information is given in a shortened form: -\begin{function}[EXP,TF]{\xetex_if_engine:} - \begin{syntax} - \cs{xetex_if_engine:TF} \Arg{true code} \Arg{false code} - \end{syntax} - The underlining and italic of \texttt{TF} indicates that - \cs{xetex_if_engine:T}, \cs{xetex_if_engine:F} and - \cs{xetex_if_engine:TF} are all available. Usually, the illustration - will use the \texttt{TF} variant, and so both \meta{true code} - and \meta{false code} will be shown. The two variant forms \texttt{T} and - \texttt{F} take only \meta{true code} and \meta{false code}, respectively. - Here, the star also shows that this function is expandable. - With some minor exceptions, \emph{all} conditional functions in the - \pkg{expl3} modules should be defined in this way. -\end{function} - -Variables, constants and so on are described in a similar manner: -\begin{variable}{\l_tmpa_tl} - A short piece of text will describe the variable: there is no - syntax illustration in this case. -\end{variable} - -In some cases, the function is similar to one in \LaTeXe{} or plain \TeX{}. -In these cases, the text will include an extra \enquote{\textbf{\TeX{}hackers -note}} section: -\begin{function}[EXP]{\token_to_str:N} - \begin{syntax} - \cs{token_to_str:N} \meta{token} - \end{syntax} - The normal description text. - \begin{texnote} - Detail for the experienced \TeX{} or \LaTeXe\ programmer. In this - case, it would point out that this function is the \TeX{} primitive - \cs{string}. - \end{texnote} -\end{function} - -\section{Formal language conventions which apply generally} - -As this is a formal reference guide for \LaTeX3 programming, the descriptions -of functions are intended to be reasonably \enquote{complete}. However, there -is also a need to avoid repetition. Formal ideas which apply to general -classes of function are therefore summarised here. - -For tests which have a \texttt{TF} argument specification, the test if -evaluated to give a logically \texttt{TRUE} or \texttt{FALSE} result. -Depending on this result, either the \meta{true code} or the \meta{false code} -will be left in the input stream. In the case where the test is expandable, -and a predicate (|_p|) variant is available, the logical value determined by -the test is left in the input stream: this will typically be part of a larger -logical construct. - -\section{\TeX{} concepts not supported by \LaTeX3{}} - -The \TeX{} concept of an \enquote{\cs{outer}} macro is \emph{not supported} -at all by \LaTeX3{}. As such, the functions provided here may break when -used on top of \LaTeXe{} if \cs{outer} tokens are used in the arguments. - -\DisableImplementation - -\DocInput{l3bootstrap.dtx} -\DocInput{l3names.dtx} -\DocInput{l3basics.dtx} -\DocInput{l3expan.dtx} -\DocInput{l3prg.dtx} -\DocInput{l3quark.dtx} -\DocInput{l3token.dtx} -\DocInput{l3int.dtx} -\DocInput{l3skip.dtx} -\DocInput{l3tl.dtx} -\DocInput{l3seq.dtx} -\DocInput{l3clist.dtx} -\DocInput{l3prop.dtx} -\DocInput{l3box.dtx} -\DocInput{l3coffins.dtx} -\DocInput{l3color.dtx} -\DocInput{l3msg.dtx} -\DocInput{l3keys.dtx} -\DocInput{l3file.dtx} -\DocInput{l3fp.dtx} -% To get the various submodules of l3fp to appear in the implementation -% part only, they have to be added to the documentation list after typesetting -% the 'user' part just for the main module. -\ExplSyntaxOn -\clist_gput_right:Nn \g_docinput_clist - { - l3fp-aux.dtx , - l3fp-traps.dtx , - l3fp-round.dtx , - l3fp-parse.dtx , - l3fp-logic.dtx , - l3fp-basics.dtx , - l3fp-extended.dtx , - l3fp-expo.dtx , - l3fp-trig.dtx , - l3fp-convert.dtx , - l3fp-assign.dtx , - l3fp-old.dtx , - } -\ExplSyntaxOff -\DocInput{l3luatex.dtx} - -\DocInput{l3candidates.dtx} - -\endinput diff --git a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf Binary files differindex 2759ab145df..d66c8fba95b 100644 --- a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf +++ b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf diff --git a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf Binary files differindex bfb4a626cd7..9677cdd57cd 100644 --- a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf +++ b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf diff --git a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf Binary files differindex 28255b910da..a941bf0feb4 100644 --- a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf +++ b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf diff --git a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf Binary files differindex 21409a56f59..33c14d29fa7 100644 --- a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf +++ b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf diff --git a/Master/texmf-dist/makeindex/l3kernel/l3doc.ist b/Master/texmf-dist/makeindex/l3kernel/l3doc.ist deleted file mode 100644 index 781c87e50f2..00000000000 --- a/Master/texmf-dist/makeindex/l3kernel/l3doc.ist +++ /dev/null @@ -1,72 +0,0 @@ -%% -%% This is file `l3doc.ist', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% l3doc.dtx (with options: `docist') -%% -%% -%% EXPERIMENTAL CODE -%% -%% Do not distribute this file without also distributing the -%% source files specified above. -%% -%% Do not distribute a modified version of this file. -%% -%% -%% File: l3doc.dtx Copyright (C) 1990-2012 The LaTeX3 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 -%% -%% http://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. -%% -%% ----------------------------------------------------------------------- -%% -%% The development version of the bundle can be found at -%% -%% http://www.latex-project.org/svnroot/experimental/trunk/ -%% -%% for those people who are interested. -%% -%%%%%%%%%%% -%% NOTE: %% -%%%%%%%%%%% -%% -%% Snapshots taken from the repository represent work in progress and may -%% not work or may contain conflicting material! We therefore ask -%% people _not_ to put them into distributions, archives, etc. without -%% prior consultation with the LaTeX3 Project. -%% -%% ----------------------------------------------------------------------- -actual '=' -quote '!' -level '#' -preamble -"\n \\begin{theindex} \n \\makeatletter\\scan@allowedfalse\n" -postamble -"\n\n \\end{theindex}\n" -item_x1 "\\efill \n \\subitem " -item_x2 "\\efill \n \\subsubitem " -delim_0 "\\pfill " -delim_1 "\\pfill " -delim_2 "\\pfill " -lethead_prefix "{\\bfseries\\hfil " -lethead_suffix "\\hfil}\\nopagebreak\n" -lethead_flag 1 -heading_prefix "{\\bfseries\\hfil " -heading_suffix "\\hfil}\\nopagebreak\n" -headings_flag 1 - -page_precedence "rnaA" -%% -%% -%% End of file `l3doc.ist'. diff --git a/Master/texmf-dist/source/latex/l3experimental/l3dt/l3dt.dtx b/Master/texmf-dist/source/latex/l3experimental/l3dt/l3dt.dtx index e6560eb79e1..984739d1efd 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3dt/l3dt.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3dt/l3dt.dtx @@ -36,7 +36,7 @@ % %<*driver|package> \RequirePackage{expl3} -\GetIdInfo$Id: l3dt.dtx 4153 2012-08-29 07:18:26Z joseph $ +\GetIdInfo$Id: l3dt.dtx 4190 2012-09-03 00:23:31Z bruno $ {L3 Experimental data tables} %</driver|package> %<*driver> @@ -332,7 +332,7 @@ % \end{verbatim} % The \texttt{:n} variant will insert the \meta{tokens} into the input stream % after the mapping terminates. Use outside of a \cs{dt_map_\ldots} scenario -% will lead low level \TeX{} errors. +% will lead to low level \TeX{} errors. % \end{function} % % \section{Data table conditionals} diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx index 24dd30934c9..527411ab125 100644 --- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx @@ -49,8 +49,8 @@ %<*driver|package> \def\ExplFileName{expl3} \def\ExplFileDescription{L3 Experimental code bundle wrapper} -\def\ExplFileDate{2012/08/29} -\def\ExplFileVersion{4160} +\def\ExplFileDate{2012/09/05} +\def\ExplFileVersion{4205} %</driver|package> %<*driver> \documentclass[full]{l3doc} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3.ins b/Master/texmf-dist/source/latex/l3kernel/l3.ins new file mode 100644 index 00000000000..0df5abf9424 --- /dev/null +++ b/Master/texmf-dist/source/latex/l3kernel/l3.ins @@ -0,0 +1,92 @@ +\iffalse meta-comment + +File l3.ins Copyright (C) 2011,2012 The LaTeX3 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 + + http://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 + +\let\jobname\relax +\input l3docstrip.dtx +\askforoverwritefalse + +\preamble + +EXPERIMENTAL CODE + +Do not distribute this file without also distributing the +source files specified above. + +Do not distribute a modified version of this file. + +\endpreamble +% stop docstrip adding \endinput +\postamble +\endpostamble + +\keepsilent + +% ===== PACKAGE ONLY ====== +\generate{\file{expl3.sty} {\from{expl3.dtx} {package}}} +% ======================== +\generate{\file{l3bootstrap.sty} {\from{l3bootstrap.dtx}{package}}} +\generate{\file{l3names.sty} {\from{l3names.dtx} {package}}} +\generate{\file{l3basics.sty} {\from{l3basics.dtx} {package}}} +\generate{\file{l3expan.sty} {\from{l3expan.dtx} {package}}} +\generate{\file{l3tl.sty} {\from{l3tl.dtx} {package}}} +\generate{\file{l3seq.sty} {\from{l3seq.dtx} {package}}} +\generate{\file{l3int.sty} {\from{l3int.dtx} {package}}} +\generate{\file{l3quark.sty} {\from{l3quark.dtx} {package}}} +\generate{\file{l3prg.sty} {\from{l3prg.dtx} {package}}} +\generate{\file{l3clist.sty} {\from{l3clist.dtx} {package}}} +\generate{\file{l3token.sty} {\from{l3token.dtx} {package}}} +\generate{\file{l3prop.sty} {\from{l3prop.dtx} {package}}} +\generate{\file{l3msg.sty} {\from{l3msg.dtx} {package}}} +\generate{\file{l3file.sty} {\from{l3file.dtx} {package}}} +\generate{\file{l3skip.sty} {\from{l3skip.dtx} {package}}} +\generate{\file{l3keys.sty} {\from{l3keys.dtx} {package}}} +\generate + {% + \file{l3fp.sty} + {% + \from{l3fp.dtx} {package} + \from{l3fp-aux.dtx} {package} + \from{l3fp-traps.dtx} {package} + \from{l3fp-round.dtx} {package} + \from{l3fp-parse.dtx} {package} + \from{l3fp-logic.dtx} {package} + \from{l3fp-basics.dtx} {package} + \from{l3fp-extended.dtx}{package} + \from{l3fp-expo.dtx} {package} + \from{l3fp-trig.dtx} {package} + \from{l3fp-convert.dtx} {package} + \from{l3fp-assign.dtx} {package} + \from{l3fp-old.dtx} {package} + }% + } +\generate{\file{l3box.sty} {\from{l3box.dtx} {package}}} +\generate{\file{l3coffins.sty} {\from{l3coffins.dtx} {package}}} +\generate{\file{l3color.sty} {\from{l3color.dtx} {package}}} +\generate{\file{l3luatex.sty} {\from{l3luatex.dtx} {package}}} +\generate{\file{l3candidates.sty}{\from{l3candidates.dtx} {package}}} + +\generate{\file{l3doc.cls} {\from{l3doc.dtx} {class}}} +\generate{\file{l3doc.ist} {\from{l3doc.dtx} {docist}}} + +\generate{\file{l3dvips.def} {\from{l3drivers.dtx}{package,dvips} }} +\generate{\file{l3pdfmode.def} {\from{l3drivers.dtx}{package,pdfmode} }} +\generate{\file{l3xdvipdfmx.def} {\from{l3drivers.dtx}{package,xdvipdfmx}}} + +\generate{\file{l3docstrip.tex}{\from{l3docstrip.dtx}{program}}} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/l3kernel/l3format.ins b/Master/texmf-dist/source/latex/l3kernel/l3format.ins new file mode 100644 index 00000000000..76fe0ee3e76 --- /dev/null +++ b/Master/texmf-dist/source/latex/l3kernel/l3format.ins @@ -0,0 +1,92 @@ +\iffalse meta-comment + +File l3format.ins Copyright (C) 2011,2012 The LaTeX3 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 + + http://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 + +\let\jobname\relax +\input l3docstrip.dtx +\askforoverwritefalse + +\preamble + +EXPERIMENTAL CODE + +Do not distribute this file without also distributing the +source files specified above. + +Do not distribute a modified version of this file. + +\endpreamble +% stop docstrip adding \endinput +\postamble +\endpostamble + +\keepsilent + +\generate + { + \file{l3format.ltx} + { + \from{l3bootstrap.dtx} {initex} + \from{l3names.dtx} {initex} + \from{l3basics.dtx} {initex} + \from{l3expan.dtx} {initex} + \from{l3tl.dtx} {initex} + \from{l3seq.dtx} {initex} + % ===== ===FORMAT ONLY ========= + \from{l3alloc.dtx} {initex} + % ============================== + \from{l3int.dtx} {initex} + \from{l3quark.dtx} {initex} + \from{l3prg.dtx} {initex} + \from{l3clist.dtx} {initex} + \from{l3token.dtx} {initex} + \from{l3prop.dtx} {initex} + \from{l3msg.dtx} {initex} + \from{l3file.dtx} {initex} + \from{l3skip.dtx} {initex} + \from{l3keys.dtx} {initex} + \from{l3fp.dtx} {initex} + \from{l3fp-aux.dtx} {initex} + \from{l3fp-traps.dtx} {initex} + \from{l3fp-round.dtx} {initex} + \from{l3fp-parse.dtx} {initex} + \from{l3fp-logic.dtx} {initex} + \from{l3fp-basics.dtx} {initex} + \from{l3fp-extended.dtx}{initex} + \from{l3fp-expo.dtx} {initex} + \from{l3fp-trig.dtx} {initex} + \from{l3fp-convert.dtx} {initex} + \from{l3fp-assign.dtx} {initex} + \from{l3fp-old.dtx} {initex} + \from{l3box.dtx} {initex} + \from{l3coffins.dtx} {initex} + \from{l3color.dtx} {initex} + \from{l3luatex.dtx} {initex} + \from{l3candidates.dtx} {initex} + % ======== FORMAT ONLY ========= + \from{l3final.dtx} {initex} + % ============================== + } + } + +\generate{\file{l3dvips.ltx} {\from{l3drivers.dtx}{initex,dvips} }} +\generate{\file{l3pdfmode.ltx} {\from{l3drivers.dtx}{initex,pdfmode} }} +\generate{\file{l3xdvipdfmx.ltx}{\from{l3drivers.dtx}{initex,xdvipdfmx}}} + +\generate{\file{l3docstrip.tex}{\from{l3docstrip.dtx}{program}}} + +\endbatchfile
\ No newline at end of file diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx index 74bacd5d9d8..53a6456c5ac 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx @@ -36,7 +36,7 @@ % %<*driver> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3fp-aux.dtx 4151 2012-08-28 11:51:52Z bruno $ +\GetIdInfo$Id: l3fp-aux.dtx 4181 2012-08-31 17:33:08Z bruno $ {L3 Floating-point support functions} \documentclass[full]{l3doc} \begin{document} @@ -162,7 +162,7 @@ \cs_new_protected:Npn \@@_chk:w #1 ; { \__msg_kernel_error:nnx { kernel } { misused-fp } - { \@@_to_tl:w \s_@@ \@@_chk:w #1 ; } + { \fp_to_tl:n { \s_@@ \@@_chk:w #1 ; } } } % \end{macrocode} % \end{macro} @@ -404,6 +404,27 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}[int, EXP]{\@@_exp_after_array_f:w} +% \begin{macro}[aux, EXP]{\@@_exp_after_stop_f:nw} +% \begin{syntax} +% \cs{@@_exp_after_array_f:w} +% \meta{fp_1} |;| +% \ldots{} +% \meta{fp_n} |;| +% \cs{s_@@_stop} +% \end{syntax} +% \begin{macrocode} +\cs_new:Npn \@@_exp_after_array_f:w #1 + { + \cs:w @@_exp_after \@@_type_from_scan:N #1 _f:nw \cs_end: + { \@@_exp_after_array_f:w } + #1 + } +\cs_new_eq:NN \@@_exp_after_stop_f:nw \use_none:nn +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \subsection{Packing digits} % % When a positive integer |#1| is known to be less than $10^8$, the @@ -879,14 +900,14 @@ % % \subsection{Length of a floating point array} % -% \begin{macro}[int, EXP]{\@@_array_count:w} +% \begin{macro}[int, EXP]{\@@_array_count:n} % \begin{macro}[aux, EXP]{\@@_array_count_loop:Nw} % Count the number of items in an array of floating points. The % technique is very similar to \cs{tl_count:n}, but with the loop % built-in. Checking for the end of the loop is done with the % |\use_none:n #1| construction. % \begin{macrocode} -\cs_new:Npn \@@_array_count:w #1 @ +\cs_new:Npn \@@_array_count:n #1 { \int_use:N \__int_eval:w \c_zero \@@_array_count_loop:Nw #1 { ? \__prg_break: } ; @@ -899,6 +920,37 @@ % \end{macro} % \end{macro} % +% \subsection{\texttt{x}-like expansion expandably} +% +% \begin{macro}[int, EXP]{\@@_expand:n} +% \begin{macro}[aux, EXP]{\@@_expand_loop:nwnN} +% This expandable function behaves in a way somewhat similar to +% \cs{use:x}, but much less robust. The argument is +% \texttt{f}-expanded, then the leading item (often a single character +% token) is moved to a storage area after \cs{s_@@_mark}, and +% \texttt{f}-expansion is applied again, repeating until the argument +% is empty. The result built one piece at a time is then inserted in +% the input stream. Note that spaces are ignored by this procedure, +% unless surrounded with braces. Multiple tokens which do not need +% expansion can be inserted within braces. +% \begin{macrocode} +\cs_new:Npn \@@_expand:n #1 + { + \@@_expand_loop:nwnN { } + #1 \prg_do_nothing: + \s_@@_mark { } \@@_expand_loop:nwnN + \s_@@_mark { } \@@_use_i_until_s:nw ; + } +\cs_new:Npn \@@_expand_loop:nwnN #1#2 \s_@@_mark #3 #4 + { + \exp_after:wN #4 \tex_romannumeral:D -`0 + #2 + \s_@@_mark { #3 #1 } #4 + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \subsection{Messages} % % Using a floating point directly is an error. diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx index 22c72c7b482..6dee0ef45bc 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx @@ -36,7 +36,7 @@ % %<*driver> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3fp-basics.dtx 4151 2012-08-28 11:51:52Z bruno $ +\GetIdInfo$Id: l3fp-basics.dtx 4163 2012-08-30 16:33:11Z bruno $ {L3 Floating-point arithmetic} \documentclass[full]{l3doc} \begin{document} @@ -1601,13 +1601,13 @@ % % \subsection{Unary operations} % -% \begin{macro}[int, EXP]{\@@_neg_o:w} +% \begin{macro}[int, EXP]{\@@_-_o:w} % This function flips the sign of the \meta{floating point} and % expands after it in the input stream, just like \cs{@@_+_o:ww} % \emph{etc.} We add a hook used by \pkg{l3fp-expo}: anything before % \cs{s_@@} is ignored. % \begin{macrocode} -\cs_new:Npn \@@_neg_o:w #1 \s_@@ \@@_chk:w #2 #3 +\cs_new:cpn { @@_-_o:w } #1 \s_@@ \@@_chk:w #2 #3 { \exp_after:wN \@@_exp_after_o:w \exp_after:wN \s_@@ @@ -1621,7 +1621,7 @@ % \begin{macro}[int, EXP]{\@@_abs_o:w} % This function sets the sign of the \meta{floating point} to be % positive, and expands after itself in the input stream, just like -% \cs{@@_neg_o:w}. We must leave the sign of \texttt{nan} invariant. +% \cs{@@_-_o:w}. We must leave the sign of \texttt{nan} invariant. % \begin{macrocode} \cs_new:Npn \@@_abs_o:w \s_@@ \@@_chk:w #1 #2 { diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx index 0135da6304b..52fda439459 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx @@ -36,7 +36,7 @@ % %<*driver> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3fp-convert.dtx 4129 2012-08-20 20:38:28Z mittelba $ +\GetIdInfo$Id: l3fp-convert.dtx 4180 2012-08-31 16:44:34Z bruno $ {L3 Floating-point conversion} \documentclass[full]{l3doc} \begin{document} @@ -82,7 +82,7 @@ % % \subsection{Trimming trailing zeros} % -% \begin{macro}[int, EXP]{\@@_trim_zeros:w} +% \begin{macro}[aux, EXP]{\@@_trim_zeros:w} % \begin{macro}[aux, EXP] % {\@@_trim_zeros_loop:w, \@@_trim_zeros_dot:w, \@@_trim_zeros_end:w} % If |#1| ends with a $0$, the \texttt{loop} auxiliary takes that zero @@ -109,13 +109,14 @@ % \begin{macro}[EXP] % {\fp_to_scientific:N, \fp_to_scientific:c, \fp_to_scientific:n} % The three public functions evaluate their argument, then pass it to -% \cs{@@_to_scientific:w}. +% \cs{@@_to_scientific_dispatch:w}. % \begin{macrocode} -\cs_new:Npn \fp_to_scientific:N #1 { \exp_after:wN \@@_to_scientific:w #1 } +\cs_new:Npn \fp_to_scientific:N #1 + { \exp_after:wN \@@_to_scientific_dispatch:w #1 } \cs_generate_variant:Nn \fp_to_scientific:N { c } \cs_new_nopar:Npn \fp_to_scientific:n { - \exp_after:wN \@@_to_scientific:w + \exp_after:wN \@@_to_scientific_dispatch:w \tex_romannumeral:D -`0 \@@_parse:n } % \end{macrocode} @@ -123,7 +124,7 @@ % % \begin{macro}[aux, EXP] % { -% \@@_to_scientific:w, +% \@@_to_scientific_dispatch:w, % \@@_to_scientific_normal:wnnnnn, % \@@_to_scientific_normal:wNw % } @@ -147,7 +148,7 @@ \tl_to_lowercase:n { \group_end: - \cs_new:Npn \@@_to_scientific:w \s_@@ \@@_chk:w #1#2 + \cs_new:Npn \@@_to_scientific_dispatch:w \s_@@ \@@_chk:w #1#2 { \if_meaning:w 2 #2 \exp_after:wN - \tex_romannumeral:D -`0 \fi: \if_case:w #1 \exp_stop_f: @@ -196,14 +197,16 @@ % % \begin{macro}[EXP] % {\fp_to_decimal:N, \fp_to_decimal:c, \fp_to_decimal:n} -% All three public variants are based on the same \cs{@@_to_decimal:w} +% All three public variants are based on the same +% \cs{@@_to_decimal_dispatch:w} % after evaluating their argument to an internal floating point. % \begin{macrocode} -\cs_new:Npn \fp_to_decimal:N #1 { \exp_after:wN \@@_to_decimal:w #1 } +\cs_new:Npn \fp_to_decimal:N #1 + { \exp_after:wN \@@_to_decimal_dispatch:w #1 } \cs_generate_variant:Nn \fp_to_decimal:N { c } \cs_new_nopar:Npn \fp_to_decimal:n { - \exp_after:wN \@@_to_decimal:w + \exp_after:wN \@@_to_decimal_dispatch:w \tex_romannumeral:D -`0 \@@_parse:n } % \end{macrocode} @@ -211,12 +214,13 @@ % % \begin{macro}[aux, EXP] % { -% \@@_to_decimal:w, +% \@@_to_decimal_dispatch:w, % \@@_to_decimal_normal:wnnnnn, % \@@_to_decimal_large:Nnnw, % \@@_to_decimal_huge:wnnnn, % } -% The structure is similar to \cs{@@_to_scientific:w}. Insert |-| for +% The structure is similar to \cs{@@_to_scientific_dispatch:w}. +% Insert |-| for % negative numbers. Zero gives $0$, $\pm\infty$ and \nan{} yield an % \enquote{invalid operation} exception; note that $\pm\infty$ % produces a very large output, which we don't expand now since it @@ -229,7 +233,7 @@ % non-positive, the result should be $0.\meta{zeros}\meta{digits}$, % trimmed. % \begin{macrocode} -\cs_new:Npn \@@_to_decimal:w \s_@@ \@@_chk:w #1#2 +\cs_new:Npn \@@_to_decimal_dispatch:w \s_@@ \@@_chk:w #1#2 { \if_meaning:w 2 #2 \exp_after:wN - \tex_romannumeral:D -`0 \fi: \if_case:w #1 \exp_stop_f: @@ -297,26 +301,26 @@ % % \begin{macro}[EXP]{\fp_to_tl:N, \fp_to_tl:c, \fp_to_tl:n} % These three public functions evaluate their argument, then pass it -% to \cs{@@_to_tl:w}. +% to \cs{@@_to_tl_dispatch:w}. % \begin{macrocode} -\cs_new:Npn \fp_to_tl:N #1 { \exp_after:wN \@@_to_tl:w #1 } +\cs_new:Npn \fp_to_tl:N #1 { \exp_after:wN \@@_to_tl_dispatch:w #1 } \cs_generate_variant:Nn \fp_to_tl:N { c } \cs_new_nopar:Npn \fp_to_tl:n { - \exp_after:wN \@@_to_tl:w + \exp_after:wN \@@_to_tl_dispatch:w \tex_romannumeral:D -`0 \@@_parse:n } % \end{macrocode} % \end{macro} % -% \begin{macro}[aux, EXP]{\@@_to_tl:w, \@@_to_tl_normal:nnnnn} -% A structure similar to \cs{@@_to_scientific:w} and -% \cs{@@_to_decimal:w}, but without the \enquote{invalid operation} +% \begin{macro}[aux, EXP]{\@@_to_tl_dispatch:w, \@@_to_tl_normal:nnnnn} +% A structure similar to \cs{@@_to_scientific_dispatch:w} and +% \cs{@@_to_decimal_dispatch:w}, but without the \enquote{invalid operation} % exception. First filter special cases. We express normal numbers % in decimal notation if the exponent is in the range $[-2,16]$, and % otherwise use scientific notation. % \begin{macrocode} -\cs_new:Npn \@@_to_tl:w \s_@@ \@@_chk:w #1#2 +\cs_new:Npn \@@_to_tl_dispatch:w \s_@@ \@@_chk:w #1#2 { \if_meaning:w 2 #2 \exp_after:wN - \tex_romannumeral:D -`0 \fi: \if_case:w #1 \exp_stop_f: @@ -367,27 +371,27 @@ % % \begin{macro}[EXP]{\fp_to_int:N, \fp_to_int:c, \fp_to_int:n} % These three public functions evaluate their argument, then pass it -% to \cs{fp_to_int:w}. +% to \cs{fp_to_int_dispatch:w}. % \begin{macrocode} -\cs_new:Npn \fp_to_int:N #1 { \exp_after:wN \@@_to_int:w #1 } +\cs_new:Npn \fp_to_int:N #1 { \exp_after:wN \@@_to_int_dispatch:w #1 } \cs_generate_variant:Nn \fp_to_int:N { c } \cs_new_nopar:Npn \fp_to_int:n { - \exp_after:wN \@@_to_int:w + \exp_after:wN \@@_to_int_dispatch:w \tex_romannumeral:D -`0 \@@_parse:n } % \end{macrocode} % \end{macro} % -% \begin{macro}[aux, EXP]{\@@_to_int:w} +% \begin{macro}[aux, EXP]{\@@_to_int_dispatch:w} % To convert to an integer, first round to $0$ places (to the nearest % integer), then express the result as a decimal number: the -% definition of \cs{@@_to_decimal:w} is such that there will be no +% definition of \cs{@@_to_decimal_dispatch:w} is such that there will be no % trailing dot nor zero. % \begin{macrocode} -\cs_new:Npn \@@_to_int:w #1; +\cs_new:Npn \@@_to_int_dispatch:w #1; { - \exp_after:wN \@@_to_decimal:w \tex_romannumeral:D -`0 + \exp_after:wN \@@_to_decimal_dispatch:w \tex_romannumeral:D -`0 \@@_round:Nwn \@@_round_to_nearest:NNN #1; { 0 } } % \end{macrocode} @@ -472,24 +476,45 @@ % \subsection{Convert an array of floating points to a comma list} % % \begin{macro}[int, EXP]{\@@_array_to_clist:n} -% \begin{macro}[aux, EXP]{\@@_array_to_clist_i:wwww, \@@_array_to_clist_ii:ww} -% Converts an array of floating point numbers to a comma-list. +% \begin{macro}[aux, EXP]{\@@_array_to_clist_loop:Nw} +% Converts an array of floating point numbers to a comma-list. If +% speed here ends up irrelevant, we can simplify the code for the +% auxiliary to become +% \begin{verbatim} +% \cs_new:Npn \__fp_array_to_clist_loop:Nw #1#2; +% { +% \use_none:n #1 +% { , ~ } \fp_to_tl:n { #1 #2 ; } +% \__fp_array_to_clist_loop:Nw +% } +% \end{verbatim} +% The \cs{use_ii:nn} function is expanded after \cs{@@_expand:n} is +% done, and it removes |,~| from the start of the representation. % \begin{macrocode} \cs_new:Npn \@@_array_to_clist:n #1 { - \@@_array_to_clist_i:wwww ; - #1 - \@@_array_to_clist_ii:ww \s_@@ ; @ - ; , ~ , ~ @ \s_stop + \tl_if_empty:nF {#1} + { + \@@_expand:n + { + { \use_ii:nn } + \@@_array_to_clist_loop:Nw #1 { ? \__prg_break: } ; + \__prg_break_point: + } + } } -\cs_new:Npn \@@_array_to_clist_i:wwww #1; #2 \s_@@ #3; #4 @ +\cs_new:Npx \@@_array_to_clist_loop:Nw #1#2; { - #2 - \exp_after:wN \@@_array_to_clist_i:wwww - \tex_romannumeral:D -`0 \@@_to_tl:w \s_@@ #3 ; ; - #4 , ~ #1 @ + \exp_not:N \use_none:n #1 + \exp_not:N \exp_after:wN + { + \exp_not:N \exp_after:wN , + \exp_not:N \exp_after:wN \c_space_tl + \exp_not:N \tex_romannumeral:D -`0 + \exp_not:N \@@_to_tl_dispatch:w #1 #2 ; + } + \exp_not:N \@@_array_to_clist_loop:Nw } -\cs_new:Npn \@@_array_to_clist_ii:ww #1 ; , ~ , ~ #2 @ #3 \s_stop {#2} % \end{macrocode} % \end{macro} % \end{macro} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx index f228794e7a4..d6f76c3b0c1 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx @@ -36,7 +36,7 @@ % %<*driver> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3fp-expo.dtx 4151 2012-08-28 11:51:52Z bruno $ +\GetIdInfo$Id: l3fp-expo.dtx 4163 2012-08-30 16:33:11Z bruno $ {L3 Floating-point exponential-related functions} \documentclass[full]{l3doc} \begin{document} @@ -1150,7 +1150,7 @@ % This function is followed by three floating point numbers: $|a|^b$, % $a\in[-\infty,-0]$, and $b$. If $b$ is an even integer (case $-1$), % $a^b=|a|^b$. If $b$ is an odd integer (case $0$), $a^b=-|a|^b$, -% obtained by a call to \cs{@@_neg_o:w}. Otherwise, the sign is +% obtained by a call to \cs{@@_-_o:w}. Otherwise, the sign is % undefined. This is invalid, unless $|a|^b$ turns out to be $+0$ or % \texttt{nan}, in which case we return that as $a^b$. In particular, % since the underflow detection occurs before \cs{@@_pow_neg:www} is @@ -1160,7 +1160,7 @@ \cs_new:Npn \@@_pow_neg:www \s_@@ \@@_chk:w #1#2; #3; #4; { \if_case:w \@@_pow_neg_case:w #4 ; - \exp_after:wN \@@_neg_o:w + \cs:w @@_-_o:w \exp_after:wN \cs_end: \or: \if_int_compare:w \__int_eval:w #1 / \c_two = \c_one \@@_invalid_operation_o:Nww ^ #3; #4; @@ -1173,6 +1173,8 @@ \s_@@ \@@_chk:w #1#2; } % \end{macrocode} +% ^^A todo: is this \@@_exp_after_o:w necessary? Appropriate? +% ^^A todo: improve upon the run-time \cs:w ... \cs_end: construction. % \end{macro} % % \begin{macro}[aux, rEXP] diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx index 20f94e2abe4..f32746b30e1 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx @@ -84,7 +84,7 @@ % \Arg{expo_2} \meta{body_2} |;| % \item \cs{@@_max_o:w} \meta{floating point array} % \item \cs{@@_min_o:w} \meta{floating point array} -% \item \cs{@@_not_o:w} \meta{floating point} +% \item \cs{@@_!_o:w} \meta{floating point} % \item \cs{@@_\string&_o:ww} \meta{floating point} \meta{floating point} % \item \cs{@@_\string|_o:ww} \meta{floating point} \meta{floating point} % \item \cs{@@_ternary:NwwN}, \cs{@@_ternary_i:NwwN}, @@ -413,11 +413,11 @@ % % \subsection{Boolean operations} % -% \begin{macro}[int, EXP]{\@@_not_o:w} +% \begin{macro}[int, EXP]{\@@_!_o:w} % Return \texttt{true} or \texttt{false}, with two expansions, one to % exit the conditional, and one to please \pkg{l3fp-parse}. % \begin{macrocode} -\cs_new:Npn \@@_not_o:w \s_@@ \@@_chk:w #1#2; +\cs_new:cpn { @@_!_o:w } \s_@@ \@@_chk:w #1#2; { \if_meaning:w 0 #1 \exp_after:wN \exp_after:wN \exp_after:wN \c_one_fp diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-old.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-old.dtx index 63895efcaae..b336d346ffe 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-old.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-old.dtx @@ -36,7 +36,7 @@ % %<*driver> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3fp-old.dtx 4082 2012-08-12 12:14:17Z bruno $ +\GetIdInfo$Id: l3fp-old.dtx 4163 2012-08-30 16:33:11Z bruno $ {L3 Experimental floating-points (old)} \documentclass[full]{l3doc} \begin{document} @@ -122,15 +122,25 @@ % } % \begin{macro}[aux]{\@@_abs:NNN} % Simply expand the floating point variable to feed it to -% \cs{@@_abs_o:w} or \cs{@@_neg_o:w}, expanded within an expanding +% \cs{@@_abs_o:w} or \cs{@@_-_o:w}, expanded within an expanding % token list assignment. The \cs{prg_do_nothing:} is not necessary, -% but it reminds us moe clearly that \cs{@@_abs_o:w} and -% \cs{@@_neg_o:w} expand after their result. +% but it reminds us more clearly that \cs{@@_abs_o:w} and +% \cs{@@_-_o:w} expand after their result. % \begin{macrocode} \cs_new_protected_nopar:Npn \fp_abs:N { \@@_abs:NNN \tl_set:Nx \@@_abs_o:w } \cs_new_protected_nopar:Npn \fp_gabs:N { \@@_abs:NNN \tl_gset:Nx \@@_abs_o:w } -\cs_new_protected_nopar:Npn \fp_neg:N { \@@_abs:NNN \tl_set:Nx \@@_neg_o:w } -\cs_new_protected_nopar:Npn \fp_gneg:N { \@@_abs:NNN \tl_gset:Nx \@@_neg_o:w } +\cs_new_protected_nopar:Npx \fp_neg:N + { + \exp_not:N \@@_abs:NNN + \exp_not:N \tl_set:Nx + \exp_not:c { @@_-_o:w } + } +\cs_new_protected_nopar:Npx \fp_gneg:N + { + \exp_not:N \@@_abs:NNN + \exp_not:N \tl_gset:Nx + \exp_not:c { @@_-_o:w } + } \cs_new_protected:Npn \@@_abs:NNN #1#2#3 { #1 #3 { \exp_after:wN #2 #3 \prg_do_nothing: } } \cs_generate_variant:Nn \fp_abs:N { c } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx index bb9c792adff..c49e3248edd 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx @@ -36,7 +36,7 @@ % %<*driver> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3fp-parse.dtx 4159 2012-08-29 13:21:59Z bruno $ +\GetIdInfo$Id: l3fp-parse.dtx 4187 2012-09-02 15:57:09Z bruno $ {L3 Floating-point expression parsing} \documentclass[full]{l3doc} \begin{document} @@ -956,42 +956,45 @@ % \begin{macro}[aux, EXP] % { % \@@_parse_operand_relax:NN, -% \@@_exp_after_mark_f:nw, -% \@@_exp_after_?_f:nw +% \@@_parse_exp_after_f:nw, +% \@@_parse_exp_after_mark_f:nw, +% \@@_parse_exp_after_?_f:nw % } % The second argument is a control sequence equal to \cs{tex_relax:D}. % There are three cases, dispatched using \cs{@@_type_from_scan:N}. % \begin{itemize} % \item \cs{s_@@} starts a floating point number, and we call -% \cs{@@_exp_after_f:nw}. +% \cs{@@_parse_exp_after_f:nw}, which |f|-expands after the +% floating point. % \item \cs{s_@@_mark} is a premature end, we call -% \cs{@@_exp_after_mark_f:nw}, which triggers the appropriate -% error. +% \cs{@@_parse_exp_after_mark_f:nw}, which triggers the +% appropriate error. % \item For a control sequence not containing |\s__fp|, we call -% \cs{@@_exp_after_?_f:nw}, causing a |bad-variable| error. +% \cs{@@_parse_exp_after_?_f:nw}, causing a |bad-variable| error. % \end{itemize} % This scheme is extensible: additional types can be added by starting % the variables with a scan mark of the form |\s__fp_|\meta{type} and -% defining |\__fp_exp_after_|\meta{type}|_f:nw|. In all cases, we +% defining |\__fp_parse_exp_after_|\meta{type}|_f:nw|. In all cases, we % make sure that the last argument of \cs{@@_parse_infix:NN} is % correctly expanded. % \begin{macrocode} \cs_new:Npn \@@_parse_operand_relax:NN #1#2 { - \cs:w @@_exp_after \@@_type_from_scan:N #2 _f:nw \cs_end: + \cs:w @@_parse_exp_after \@@_type_from_scan:N #2 _f:nw \cs_end: { \exp_after:wN \@@_parse_infix:NN \exp_after:wN #1 \tex_romannumeral:D \@@_parse_expand:w } #2 } -\cs_new:Npn \@@_exp_after_mark_f:nw #1 +\cs_new_eq:NN \@@_parse_exp_after_f:nw \@@_exp_after_f:nw +\cs_new:Npn \@@_parse_exp_after_mark_f:nw #1 { \__msg_kernel_expandable_error:nn { kernel } { fp-early-end } \exp_after:wN \c_nan_fp \tex_romannumeral:D -`0 #1 } -\cs_new:cpn { @@_exp_after_?_f:nw } #1#2 +\cs_new:cpn { @@_parse_exp_after_?_f:nw } #1#2 { \__msg_kernel_expandable_error:nnn { kernel } { bad-variable } {#2} @@ -1692,8 +1695,6 @@ % \end{macro} % % ^^A begin[todo] -% ^^A todo: \@@_sin:Nn should first _set, then \@@_sin_o:w, -% ^^A both for speed, and error reporting. % ^^A todo: word 'e' == 'invalid syntax', word 'E' == "use 'e' instead" % % \subsubsection{Beyond 16 digits: rounding} @@ -1897,7 +1898,7 @@ \tex_romannumeral:D } \cs_new:Npn \@@_parse_until_test:NwN #1 #2 @ #3 { #3 #1 #2 @ } -\cs_new:Npn \@@_parse_stop_until:N #1 { } +\cs_new_eq:NN \@@_parse_stop_until:N \use_none:n % \end{macrocode} % \end{macro} % \end{macro} @@ -1990,7 +1991,10 @@ % \end{macro} % % \begin{macro}[int, EXP]{\@@_parse_apply_binary:NwNwN} -% +% Receives \meta{precedence} \meta{operand_1} |@| \meta{operation} +% \meta{operand_2} |@| \meta{infix command}. Builds the appropriate +% call to the \meta{operation} |#4|, given the types of the two +% \meta{operands}. % \begin{macrocode} \cs_new:Npn \@@_parse_apply_binary:NwNwN #1 #2#3@ #4 #5#6@ #7 { @@ -2012,7 +2016,7 @@ % % \begin{macro}[int, EXP] % {\@@_parse_apply_unary_array:NNwN, \@@_parse_apply_unary:NNwN} -% Here, |#2| is \emph{e.g.}, \cs{@@_neg_o:w}, and expands once after the +% Here, |#2| is \emph{e.g.}, \cs{@@_sin_o:w}, and expands once after the % calculation.\footnote{Bruno: explain.} The argument |#3| may be an % array, so either we map through all its items, or we feed all items % at once to the custom function. @@ -2171,7 +2175,7 @@ { #2 #1 #3 \@@_parse_expand:w } \cs_new:Npn \@@_parse_apply_round:NNwN #1#2#3@#4 { - \if_case:w \__int_eval:w \@@_array_count:w #3@ - \c_one \__int_eval_end: + \if_case:w \__int_eval:w \@@_array_count:n {#3} - \c_one \__int_eval_end: \@@_round:Nwn #2 #3 {0} \tex_romannumeral:D \or: \@@_round:Nww #2 #3 \tex_romannumeral:D \else: @@ -2213,8 +2217,8 @@ \@@_parse_expand:w } } -\@@_tmp:w - { neg } -\@@_tmp:w ! { not } +\@@_tmp:w - { - } +\@@_tmp:w ! { ! } % \end{macrocode} % \end{macro} % @@ -2254,18 +2258,6 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}[int, EXP]{\@@_exp_after_array_f:w} -% \begin{macrocode} -\cs_new:Npn \@@_exp_after_array_f:w #1 - { - \cs:w @@_exp_after \@@_type_from_scan:N #1 _f:nw \cs_end: - { \@@_exp_after_array_f:w } - #1 - } -\cs_new:Npn \@@_exp_after_stop_f:nw #1#2 { } -% \end{macrocode} -% \end{macro} -% % \begin{macro}[int]{\@@_parse_prefix_.:Nw} % This function is called when a number starts with a dot. % \begin{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx index 107b94ac0ca..ceb2840a810 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx @@ -36,7 +36,7 @@ % %<*driver> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3fp-traps.dtx 4129 2012-08-20 20:38:28Z mittelba $ +\GetIdInfo$Id: l3fp-traps.dtx 4179 2012-08-31 15:54:18Z bruno $ {L3 Floating-point exception trapping} \documentclass[full]{l3doc} \begin{document} @@ -210,7 +210,7 @@ { \cs_set:Npn \@@_invalid_operation:nnw ##1##2##3; } { #1 - \@@_error:nnfn { invalid } {##2} { \@@_to_tl:w ##3; } { } + \@@_error:nnfn { invalid } {##2} { \fp_to_tl:n { ##3; } } { } \fp_flag_on:n { invalid_operation } ##1 } @@ -219,7 +219,7 @@ { #1 \@@_error:nffn { invalid-ii } - { \@@_to_tl:w ##2; } { \@@_to_tl:w ##3; } {##1} + { \fp_to_tl:n { ##2; } } { \fp_to_tl:n { ##3; } } {##1} \fp_flag_on:n { invalid_operation } \exp_after:wN \c_nan_fp } @@ -260,7 +260,7 @@ { \cs_set:Npn \@@_division_by_zero_o:Nnw ##1##2##3; } { #1 - \@@_error:nnfn { zero-div } {##2} { \@@_to_tl:w ##3; } { } + \@@_error:nnfn { zero-div } {##2} { \fp_to_tl:n { ##3; } } { } \fp_flag_on:n { division_by_zero } \exp_after:wN ##1 } @@ -269,7 +269,7 @@ { #1 \@@_error:nffn { zero-div-ii } - { \@@_to_tl:w ##3; } { \@@_to_tl:w ##4; } {##2} + { \fp_to_tl:n { ##3; } } { \fp_to_tl:n { ##4; } } {##2} \fp_flag_on:n { division_by_zero } \exp_after:wN ##1 } @@ -330,7 +330,7 @@ #1 \@@_error:nffn { flow \if_meaning:w 1 ##1 -to \fi: } - { \@@_to_tl:w \s_@@ \@@_chk:w ##1##2##3; } + { \fp_to_tl:n { \s_@@ \@@_chk:w ##1##2##3; } } { \token_if_eq_meaning:NNF 0 ##2 { - } #4 } {#2} \fp_flag_on:n {#2} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx index cda5912494a..81db3df7b8b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3prop.dtx 4092 2012-08-14 14:04:41Z bruno $ +\GetIdInfo$Id: l3prop.dtx 4190 2012-09-03 00:23:31Z bruno $ {L3 Property lists} %</driver|package> %<*driver> @@ -373,7 +373,7 @@ % } % } % \end{verbatim} -% Use outside of a \cs{prop_map_\ldots} scenario will lead low +% Use outside of a \cs{prop_map_\ldots} scenario will lead to low % level \TeX{} errors. % \end{function} % @@ -395,7 +395,7 @@ % } % } % \end{verbatim} -% Use outside of a \cs{prop_map_\ldots} scenario will lead low +% Use outside of a \cs{prop_map_\ldots} scenario will lead to low % level \TeX{} errors. % \end{function} % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx index c639989d793..b4ae4118b33 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3tl.dtx 3991 2012-07-16 19:00:35Z joseph $ +\GetIdInfo$Id: l3tl.dtx 4201 2012-09-05 08:00:54Z joseph $ {L3 Token lists} %</driver|package> %<*driver> @@ -68,14 +68,14 @@ % \begin{documentation} % % \TeX{} works with tokens, and \LaTeX3 therefore provides a number of -% functions to deal with token lists. Token lists may be present directly in -% the argument to a function: +% functions to deal with lists of tokens. Token lists may be present +% directly in the argument to a function: % \begin{verbatim} % \foo:n { a collection of \tokens } % \end{verbatim} -% or may be stored for processing in a so-called \enquote{token list -% variable}, which have the suffix \texttt{tl}: -% the argument to a function: +% or may be stored in a so-called \enquote{token list variable}, which +% have the suffix \texttt{tl}: a token list variable can also be used as +% the argument to a function, for example % \begin{verbatim} % \foo:N \l_some_tl % \end{verbatim} @@ -86,12 +86,13 @@ % of tokens: the two \enquote{views} of a token list are therefore collected % together here. % -% A token list can be seen either as a list of \enquote{items}, -% or a list of \enquote{tokens}. An item is whatever \cs{use_none:n} -% grabs as its argument: either a single token or a brace group, +% A token list (explicit, or stored in a variable) can be seen either +% as a list of \enquote{items}, +% or a list of \enquote{tokens}. An item is whatever \cs{use:n} would +% grab as its argument: a single non-space token or a brace group, % with optional leading explicit space characters (each item is thus % itself a token list). A token is either a normal \texttt{N} argument, -% or | |, |{|, or |}| (assuming normal \TeX{} category codes). +% or \verb*| |, |{|, or |}| (assuming normal \TeX{} category codes). % Thus for example % \begin{verbatim} % { Hello } ~ world @@ -103,6 +104,30 @@ % Functions which act on items are often faster than their analogue acting % directly on tokens. % +% ^^A todo: perhaps move to another module, l3token or l3basics? +% \begin{texnote} +% When \TeX{} fetches an undelimited argument from the input stream, +% explicit character tokens with character code $32$ (space) and +% category code $10$ (space), which we here call \enquote{explicit +% space characters}, are ignored. If the following token is an +% explicit character token with category code $1$ (begin-group) and an +% arbitrary character code, then \TeX{} scans ahead to obtain an equal +% number of explicit character tokens with category code $1$ +% (begin-group) and $2$ (end-group), and the resulting list of tokens +% (with outer braces removed) becomes the argument. Otherwise, a +% single token is taken as the argument for the macro: we call such +% single tokens \enquote{N-type}, as they are suitable to be used as +% an argument for a function with the signature~\texttt{:N}. +% +% When \TeX{} reads a character of category code $10$ for the first +% time, it is converted to an explicit space character, with character +% code $32$, regardless of the initial character code. +% \enquote{Funny} spaces with a different category code, can be +% produced using \cs{tl_to_lowercase:n} or \cs{tl_to_uppercase:n}. +% Explicit space characters are also produced as a result of +% \cs{token_to_str:N}, \cs{tl_to_str:n}, etc. +% \end{texnote} +% % \section{Creating and initialising token list variables} % % \begin{function}{\tl_new:N, \tl_new:c} @@ -181,7 +206,7 @@ % \begin{function} % { % \tl_set:Nn, \tl_set:NV, \tl_set:Nv, \tl_set:No, \tl_set:Nf, \tl_set:Nx, -% \tl_set:cn, \tl_set:NV, \tl_set:Nv, \tl_set:co, \tl_set:cf, \tl_set:cx, +% \tl_set:cn, \tl_set:cV, \tl_set:cv, \tl_set:co, \tl_set:cf, \tl_set:cx, % \tl_gset:Nn, \tl_gset:NV, \tl_gset:Nv, % \tl_gset:No, \tl_gset:Nf, \tl_gset:Nx, % \tl_gset:cn, \tl_gset:cV, \tl_gset:cv, @@ -237,7 +262,8 @@ % Replaces the first (leftmost) occurrence of \meta{old tokens} in the % \meta{tl~var} with \meta{new tokens}. \meta{Old tokens} % cannot contain |{|, |}| or |#| -% (assuming normal \TeX{} category codes). +% (more precisely, explicit character tokens with category code $1$ +% (begin-group) or $2$ (end-group), and tokens with category code $6$). % \end{function} % % \begin{function}[updated = 2011-08-11] @@ -251,11 +277,12 @@ % Replaces all occurrences of \meta{old tokens} in the % \meta{tl~var} with \meta{new tokens}. \meta{Old tokens} % cannot contain |{|, |}| or |#| -% (assuming normal \TeX{} category codes). As this function +% (more precisely, explicit character tokens with category code $1$ +% (begin-group) or $2$ (end-group), and tokens with category code $6$). +% As this function % operates from left to right, the pattern \meta{old tokens} % may remain after the replacement (see \cs{tl_remove_all:Nn} -% for an example). The assignment is -% restricted to the current \TeX{} group. +% for an example). % \end{function} % % \begin{function}[updated = 2011-08-11] @@ -267,8 +294,9 @@ % \cs{tl_remove_once:Nn} \meta{tl~var} \Arg{tokens} % \end{syntax} % Removes the first (leftmost) occurrence of \meta{tokens} from the -% \meta{tl~var}. \meta{Tokens} cannot contain |{|, |}| or -% |#| (assuming normal \TeX{} category codes). +% \meta{tl~var}. \meta{Tokens} cannot contain |{|, |}| or |#| +% (more precisely, explicit character tokens with category code $1$ +% (begin-group) or $2$ (end-group), and tokens with category code $6$). % \end{function} % % \begin{function}[updated = 2011-08-11] @@ -280,8 +308,10 @@ % \cs{tl_remove_all:Nn} \meta{tl~var} \Arg{tokens} % \end{syntax} % Removes all occurrences of \meta{tokens} from the -% \meta{tl~var}. \meta{Tokens} cannot contain |{|, |}| or -% |#| (assuming normal \TeX{} category codes). As this function +% \meta{tl~var}. \meta{Tokens} cannot contain |{|, |}| or |#| +% (more precisely, explicit character tokens with category code $1$ +% (begin-group) or $2$ (end-group), and tokens with category code $6$). +% As this function % operates from left to right, the pattern \meta{tokens} % may remain after the removal, for instance, % \begin{quote} @@ -332,9 +362,9 @@ % unchanged. This process does not alter the category code assigned % to the \meta{tokens}. % \begin{texnote} -% This is the \TeX{} primitive \tn{lowercase} renamed. -% As a result, this function takes place on execution and -% not on expansion. +% This is the \TeX{} primitive \tn{lowercase} renamed. As a result, +% its argument \emph{must} be given within braces, and this function +% takes place on execution and not on expansion. % \end{texnote} % \end{function} % @@ -348,9 +378,9 @@ % unchanged. This process does not alter the category code assigned % to the \meta{tokens}. % \begin{texnote} -% This is the \TeX{} primitive \tn{uppercase} renamed. -% As a result, this function takes place on execution and -% not on expansion. +% This is the \TeX{} primitive \tn{uppercase} renamed. As a result, +% its argument \emph{must} be given within braces, and this function +% takes place on execution and not on expansion. % \end{texnote} % \end{function} % @@ -363,14 +393,15 @@ % \end{syntax} % Tests if the \meta{token list} consists only of blank spaces % (\emph{i.e.}~contains no item). The test is \texttt{true} if -% \meta{token list} is zero or more explicit tokens of character code~$32$ -% and category code~$10$, and is \texttt{false} otherwise. +% \meta{token list} is zero or more explicit space characters +% (explicit tokens with character code~$32$ and category code~$10$), +% and is \texttt{false} otherwise. % \end{function} % % \begin{function}[EXP,pTF]{\tl_if_empty:N, \tl_if_empty:c} % \begin{syntax} -% \cs{tl_if_empty_p:N} \meta{tl var} -% \cs{tl_if_empty:NTF} \meta{tl var} \Arg{true code} \Arg{false code} +% \cs{tl_if_empty_p:N} \meta{tl~var} +% \cs{tl_if_empty:NTF} \meta{tl~var} \Arg{true code} \Arg{false code} % \end{syntax} % Tests if the \meta{token list variable} is entirely empty % (\emph{i.e.}~contains no tokens at all). @@ -389,8 +420,8 @@ % \begin{function}[EXP,pTF] % {\tl_if_eq:NN, \tl_if_eq:Nc, \tl_if_eq:cN, \tl_if_eq:cc} % \begin{syntax} -% \cs{tl_if_eq_p:NN} \Arg{tl var_1} \Arg{tl var_2} -% \cs{tl_if_eq:NNTF} \Arg{tl var_1} \Arg{tl var_2} \Arg{true code} \Arg{false code} +% \cs{tl_if_eq_p:NN} \Arg{tl~var_1} \Arg{tl~var_2} +% \cs{tl_if_eq:NNTF} \Arg{tl~var_1} \Arg{tl~var_2} \Arg{true code} \Arg{false code} % \end{syntax} % Compares the content of two \meta{token list variables} and % is logically \texttt{true} if the two contain the same list of @@ -399,17 +430,18 @@ % \begin{verbatim} % \tl_set:Nn \l_tmpa_tl { abc } % \tl_set:Nx \l_tmpb_tl { \tl_to_str:n { abc } } -% \tl_if_eq_p:NN \l_tmpa_tl \l_tmpb_tl +% \tl_if_eq:NNTF \l_tmpa_tl \l_tmpb_tl { true } { false } % \end{verbatim} -% is logically \texttt{false}. +% yields \texttt{false}. % \end{function} % % \begin{function}[TF]{\tl_if_eq:nn} % \begin{syntax} % \cs{tl_if_eq:nnTF} \meta{token list_1} \Arg{token list_2} \Arg{true code} \Arg{false code} % \end{syntax} -% Tests if \meta{token list_1} and \meta{token list_2} are equal, both in -% respect of character codes and category codes. +% Tests if \meta{token list_1} and \meta{token list_2} contain the +% same list of tokens, both in respect of character codes and category +% codes. % \end{function} % % \begin{function}[TF]{\tl_if_in:Nn, \tl_if_in:cn} @@ -417,9 +449,10 @@ % \cs{tl_if_in:NnTF} \meta{tl~var} \Arg{token list} \Arg{true code} \Arg{false code} % \end{syntax} % Tests if the \meta{token list} is found in the content of the -% \meta{token list variable}. The \meta{token list} cannot contain -% the tokens |{|, |}| or |#| (assuming the usual \TeX{} category -% codes apply). +% \meta{tl~var}. The \meta{token list} cannot contain +% the tokens |{|, |}| or |#| +% (more precisely, explicit character tokens with category code $1$ +% (begin-group) or $2$ (end-group), and tokens with category code $6$). % \end{function} % % \begin{function}[TF] @@ -427,9 +460,10 @@ % \begin{syntax} % \cs{tl_if_in:nnTF} \Arg{token list_1} \Arg{token list_2} \Arg{true code} \Arg{false code} % \end{syntax} -% Tests if <token list_2> is found inside <token list_1>. -% The \meta{token list} cannot contain the tokens |{|, |}| or |#| -% (assuming the usual \TeX{} category codes apply). +% Tests if \meta{token list_2} is found inside \meta{token list_1}. +% The \meta{token list_2} cannot contain the tokens |{|, |}| or |#| +% (more precisely, explicit character tokens with category code $1$ +% (begin-group) or $2$ (end-group), and tokens with category code $6$). % \end{function} % % \begin{function}[updated = 2011-08-13, EXP,pTF] @@ -439,10 +473,10 @@ % \cs{tl_if_single:NTF} \Arg{tl~var} \Arg{true code} \Arg{false code} % \end{syntax} % Tests if the content of the \meta{tl~var} consists of a single item, -% \emph{i.e.}~is either a single normal token (excluding spaces, -% and brace tokens) or a single brace group, surrounded by optional -% spaces on both sides. In other words, such a token list has token count -% $1$ according to \cs{tl_count:N}. +% \emph{i.e.}~is a single normal token (neither an explicit space +% character nor a begin-group character) or a single brace group, +% surrounded by optional spaces on both sides. In other words, such a +% token list has token count $1$ according to \cs{tl_count:N}. % \end{function} % % \begin{function}[updated = 2011-08-13, EXP,pTF]{\tl_if_single:n} @@ -450,10 +484,11 @@ % \cs{tl_if_single_p:n} \Arg{token list} % \cs{tl_if_single:nTF} \Arg{token list} \Arg{true code} \Arg{false code} % \end{syntax} -% Tests if the token list has exactly one item, \emph{i.e.}~is either -% a single normal token or a single brace group, surrounded by -% optional spaces on both sides. In other words, such a token list -% has token count $1$ according to \cs{tl_count:n}. +% Tests if the \meta{token list} has exactly one item, \emph{i.e.}~is +% a single normal token (neither an explicit space character nor a +% begin-group character) or a single brace group, surrounded by +% optional spaces on both sides. In other words, such a token list has +% token count $1$ according to \cs{tl_count:n}. % \end{function} % % \begin{function}[added = 2012-06-03, EXP]{\tl_case:Nnn, \tl_case:cnn} @@ -469,8 +504,7 @@ % \end{syntax} % This function compares the \meta{test token list variable} in turn % with each of the \meta{token list variable cases}. If the two -% are equal (as described for -% \cs{tl_if_eq:nnTF} +% are equal (as described for \cs{tl_if_eq:NNTF}) % then the associated \meta{code} is left in the input % stream. If none of the tests are \texttt{true} then the % \texttt{else code} will be left in the input stream. @@ -509,7 +543,7 @@ % Applies the \meta{inline function} to every \meta{item} stored within the % \meta{tl~var}. The \meta{inline function} should consist of code which % will receive the \meta{item} as |#1|. One in line mapping can be nested -% inside another. See also \cs{tl_map_function:Nn}. +% inside another. See also \cs{tl_map_function:NN}. % \end{function} % % \begin{function}[updated = 2012-06-29]{\tl_map_inline:nn} @@ -519,7 +553,7 @@ % Applies the \meta{inline function} to every \meta{item} stored within the % \meta{token list}. The \meta{inline function} should consist of code which % will receive the \meta{item} as |#1|. One in line mapping can be nested -% inside another. See also \cs{tl_map_function:nn}. +% inside another. See also \cs{tl_map_function:nN}. % \end{function} % % \begin{function}[updated = 2012-06-29] @@ -555,14 +589,12 @@ % \begin{verbatim} % \tl_map_inline:Nn \l_my_tl % { -% \str_if_eq:nnTF { #1 } { bingo } -% { \tl_map_break: } -% { -% % Do something useful -% } +% \str_if_eq:nnT { #1 } { bingo } { \tl_map_break: } +% % Do something useful % } % \end{verbatim} -% Use outside of a \cs{tl_map_\ldots} scenario will lead low +% See also \cs{tl_map_break:n}. +% Use outside of a \cs{tl_map_\ldots} scenario will lead to low % level \TeX{} errors. % \begin{texnote} % When the mapping is broken, additional tokens may be inserted by the @@ -583,11 +615,9 @@ % \begin{verbatim} % \tl_map_inline:Nn \l_my_tl % { -% \str_if_eq:nnTF { #1 } { bingo } +% \str_if_eq:nnT { #1 } { bingo } % { \tl_map_break:n { <tokens> } } -% { -% % Do something useful -% } +% % Do something useful % } % \end{verbatim} % Use outside of a \cs{tl_map_\ldots} scenario will lead to low @@ -659,7 +689,7 @@ % Counts the number of token groups in the \meta{tl~var} % and leaves this information in the input stream. Unbraced tokens % count as one element as do each token group (|{|\ldots|}|). This -% process will ignore any unprotected spaces within \meta{tokens}. +% process will ignore any unprotected spaces within the \meta{tl~var}. % See also \cs{tl_count:n}. This function requires three expansions, % giving an \meta{integer denotation}. % \end{function} @@ -679,9 +709,8 @@ % consider \cs{tl_reverse_items:n}. % See also \cs{tl_reverse:N}. % \begin{texnote} -% The result is returned within the \tn{unexpanded} -% primitive (\cs{exp_not:n}), which means that the token -% list will not expand further when appearing in an x-type +% The result is returned within \tn{exp_not:n}, which means that the token +% list will not expand further when appearing in an \texttt{x}-type % argument expansion. % \end{texnote} % \end{function} @@ -697,7 +726,8 @@ % This process will preserve unprotected spaces within the % \meta{token list variable}. Braced token groups are copied without % reversing the order of tokens, but keep the outer set of braces. -% See also \cs{tl_reverse:n}. +% See also \cs{tl_reverse:n}, and, for improved performance, +% \cs{tl_reverse_items:n}. % \end{function} % % \begin{function}[added = 2012-01-08, EXP]{\tl_reverse_items:n} @@ -712,11 +742,10 @@ % reversing the order of tokens, and keep the outer set of braces. % Items which are initially not braced are copied with braces in % the result. In cases where preserving spaces is important, -% consider \cs{tl_reverse:n} or \cs{tl_reverse_tokens:n}. +% consider the slower function \cs{tl_reverse:n}. % \begin{texnote} -% The result is returned within the \tn{unexpanded} -% primitive (\cs{exp_not:n}), which means that the token -% list will not expand further when appearing in an x-type +% The result is returned within \tn{exp_not:n}, which means that the token +% list will not expand further when appearing in an \texttt{x}-type % argument expansion. % \end{texnote} % \end{function} @@ -724,15 +753,15 @@ % \begin{function}[added = 2011-07-09, updated = 2012-06-25, EXP] % {\tl_trim_spaces:n} % \begin{syntax} -% \cs{tl_trim_spaces:n} \meta{token list} +% \cs{tl_trim_spaces:n} \Arg{token list} % \end{syntax} % Removes any leading and trailing explicit space characters +% (explicit tokens with character code~$32$ and category code~$10$) % from the \meta{token list} and leaves the result in the input % stream. % \begin{texnote} -% The result is returned within the \tn{unexpanded} -% primitive (\cs{exp_not:n}), which means that the token -% list will not expand further when appearing in an x-type +% The result is returned within \tn{exp_not:n}, which means that the token +% list will not expand further when appearing in an \texttt{x}-type % argument expansion. % \end{texnote} % \end{function} @@ -746,22 +775,25 @@ % \cs{tl_trim_spaces:N} \meta{tl~var} % \end{syntax} % Removes any leading and trailing explicit space characters +% (explicit tokens with character code~$32$ and category code~$10$) % from the content of the \meta{tl~var}. % \end{function} % % \section{The first token from a token list} % -% Functions which deal with either only the very first token of a -% token list or everything except the first token. +% Functions which deal with either only the very first item (balanced +% text or single normal token) in a token list, or the remaining tokens. % % \begin{function}[updated = 2012-02-08, EXP] % {\tl_head:N, \tl_head:n, \tl_head:V, \tl_head:v, \tl_head:f} % \begin{syntax} -% \cs{tl_head:n} \Arg{tokens} +% \cs{tl_head:n} \Arg{token list} % \end{syntax} -% Leaves in the input stream the first non-space token from the -% \meta{tokens}. Any leading space tokens will be discarded, and thus for -% example +% Leaves in the input stream the first \meta{item} in the +% \meta{token list}, discarding the rest of the \meta{token list}. +% All leading explicit space characters +% (explicit tokens with character code~$32$ and category code~$10$) +% are discarded; for example % \begin{verbatim} % \tl_head:n { abc } % \end{verbatim} @@ -769,86 +801,79 @@ % \begin{verbatim} % \tl_head:n { ~ abc } % \end{verbatim} -% will both leave |a| in the input stream. -% An empty list of \meta{tokens} or one which consists -% only of space (category code $10$) tokens will result in \cs{tl_head:n} -% leaving nothing in the input stream. +% will both leave |a| in the input stream. If the \enquote{head} is a +% brace group, rather than a single token, the braces will be removed, and +% so +% \begin{verbatim} +% \tl_head:n { ~ { ~ ab } c } +% \end{verbatim} +% yields \verb*| ab|. +% A blank \meta{token list} (see \cs{tl_if_blank:nTF}) will result in +% \cs{tl_head:n} leaving nothing in the input stream. The \meta{token list} +% should not contain the marker \cs{q_stop}. % \begin{texnote} -% The result is returned within the \tn{unexpanded} -% primitive (\cs{exp_not:n}), which means that the token -% list will not expand further when appearing in an x-type +% The result is returned within \cs{exp_not:n}, which means that the token +% list will not expand further when appearing in an \texttt{x}-type % argument expansion. % \end{texnote} % \end{function} % % \begin{function}[EXP]{\tl_head:w} % \begin{syntax} -% \cs{tl_head:w} \meta{tokens} \cs{q_stop} +% \cs{tl_head:w} \meta{token list} | { } | \cs{q_stop} % \end{syntax} -% Leaves in the input stream the first non-space token from the -% \meta{tokens}. An empty list of \meta{tokens} or one which consists -% only of space (category code $10$) tokens will result in an error, and -% thus \meta{tokens} must \emph{not} be \enquote{blank} as determined by -% \cs{tl_if_blank:n(TF)}. This function requires only a single expansion, -% and thus is suitable for use within an \texttt{o}-type expansion. In -% general, \cs{tl_head:n} should be preferred if the number of expansions -% is not critical. +% Leaves in the input stream the first \meta{item} in the +% \meta{token list}, discarding the rest of the \meta{token list}. +% All leading explicit space characters +% (explicit tokens with character code~$32$ and category code~$10$) +% are discarded. +% A blank \meta{token list} (which consists only of space characters) +% will result in a low-level \TeX{} error, which may be avoided by the +% inclusion of an empty group in the input (as shown), without the need +% for an explicit test. Alternatively, \cs{tl_if_blank:nF} may be used to +% avoid using the function with a \enquote{blank} argument. +% This function requires only a single expansion, and thus is suitable for +% use within an \texttt{o}-type expansion. In general, \cs{tl_head:n} should +% be preferred if the number of expansions is not critical. % \end{function} % -% \begin{function}[updated = 2012-02-08, EXP] +% \begin{function}[updated = 2012-09-01, EXP] % {\tl_tail:N, \tl_tail:n, \tl_tail:V, \tl_tail:v, \tl_tail:f} % \begin{syntax} -% \cs{tl_tail:n} \Arg{tokens} +% \cs{tl_tail:n} \Arg{token list} % \end{syntax} -% Discards the all leading space tokens and the first non-space token -% in the \meta{tokens}, and leaves the remaining tokens in the -% input stream. Thus for example +% Discards all leading explicit space characters +% (explicit tokens with character code~$32$ and category code~$10$) +% and the first \meta{item} in the \meta{token list}, and leaves the +% remaining tokens in the input stream. Thus for example % \begin{verbatim} -% \tl_tail:n { abc } +% \tl_tail:n { a ~ {bc} d } % \end{verbatim} % and % \begin{verbatim} -% \tl_tail:n { ~ abc } +% \tl_tail:n { ~ a ~ {bc} d } % \end{verbatim} -% will both leave |bc| in the input stream. -% An empty list of \meta{tokens} or one which consists -% only of space (category code $10$) tokens will result in \cs{tl_tail:n} -% leaving nothing in the input stream. +% will both leave \verb*| {bc}d| in the input stream. A blank +% \meta{token list} (see \cs{tl_if_blank:nTF}) will result +% in \cs{tl_tail:n} leaving nothing in the input stream. % \begin{texnote} -% The result is returned within the \tn{unexpanded} -% primitive (\cs{exp_not:n}), which means that the token -% list will not expand further when appearing in an x-type +% The result is returned within \cs{exp_not:n}, which means that the +% token list will not expand further when appearing in an \texttt{x}-type % argument expansion. % \end{texnote} % \end{function} % -% \begin{function}[EXP]{\tl_tail:w} -% \begin{syntax} -% \cs{tl_tail:w} \Arg{tokens} \cs{q_stop} -% \end{syntax} -% Discards the all leading space tokens and the first non-space token -% in the \meta{tokens}, and leaves the remaining tokens in the -% input stream. -% An empty list of \meta{tokens} or one which consists -% only of space (category code $10$) tokens will result in an error, and -% thus \meta{tokens} must \emph{not} be \enquote{blank} as determined by -% \cs{tl_if_blank:n(TF)}. This function requires only a single expansion, -% and thus is suitable for use within an \texttt{o}-type expansion. In -% general, \cs{tl_tail:n} should be preferred if the number of expansions -% is not critical. -% \end{function} -% % \begin{function}[added = 2011-08-10, EXP]{\str_head:n,\str_tail:n} % \begin{syntax} -% \cs{str_head:n} \Arg{tokens} -% \cs{str_tail:n} \Arg{tokens} +% \cs{str_head:n} \Arg{token list} +% \cs{str_tail:n} \Arg{token list} % \end{syntax} -% Converts the \meta{tokens} into a string, as described for +% Converts the \meta{token list} into a string, as described for % \cs{tl_to_str:n}. The \cs{str_head:n} function then leaves % the first character of this string in the input stream. % The \cs{str_tail:n} function leaves all characters except % the first in the input stream. The first character may be -% a space. If the \meta{tokens} argument is entirely empty, +% a space. If the \meta{token list} argument is entirely empty, % nothing is left in the input stream. % \end{function} % @@ -892,11 +917,11 @@ % \cs{tl_if_head_is_group:nTF} \Arg{token list} \Arg{true code} \Arg{false code} % \end{syntax} % Tests if the first \meta{token} in the \meta{token list} -% is an explicit begin-group character (with category code~1 +% is an explicit begin-group character (with category code~$1$ % and any character code), in other words, if the \meta{token list} % starts with a brace group. In particular, the test is \texttt{false} % if the \meta{token list} starts with an implicit token such as -% \cs{c_group_begin_token}, or if it empty. +% \cs{c_group_begin_token}, or if it is empty. % This function is useful to implement actions on token lists on % a token by token basis. % \end{function} @@ -908,8 +933,9 @@ % \end{syntax} % Tests if the first \meta{token} in the \meta{token list} % is a normal \texttt{N}-type argument. In other words, -% it is neither an explicit space character (with category code~10 -% and character code~32) nor an explicit begin-group character +% it is neither an explicit space character +% (explicit token with character code~$32$ and category code~$10$) +% nor an explicit begin-group character % (with category code~1 and any character code). An empty % argument yields \texttt{false}, as it does not have a \enquote{normal} % first token. @@ -922,23 +948,14 @@ % \cs{tl_if_head_is_space_p:n} \Arg{token list} % \cs{tl_if_head_is_space:nTF} \Arg{token list} \Arg{true code} \Arg{false code} % \end{syntax} -%^^A We need to add a discussion of -%^^A explicit vs implicit tokens somewhere in the doc. % Tests if the first \meta{token} in the \meta{token list} -% is an explicit space character (with category code~$10$ -% and character code~$32$). If \meta{token list} starts with -% an implicit token such as \cs{c_space_token}, the test -% will yield \texttt{false}, as well as if the argument is empty. +% is an explicit space character +% (explicit token with character code~$12$ and category code~$10$). +% In particular, the test is \texttt{false} if the \meta{token list} +% starts with an implicit token such as \cs{c_space_token}, or if it +% is empty. % This function is useful to implement actions on token lists on % a token by token basis. -% \begin{texnote} -% When \TeX{} reads a character of category code $10$ for the -% first time, it is converted to an explicit space token, with -% character code $32$, regardless of the initial character code. -% \enquote{Funny} spaces with a different category code, can be produced -% using \tn{lowercase}. Explicit spaces are also produced -% as a result of \cs{token_to_str:N}, \cs{tl_to_str:n}, etc. -% \end{texnote} % \end{function} % % \section{Viewing token lists} @@ -960,25 +977,26 @@ % Displays the \meta{token list} on the terminal. % \begin{texnote} % \cs{tl_show:n} is the \eTeX{} primitive \tn{showtokens}. +% Hence its argument \emph{must} be given within braces. % \end{texnote} % \end{function} % % \section{Constant token lists} % +% \begin{variable}{\c_empty_tl} +% Constant that is always empty. +% \end{variable} +% % \begin{variable}[updated = 2011-08-18]{\c_job_name_tl} % Constant that gets the \enquote{job name} assigned when \TeX{} starts. % \begin{texnote} -% This is the new name for the primitive \tn{jobname}. It is a constant +% This copies the contents of the primitive \tn{jobname}. It is a constant % that is set by \TeX{} and should not be overwritten by the package. % \end{texnote} % \end{variable} % -% \begin{variable}{\c_empty_tl} -% Constant that is always empty. -% \end{variable} -% % \begin{variable}{\c_space_tl} -% A space token contained in a token list (compare this with +% An explicit space character contained in a token list (compare this with % \cs{c_space_token}). For use where an explicit space is required. % \end{variable} % @@ -1011,7 +1029,7 @@ % instance, \cs{tl_trim_spaces:n} is implemented by taking the % \meta{continuation} to be \cs{exp_not:o}, and the \texttt{o}-type % expansion removes the \cs{q_mark}. This function is also used in -% \pkg{l3clist}. +% \pkg{l3clist} and \pkg{l3candidates}. % \end{function} % % \end{documentation} @@ -1044,7 +1062,7 @@ % % \begin{macro}{\tl_new:N, \tl_new:c} % Creating new token list variables is a case of checking for an -% existing definition and if free doing the definition. +% existing definition and doing the definition. % \begin{macrocode} \cs_new_protected:Npn \tl_new:N #1 { @@ -1073,14 +1091,6 @@ % \end{macrocode} % \end{macro} % -% \begin{variable}{\c_empty_tl} -% Never full. We need to define that constant early -% for \cs{tl_new:N} to work properly. -% \begin{macrocode} -\tl_const:Nn \c_empty_tl { } -% \end{macrocode} -% \end{variable} -% % \begin{macro}{\tl_clear:N, \tl_clear:c} % \begin{macro}{\tl_gclear:N, \tl_gclear:c} % Clearing a token list variable means setting it to an empty value. @@ -1157,6 +1167,13 @@ % % \subsection{Constant token lists} % +% \begin{variable}{\c_empty_tl} +% Never full. We need to define that constant before using \cs{tl_new:N}. +% \begin{macrocode} +\tl_const:Nn \c_empty_tl { } +% \end{macrocode} +% \end{variable} +% % \begin{variable}{\c_job_name_tl} % Inherited from the \LaTeX3 name for the primitive: this needs to % actually contain the text of the job name rather than the name of @@ -1165,17 +1182,24 @@ % make in the \LuaTeX{} case. % \begin{macrocode} %<*initex> -\tex_everyjob:D \exp_after:wN +\luatex_if_engine:T { - \tex_the:D \tex_everyjob:D - \luatex_if_engine:T + \tex_everyjob:D \exp_after:wN { - \lua_now:x + \tex_the:D \tex_everyjob:D + \lua_now_x:n { dofile ( assert ( kpse.find_file ("lualatexquotejobname.lua" ) ) ) } } } +\tex_everyjob:D \exp_after:wN + { + \tex_the:D \tex_everyjob:D + \tl_const:Nx \c_job_name_tl { \tex_jobname:D } + } %</initex> +%<*package> \tl_const:Nx \c_job_name_tl { \tex_jobname:D } +%</package> % \end{macrocode} % \end{variable} % @@ -1191,13 +1215,13 @@ % \begin{macro} % { % \tl_set:Nn, \tl_set:NV, \tl_set:Nv, \tl_set:No, \tl_set:Nf, \tl_set:Nx, -% \tl_set:cn, \tl_set:NV, \tl_set:Nv, \tl_set:co, \tl_set:cf, \tl_set:cx +% \tl_set:cn, \tl_set:cV, \tl_set:cv, \tl_set:co, \tl_set:cf, \tl_set:cx % } % \begin{macro} % { % \tl_gset:Nn, \tl_gset:NV, \tl_gset:Nv, % \tl_gset:No, \tl_gset:Nf, \tl_gset:Nx, -% \tl_gset:cn, \tl_gset:NV, \tl_gset:Nv, +% \tl_gset:cn, \tl_gset:cV, \tl_gset:cv, % \tl_gset:co, \tl_gset:cf, \tl_gset:cx % } % By using \cs{exp_not:n} token list variables can contain |#| tokens, @@ -1745,9 +1769,9 @@ % \end{macro} % % \begin{macro}[EXP,pTF]{\tl_if_single:n} -% A token list has exactly one item if it is either a single -% token surrounded by optional explicit spaces, or a single brace -% group surrounded by optional explicit spaces. The naive +% A token list has exactly one item if it is a single token or a +% single brace group, surrounded by optional explicit spaces. +% The naive % version of this test would do \cs{use_none:n} |#1|, and % test if the result is empty. However, this will fail when % the token list is empty. Furthermore, it does not allow optional @@ -2200,33 +2224,48 @@ % % \subsection{The first token from a token list} % -% \begin{macro}{\tl_head:N, \tl_head:n, \tl_head:V, \tl_head:v, \tl_head:f} % \begin{macro}{\tl_head:w} +% \begin{macro}{\tl_head:N, \tl_head:n, \tl_head:V, \tl_head:v, \tl_head:f} % \begin{macro}{\tl_tail:N, \tl_tail:n, \tl_tail:V, \tl_tail:v, \tl_tail:f} -% \begin{macro}{\tl_tail:w} -% \begin{macro}[aux]{\@@_tail:w} -% These functions pick up either the head or the tail of a list. The -% empty brace groups in \cs{tl_head:n} and \cs{tl_tail:n} ensure that -% a blank argument gives an empty result. The result is returned within -% the \tn{unexpanded} primitive. +% Finding the head of a token list expandably will always strip braces, which +% is fine as this is consistent with for example mapping to a list. The +% empty brace groups in \cs{tl_head:n} ensure that a blank argument gives an +% empty result. The result is returned within the \tn{unexpanded} primitive. % \begin{macrocode} \cs_new:Npn \tl_head:w #1#2 \q_stop {#1} -\cs_new:Npn \tl_tail:w #1#2 \q_stop {#2} \cs_new:Npn \tl_head:n #1 { \etex_unexpanded:D \exp_after:wN { \tl_head:w #1 { } \q_stop } } -\cs_new:Npn \tl_tail:n #1 - { \etex_unexpanded:D \@@_tail:w #1 \q_mark { } \q_mark \q_stop } -\cs_new:Npn \@@_tail:w #1 #2 \q_mark #3 \q_stop { {#2} } -\cs_new_nopar:Npn \tl_head:N { \exp_args:No \tl_head:n } \cs_generate_variant:Nn \tl_head:n { V , v , f } -\cs_new_nopar:Npn \tl_tail:N { \exp_args:No \tl_tail:n } +\cs_new_nopar:Npn \tl_head:N { \exp_args:No \tl_head:n } +% \end{macrocode} +% To corrected leave the tail of a token list, it's important \emph{not} to +% absorb any of the tail part as an argument. For example, the simple +% definition +% \begin{verbatim} +% \cs_new:Npn \tl_tail:n #1 { \tl_tail:w #1 \q_stop } +% \cs_new:Npn \tl_tail:w #1#2 \q_stop +% \end{verbatim} +% will give the wrong result for |\tl_tail:n { a { bc } }| (the braces will +% be stripped). Thus the only safe way to proceed is to first check that +% there is an item to grab (\emph{i.e.}~that the argument is not blank) and +% assuming there is to dispose of the first item. As with \cs{tl_head:n}, +% the result is protected from further expansion by \tn{etex_unexpanded:D}. +% While we could optimise the test here, this would leave some tokens +% \enquote{banned} in the input, which we do not have with this definition. +% \begin{macrocode} +\cs_new:Npn \tl_tail:n #1 + { + \etex_unexpanded:D + \tl_if_blank:nTF {#1} + { { } } + { \exp_after:wN { \use_none:n #1 } } + } \cs_generate_variant:Nn \tl_tail:n { V , v , f } +\cs_new_nopar:Npn \tl_tail:N { \exp_args:No \tl_tail:n } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} -% \end{macro} -% \end{macro} % % \begin{macro}{\str_head:n, \str_tail:n} % \begin{macro}[aux]{\__str_head:w} @@ -2404,7 +2443,7 @@ % \begin{macro}[pTF]{\tl_if_head_is_N_type:n} % The first token of a token list can be either an N-type argument, % a begin-group token (catcode 1), or an explicit space token -% (catcode 10 and charcode 32). These two cases are characterized +% (catcode 10 and charcode 32). The latter two cases are characterized % by the fact that \cs{use:n} removes some tokens from |#1|, hence % changing its string representation (no token can have an empty % string representation). The extra brace group covers the case of @@ -2658,7 +2697,7 @@ { \__str_if_eq_x_return:nn { } {#1} } % \end{macrocode} % \end{macro} -% +% % Deprecated 2012-07-08 for removal after 2012-10-31. % % \begin{macro}[EXP, pTF]{\tl_if_head_group:n} @@ -2676,6 +2715,15 @@ % \end{macro} % \end{macro} % +% \begin{macro}{\tl_tail:w} +% Deprecated 2012-09-01 for removal after 2012-12-31. This is broken as +% it will strip braces from a case such as |a{bc}|. +% \begin{macrocode} +\cs_new:Npn \tl_tail:w #1#2 \q_stop {#2} +% \end{macrocode} +% \end{macro} +% +% % \begin{macrocode} %</initex|package> % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx index cea474599f5..d7a7864af21 100644 --- a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx +++ b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx @@ -37,8 +37,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2012/08/29] -%<package>\@ifpackagelater{expl3}{2012/08/29} +\RequirePackage{expl3}[2012/09/05] +%<package>\@ifpackagelater{expl3}{2012/09/05} %<package> {} %<package> {% %<package> \PackageError{l3keys2e}{Support package l3kernel too old.} @@ -50,7 +50,7 @@ %<package> \endinput %<package> } \RequirePackage{xparse} -\GetIdInfo$Id: l3keys2e.dtx 4160 2012-08-29 18:57:05Z joseph $ +\GetIdInfo$Id: l3keys2e.dtx 4205 2012-09-05 10:30:28Z joseph $ {LaTeX2e option processing using LaTeX3 keys} %</driver|package> %<*driver> diff --git a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx index 23ead12a04b..e0733c02e94 100644 --- a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx @@ -41,8 +41,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2012/08/29] -%<package>\@ifpackagelater{expl3}{2012/08/29} +\RequirePackage{expl3}[2012/09/05] +%<package>\@ifpackagelater{expl3}{2012/09/05} %<package> {} %<package> {% %<package> \PackageError{xparse}{Support package l3kernel too old.} @@ -53,7 +53,7 @@ %<package> }% %<package> \endinput %<package> } -\GetIdInfo$Id: xparse.dtx 4160 2012-08-29 18:57:05Z joseph $ +\GetIdInfo$Id: xparse.dtx 4205 2012-09-05 10:30:28Z joseph $ {L3 Experimental document command parser} %</driver|package> %<*driver> diff --git a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx index be2389c6dde..ca77b8910e8 100644 --- a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx @@ -41,8 +41,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2012/08/29] -%<package>\@ifpackagelater{expl3}{2012/08/29} +\RequirePackage{expl3}[2012/09/05] +%<package>\@ifpackagelater{expl3}{2012/09/05} %<package> {} %<package> {% %<package> \PackageError{xtemplate}{Support package l3kernel too old.} @@ -53,7 +53,7 @@ %<package> }% %<package> \endinput %<package> } -\GetIdInfo$Id: xtemplate.dtx 4160 2012-08-29 18:57:05Z joseph $ +\GetIdInfo$Id: xtemplate.dtx 4205 2012-09-05 10:30:28Z joseph $ {L3 Experimental prototype document functions} %</driver|package> %<*driver> diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3dt/l3dt.sty b/Master/texmf-dist/tex/latex/l3experimental/l3dt/l3dt.sty index 408f52b8bdd..4cb2ad8617b 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3dt/l3dt.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3dt/l3dt.sty @@ -47,7 +47,7 @@ %% ----------------------------------------------------------------------- %% \RequirePackage{expl3} -\GetIdInfo$Id: l3dt.dtx 4153 2012-08-29 07:18:26Z joseph $ +\GetIdInfo$Id: l3dt.dtx 4190 2012-09-03 00:23:31Z bruno $ {L3 Experimental data tables} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index edf7566552f..d18bfd8148c 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty @@ -60,8 +60,8 @@ } \def\ExplFileName{expl3} \def\ExplFileDescription{L3 Experimental code bundle wrapper} -\def\ExplFileDate{2012/08/29} -\def\ExplFileVersion{4160} +\def\ExplFileDate{2012/09/05} +\def\ExplFileVersion{4205} \RequirePackage{etex} \reserveinserts{32} \ProvidesExplPackage diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls index 641a13ec78c..81daef1452a 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls +++ b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls @@ -4,8 +4,7 @@ %% %% The original source files were: %% -%% l3doc.dtx (with options: `class,cfg') -%% +%% l3doc.dtx (with options: `class') %% %% EXPERIMENTAL CODE %% @@ -14,7 +13,6 @@ %% %% Do not distribute a modified version of this file. %% -%% %% File: l3doc.dtx Copyright (C) 1990-2012 The LaTeX3 project %% %% It may be distributed and/or modified under the conditions of the @@ -1448,51 +1446,6 @@ \DisableCrossrefs \OnlyDescription } -\tl_new:N \Team -\tl_set:Nn \Team - { - The~\LaTeX3~Project\thanks - { - Frank~Mittelbach,~Denys~Duchier,~Chris~Rowley,~ - Rainer~Sch\"opf,~Johannes~Braams,~Michael~Downes,~ - David~Carlisle,~Alan~Jeffrey,~Morten~H\o{}gholm,~Thomas~Lotze,~ - Javier~Bezos,~Will~Robertson,~Joseph~Wright,~Bruno~Le~Floch - } - } -\NewDocumentCommand{\ExplMakeTitle}{mm} - { - \title - { - The~\pkg{#1}~package \\ #2 - \thanks - { - This~file~describes~v\ExplFileVersion,~ - last~revised~\ExplFileDate. - } - } - \author - { - The~\LaTeX3~Project\thanks{E-mail:~ - \href{mailto:latex-l@listserv.uni-heidelberg.de} - {latex-l@listserv.uni-heidelberg.de}} - } - \date{Released~\ExplFileDate} - \maketitle - } -\DeclareDocumentCommand\ie{}{\emph{i.e.}} -\DeclareDocumentCommand\eg{}{\emph{e.g.}} -\DeclareDocumentCommand\Ie{}{\emph{I.e.}} -\DeclareDocumentCommand\Eg{}{\emph{E.g.}} -\AtBeginDocument - { - \clist_map_inline:nn - { - asin, acos, atan, acot, - asinh, acosh, atanh, acoth, round, floor, ceil - } - { \exp_args:Nc \DeclareMathOperator{#1}{#1} } - } -\NewDocumentCommand { \nan } { } { \text { \texttt { nan } } } %% %% %% End of file `l3doc.cls'. diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3fp.sty b/Master/texmf-dist/tex/latex/l3kernel/l3fp.sty index cd23b05bfc1..eac513e519c 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3fp.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3fp.sty @@ -108,7 +108,7 @@ \cs_new_protected:Npn \__fp_chk:w #1 ; { \__msg_kernel_error:nnx { kernel } { misused-fp } - { \__fp_to_tl:w \s__fp \__fp_chk:w #1 ; } + { \fp_to_tl:n { \s__fp \__fp_chk:w #1 ; } } } \__scan_new:N \s__fp_mark \__scan_new:N \s__fp_stop @@ -214,6 +214,13 @@ \cs_new:Npn \__fp_exp_after_normal:Nwwwww #1 #2; 1 #3 ; 1 #4 ; 1 #5 ; 1 #6 ; { \s__fp \__fp_chk:w 1 #1 {#2} {#3} {#4} {#5} {#6} ; } +\cs_new:Npn \__fp_exp_after_array_f:w #1 + { + \cs:w __fp_exp_after \__fp_type_from_scan:N #1 _f:nw \cs_end: + { \__fp_exp_after_array_f:w } + #1 + } +\cs_new_eq:NN \__fp_exp_after_stop_f:nw \use_none:nn \int_const:Nn \c__fp_leading_shift_int { - 5 0000 } \int_const:Nn \c__fp_middle_shift_int { 5 0000 * 9999 } \int_const:Nn \c__fp_trailing_shift_int { 5 0000 * 10000 } @@ -328,7 +335,7 @@ \exp_after:wN \use_i:nn \fi: } -\cs_new:Npn \__fp_array_count:w #1 @ +\cs_new:Npn \__fp_array_count:n #1 { \int_use:N \__int_eval:w \c_zero \__fp_array_count_loop:Nw #1 { ? \__prg_break: } ; @@ -337,6 +344,19 @@ } \cs_new:Npn \__fp_array_count_loop:Nw #1#2; { \use_none:n #1 + \c_one \__fp_array_count_loop:Nw } +\cs_new:Npn \__fp_expand:n #1 + { + \__fp_expand_loop:nwnN { } + #1 \prg_do_nothing: + \s__fp_mark { } \__fp_expand_loop:nwnN + \s__fp_mark { } \__fp_use_i_until_s:nw ; + } +\cs_new:Npn \__fp_expand_loop:nwnN #1#2 \s__fp_mark #3 #4 + { + \exp_after:wN #4 \tex_romannumeral:D -`0 + #2 + \s__fp_mark { #3 #1 } #4 + } \__msg_kernel_new:nnnn { kernel } { misused-fp } { A~floating~point~with~value~'#1'~was~misused. } { @@ -421,7 +441,7 @@ { \cs_set:Npn \__fp_invalid_operation:nnw ##1##2##3; } { #1 - \__fp_error:nnfn { invalid } {##2} { \__fp_to_tl:w ##3; } { } + \__fp_error:nnfn { invalid } {##2} { \fp_to_tl:n { ##3; } } { } \fp_flag_on:n { invalid_operation } ##1 } @@ -430,7 +450,7 @@ { #1 \__fp_error:nffn { invalid-ii } - { \__fp_to_tl:w ##2; } { \__fp_to_tl:w ##3; } {##1} + { \fp_to_tl:n { ##2; } } { \fp_to_tl:n { ##3; } } {##1} \fp_flag_on:n { invalid_operation } \exp_after:wN \c_nan_fp } @@ -455,7 +475,7 @@ { \cs_set:Npn \__fp_division_by_zero_o:Nnw ##1##2##3; } { #1 - \__fp_error:nnfn { zero-div } {##2} { \__fp_to_tl:w ##3; } { } + \__fp_error:nnfn { zero-div } {##2} { \fp_to_tl:n { ##3; } } { } \fp_flag_on:n { division_by_zero } \exp_after:wN ##1 } @@ -464,7 +484,7 @@ { #1 \__fp_error:nffn { zero-div-ii } - { \__fp_to_tl:w ##3; } { \__fp_to_tl:w ##4; } {##2} + { \fp_to_tl:n { ##3; } } { \fp_to_tl:n { ##4; } } {##2} \fp_flag_on:n { division_by_zero } \exp_after:wN ##1 } @@ -493,7 +513,7 @@ #1 \__fp_error:nffn { flow \if_meaning:w 1 ##1 -to \fi: } - { \__fp_to_tl:w \s__fp \__fp_chk:w ##1##2##3; } + { \fp_to_tl:n { \s__fp \__fp_chk:w ##1##2##3; } } { \token_if_eq_meaning:NNF 0 ##2 { - } #4 } {#2} \fp_flag_on:n {#2} @@ -869,20 +889,21 @@ } \cs_new:Npn \__fp_parse_operand_relax:NN #1#2 { - \cs:w __fp_exp_after \__fp_type_from_scan:N #2 _f:nw \cs_end: + \cs:w __fp_parse_exp_after \__fp_type_from_scan:N #2 _f:nw \cs_end: { \exp_after:wN \__fp_parse_infix:NN \exp_after:wN #1 \tex_romannumeral:D \__fp_parse_expand:w } #2 } -\cs_new:Npn \__fp_exp_after_mark_f:nw #1 +\cs_new_eq:NN \__fp_parse_exp_after_f:nw \__fp_exp_after_f:nw +\cs_new:Npn \__fp_parse_exp_after_mark_f:nw #1 { \__msg_kernel_expandable_error:nn { kernel } { fp-early-end } \exp_after:wN \c_nan_fp \tex_romannumeral:D -`0 #1 } -\cs_new:cpn { __fp_exp_after_?_f:nw } #1#2 +\cs_new:cpn { __fp_parse_exp_after_?_f:nw } #1#2 { \__msg_kernel_expandable_error:nnn { kernel } { bad-variable } {#2} @@ -1367,7 +1388,7 @@ \tex_romannumeral:D } \cs_new:Npn \__fp_parse_until_test:NwN #1 #2 @ #3 { #3 #1 #2 @ } -\cs_new:Npn \__fp_parse_stop_until:N #1 { } +\cs_new_eq:NN \__fp_parse_stop_until:N \use_none:n \cs_new:Npn \__fp_parse_infix_after_operand:NwN #1 #2; { \__fp_exp_after_f:nw { \__fp_parse_infix:NN #1 } @@ -1534,7 +1555,7 @@ { #2 #1 #3 \__fp_parse_expand:w } \cs_new:Npn \__fp_parse_apply_round:NNwN #1#2#3@#4 { - \if_case:w \__int_eval:w \__fp_array_count:w #3@ - \c_one \__int_eval_end: + \if_case:w \__int_eval:w \__fp_array_count:n {#3} - \c_one \__int_eval_end: \__fp_round:Nwn #2 #3 {0} \tex_romannumeral:D \or: \__fp_round:Nww #2 #3 \tex_romannumeral:D \else: @@ -1561,8 +1582,8 @@ \__fp_parse_expand:w } } -\__fp_tmp:w - { neg } -\__fp_tmp:w ! { not } +\__fp_tmp:w - { - } +\__fp_tmp:w ! { ! } \group_begin: \char_set_catcode_letter:N \) \cs_new:cpn { __fp_parse_prefix_(:Nw } #1 @@ -1592,13 +1613,6 @@ } } \group_end: -\cs_new:Npn \__fp_exp_after_array_f:w #1 - { - \cs:w __fp_exp_after \__fp_type_from_scan:N #1 _f:nw \cs_end: - { \__fp_exp_after_array_f:w } - #1 - } -\cs_new:Npn \__fp_exp_after_stop_f:nw #1#2 { } \cs_new:cpn {__fp_parse_prefix_.:Nw} #1 { \exp_after:wN \__fp_parse_infix_after_operand:NwN @@ -2090,7 +2104,7 @@ { \fi: \fi: #2 } \cs_new:Npn \__fp_minmax_break_o:w #1 \fi: \fi: #2 \s__fp #3; #4; { \fi: \__fp_exp_after_o:w \s__fp #3; } -\cs_new:Npn \__fp_not_o:w \s__fp \__fp_chk:w #1#2; +\cs_new:cpn { __fp_!_o:w } \s__fp \__fp_chk:w #1#2; { \if_meaning:w 0 #1 \exp_after:wN \exp_after:wN \exp_after:wN \c_one_fp @@ -2773,7 +2787,7 @@ \__int_value:w \__fp_round_digit:Nw #7 #8 ; \exp_after:wN ; } -\cs_new:Npn \__fp_neg_o:w #1 \s__fp \__fp_chk:w #2 #3 +\cs_new:cpn { __fp_-_o:w } #1 \s__fp \__fp_chk:w #2 #3 { \exp_after:wN \__fp_exp_after_o:w \exp_after:wN \s__fp @@ -3775,7 +3789,7 @@ \cs_new:Npn \__fp_pow_neg:www \s__fp \__fp_chk:w #1#2; #3; #4; { \if_case:w \__fp_pow_neg_case:w #4 ; - \exp_after:wN \__fp_neg_o:w + \cs:w __fp_-_o:w \exp_after:wN \cs_end: \or: \if_int_compare:w \__int_eval:w #1 / \c_two = \c_one \__fp_invalid_operation_o:Nww ^ #3; #4; @@ -4193,11 +4207,12 @@ \cs_new:Npn \__fp_trim_zeros_loop:w #1 0; #2 { #2 #1 ; #2 } \cs_new:Npn \__fp_trim_zeros_dot:w #1 .; { \__fp_trim_zeros_end:w #1 ; } \cs_new:Npn \__fp_trim_zeros_end:w #1 ; #2 \s__stop { #1 } -\cs_new:Npn \fp_to_scientific:N #1 { \exp_after:wN \__fp_to_scientific:w #1 } +\cs_new:Npn \fp_to_scientific:N #1 + { \exp_after:wN \__fp_to_scientific_dispatch:w #1 } \cs_generate_variant:Nn \fp_to_scientific:N { c } \cs_new_nopar:Npn \fp_to_scientific:n { - \exp_after:wN \__fp_to_scientific:w + \exp_after:wN \__fp_to_scientific_dispatch:w \tex_romannumeral:D -`0 \__fp_parse:n } \group_begin: @@ -4205,7 +4220,7 @@ \tl_to_lowercase:n { \group_end: - \cs_new:Npn \__fp_to_scientific:w \s__fp \__fp_chk:w #1#2 + \cs_new:Npn \__fp_to_scientific_dispatch:w \s__fp \__fp_chk:w #1#2 { \if_meaning:w 2 #2 \exp_after:wN - \tex_romannumeral:D -`0 \fi: \if_case:w #1 \exp_stop_f: @@ -4247,14 +4262,15 @@ } \cs_new:Npn \__fp_to_scientific_normal:wNw #1 ; #2#3; { \__fp_trim_zeros:w #2.#3 ; #1 } -\cs_new:Npn \fp_to_decimal:N #1 { \exp_after:wN \__fp_to_decimal:w #1 } +\cs_new:Npn \fp_to_decimal:N #1 + { \exp_after:wN \__fp_to_decimal_dispatch:w #1 } \cs_generate_variant:Nn \fp_to_decimal:N { c } \cs_new_nopar:Npn \fp_to_decimal:n { - \exp_after:wN \__fp_to_decimal:w + \exp_after:wN \__fp_to_decimal_dispatch:w \tex_romannumeral:D -`0 \__fp_parse:n } -\cs_new:Npn \__fp_to_decimal:w \s__fp \__fp_chk:w #1#2 +\cs_new:Npn \__fp_to_decimal_dispatch:w \s__fp \__fp_chk:w #1#2 { \if_meaning:w 2 #2 \exp_after:wN - \tex_romannumeral:D -`0 \fi: \if_case:w #1 \exp_stop_f: @@ -4315,14 +4331,14 @@ #3.#4 ; } \cs_new:Npn \__fp_to_decimal_huge:wnnnn #1; #2#3#4#5 { #2#3#4#5 #1 } -\cs_new:Npn \fp_to_tl:N #1 { \exp_after:wN \__fp_to_tl:w #1 } +\cs_new:Npn \fp_to_tl:N #1 { \exp_after:wN \__fp_to_tl_dispatch:w #1 } \cs_generate_variant:Nn \fp_to_tl:N { c } \cs_new_nopar:Npn \fp_to_tl:n { - \exp_after:wN \__fp_to_tl:w + \exp_after:wN \__fp_to_tl_dispatch:w \tex_romannumeral:D -`0 \__fp_parse:n } -\cs_new:Npn \__fp_to_tl:w \s__fp \__fp_chk:w #1#2 +\cs_new:Npn \__fp_to_tl_dispatch:w \s__fp \__fp_chk:w #1#2 { \if_meaning:w 2 #2 \exp_after:wN - \tex_romannumeral:D -`0 \fi: \if_case:w #1 \exp_stop_f: @@ -4352,16 +4368,16 @@ \cs_generate_variant:Nn \fp_to_dim:N { c } \cs_new:Npx \fp_to_dim:n #1 { \exp_not:N \fp_to_decimal:n {#1} \tl_to_str:n {pt} } -\cs_new:Npn \fp_to_int:N #1 { \exp_after:wN \__fp_to_int:w #1 } +\cs_new:Npn \fp_to_int:N #1 { \exp_after:wN \__fp_to_int_dispatch:w #1 } \cs_generate_variant:Nn \fp_to_int:N { c } \cs_new_nopar:Npn \fp_to_int:n { - \exp_after:wN \__fp_to_int:w + \exp_after:wN \__fp_to_int_dispatch:w \tex_romannumeral:D -`0 \__fp_parse:n } -\cs_new:Npn \__fp_to_int:w #1; +\cs_new:Npn \__fp_to_int_dispatch:w #1; { - \exp_after:wN \__fp_to_decimal:w \tex_romannumeral:D -`0 + \exp_after:wN \__fp_to_decimal_dispatch:w \tex_romannumeral:D -`0 \__fp_round:Nwn \__fp_round_to_nearest:NNN #1; { 0 } } \cs_new:Npn \dim_to_fp:n #1 @@ -4405,19 +4421,28 @@ { \fp_to_decimal:n { abs \__fp_parse:n {#1} } } \cs_new:Npn \__fp_array_to_clist:n #1 { - \__fp_array_to_clist_i:wwww ; - #1 - \__fp_array_to_clist_ii:ww \s__fp ; @ - ; , ~ , ~ @ \s_stop + \tl_if_empty:nF {#1} + { + \__fp_expand:n + { + { \use_ii:nn } + \__fp_array_to_clist_loop:Nw #1 { ? \__prg_break: } ; + \__prg_break_point: + } + } } -\cs_new:Npn \__fp_array_to_clist_i:wwww #1; #2 \s__fp #3; #4 @ +\cs_new:Npx \__fp_array_to_clist_loop:Nw #1#2; { - #2 - \exp_after:wN \__fp_array_to_clist_i:wwww - \tex_romannumeral:D -`0 \__fp_to_tl:w \s__fp #3 ; ; - #4 , ~ #1 @ + \exp_not:N \use_none:n #1 + \exp_not:N \exp_after:wN + { + \exp_not:N \exp_after:wN , + \exp_not:N \exp_after:wN \c_space_tl + \exp_not:N \tex_romannumeral:D -`0 + \exp_not:N \__fp_to_tl_dispatch:w #1 #2 ; + } + \exp_not:N \__fp_array_to_clist_loop:Nw } -\cs_new:Npn \__fp_array_to_clist_ii:ww #1 ; , ~ , ~ #2 @ #3 \s_stop {#2} %% %% File: l3fp-assign.dtx Copyright (C) 2011-2012 The LaTeX3 project %% @@ -4555,8 +4580,18 @@ { \if_meaning:w #1 0 \prg_return_true: \else: \prg_return_false: \fi: } \cs_new_protected_nopar:Npn \fp_abs:N { \__fp_abs:NNN \tl_set:Nx \__fp_abs_o:w } \cs_new_protected_nopar:Npn \fp_gabs:N { \__fp_abs:NNN \tl_gset:Nx \__fp_abs_o:w } -\cs_new_protected_nopar:Npn \fp_neg:N { \__fp_abs:NNN \tl_set:Nx \__fp_neg_o:w } -\cs_new_protected_nopar:Npn \fp_gneg:N { \__fp_abs:NNN \tl_gset:Nx \__fp_neg_o:w } +\cs_new_protected_nopar:Npx \fp_neg:N + { + \exp_not:N \__fp_abs:NNN + \exp_not:N \tl_set:Nx + \exp_not:c { __fp_-_o:w } + } +\cs_new_protected_nopar:Npx \fp_gneg:N + { + \exp_not:N \__fp_abs:NNN + \exp_not:N \tl_gset:Nx + \exp_not:c { __fp_-_o:w } + } \cs_new_protected:Npn \__fp_abs:NNN #1#2#3 { #1 #3 { \exp_after:wN #2 #3 \prg_do_nothing: } } \cs_generate_variant:Nn \fp_abs:N { c } diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty b/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty index 1e692963872..e9ecb340822 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3prop.dtx 4092 2012-08-14 14:04:41Z bruno $ +\GetIdInfo$Id: l3prop.dtx 4190 2012-09-03 00:23:31Z bruno $ {L3 Property lists} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3tl.sty b/Master/texmf-dist/tex/latex/l3kernel/l3tl.sty index ddcd94376cf..8a8d89bb904 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3tl.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3tl.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3tl.dtx 3991 2012-07-16 19:00:35Z joseph $ +\GetIdInfo$Id: l3tl.dtx 4201 2012-09-05 08:00:54Z joseph $ {L3 Token lists} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -69,7 +69,6 @@ } \cs_generate_variant:Nn \tl_const:Nn { c } \cs_generate_variant:Nn \tl_const:Nx { c } -\tl_const:Nn \c_empty_tl { } \cs_new_protected:Npn \tl_clear:N #1 { \tl_set_eq:NN #1 \c_empty_tl } \cs_new_protected:Npn \tl_gclear:N #1 @@ -104,6 +103,7 @@ \cs_new_eq:NN \tl_if_exist:cT \cs_if_exist:cT \cs_new_eq:NN \tl_if_exist:cF \cs_if_exist:cF \cs_new_eq:NN \tl_if_exist_p:c \cs_if_exist_p:c +\tl_const:Nn \c_empty_tl { } \tl_const:Nx \c_job_name_tl { \tex_jobname:D } \tl_const:Nn \c_space_tl { ~ } \cs_new_protected:Npn \tl_set:Nn #1#2 @@ -589,16 +589,19 @@ \cs_generate_variant:Nn \tl_reverse:N { c } \cs_generate_variant:Nn \tl_greverse:N { c } \cs_new:Npn \tl_head:w #1#2 \q_stop {#1} -\cs_new:Npn \tl_tail:w #1#2 \q_stop {#2} \cs_new:Npn \tl_head:n #1 { \etex_unexpanded:D \exp_after:wN { \tl_head:w #1 { } \q_stop } } -\cs_new:Npn \tl_tail:n #1 - { \etex_unexpanded:D \__tl_tail:w #1 \q_mark { } \q_mark \q_stop } -\cs_new:Npn \__tl_tail:w #1 #2 \q_mark #3 \q_stop { {#2} } -\cs_new_nopar:Npn \tl_head:N { \exp_args:No \tl_head:n } \cs_generate_variant:Nn \tl_head:n { V , v , f } -\cs_new_nopar:Npn \tl_tail:N { \exp_args:No \tl_tail:n } +\cs_new_nopar:Npn \tl_head:N { \exp_args:No \tl_head:n } +\cs_new:Npn \tl_tail:n #1 + { + \etex_unexpanded:D + \tl_if_blank:nTF {#1} + { { } } + { \exp_after:wN { \use_none:n #1 } } + } \cs_generate_variant:Nn \tl_tail:n { V , v , f } +\cs_new_nopar:Npn \tl_tail:N { \exp_args:No \tl_tail:n } \cs_new:Npn \str_head:n #1 { \exp_after:wN \__str_head:w @@ -741,6 +744,7 @@ { p , T , F , TF } \prg_new_eq_conditional:NNn \tl_if_head_space:n \tl_if_head_is_space:n { p , T , F , TF } +\cs_new:Npn \tl_tail:w #1#2 \q_stop {#2} %% %% %% End of file `l3tl.sty'. diff --git a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty index 6f0ba740b12..32ca88703df 100644 --- a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +++ b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty @@ -46,8 +46,8 @@ %% %% ----------------------------------------------------------------------- %% -\RequirePackage{expl3}[2012/08/29] -\@ifpackagelater{expl3}{2012/08/29} +\RequirePackage{expl3}[2012/09/05] +\@ifpackagelater{expl3}{2012/09/05} {} {% \PackageError{l3keys2e}{Support package l3kernel too old.} @@ -59,7 +59,7 @@ \endinput } \RequirePackage{xparse} -\GetIdInfo$Id: l3keys2e.dtx 4160 2012-08-29 18:57:05Z joseph $ +\GetIdInfo$Id: l3keys2e.dtx 4205 2012-09-05 10:30:28Z joseph $ {LaTeX2e option processing using LaTeX3 keys} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty index e94dd2437cc..5ea62b01a99 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty @@ -50,8 +50,8 @@ %% %% ----------------------------------------------------------------------- %% -\RequirePackage{expl3}[2012/08/29] -\@ifpackagelater{expl3}{2012/08/29} +\RequirePackage{expl3}[2012/09/05] +\@ifpackagelater{expl3}{2012/09/05} {} {% \PackageError{xparse}{Support package l3kernel too old.} @@ -62,7 +62,7 @@ }% \endinput } -\GetIdInfo$Id: xparse.dtx 4160 2012-08-29 18:57:05Z joseph $ +\GetIdInfo$Id: xparse.dtx 4205 2012-09-05 10:30:28Z joseph $ {L3 Experimental document command parser} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty index eae460818a5..b210a1d7d49 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty @@ -50,8 +50,8 @@ %% %% ----------------------------------------------------------------------- %% -\RequirePackage{expl3}[2012/08/29] -\@ifpackagelater{expl3}{2012/08/29} +\RequirePackage{expl3}[2012/09/05] +\@ifpackagelater{expl3}{2012/09/05} {} {% \PackageError{xtemplate}{Support package l3kernel too old.} @@ -62,7 +62,7 @@ }% \endinput } -\GetIdInfo$Id: xtemplate.dtx 4160 2012-08-29 18:57:05Z joseph $ +\GetIdInfo$Id: xtemplate.dtx 4205 2012-09-05 10:30:28Z joseph $ {L3 Experimental prototype document functions} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} |