diff options
Diffstat (limited to 'Master')
51 files changed, 1733 insertions, 580 deletions
diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf Binary files differindex 54e01e470b8..b09b5a82170 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 50eb5626747..648b2223d55 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 new file mode 100644 index 00000000000..4c0a2761e92 --- /dev/null +++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex @@ -0,0 +1,89 @@ +% \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 differnew file mode 100644 index 00000000000..679405b4f62 --- /dev/null +++ b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf Binary files differindex 797805c3110..1871f0ecadb 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 new file mode 100644 index 00000000000..6a3a9d122e6 --- /dev/null +++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex @@ -0,0 +1,242 @@ +\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} + +\section{Auxiliary functions} + +In general, the team encourage the use of descriptive names in \LaTeX3 code. +Thus many helper functions will have names which describe briefly what they do, +rather than simply indicating that they are auxiliary to some higher-level +function. However, there are places where one or more \texttt{aux} functions +are required. Where possible, these should be differentiated by signature +\begin{verbatim} + \cs_new_protected:Npn \@@_function:nn #1#2 + { + ... + } + \cs_new_protected:Npn \@@_function_aux:nn #1#2 + { + ... + } + \cs_new_protected:Npn \@@_function_aux:w #1#2 \q_stop + { + ... + } +\end{verbatim} +Where more than one auxiliary shares the same signature, the recommended naming +scheme is \texttt{auxi}, \texttt{auxii} and so on. +\begin{verbatim} + \cs_new_protected:Npn \@@_function_auxi:nn #1#2 + { + ... + } + \cs_new_protected:Npn \@@_function_auxii:nn #1#2 + { + ... + } +\end{verbatim} +The use of \texttt{aux_i}, \texttt{aux_ii}, \emph{etc.}\ is discouraged as this +conflicts with the convention used by \cs{use_i:nn} and related functions. + +\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 c3fd0751fe7..57a5aa10866 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 new file mode 100644 index 00000000000..4dfc70e0e97 --- /dev/null +++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex @@ -0,0 +1,110 @@ +\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 e90014d7b03..7feca1b1f0f 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 new file mode 100644 index 00000000000..22c3c44048d --- /dev/null +++ b/Master/texmf-dist/doc/latex/l3kernel/source3.tex @@ -0,0 +1,106 @@ +% \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 780 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 new file mode 100644 index 00000000000..c5dbc33a7b3 --- /dev/null +++ b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex @@ -0,0 +1,448 @@ +% \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/makeindex/l3kernel/l3doc.ist b/Master/texmf-dist/makeindex/l3kernel/l3doc.ist new file mode 100644 index 00000000000..781c87e50f2 --- /dev/null +++ b/Master/texmf-dist/makeindex/l3kernel/l3doc.ist @@ -0,0 +1,72 @@ +%% +%% 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/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx index 527411ab125..ccb816a9bf5 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/09/05} -\def\ExplFileVersion{4205} +\def\ExplFileDate{2012/09/29} +\def\ExplFileVersion{4249} %</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 deleted file mode 100644 index 0df5abf9424..00000000000 --- a/Master/texmf-dist/source/latex/l3kernel/l3.ins +++ /dev/null @@ -1,92 +0,0 @@ -\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/l3basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx index ac429fd8883..d38807ba1f6 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3basics.dtx 4144 2012-08-27 19:37:16Z bruno $ +\GetIdInfo$Id: l3basics.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 Basic definitions} %</driver|package> %<*driver> @@ -677,14 +677,15 @@ % \end{texnote} % \end{function} % -% \begin{function}[updated = 2011-12-22]{\cs_show:N, \cs_show:c} +% \begin{function}[updated = 2012-09-09]{\cs_show:N, \cs_show:c} % \begin{syntax} % \cs{cs_show:N} \meta{control sequence} % \end{syntax} % Displays the definition of the \meta{control sequence} on the % terminal. % \begin{texnote} -% This is the \TeX{} primitive \tn{show}. +% This is similar to the \TeX{} primitive \tn{show}, wrapped to a +% fixed number of characters per line. % \end{texnote} % \end{function} % @@ -1299,7 +1300,7 @@ % % \begin{function}{\__kernel_register_show:N, \__kernel_register_show:c} % \begin{syntax} -% \cs{\__kernel_register_show:N} \meta{register} +% \cs{__kernel_register_show:N} \meta{register} % \end{syntax} % Used to show the contents of a \TeX{} register at the terminal, formatted % such that internal parts of the mechanism are not visible. @@ -1410,16 +1411,13 @@ % \end{macro} % % \begin{macro}[EXP]{\token_to_meaning:N, \token_to_str:N, \cs_meaning:N} -% \begin{macro}{\cs_show:N} % Examining a control sequence or token. % \begin{macrocode} \tex_let:D \token_to_meaning:N \tex_meaning:D \tex_let:D \token_to_str:N \tex_string:D \tex_let:D \cs_meaning:N \tex_meaning:D -\tex_let:D \cs_show:N \tex_show:D % \end{macrocode} % \end{macro} -% \end{macro} % % \begin{macro}{\scan_stop:, \group_begin:, \group_end:} % The next three are basic functions for which there also exist @@ -1458,17 +1456,12 @@ % \end{macro} % % \begin{macro}[EXP]{\token_to_meaning:c, \token_to_str:c, \cs_meaning:c} -% \begin{macro}{\cs_show:c} % A small number of variants defined by hand. % Some of the necessary functions % (\cs{use_i:nn}, \cs{use_ii:nn}, and \cs{exp_args:NNc}) are not % defined at that point yet, but will be defined before those variants % are used. The \cs{cs_meaning:c} command must check for an undefined -% control sequence to avoid defining it mistakenly. The -% \cs{cs_show:c} command is \enquote{protected} because its action is -% not expandable. Also, the conversion of its argument to a control -% sequence is done within a group to avoid showing \tn{relax} for -% undefined control sequences. +% control sequence to avoid defining it mistakenly. % \begin{macrocode} \tex_def:D \token_to_str:c { \exp_args:Nc \token_to_str:N } \tex_long:D \tex_def:D \cs_meaning:c #1 @@ -1482,11 +1475,8 @@ { \tl_to_str:n {undefined} } } \tex_let:D \token_to_meaning:c = \cs_meaning:c -\etex_protected:D \tex_def:D \cs_show:c - { \group_begin: \exp_args:NNc \group_end: \cs_show:N } % \end{macrocode} % \end{macro} -% \end{macro} % % \subsection{Defining some constants} % @@ -2891,7 +2881,7 @@ % \end{macrocode} % \end{macro} % -% \subsection{Diagnostic wrapper functions} +% \subsection{Diagnostic functions} % % \begin{macro}[int]{\__kernel_register_show:N, \__kernel_register_show:c} % Check that the variable exists, then apply the \tn{showthe} primitive to @@ -2911,6 +2901,41 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\cs_show:N, \cs_show:c} +% \begin{macro}[aux, EXP]{\__cs_show:www} +% Some control sequences have a very long name or meaning. Thus, +% simply using \TeX{}'s primitive \tn{show} could lead to overlong +% lines. The output of this primitive is mimicked to some extent: a +% line-break is added after the first colon in the meaning (this is +% what \TeX{} does for macros and five |\...mark| primitives). Then +% the re-built string is given to \cs{iow_wrap:nnnN} for +% line-wrapping. The \cs{cs_show:c} command converts its argument to +% a control sequence within a group to avoid showing \tn{relax} for +% undefined control sequences. +% \begin{macrocode} +\group_begin: + \tex_lccode:D `? = `: \scan_stop: + \tex_catcode:D `? = 12 \scan_stop: +\tex_lowercase:D + { + \group_end: + \cs_new_protected:Npn \cs_show:N #1 + { + \__msg_show_variable:n + { + > ~ \token_to_str:N #1 = + \exp_after:wN \__cs_show:www \cs_meaning:N #1 + \use_none:nn ? \prg_do_nothing: + } + } + \cs_new:Npn \__cs_show:www #1 ? { #1 ? \\ } + } +\cs_new_protected_nopar:Npn \cs_show:c + { \group_begin: \exp_args:NNc \group_end: \cs_show:N } +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \subsection{Engine specific definitions} % % \begin{macro}[pTF, EXP] diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx index e5c2ab164f4..12da7598665 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx @@ -1865,10 +1865,14 @@ } \cs_new_protected:Npn \@@_find_corner_maxima_aux:nn #1#2 { - \dim_set_min:Nn \l_@@_left_corner_dim {#1} - \dim_set_max:Nn \l_@@_right_corner_dim {#1} - \dim_set_min:Nn \l_@@_bottom_corner_dim {#2} - \dim_set_max:Nn \l_@@_top_corner_dim {#2} + \dim_set:Nn \l_@@_left_corner_dim + { \dim_min:nn { \l_@@_left_corner_dim } {#1} } + \dim_set:Nn \l_@@_right_corner_dim + { \dim_max:nn { \l_@@_right_corner_dim } {#1} } + \dim_set:Nn \l_@@_bottom_corner_dim + { \dim_min:nn { \l_@@_bottom_corner_dim } {#2} } + \dim_set:Nn \l_@@_top_corner_dim + { \dim_max:nn { \l_@@_top_corner_dim } {#2} } } % \end{macrocode} % \end{macro} @@ -1887,7 +1891,10 @@ { \@@_find_bounding_shift_aux:nn ##2 } } \cs_new_protected:Npn \@@_find_bounding_shift_aux:nn #1#2 - { \dim_set_min:Nn \l_@@_bounding_shift_dim {#1} } + { + \dim_set:Nn \l_@@_bounding_shift_dim + { \dim_min:nn { \l_@@_bounding_shift_dim } {#1} } + } % \end{macrocode} % \end{macro} % \end{macro} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx index 948976f4110..0f76f18b72b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx @@ -37,7 +37,7 @@ % %<*driver|package> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3clist.dtx 4102 2012-08-15 16:08:27Z bruno $ +\GetIdInfo$Id: l3clist.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 Comma separated lists} %</driver|package> %<*driver> @@ -516,14 +516,14 @@ % % \section{Viewing comma lists} % -% \begin{function}{\clist_show:N, \clist_show:c} +% \begin{function}[updated = 2012-09-09]{\clist_show:N, \clist_show:c} % \begin{syntax} % \cs{clist_show:N} \meta{comma list} % \end{syntax} % Displays the entries in the \meta{comma list} in the terminal. % \end{function} % -% \begin{function}{\clist_show:n} +% \begin{function}[updated = 2012-09-09]{\clist_show:n} % \begin{syntax} % \cs{clist_show:n} \Arg{tokens} % \end{syntax} @@ -1357,14 +1357,14 @@ % % \begin{macro}{\clist_show:N, \clist_show:c} % \begin{macro}{\clist_show:n} -% Apply the general \cs{__msg_show_variable:Nnx}. In the case +% Apply the general \cs{__msg_show_variable:Nnn}. In the case % of an \texttt{n}-type comma-list, first store it % in a scratch variable, then show that variable: % The message takes care of omitting its name. % \begin{macrocode} \cs_new_protected:Npn \clist_show:N #1 { - \__msg_show_variable:Nnx #1 { clist } + \__msg_show_variable:Nnn #1 { clist } { \clist_map_function:NN #1 \__msg_show_item:n } } \cs_new_protected:Npn \clist_show:n #1 diff --git a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx index 1c7f4836804..e6369d38bb5 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx @@ -36,7 +36,7 @@ % %<*driver|package> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3coffins.dtx 4092 2012-08-14 14:04:41Z bruno $ +\GetIdInfo$Id: l3coffins.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 Coffin code layer} %</driver|package> %<*driver> @@ -304,7 +304,7 @@ % both printed in the \meta{colour} specified. % \end{function} % -% \begin{function}[updated = 2012-01-01] +% \begin{function}[updated = 2012-09-09] % {\coffin_show_structure:N, \coffin_show_structure:c} % \begin{syntax} % \cs{coffin_show_structure:N} \meta{coffin} @@ -1676,7 +1676,7 @@ { \@@_if_exist:NT #1 { - \__msg_show_variable:Nnx #1 { coffins } + \__msg_show_variable:Nnn #1 { coffins } { \prop_map_function:cN { l_@@_poles_ \__int_value:w #1 _prop } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx index bea9cf251ce..1a77c975255 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx @@ -78,7 +78,7 @@ Do not distribute a modified version of this file. %</driver|class> % %<*driver|class> -\GetIdInfo$Id: l3doc.dtx 4130 2012-08-20 21:30:22Z joseph $ +\GetIdInfo$Id: l3doc.dtx 4230 2012-09-24 21:44:28Z joseph $ {L3 Experimental documentation class} %</driver|class> % @@ -2061,6 +2061,7 @@ Do not distribute a modified version of this file. \clist_map_inline:nn {#1} { \clist_put_right:Nn \g_docinput_clist {##1} + \tl_gclear:N \g_@@_module_name_tl \MakePercentIgnore \input{##1} \MakePercentComment @@ -2078,6 +2079,7 @@ Do not distribute a modified version of this file. \clist_map_inline:Nn \g_docinput_clist { \MakePercentIgnore + \tl_gclear:N \g_@@_module_name_tl \input{##1} \MakePercentComment } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx index 623ae7c4fa9..df61cb4b0e4 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx @@ -53,6 +53,9 @@ %</gobble> \def\filename{docstrip.dtx} \documentclass[full]{l3doc} + \ExplSyntaxOn + \cs_set_eq:NN \__codedoc_replace_at_at:N \use_none:n + \ExplSyntaxOff \begin{document} \DocInput{\jobname.dtx} \end{document} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx index 5011c868715..c9e689f06ca 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3file.dtx 4101 2012-08-15 16:05:33Z bruno $ +\GetIdInfo$Id: l3file.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 File and I/O operations} %</driver|package> %<*driver> @@ -218,7 +218,7 @@ % to other programmers. % \end{function} % -% \begin{function}{\ior_list_streams:, \iow_list_streams:} +% \begin{function}[updated = 2012-09-09]{\ior_list_streams:, \iow_list_streams:} % \begin{syntax} % \cs{ior_list_streams:} % \cs{iow_list_streams:} @@ -313,7 +313,7 @@ % (\emph{cf.}~\cs{iow_shipout_x:Nn}). % \end{function} % -% \begin{function}{\iow_shipout_x:Nn, \iow_shipout_x:Nx} +% \begin{function}[updated = 2012-09-08]{\iow_shipout_x:Nn, \iow_shipout_x:Nx} % \begin{syntax} % \cs{iow_shipout_x:Nn} \meta{stream} \Arg{tokens} % \end{syntax} @@ -324,7 +324,7 @@ % these functions suitable for including material finalised during % the page building process (such as the page number integer). % \begin{texnote} -% \cs{iow_shipout_x:Nn} is the \TeX{} primitive \tn{write} renamed. +% This is a wrapper around the \TeX{} primitive \tn{write}. % \end{texnote} % \end{function} % @@ -1075,7 +1075,7 @@ \__msg_term:nnn { LaTeX / kernel } { \prop_if_empty:NTF #1 { show-no-stream } { show-open-streams } } {#2} - \__msg_show_variable:x + \__msg_show_variable:n { \prop_map_function:NN #1 \__msg_show_item_unbraced:nn } } % \end{macrocode} @@ -1336,9 +1336,11 @@ % \subsubsection{Deferred writing} % % \begin{macro}{\iow_shipout_x:Nn, \iow_shipout_x:Nx} -% First the easy part, this is the primitive. +% First the easy part, this is the primitive, which expects its +% argument to be braced. % \begin{macrocode} -\cs_new_eq:NN \iow_shipout_x:Nn \tex_write:D +\cs_new_protected:Npn \iow_shipout_x:Nn #1#2 + { \tex_write:D #1 {#2} } \cs_generate_variant:Nn \iow_shipout_x:Nn { Nx } % \end{macrocode} % \end{macro} @@ -1347,7 +1349,7 @@ % With \eTeX{} available deferred writing without expansion is easy. % \begin{macrocode} \cs_new_protected:Npn \iow_shipout:Nn #1#2 - { \iow_shipout_x:Nn #1 { \exp_not:n {#2} } } + { \tex_write:D #1 { \exp_not:n {#2} } } \cs_generate_variant:Nn \iow_shipout:Nn { Nx } % \end{macrocode} % \end{macro} @@ -1364,7 +1366,7 @@ % need to be doubled. % \begin{macrocode} \cs_new_protected:Npn \iow_now:Nn #1#2 - { \tex_immediate:D \iow_shipout_x:Nn #1 { \exp_not:n {#2} } } + { \tex_immediate:D \tex_write:D #1 { \exp_not:n {#2} } } \cs_generate_variant:Nn \iow_now:Nn { Nx } % \end{macrocode} % \end{macro} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3format.ins b/Master/texmf-dist/source/latex/l3kernel/l3format.ins deleted file mode 100644 index 76fe0ee3e76..00000000000 --- a/Master/texmf-dist/source/latex/l3kernel/l3format.ins +++ /dev/null @@ -1,92 +0,0 @@ -\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-assign.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx index 142a3c5afac..c207d30abf5 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx @@ -36,7 +36,7 @@ % %<*driver> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3fp-assign.dtx 4129 2012-08-20 20:38:28Z mittelba $ +\GetIdInfo$Id: l3fp-assign.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 Floating-point assignments} \documentclass[full]{l3doc} \begin{document} @@ -183,20 +183,20 @@ % % \begin{macro}{\fp_show:N, \fp_show:c, \fp_show:n} % This shows the result of computing its argument. The -% \cs{__msg_show_variable:x} auxiliary expects its input in a slightly odd -% form, starting with |>|, and displays the rest. +% \cs{__msg_show_variable:n} auxiliary expects its input in a slightly +% odd form, starting with |>~|, and displays the rest. % \begin{macrocode} \cs_new_protected:Npn \fp_show:N #1 { \fp_if_exist:NTF #1 - { \__msg_show_variable:x { > \fp_to_tl:N #1 } } + { \__msg_show_variable:n { > ~ \fp_to_tl:N #1 } } { \__msg_kernel_error:nnx { kernel } { variable-not-defined } { \token_to_str:N #1 } } } \cs_new_protected:Npn \fp_show:n #1 - { \__msg_show_variable:x { > \fp_to_tl:n {#1} } } + { \__msg_show_variable:n { > ~ \fp_to_tl:n {#1} } } \cs_generate_variant:Nn \fp_show:N { c } % \end{macrocode} % \end{macro} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx index 52fda439459..7bb9f89a507 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 4180 2012-08-31 16:44:34Z bruno $ +\GetIdInfo$Id: l3fp-convert.dtx 4234 2012-09-26 09:43:31Z bruno $ {L3 Floating-point conversion} \documentclass[full]{l3doc} \begin{document} @@ -473,6 +473,16 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}[EXP]{\fp_max:nn, \fp_min:nn} +% Similar to \cs{fp_abs:n}, for consistency with \cs{int_max:nn}, \emph{etc.} +% \begin{macrocode} +\cs_new:Npn \fp_max:nn #1#2 + { \fp_to_decimal:n { max ( \@@_parse:n {#1} , \@@_parse:n {#2} ) } } +\cs_new:Npn \fp_min:nn #1#2 + { \fp_to_decimal:n { min ( \@@_parse:n {#1} , \@@_parse:n {#2} ) } } +% \end{macrocode} +% \end{macro} +% % \subsection{Convert an array of floating points to a comma list} % % \begin{macro}[int, EXP]{\@@_array_to_clist:n} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx index 5cf7c0ccf91..6eff317f94c 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx @@ -36,7 +36,7 @@ % %<*driver|package> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3fp.dtx 4151 2012-08-28 11:51:52Z bruno $ +\GetIdInfo$Id: l3fp.dtx 4234 2012-09-26 09:43:31Z bruno $ {L3 Floating points} %</driver|package> %<*driver> @@ -981,7 +981,19 @@ % \cs{fp_eval:n} and leaves the absolute value of the result in the % input stream. This function does not raise any exception beyond % those raised when evaluating its argument. Within floating point -% expressios, |abs()| can be used. +% expressions, |abs()| can be used. +% \end{function} +% +% \begin{function}[EXP, added = 2012-09-26, tested = m3fp-convert003] +% {\fp_max:nn, \fp_min:nn} +% \begin{syntax} +% \cs{fp_max:nn} \Arg{fp expression 1} \Arg{fp expression 2} +% \end{syntax} +% Evaluates the \meta{floating point expressions} as described for +% \cs{fp_eval:n} and leaves the resulting larger (\texttt{max}) or smaller +% (\texttt{min}) value in the input stream. This function does not raise any +% exception beyond those raised when evaluating its argument. Within +% floating point expressions, |max()| and |min()| can be used. % \end{function} % % \section{Disclaimer and roadmap} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx index 7a176c93588..e67616a2f7d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3int.dtx 4121 2012-08-17 01:36:30Z bruno $ +\GetIdInfo$Id: l3int.dtx 4237 2012-09-26 10:18:58Z bruno $ {L3 Integers} %</driver|package> %<*driver> @@ -93,7 +93,7 @@ % \tl_new:N \l_my_tl % \tl_set:Nn \l_my_tl { 5 } % \int_new:N \l_my_int -% \int\set:Nn \l_my_int { 4 } +% \int_set:Nn \l_my_int { 4 } % \int_eval:n { \l_my_tl + \l_my_int * 3 - ( 3 + 4 * 5 ) } % \end{verbatim} % both evaluate to \( -6 \). The \Arg{integer expression} may @@ -105,7 +105,7 @@ % suitable termination if used in a \TeX{}-style integer assignment. % \end{function} % -% \begin{function}[EXP]{\int_abs:n} +% \begin{function}[EXP, updated = 2012-09-26]{\int_abs:n} % \begin{syntax} % \cs{int_abs:n} \Arg{integer expression} % \end{syntax} @@ -115,7 +115,7 @@ % expansions. % \end{function} % -% \begin{function}[EXP]{\int_div_round:nn} +% \begin{function}[EXP, updated = 2012-09-26]{\int_div_round:nn} % \begin{syntax} % \cs{int_div_round:nn} \Arg{intexpr_1} \Arg{intexpr_2} % \end{syntax} @@ -138,7 +138,7 @@ % \meta{integer denotation} after two expansions. % \end{function} % -% \begin{function}[EXP]{\int_max:nn, \int_min:nn} +% \begin{function}[EXP, updated = 2012-09-26]{\int_max:nn, \int_min:nn} % \begin{syntax} % \cs{int_max:nn} \Arg{intexpr_1} \Arg{intexpr_2} % \cs{int_min:nn} \Arg{intexpr_1} \Arg{intexpr_2} @@ -149,7 +149,7 @@ % expansions. % \end{function} % -% \begin{function}[EXP]{\int_mod:nn} +% \begin{function}[EXP, updated = 2012-09-26]{\int_mod:nn} % \begin{syntax} % \cs{int_mod:nn} \Arg{intexpr_1} \Arg{intexpr_2} % \end{syntax} @@ -941,48 +941,56 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\int_max:nn} +% \begin{macro}[EXP]{\int_abs:n} +% \begin{macro}[aux, EXP]{\@@_abs:N} % \UnitTested -% \begin{macro}{\int_min:nn} +% \begin{macro}[EXP]{\int_max:nn} +% \begin{macro}[EXP]{\int_min:nn} +% \begin{macro}[aux, EXP]{\@@_maxmin:wwN} % \UnitTested -% \begin{macro}{\int_abs:n} % \UnitTested -% Functions for $\min$, $\max$, and absolute value. +% Functions for $\min$, $\max$, and absolute value with only one +% evaluation. The absolute value is obtained by removing a leading +% sign if any. All three functions expand in two steps. % \begin{macrocode} \cs_new:Npn \int_abs:n #1 { - \@@_value:w - \if_int_compare:w \@@_eval:w #1 < \c_zero - - - \fi: - \@@_eval:w #1 \@@_eval_end: + \@@_value:w \exp_after:wN \@@_abs:N + \int_use:N \@@_eval:w #1 \@@_eval_end: + \exp_stop_f: } -\cs_new:Npn \int_max:nn #1#2 +\cs_new:Npn \@@_abs:N #1 + { \if_meaning:w - #1 \else: \exp_after:wN #1 \fi: } +\cs_set:Npn \int_max:nn #1#2 { - \@@_value:w \@@_eval:w - \if_int_compare:w - \@@_eval:w #1 > \@@_eval:w #2 \@@_eval_end: - #1 - \else: - #2 - \fi: - \@@_eval_end: + \@@_value:w \exp_after:wN \@@_maxmin:wwN + \int_use:N \@@_eval:w #1 \exp_after:wN ; + \int_use:N \@@_eval:w #2 ; + > + \exp_stop_f: } -\cs_new:Npn \int_min:nn #1#2 +\cs_set:Npn \int_min:nn #1#2 { - \@@_value:w \@@_eval:w - \if_int_compare:w - \@@_eval:w #1 < \@@_eval:w #2 \@@_eval_end: - #1 - \else: - #2 - \fi: - \@@_eval_end: + \@@_value:w \exp_after:wN \@@_maxmin:wwN + \int_use:N \@@_eval:w #1 \exp_after:wN ; + \int_use:N \@@_eval:w #2 ; + < + \exp_stop_f: + } +\cs_new:Npn \@@_maxmin:wwN #1 ; #2 ; #3 + { + \if_int_compare:w #1 #3 #2 ~ + #1 + \else: + #2 + \fi: } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} +% \end{macro} +% \end{macro} % % \begin{macro}[EXP]{\int_div_truncate:nn} % \UnitTested @@ -991,6 +999,7 @@ % \begin{macro}[EXP]{\int_mod:nn} % \UnitTested % \begin{macro}[aux, EXP]{\@@_div_truncate:NwNw} +% \begin{macro}[aux, EXP]{\@@_mod:ww} % As \cs{@@_eval:w} rounds the result of a division we also provide a % version that truncates the result. We use an auxiliary to make sure % numerator and denominator are only evaluated once: this comes in @@ -1028,21 +1037,26 @@ % \end{macrocode} % For the sake of completeness: % \begin{macrocode} -\cs_new:Npn \int_div_round:nn #1#2 { \int_eval:n { ( #1 ) / ( #2 ) } } +\cs_new:Npn \int_div_round:nn #1#2 + { \@@_value:w \@@_eval:w ( #1 ) / ( #2 ) \@@_eval_end: } % \end{macrocode} % Finally there's the modulus operation. % \begin{macrocode} \cs_new:Npn \int_mod:nn #1#2 { - \@@_value:w \@@_eval:w - #1 - \int_div_truncate:nn {#1} {#2} * ( #2 ) + \@@_value:w \@@_eval:w \exp_after:wN \@@_mod:ww + \@@_value:w \@@_eval:w #1 \exp_after:wN ; + \@@_value:w \@@_eval:w #2 ; \@@_eval_end: } +\cs_new:Npn \@@_mod:ww #1; #2; + { #1 - ( \@@_div_truncate:NwNw #1 ; #2 ; ) * #2 } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} +% \end{macro} % % \subsection{Creating and initialising integers} % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx index dea8b1923a9..c24027b488a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3keys.dtx 3991 2012-07-16 19:00:35Z joseph $ +\GetIdInfo$Id: l3keys.dtx 4248 2012-09-29 19:55:27Z joseph $ {L3 Experimental key-value interfaces} %</driver|package> %<*driver> @@ -786,7 +786,7 @@ \tl_replace_all:Nnn \l_@@_sanitise_tl { , } { 9 } \tl_clear:N \l_@@_parse_tl \exp_after:wN \@@_parse_elt:w \exp_after:wN - \q_no_value \l_@@_sanitise_tl 9 \q_nil 9 + \q_nil \l_@@_sanitise_tl 9 \q_recursion_tail 9 \q_recursion_stop \exp_after:wN \group_end: \l_@@_parse_tl } @@ -795,22 +795,20 @@ % \end{macro} % % \begin{macro}{\@@_parse_elt:w} -% Each item to be parsed will have \cs{q_no_value} added to the front. +% Each item to be parsed will have \cs{q_nil} added to the front. % Hence the blank test here can always be used to find a totally % empty argument. If this is the case, the system loops round. If there -% is something to parse, there is a check for the \cs{q_nil} marker -% and if not a hand-off. +% is something to parse, there is a check for the end of the input before +% handing off. % \begin{macrocode} \cs_new_protected:Npn \@@_parse_elt:w #1 , { \tl_if_blank:oTF { \use_none:n #1 } - { \@@_parse_elt:w \q_no_value } + { \@@_parse_elt:w \q_nil } { - \quark_if_nil:oF { \use_ii:nn #1 } - { - \@@_split_key_value:w #1 = = \q_stop - \@@_parse_elt:w \q_no_value - } + \quark_if_recursion_tail_stop:o { \use_ii:nn #1 } + \@@_split_key_value:w #1 = = \q_stop + \@@_parse_elt:w \q_nil } } % \end{macrocode} @@ -829,7 +827,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_split_key_value:w #1 = #2 \q_stop { - \@@_split_key:w #1 \q_stop + \@@_split_key:n {#1} \str_if_eq:nnTF {#2} { = } { \tl_put_right:Nx \l_@@_parse_tl @@ -851,18 +849,28 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\@@_split_key:w} -% The aim here is to remove spaces and also exactly one set of braces. -% There is also a quark to remove, hence the \cs{use_none:n} appearing before -% application of \cs{tl_trim_spaces:n}. +% \begin{macro}{\@@_split_key:n} +% \begin{macro}[aux]{\@@_split_key:w} +% There are two possible cases here. The first case is that |#1| is +% surrounded by braces, in which case the |\use_none:nnn #1 \q_nil \q_nil| +% will yield \cs{q_nil}. There, we can remove the leading \cs{q_nil}, the +% braces and any spaces around the outside with \cs{use_ii:nnn}. On the +% other hand, if there are no braces then the second branch removes the +% leading \cs{q_nil} and any surrounding spaces. (This code does not have +% to cover the case with no key, as that's already taken out above.) % \begin{macrocode} -\cs_new_protected:Npn \@@_split_key:w #1 \q_stop +\cs_new_protected:Npn \@@_split_key:n #1 { - \tl_set:Nx \l_@@_key_tl - { \exp_after:wN \tl_trim_spaces:n \exp_after:wN { \use_none:n #1 } } + \str_if_eq_x:nnTF + { \exp_not:N \q_nil } { \exp_not:o { \use_none:nnn #1 \q_nil \q_nil } } + { \tl_set:Nx \l_@@_key_tl { \exp_not:o { \use_ii:nnn #1 \q_nil } } } + { \@@_split_key:w #1 \q_stop } } +\cs_new_protected:Npn \@@_split_key:w \q_nil #1 \q_stop + { \tl_set:Nx \l_@@_key_tl { \tl_trim_spaces:n {#1} } } % \end{macrocode} % \end{macro} +% \end{macro} % % \begin{macro}{\@@_split_value:w} % Here the value has to be separated from the equals signs and the diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx index a1e30326917..3d72db5db51 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3msg.dtx 4147 2012-08-28 10:27:33Z bruno $ +\GetIdInfo$Id: l3msg.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 Messages} %</driver|package> %<*driver> @@ -723,37 +723,37 @@ % completely. % \end{function} % -% \begin{function}[updated = 2012-08-14] -% {\__msg_show_variable:Nnn, \__msg_show_variable:Nnx} +% \begin{function}[updated = 2012-09-09]{\__msg_show_variable:Nnn} % \begin{syntax} % \cs{__msg_show_variable:Nnn} \meta{variable} \Arg{type} \Arg{formatted content} % \end{syntax} -% Displays the \meta{formatted content} of the \meta{variable} of \meta{type} -% in the terminal. The \meta{formatted content} will typically be generated -% by \texttt{x}-type expansion using the \cs{__msg_show_variable:Nnx} variant: -% the nature of the formatting is dependent on the calling module. -% The \meta{formatted content} must be a string, either empty or -% containing |>|; everything until the first |>| will be removed. +% Displays the \meta{formatted content} of the \meta{variable} of +% \meta{type} in the terminal. The \meta{formatted content} will be +% processed as the first argument in a call to \cs{iow_wrap:nnnN}, +% hence |\\|, \verb*|\ | and other formatting sequences can be used. +% Once expanded and processed, the \meta{formatted content} must +% either be empty or contain |>|; everything until the first |>| will +% be removed. % \end{function} % -% \begin{function}{\__msg_show_variable:n, \__msg_show_variable:x} +% \begin{function}[updated = 2012-09-09]{\__msg_show_variable:n} % \begin{syntax} -% \cs{__msg_show_variable:n} \Arg{formatted string} +% \cs{__msg_show_variable:n} \Arg{formatted text} % \end{syntax} -% Shows the \meta{formatted string} on the terminal. After expansion, -% unless it is empty, the \meta{formatted string} must contain |>|, -% and the part of \meta{formatted string} before the first |>| is +% Shows the \meta{formatted text} on the terminal. After expansion, +% unless it is empty, the \meta{formatted text} must contain |>|, +% and the part of \meta{formatted text} before the first |>| is % removed. Failure to do so causes low-level \TeX{} errors. % \end{function} % -% \begin{function} +% \begin{function}[updated = 2012-09-09] % {\__msg_show_item:n, \__msg_show_item:nn, \__msg_show_item_unbraced:nn} % \begin{syntax} % \cs{__msg_show_item:n} \meta{item} % \cs{__msg_show_item:nn} \meta{item-key} \meta{item-value} % \end{syntax} % Auxiliary functions used within the argument of -% \cs{__msg_show_variable:Nnx} to format variable items correctly for +% \cs{__msg_show_variable:Nnn} to format variable items correctly for % display. The \cs{__msg_show_item:n} version is used for simple lists, % the \cs{__msg_show_item:nn} and \cs{__msg_show_item_unbraced:nn} versions % for key--value like data structures. @@ -2038,57 +2038,59 @@ % \end{macro} % \end{macro} % -% \begin{macro}[int]{\@@_show_variable:Nnn, \@@_show_variable:Nnx} -% \begin{macro}[int]{\@@_show_variable:n, \@@_show_variable:x} -% \begin{macro}[aux,EXP]{\@@_show_variable:w} -% The arguments of \cs{@@_show_variable:Nnx} are +% \begin{macro}[int]{\@@_show_variable:Nnn} +% \begin{macro}[int]{\@@_show_variable:n} +% \begin{macro}[aux]{\@@_show_variable_aux:n} +% \begin{macro}[aux, EXP]{\@@_show_variable_aux:w} +% The arguments of \cs{@@_show_variable:Nnn} are % \begin{itemize} % \item The \meta{variable} to be shown. -% \item The \texttt{TF} emptiness conditional for that type of variables. % \item The type of the variable. % \item A mapping of the form \cs{seq_map_function:NN} \meta{variable} % \cs{@@_show_item:n}, which produces the formatted string. % \end{itemize} -% We remove a new line and \verb*|> | from the first item using -% a \texttt{w}-type auxiliary, and the fact that \texttt{f}-expansion -% removes a space. To avoid a low-level \TeX{} error if there is -% an empty argument, a simple test is used to keep the output -% \enquote{clean}. The odd \cs{exp_after:wN} which expands the closing -% brace improves the output slightly. +% As for \cs{__kernel_register_show:N}, check that the variable is +% defined. If it is, output the introductory message, then show the +% contents |#3| using \cs{@@_show_variable:n}. This wraps the +% contents (with leading \verb*|> |) to a fixed number of characters +% per line. The expansion of |#3| may either be empty or start with +% \verb*|> |. A leading |>|, if present, is removed using a +% \texttt{w}-type auxiliary, as well as a space following it (via +% \texttt{f}-expansion). Note that we cannot remove the space as a +% delimiter for the \texttt{w}-type auxiliary, because a line-break +% may be taken there, and the space would then disappear. Finally, +% the resulting token list \cs{l_@@_internal_tl} is displayed to the +% terminal, with an odd \cs{exp_after:wN} which expands the closing +% brace to improve the output slightly. % \begin{macrocode} \cs_new_protected:Npn \@@_show_variable:Nnn #1#2#3 { \cs_if_exist:NTF #1 { \@@_term:nnn { LaTeX / kernel } { show- #2 } {#1} - \@@_show_variable:x { \tl_to_str:n {#3} } + \@@_show_variable:n {#3} } { \@@_kernel_error:nnx { kernel } { variable-not-defined } { \token_to_str:N #1 } } } -\cs_generate_variant:Nn \@@_show_variable:Nnn { Nnx } \cs_new_protected:Npn \@@_show_variable:n #1 + { \iow_wrap:nnnN {#1} { } { } \@@_show_variable_aux:n } +\cs_new_protected:Npn \@@_show_variable_aux:n #1 { - \tl_set:Nn \l_@@_internal_tl {#1} - \tl_if_empty:NTF \l_@@_internal_tl - { \etex_showtokens:D \exp_after:wN { } } - { - \exp_args:Nf \etex_showtokens:D - { - \exp_after:wN \exp_after:wN - \exp_after:wN \@@_show_variable:w - \exp_after:wN \l_@@_internal_tl - } - } + \tl_if_empty:nTF {#1} + { \tl_clear:N \l_@@_internal_tl } + { \tl_set:Nf \l_@@_internal_tl { \@@_show_variable_aux:w #1 } } + \etex_showtokens:D \exp_after:wN \exp_after:wN \exp_after:wN + { \exp_after:wN \l_@@_internal_tl } } -\cs_generate_variant:Nn \@@_show_variable:n { x } -\cs_new:Npn \@@_show_variable:w #1 > { } +\cs_new:Npn \@@_show_variable_aux:w #1 > { } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} +% \end{macro} % % \begin{macro}[int,EXP]{\@@_show_item:n} % \begin{macro}[int,EXP]{\@@_show_item:nn} @@ -2098,17 +2100,17 @@ % \begin{macrocode} \cs_new:Npn \@@_show_item:n #1 { - \iow_newline: > \c_space_tl \c_space_tl { \exp_not:n {#1} } + \\ > \ \ \{ \tl_to_str:n {#1} \} } \cs_new:Npn \@@_show_item:nn #1#2 { - \iow_newline: > \c_space_tl \c_space_tl { \exp_not:n {#1} } - \c_space_tl \c_space_tl => \c_space_tl \c_space_tl { \exp_not:n {#2} } + \\ > \ \ \{ \tl_to_str:n {#1} \} + \ \ => \ \ \{ \tl_to_str:n {#2} \} } \cs_new:Npn \@@_show_item_unbraced:nn #1#2 { - \iow_newline: > \c_space_tl \c_space_tl \exp_not:n {#1} - \c_space_tl \c_space_tl => \c_space_tl \c_space_tl \exp_not:n {#2} + \\ > \ \ \tl_to_str:n {#1} + \ \ => \ \ \tl_to_str:n {#2} } % \end{macrocode} % \end{macro} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx index a77f3103063..228c317ead3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx @@ -35,7 +35,7 @@ % %<*package> \RequirePackage{l3bootstrap}[2012/07/15] -\GetIdInfo$Id: l3names.dtx 3990 2012-07-16 07:46:03Z joseph $ +\GetIdInfo$Id: l3names.dtx 4230 2012-09-24 21:44:28Z joseph $ {L3 Namespace for primitives} %</package> %<*driver> @@ -603,7 +603,7 @@ % \begin{macrocode} \tex_endgroup:D % \end{macrocode} -% +% % \LaTeXe{} will have moved a few primitives, so these are sorted out. % \begin{macrocode} %<*package> diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx index 0c81f7f9951..c7fcb2a2790 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3prg.dtx 4114 2012-08-16 01:57:02Z bruno $ +\GetIdInfo$Id: l3prg.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 Control structures} %</driver|package> %<*driver> @@ -835,8 +835,8 @@ % % \begin{macro}{\bool_show:N, \bool_show:c, \bool_show:n} % Show the truth value of the boolean, as \texttt{true} or -% \texttt{false}. We use \cs{__msg_show_variable:n} to get a better output; -% this function requires its argument to start with |>|. +% \texttt{false}. We use \cs{__msg_show_variable:n} to get a better +% output; this function requires its argument to start with |>~|. % \begin{macrocode} \cs_new_protected:Npn \bool_show:N #1 { @@ -850,8 +850,8 @@ \cs_new_protected:Npn \bool_show:n #1 { \bool_if:nTF {#1} - { \__msg_show_variable:n { > true } } - { \__msg_show_variable:n { > false } } + { \__msg_show_variable:n { > ~ true } } + { \__msg_show_variable:n { > ~ false } } } \cs_generate_variant:Nn \bool_show:N { c } % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx index 81db3df7b8b..d8bec5ee50d 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 4190 2012-09-03 00:23:31Z bruno $ +\GetIdInfo$Id: l3prop.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 Property lists} %</driver|package> %<*driver> @@ -401,7 +401,7 @@ % % \section{Viewing property lists} % -% \begin{function}{\prop_show:N, \prop_show:c} +% \begin{function}[updated = 2012-09-09]{\prop_show:N, \prop_show:c} % \begin{syntax} % \cs{prop_show:N} \meta{property list} % \end{syntax} @@ -1026,13 +1026,13 @@ % \subsection{Viewing property lists} % % \begin{macro}[tested = m3show001]{\prop_show:N, \prop_show:c} -% Apply the general \cs{__msg_show_variable:Nnx}. Contrarily +% Apply the general \cs{__msg_show_variable:Nnn}. Contrarily % to sequences and comma lists, we use \cs{__msg_show_item:nn} % to format both the key and the value for each pair. % \begin{macrocode} \cs_new_protected:Npn \prop_show:N #1 { - \__msg_show_variable:Nnx #1 { prop } + \__msg_show_variable:Nnn #1 { prop } { \prop_map_function:NN #1 \__msg_show_item:nn } } \cs_generate_variant:Nn \prop_show:N { c } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx index 596d6b832cd..1a3d34eeaac 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3seq.dtx 4092 2012-08-14 14:04:41Z bruno $ +\GetIdInfo$Id: l3seq.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 Sequences and stacks} %</driver|package> %<*driver> @@ -651,7 +651,7 @@ % % \section{Viewing sequences} % -% \begin{function}{\seq_show:N, \seq_show:c} +% \begin{function}[updated = 2012-09-09]{\seq_show:N, \seq_show:c} % \begin{syntax} % \cs{seq_show:N} \meta{sequence} % \end{syntax} @@ -1551,11 +1551,11 @@ % % \begin{macro}{\seq_show:N, \seq_show:c} % \UnitTested -% Apply the general \cs{__msg_show_variable:Nnx}. +% Apply the general \cs{__msg_show_variable:Nnn}. % \begin{macrocode} \cs_new_protected:Npn \seq_show:N #1 { - \__msg_show_variable:Nnx #1 { seq } + \__msg_show_variable:Nnn #1 { seq } { \seq_map_function:NN #1 \__msg_show_item:n } } \cs_generate_variant:Nn \seq_show:N { c } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx index 911fe7571f0..24fd5bf3fe8 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx @@ -36,7 +36,7 @@ % %<*driver|package> \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3skip.dtx 4121 2012-08-17 01:36:30Z bruno $ +\GetIdInfo$Id: l3skip.dtx 4235 2012-09-26 09:48:18Z bruno $ {L3 Dimensions and skips} %</driver|package> %<*driver> @@ -156,26 +156,6 @@ % \meta{dimension_2}. % \end{function} % -% \begin{function}[updated = 2012-02-06] -% {\dim_set_max:Nn, \dim_set_max:cn, \dim_gset_max:Nn, \dim_gset_max:cn} -% \begin{syntax} -% \cs{dim_set_max:Nn} \meta{dimension} \Arg{dimension expression} -% \end{syntax} -% Compares the current value of the \meta{dimension} with that of the -% \meta{dimension expression}, and sets the \meta{dimension} to the -% larger of these two value. -% \end{function} -% -% \begin{function}[updated = 2012-02-06] -% {\dim_set_min:Nn, \dim_set_min:cn, \dim_gset_min:Nn, \dim_gset_min:cn} -% \begin{syntax} -% \cs{dim_set_min:Nn} \meta{dimension} \Arg{dimension expression} -% \end{syntax} -% Compares the current value of the \meta{dimension} with that of the -% \meta{dimension expression}, and sets the \meta{dimension} to the -% smaller of these two value. -% \end{function} -% % \begin{function}[updated = 2011-10-22] % {\dim_sub:Nn, \dim_sub:cn, \dim_gsub:Nn, \dim_gsub:cn} % \begin{syntax} @@ -187,15 +167,26 @@ % % \section{Utilities for dimension calculations} % -% \begin{function}[updated = 2011-10-22, EXP]{\dim_abs:n} +% \begin{function}[updated = 2012-09-26, EXP]{\dim_abs:n} % \begin{syntax} % \cs{dim_abs:n} \Arg{dimexpr} % \end{syntax} % Converts the \meta{dimexpr} to its absolute value, leaving the result -% in the input stream as an \meta{dimension denotation}. +% in the input stream as a \meta{dimension denotation}. +% \end{function} +% +% \begin{function}[added = 2012-09-09, updated = 2012-09-26, EXP] +% {\dim_max:nn, \dim_min:nn} +% \begin{syntax} +% \cs{dim_max:nn} \Arg{dimexpr_1} \Arg{dimexpr_2} +% \cs{dim_min:nn} \Arg{dimexpr_1} \Arg{dimexpr_2} +% \end{syntax} +% Evaluates the two \meta{dimension expressions} and leaves either the +% maximum or minimum value in the input stream as appropriate, as a +% \meta{dimension denotation}. % \end{function} % -% \begin{function}[updated = 2011-10-22, EXP]{\dim_ratio:nn} +% \begin{function}[updated = 2011-10-22, rEXP]{\dim_ratio:nn} % \begin{syntax} % \cs{dim_ratio:nn} \Arg{dimexpr_1} \Arg{dimexpr_2} % \end{syntax} @@ -1039,35 +1030,6 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\dim_set_max:Nn, \dim_set_max:cn} -% \begin{macro}{\dim_set_min:Nn, \dim_set_min:cn} -% \begin{macro}{\dim_gset_max:Nn, \dim_gset_max:cn} -% \begin{macro}{\dim_gset_min:Nn, \dim_gset_min:cn} -% \begin{macro}[aux]{\@@_set_max:NNNn} -% Setting maximum and minimum values is simply a case of so build-in -% comparison. This only applies to dimensions as skips are not ordered. -% \begin{macrocode} -\cs_new_protected_nopar:Npn \dim_set_max:Nn - { \@@_set_max:NNNn < \dim_set:Nn } -\cs_new_protected_nopar:Npn \dim_gset_max:Nn - { \@@_set_max:NNNn < \dim_gset:Nn } -\cs_new_protected_nopar:Npn \dim_set_min:Nn - { \@@_set_max:NNNn > \dim_set:Nn } -\cs_new_protected_nopar:Npn \dim_gset_min:Nn - { \@@_set_max:NNNn > \dim_gset:Nn } -\cs_new_protected:Npn \@@_set_max:NNNn #1#2#3#4 - { \dim_compare:nNnT {#3} #1 {#4} { #2 #3 {#4} } } -\cs_generate_variant:Nn \dim_set_max:Nn { c } -\cs_generate_variant:Nn \dim_gset_max:Nn { c } -\cs_generate_variant:Nn \dim_set_min:Nn { c } -\cs_generate_variant:Nn \dim_gset_min:Nn { c } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% % \begin{macro}{\dim_add:Nn, \dim_add:cn} % \begin{macro}{\dim_gadd:Nn, \dim_gadd:cn} % \begin{macro}{\dim_sub:Nn, \dim_sub:cn} @@ -1092,23 +1054,54 @@ % % \subsection{Utilities for dimension calculations} % -% \begin{macro}{\dim_abs:n} -% Similar to the \cs{int_abs:n} function, but here an additional -% \meta{dimexpr} is needed as \TeX{} won't simply tidy up an additional -% |-| for us. +% \begin{macro}[EXP]{\dim_abs:n} +% \begin{macro}[aux, EXP]{\@@_abs:N} +% \UnitTested +% \begin{macro}[EXP]{\dim_max:nn} +% \begin{macro}[EXP]{\dim_min:nn} +% \begin{macro}[aux, EXP]{\@@_maxmin:wwN} +% \UnitTested +% \UnitTested +% Functions for $\min$, $\max$, and absolute value with only one evaluation. +% The absolute value is evaluated by removing a leading~|-| if present. % \begin{macrocode} \cs_new:Npn \dim_abs:n #1 { - \dim_use:N - \@@_eval:w - \if_dim:w \@@_eval:w #1 < \c_zero_dim - - - \fi: - \@@_eval:w #1 \@@_eval_end: + \exp_after:wN \@@_abs:N + \dim_use:N \@@_eval:w #1 \@@_eval_end: + } +\cs_new:Npn \@@_abs:N #1 + { \if_meaning:w - #1 \else: \exp_after:wN #1 \fi: } +\cs_set:Npn \dim_max:nn #1#2 + { + \dim_use:N \@@_eval:w \exp_after:wN \@@_maxmin:wwN + \dim_use:N \@@_eval:w #1 \exp_after:wN ; + \dim_use:N \@@_eval:w #2 ; + > \@@_eval_end: } +\cs_set:Npn \dim_min:nn #1#2 + { + \dim_use:N \@@_eval:w \exp_after:wN \@@_maxmin:wwN + \dim_use:N \@@_eval:w #1 \exp_after:wN ; + \dim_use:N \@@_eval:w #2 ; + < + \@@_eval_end: + } +\cs_new:Npn \@@_maxmin:wwN #1 ; #2 ; #3 + { + \if_dim:w #1 #3 #2 ~ + #1 + \else: + #2 + \fi: + } % \end{macrocode} % \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % % \begin{macro}{\dim_ratio:nn} % \begin{macro}[aux]{\@@_ratio:n} @@ -1884,6 +1877,34 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\dim_set_max:Nn, \dim_set_max:cn} +% \begin{macro}{\dim_set_min:Nn, \dim_set_min:cn} +% \begin{macro}{\dim_gset_max:Nn, \dim_gset_max:cn} +% \begin{macro}{\dim_gset_min:Nn, \dim_gset_min:cn} +% \begin{macro}[aux]{\@@_set_max:NNNn} +% Deprecated on 2012-09-09 for removal after 2012-12-31. +% \begin{macrocode} +\cs_new_protected_nopar:Npn \dim_set_max:Nn + { \@@_set_max:NNNn < \dim_set:Nn } +\cs_new_protected_nopar:Npn \dim_gset_max:Nn + { \@@_set_max:NNNn < \dim_gset:Nn } +\cs_new_protected_nopar:Npn \dim_set_min:Nn + { \@@_set_max:NNNn > \dim_set:Nn } +\cs_new_protected_nopar:Npn \dim_gset_min:Nn + { \@@_set_max:NNNn > \dim_gset:Nn } +\cs_new_protected:Npn \@@_set_max:NNNn #1#2#3#4 + { \dim_compare:nNnT {#3} #1 {#4} { #2 #3 {#4} } } +\cs_generate_variant:Nn \dim_set_max:Nn { c } +\cs_generate_variant:Nn \dim_gset_max:Nn { c } +\cs_generate_variant:Nn \dim_set_min:Nn { c } +\cs_generate_variant:Nn \dim_gset_min:Nn { c } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% % \begin{macrocode} %</initex|package> % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx index b4ae4118b33..b48cbcd1854 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 4201 2012-09-05 08:00:54Z joseph $ +\GetIdInfo$Id: l3tl.dtx 4244 2012-09-28 22:46:36Z bruno $ {L3 Token lists} %</driver|package> %<*driver> @@ -352,35 +352,31 @@ % % \section{Reassigning token list character codes} % -% \begin{function}{\tl_to_lowercase:n} +% \begin{function}[updated = 2012-09-08]{\tl_to_lowercase:n} % \begin{syntax} % \cs{tl_to_lowercase:n} \Arg{tokens} % \end{syntax} -% Works through all of the \meta{tokens}, replacing each character +% Works through all of the \meta{tokens}, replacing each character token % with the lower case equivalent as defined by \cs{char_set_lccode:nn}. % Characters with no defined lower case character code are left % 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, -% its argument \emph{must} be given within braces, and this function -% takes place on execution and not on expansion. +% This is a wrapper around the \TeX{} primitive \tn{lowercase}. % \end{texnote} % \end{function} % -% \begin{function}{\tl_to_uppercase:n} +% \begin{function}[updated = 2012-09-08]{\tl_to_uppercase:n} % \begin{syntax} % \cs{tl_to_uppercase:n} \Arg{tokens} % \end{syntax} -% Works through all of the \meta{tokens}, replacing each character +% Works through all of the \meta{tokens}, replacing each character token % with the upper case equivalent as defined by \cs{char_set_uccode:nn}. -% Characters with no defined lower case character code are left +% Characters with no defined upper case character code are left % 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, -% its argument \emph{must} be given within braces, and this function -% takes place on execution and not on expansion. +% This is a wrapper around the \TeX{} primitive \tn{uppercase}. % \end{texnote} % \end{function} % @@ -784,7 +780,7 @@ % 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] +% \begin{function}[updated = 2012-09-09, EXP] % {\tl_head:N, \tl_head:n, \tl_head:V, \tl_head:v, \tl_head:f} % \begin{syntax} % \cs{tl_head:n} \Arg{token list} @@ -809,8 +805,7 @@ % \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}. +% \cs{tl_head:n} leaving nothing in the input stream. % \begin{texnote} % 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 @@ -960,24 +955,25 @@ % % \section{Viewing token lists} % -% \begin{function}{\tl_show:N, \tl_show:c} +% \begin{function}[updated = 2012-09-09]{\tl_show:N, \tl_show:c} % \begin{syntax} % \cs{tl_show:N} \meta{tl~var} % \end{syntax} % Displays the content of the \meta{tl~var} on the terminal. % \begin{texnote} -% \cs{tl_show:N} is the \TeX{} primitive \tn{show}. +% This is similar to the \TeX{} primitive \tn{show}, wrapped to a +% fixed number of characters per line. % \end{texnote} % \end{function} % -% \begin{function}{\tl_show:n} +% \begin{function}[updated = 2012-09-09]{\tl_show:n} % \begin{syntax} % \cs{tl_show:n} \meta{token list} % \end{syntax} % 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. +% This is similar to the \eTeX{} primitive \tn{showtokens}, wrapped +% to a fixed number of characters per line. % \end{texnote} % \end{function} % @@ -1428,10 +1424,13 @@ % % \begin{macro}{\tl_to_lowercase:n} % \begin{macro}{\tl_to_uppercase:n} -% Just some names for a few primitives. +% Just some names for a few primitives: we take care or wrapping the +% argument in braces. % \begin{macrocode} -\cs_new_eq:NN \tl_to_lowercase:n \tex_lowercase:D -\cs_new_eq:NN \tl_to_uppercase:n \tex_uppercase:D +\cs_new_protected:Npn \tl_to_lowercase:n #1 + { \tex_lowercase:D {#1} } +\cs_new_protected:Npn \tl_to_uppercase:n #1 + { \tex_uppercase:D {#1} } % \end{macrocode} % \end{macro} % \end{macro} @@ -1696,15 +1695,15 @@ % \end{macro} % % \begin{macro}[TF]{\tl_if_eq:nn} -% \begin{variable}{\l_tl_internal_a_tl, \l_tl_internal_b_tl} +% \begin{variable}{\l_@@_internal_a_tl, \l_@@_internal_b_tl} % A simple store and compare routine. % \begin{macrocode} \prg_new_protected_conditional:Npnn \tl_if_eq:nn #1#2 { T , F , TF } { \group_begin: - \tl_set:Nn \l_tl_internal_a_tl {#1} - \tl_set:Nn \l_tl_internal_b_tl {#2} - \if_meaning:w \l_tl_internal_a_tl \l_tl_internal_b_tl + \tl_set:Nn \l_@@_internal_a_tl {#1} + \tl_set:Nn \l_@@_internal_b_tl {#2} + \if_meaning:w \l_@@_internal_a_tl \l_@@_internal_b_tl \group_end: \prg_return_true: \else: @@ -1712,8 +1711,8 @@ \prg_return_false: \fi: } -\tl_new:N \l_tl_internal_a_tl -\tl_new:N \l_tl_internal_b_tl +\tl_new:N \l_@@_internal_a_tl +\tl_new:N \l_@@_internal_b_tl % \end{macrocode} % \end{variable} % \end{macro} @@ -2224,18 +2223,42 @@ % % \subsection{The first token from a token list} % -% \begin{macro}{\tl_head:w} % \begin{macro}{\tl_head:N, \tl_head:n, \tl_head:V, \tl_head:v, \tl_head:f} +% \begin{macro}[aux]{\@@_head_i:nw, \@@_head_ii:nw} +% \begin{macro}{\tl_head:w} % \begin{macro}{\tl_tail:N, \tl_tail:n, \tl_tail:V, \tl_tail:v, \tl_tail:f} % 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. +% 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. +% The approach here is to use \cs{if_false:} to allow us to use |}| as +% the closing delimiter: this is the only safe choice, as any other token +% would not be able to parse it's own code. Using a marker, we can see if +% what we are grabbing is exactly the marker, or there is anything else to +% deal with. Is there is, there is a loop. If not, tidy up and leave the +% item in the output stream. More detail in +% \url{http://tex.stackexchange.com/a/70168}. % \begin{macrocode} -\cs_new:Npn \tl_head:w #1#2 \q_stop {#1} \cs_new:Npn \tl_head:n #1 - { \etex_unexpanded:D \exp_after:wN { \tl_head:w #1 { } \q_stop } } + { + \etex_unexpanded:D + \if_false: { \fi: \@@_head_i:nw #1 { } \q_stop } + } +\cs_new:Npn \@@_head_i:nw #1#2 \q_stop + { \exp_after:wN \@@_head_ii:nw \exp_after:wN { \if_false: } \fi: {#1} } +\cs_new:Npn \@@_head_ii:nw #1 + { + \exp_after:wN \if_meaning:w \exp_after:wN \q_nil + \tl_to_str:n \exp_after:wN { \use_none:n #1 } \q_nil + \exp_after:wN \use_i:nn + \else: + \exp_after:wN \use_ii:nn + \fi: + {#1} + { \if_false: { \fi: \@@_head_i:nw #1 } } + } \cs_generate_variant:Nn \tl_head:n { V , v , f } +\cs_new:Npn \tl_head:w #1#2 \q_stop {#1} \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 @@ -2266,6 +2289,7 @@ % \end{macro} % \end{macro} % \end{macro} +% \end{macro} % % \begin{macro}{\str_head:n, \str_tail:n} % \begin{macro}[aux]{\__str_head:w} @@ -2514,18 +2538,31 @@ % \subsection{Viewing token lists} % % \begin{macro}{\tl_show:N, \tl_show:c} -% Showing token list variables is done directly: at the moment do not -% worry if they are defined. +% Showing token list variables is done after checking that the +% variable is defined (see \cs{__kernel_register_show:N}. % \begin{macrocode} -\cs_new_protected:Npn \tl_show:N #1 { \cs_show:N #1 } +\cs_new_protected:Npn \tl_show:N #1 + { + \cs_if_exist:NTF #1 + { \cs_show:N #1 } + { + \__msg_kernel_error:nnx { kernel } { variable-not-defined } + { \token_to_str:N #1 } + } + } \cs_generate_variant:Nn \tl_show:N { c } % \end{macrocode} %\end{macro} % % \begin{macro}{\tl_show:n} -% For literal token lists, life is easy. -% \begin{macrocode} -\cs_new_eq:NN \tl_show:n \etex_showtokens:D +% The \cs{__msg_show_variable:n} internal function performs +% line-wrapping, removes a leading \verb*|> |, then shows the result +% using the \cs{etex_showtokens:D} primitive. Since \cs{tl_to_str:n} +% is expanded within the line-wrapping code, the escape character is +% always a backslash. +% \begin{macrocode} +\cs_new_protected:Npn \tl_show:n #1 + { \__msg_show_variable:n { > ~ \tl_to_str:n {#1} } } % \end{macrocode} %\end{macro} % diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index d18bfd8148c..0991128f880 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/09/05} -\def\ExplFileVersion{4205} +\def\ExplFileDate{2012/09/29} +\def\ExplFileVersion{4249} \RequirePackage{etex} \reserveinserts{32} \ProvidesExplPackage diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3basics.sty b/Master/texmf-dist/tex/latex/l3kernel/l3basics.sty index d9dfc41083c..e9dc558a962 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3basics.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3basics.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3basics.dtx 4144 2012-08-27 19:37:16Z bruno $ +\GetIdInfo$Id: l3basics.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 Basic definitions} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -75,7 +75,6 @@ \tex_let:D \token_to_meaning:N \tex_meaning:D \tex_let:D \token_to_str:N \tex_string:D \tex_let:D \cs_meaning:N \tex_meaning:D -\tex_let:D \cs_show:N \tex_show:D \tex_let:D \scan_stop: \tex_relax:D \tex_let:D \group_begin: \tex_begingroup:D \tex_let:D \group_end: \tex_endgroup:D @@ -98,8 +97,6 @@ { \tl_to_str:n {undefined} } } \tex_let:D \token_to_meaning:c = \cs_meaning:c -\etex_protected:D \tex_def:D \cs_show:c - { \group_begin: \exp_args:NNc \group_end: \cs_show:N } \tex_let:D \c_minus_one \m@ne \tex_chardef:D \c_sixteen = 16 ~ \tex_chardef:D \c_zero = 0 ~ @@ -739,6 +736,25 @@ } \cs_new_protected_nopar:Npn \__kernel_register_show:c { \exp_args:Nc \__kernel_register_show:N } +\group_begin: + \tex_lccode:D `? = `: \scan_stop: + \tex_catcode:D `? = 12 \scan_stop: +\tex_lowercase:D + { + \group_end: + \cs_new_protected:Npn \cs_show:N #1 + { + \__msg_show_variable:n + { + > ~ \token_to_str:N #1 = + \exp_after:wN \__cs_show:www \cs_meaning:N #1 + \use_none:nn ? \prg_do_nothing: + } + } + \cs_new:Npn \__cs_show:www #1 ? { #1 ? \\ } + } +\cs_new_protected_nopar:Npn \cs_show:c + { \group_begin: \exp_args:NNc \group_end: \cs_show:N } \cs_new_eq:NN \luatex_if_engine:T \use_none:n \cs_new_eq:NN \luatex_if_engine:F \use:n \cs_new_eq:NN \luatex_if_engine:TF \use_ii:nn diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty b/Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty index 6ee3e3a018b..433ff506d60 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty @@ -578,10 +578,14 @@ } \cs_new_protected:Npn \__coffin_find_corner_maxima_aux:nn #1#2 { - \dim_set_min:Nn \l__coffin_left_corner_dim {#1} - \dim_set_max:Nn \l__coffin_right_corner_dim {#1} - \dim_set_min:Nn \l__coffin_bottom_corner_dim {#2} - \dim_set_max:Nn \l__coffin_top_corner_dim {#2} + \dim_set:Nn \l__coffin_left_corner_dim + { \dim_min:nn { \l__coffin_left_corner_dim } {#1} } + \dim_set:Nn \l__coffin_right_corner_dim + { \dim_max:nn { \l__coffin_right_corner_dim } {#1} } + \dim_set:Nn \l__coffin_bottom_corner_dim + { \dim_min:nn { \l__coffin_bottom_corner_dim } {#2} } + \dim_set:Nn \l__coffin_top_corner_dim + { \dim_max:nn { \l__coffin_top_corner_dim } {#2} } } \cs_new_protected_nopar:Npn \__coffin_find_bounding_shift: { @@ -590,7 +594,10 @@ { \__coffin_find_bounding_shift_aux:nn ##2 } } \cs_new_protected:Npn \__coffin_find_bounding_shift_aux:nn #1#2 - { \dim_set_min:Nn \l__coffin_bounding_shift_dim {#1} } + { + \dim_set:Nn \l__coffin_bounding_shift_dim + { \dim_min:nn { \l__coffin_bounding_shift_dim } {#1} } + } \cs_new_protected:Npn \__coffin_shift_corner:Nnnn #1#2#3#4 { \prop_put:cnx { l__coffin_corners_ \__int_value:w #1 _ prop } {#2} diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3clist.sty b/Master/texmf-dist/tex/latex/l3kernel/l3clist.sty index 18cee384adc..284830694db 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3clist.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3clist.sty @@ -48,7 +48,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3clist.dtx 4102 2012-08-15 16:08:27Z bruno $ +\GetIdInfo$Id: l3clist.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 Comma separated lists} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -419,7 +419,7 @@ } \cs_new_protected:Npn \clist_show:N #1 { - \__msg_show_variable:Nnx #1 { clist } + \__msg_show_variable:Nnn #1 { clist } { \clist_map_function:NN #1 \__msg_show_item:n } } \cs_new_protected:Npn \clist_show:n #1 diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3coffins.sty b/Master/texmf-dist/tex/latex/l3kernel/l3coffins.sty index 1b8d88d4761..a3743a477ad 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3coffins.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3coffins.sty @@ -47,7 +47,7 @@ %% ----------------------------------------------------------------------- %% \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3coffins.dtx 4092 2012-08-14 14:04:41Z bruno $ +\GetIdInfo$Id: l3coffins.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 Coffin code layer} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -807,7 +807,7 @@ { \__coffin_if_exist:NT #1 { - \__msg_show_variable:Nnx #1 { coffins } + \__msg_show_variable:Nnn #1 { coffins } { \prop_map_function:cN { l__coffin_poles_ \__int_value:w #1 _prop } diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls index 81daef1452a..b75f0c5779c 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls +++ b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls @@ -4,7 +4,8 @@ %% %% The original source files were: %% -%% l3doc.dtx (with options: `class') +%% l3doc.dtx (with options: `class,cfg') +%% %% %% EXPERIMENTAL CODE %% @@ -13,6 +14,7 @@ %% %% 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 @@ -50,7 +52,7 @@ \let \fileversionOld \ExplFileVersion \let \filedescriptionOld \ExplFileDescription \RequirePackage{expl3,xparse,calc} -\GetIdInfo$Id: l3doc.dtx 4130 2012-08-20 21:30:22Z joseph $ +\GetIdInfo$Id: l3doc.dtx 4230 2012-09-24 21:44:28Z joseph $ {L3 Experimental documentation class} \ProvidesExplClass {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -1173,6 +1175,7 @@ \clist_map_inline:nn {#1} { \clist_put_right:Nn \g_docinput_clist {##1} + \tl_gclear:N \g__codedoc_module_name_tl \MakePercentIgnore \input{##1} \MakePercentComment @@ -1183,6 +1186,7 @@ \clist_map_inline:Nn \g_docinput_clist { \MakePercentIgnore + \tl_gclear:N \g__codedoc_module_name_tl \input{##1} \MakePercentComment } @@ -1446,6 +1450,51 @@ \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/l3file.sty b/Master/texmf-dist/tex/latex/l3kernel/l3file.sty index 44e02bdff7c..b3c04f68873 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3file.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3file.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3file.dtx 4101 2012-08-15 16:05:33Z bruno $ +\GetIdInfo$Id: l3file.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 File and I/O operations} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -307,7 +307,7 @@ \__msg_term:nnn { LaTeX / kernel } { \prop_if_empty:NTF #1 { show-no-stream } { show-open-streams } } {#2} - \__msg_show_variable:x + \__msg_show_variable:n { \prop_map_function:NN #1 \__msg_show_item_unbraced:nn } } \cs_new_eq:NN \if_eof:w \tex_ifeof:D @@ -420,13 +420,14 @@ \cs_new_protected_nopar:Npn \iow_list_streams: { \__iow_list_streams:Nn \g__iow_streams_prop { output } } \cs_new_eq:NN \__iow_list_streams:Nn \__ior_list_streams:Nn -\cs_new_eq:NN \iow_shipout_x:Nn \tex_write:D +\cs_new_protected:Npn \iow_shipout_x:Nn #1#2 + { \tex_write:D #1 {#2} } \cs_generate_variant:Nn \iow_shipout_x:Nn { Nx } \cs_new_protected:Npn \iow_shipout:Nn #1#2 - { \iow_shipout_x:Nn #1 { \exp_not:n {#2} } } + { \tex_write:D #1 { \exp_not:n {#2} } } \cs_generate_variant:Nn \iow_shipout:Nn { Nx } \cs_new_protected:Npn \iow_now:Nn #1#2 - { \tex_immediate:D \iow_shipout_x:Nn #1 { \exp_not:n {#2} } } + { \tex_immediate:D \tex_write:D #1 { \exp_not:n {#2} } } \cs_generate_variant:Nn \iow_now:Nn { Nx } \cs_set_protected_nopar:Npn \iow_log:x { \iow_now:Nx \c_log_iow } \cs_new_protected_nopar:Npn \iow_log:n { \iow_now:Nn \c_log_iow } diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3fp.sty b/Master/texmf-dist/tex/latex/l3kernel/l3fp.sty index eac513e519c..6c9d3b3bc2e 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3fp.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3fp.sty @@ -59,7 +59,7 @@ %% ----------------------------------------------------------------------- %% \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3fp.dtx 4151 2012-08-28 11:51:52Z bruno $ +\GetIdInfo$Id: l3fp.dtx 4234 2012-09-26 09:43:31Z bruno $ {L3 Floating points} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -4419,6 +4419,10 @@ \cs_new_eq:NN \fp_eval:n \fp_to_decimal:n \cs_new:Npn \fp_abs:n #1 { \fp_to_decimal:n { abs \__fp_parse:n {#1} } } +\cs_new:Npn \fp_max:nn #1#2 + { \fp_to_decimal:n { max ( \__fp_parse:n {#1} , \__fp_parse:n {#2} ) } } +\cs_new:Npn \fp_min:nn #1#2 + { \fp_to_decimal:n { min ( \__fp_parse:n {#1} , \__fp_parse:n {#2} ) } } \cs_new:Npn \__fp_array_to_clist:n #1 { \tl_if_empty:nF {#1} @@ -4516,14 +4520,14 @@ \cs_new_protected:Npn \fp_show:N #1 { \fp_if_exist:NTF #1 - { \__msg_show_variable:x { > \fp_to_tl:N #1 } } + { \__msg_show_variable:n { > ~ \fp_to_tl:N #1 } } { \__msg_kernel_error:nnx { kernel } { variable-not-defined } { \token_to_str:N #1 } } } \cs_new_protected:Npn \fp_show:n #1 - { \__msg_show_variable:x { > \fp_to_tl:n {#1} } } + { \__msg_show_variable:n { > ~ \fp_to_tl:n {#1} } } \cs_generate_variant:Nn \fp_show:N { c } \fp_const:Nn \c_e_fp { 2.718 2818 2845 9045 } \fp_const:Nn \c_one_fp { 1 } diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3int.sty b/Master/texmf-dist/tex/latex/l3kernel/l3int.sty index 25667fc8c75..cd2ab964888 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3int.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3int.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3int.dtx 4121 2012-08-17 01:36:30Z bruno $ +\GetIdInfo$Id: l3int.dtx 4237 2012-09-26 10:18:58Z bruno $ {L3 Integers} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -59,33 +59,35 @@ \cs_new:Npn \int_eval:n #1 { \__int_value:w \__int_eval:w #1 \__int_eval_end: } \cs_new:Npn \int_abs:n #1 { - \__int_value:w - \if_int_compare:w \__int_eval:w #1 < \c_zero - - - \fi: - \__int_eval:w #1 \__int_eval_end: + \__int_value:w \exp_after:wN \__int_abs:N + \int_use:N \__int_eval:w #1 \__int_eval_end: + \exp_stop_f: } -\cs_new:Npn \int_max:nn #1#2 +\cs_new:Npn \__int_abs:N #1 + { \if_meaning:w - #1 \else: \exp_after:wN #1 \fi: } +\cs_set:Npn \int_max:nn #1#2 { - \__int_value:w \__int_eval:w - \if_int_compare:w - \__int_eval:w #1 > \__int_eval:w #2 \__int_eval_end: - #1 - \else: - #2 - \fi: - \__int_eval_end: + \__int_value:w \exp_after:wN \__int_maxmin:wwN + \int_use:N \__int_eval:w #1 \exp_after:wN ; + \int_use:N \__int_eval:w #2 ; + > + \exp_stop_f: } -\cs_new:Npn \int_min:nn #1#2 +\cs_set:Npn \int_min:nn #1#2 { - \__int_value:w \__int_eval:w - \if_int_compare:w - \__int_eval:w #1 < \__int_eval:w #2 \__int_eval_end: - #1 - \else: - #2 - \fi: - \__int_eval_end: + \__int_value:w \exp_after:wN \__int_maxmin:wwN + \int_use:N \__int_eval:w #1 \exp_after:wN ; + \int_use:N \__int_eval:w #2 ; + < + \exp_stop_f: + } +\cs_new:Npn \__int_maxmin:wwN #1 ; #2 ; #3 + { + \if_int_compare:w #1 #3 #2 ~ + #1 + \else: + #2 + \fi: } \cs_new:Npn \int_div_truncate:nn #1#2 { @@ -108,13 +110,17 @@ \fi: / #3#4 } -\cs_new:Npn \int_div_round:nn #1#2 { \int_eval:n { ( #1 ) / ( #2 ) } } +\cs_new:Npn \int_div_round:nn #1#2 + { \__int_value:w \__int_eval:w ( #1 ) / ( #2 ) \__int_eval_end: } \cs_new:Npn \int_mod:nn #1#2 { - \__int_value:w \__int_eval:w - #1 - \int_div_truncate:nn {#1} {#2} * ( #2 ) + \__int_value:w \__int_eval:w \exp_after:wN \__int_mod:ww + \__int_value:w \__int_eval:w #1 \exp_after:wN ; + \__int_value:w \__int_eval:w #2 ; \__int_eval_end: } +\cs_new:Npn \__int_mod:ww #1; #2; + { #1 - ( \__int_div_truncate:NwNw #1 ; #2 ; ) * #2 } \cs_new_protected:Npn \int_new:N #1 { \__chk_if_free_cs:N #1 diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3keys.sty b/Master/texmf-dist/tex/latex/l3kernel/l3keys.sty index 673001477d5..82dc4a656f7 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3keys.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3keys.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3keys.dtx 3991 2012-07-16 19:00:35Z joseph $ +\GetIdInfo$Id: l3keys.dtx 4248 2012-09-29 19:55:27Z joseph $ {L3 Experimental key-value interfaces} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -73,7 +73,7 @@ \tl_replace_all:Nnn \l__keyval_sanitise_tl { , } { 9 } \tl_clear:N \l__keyval_parse_tl \exp_after:wN \__keyval_parse_elt:w \exp_after:wN - \q_no_value \l__keyval_sanitise_tl 9 \q_nil 9 + \q_nil \l__keyval_sanitise_tl 9 \q_recursion_tail 9 \q_recursion_stop \exp_after:wN \group_end: \l__keyval_parse_tl } @@ -81,18 +81,16 @@ \cs_new_protected:Npn \__keyval_parse_elt:w #1 , { \tl_if_blank:oTF { \use_none:n #1 } - { \__keyval_parse_elt:w \q_no_value } + { \__keyval_parse_elt:w \q_nil } { - \quark_if_nil:oF { \use_ii:nn #1 } - { - \__keyval_split_key_value:w #1 = = \q_stop - \__keyval_parse_elt:w \q_no_value - } + \quark_if_recursion_tail_stop:o { \use_ii:nn #1 } + \__keyval_split_key_value:w #1 = = \q_stop + \__keyval_parse_elt:w \q_nil } } \cs_new_protected:Npn \__keyval_split_key_value:w #1 = #2 \q_stop { - \__keyval_split_key:w #1 \q_stop + \__keyval_split_key:n {#1} \str_if_eq:nnTF {#2} { = } { \tl_put_right:Nx \l__keyval_parse_tl @@ -110,11 +108,15 @@ } \cs_new:Npn \__keyval_split_key_value:wTF #1 = #2#3 \q_stop { \tl_if_head_eq_meaning:nNTF {#3} \q_no_value } -\cs_new_protected:Npn \__keyval_split_key:w #1 \q_stop +\cs_new_protected:Npn \__keyval_split_key:n #1 { - \tl_set:Nx \l__keyval_key_tl - { \exp_after:wN \tl_trim_spaces:n \exp_after:wN { \use_none:n #1 } } + \str_if_eq_x:nnTF + { \exp_not:N \q_nil } { \exp_not:o { \use_none:nnn #1 \q_nil \q_nil } } + { \tl_set:Nx \l__keyval_key_tl { \exp_not:o { \use_ii:nnn #1 \q_nil } } } + { \__keyval_split_key:w #1 \q_stop } } +\cs_new_protected:Npn \__keyval_split_key:w \q_nil #1 \q_stop + { \tl_set:Nx \l__keyval_key_tl { \tl_trim_spaces:n {#1} } } \cs_new_protected:Npn \__keyval_split_value:w #1 = = { \tl_put_right:Nx \l__keyval_parse_tl diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3msg.sty b/Master/texmf-dist/tex/latex/l3kernel/l3msg.sty index 0d717006172..584b54ac427 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3msg.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3msg.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3msg.dtx 4147 2012-08-28 10:27:33Z bruno $ +\GetIdInfo$Id: l3msg.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 Messages} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -744,43 +744,37 @@ \cs_if_exist:NTF #1 { \__msg_term:nnn { LaTeX / kernel } { show- #2 } {#1} - \__msg_show_variable:x { \tl_to_str:n {#3} } + \__msg_show_variable:n {#3} } { \__msg_kernel_error:nnx { kernel } { variable-not-defined } { \token_to_str:N #1 } } } -\cs_generate_variant:Nn \__msg_show_variable:Nnn { Nnx } \cs_new_protected:Npn \__msg_show_variable:n #1 + { \iow_wrap:nnnN {#1} { } { } \__msg_show_variable_aux:n } +\cs_new_protected:Npn \__msg_show_variable_aux:n #1 { - \tl_set:Nn \l__msg_internal_tl {#1} - \tl_if_empty:NTF \l__msg_internal_tl - { \etex_showtokens:D \exp_after:wN { } } - { - \exp_args:Nf \etex_showtokens:D - { - \exp_after:wN \exp_after:wN - \exp_after:wN \__msg_show_variable:w - \exp_after:wN \l__msg_internal_tl - } - } + \tl_if_empty:nTF {#1} + { \tl_clear:N \l__msg_internal_tl } + { \tl_set:Nf \l__msg_internal_tl { \__msg_show_variable_aux:w #1 } } + \etex_showtokens:D \exp_after:wN \exp_after:wN \exp_after:wN + { \exp_after:wN \l__msg_internal_tl } } -\cs_generate_variant:Nn \__msg_show_variable:n { x } -\cs_new:Npn \__msg_show_variable:w #1 > { } +\cs_new:Npn \__msg_show_variable_aux:w #1 > { } \cs_new:Npn \__msg_show_item:n #1 { - \iow_newline: > \c_space_tl \c_space_tl { \exp_not:n {#1} } + \\ > \ \ \{ \tl_to_str:n {#1} \} } \cs_new:Npn \__msg_show_item:nn #1#2 { - \iow_newline: > \c_space_tl \c_space_tl { \exp_not:n {#1} } - \c_space_tl \c_space_tl => \c_space_tl \c_space_tl { \exp_not:n {#2} } + \\ > \ \ \{ \tl_to_str:n {#1} \} + \ \ => \ \ \{ \tl_to_str:n {#2} \} } \cs_new:Npn \__msg_show_item_unbraced:nn #1#2 { - \iow_newline: > \c_space_tl \c_space_tl \exp_not:n {#1} - \c_space_tl \c_space_tl => \c_space_tl \c_space_tl \exp_not:n {#2} + \\ > \ \ \tl_to_str:n {#1} + \ \ => \ \ \tl_to_str:n {#2} } \cs_new_nopar:Npn \msg_newline: { ^^J } \cs_new_nopar:Npn \msg_two_newlines: { ^^J ^^J } diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3names.sty b/Master/texmf-dist/tex/latex/l3kernel/l3names.sty index 660aa9e659b..7c12c601af2 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3names.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3names.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3bootstrap}[2012/07/15] -\GetIdInfo$Id: l3names.dtx 3990 2012-07-16 07:46:03Z joseph $ +\GetIdInfo$Id: l3names.dtx 4230 2012-09-24 21:44:28Z joseph $ {L3 Namespace for primitives} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3prg.sty b/Master/texmf-dist/tex/latex/l3kernel/l3prg.sty index 93ef25ee4b6..0b719688663 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3prg.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3prg.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3prg.dtx 4114 2012-08-16 01:57:02Z bruno $ +\GetIdInfo$Id: l3prg.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 Control structures} %% \ProvidesExplPackage @@ -106,8 +106,8 @@ \cs_new_protected:Npn \bool_show:n #1 { \bool_if:nTF {#1} - { \__msg_show_variable:n { > true } } - { \__msg_show_variable:n { > false } } + { \__msg_show_variable:n { > ~ true } } + { \__msg_show_variable:n { > ~ false } } } \cs_generate_variant:Nn \bool_show:N { c } \bool_new:N \l_tmpa_bool diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty b/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty index e9ecb340822..916ff713332 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 4190 2012-09-03 00:23:31Z bruno $ +\GetIdInfo$Id: l3prop.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 Property lists} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -295,7 +295,7 @@ { \__prg_map_break:Nn \prop_map_break: } \cs_new_protected:Npn \prop_show:N #1 { - \__msg_show_variable:Nnx #1 { prop } + \__msg_show_variable:Nnn #1 { prop } { \prop_map_function:NN #1 \__msg_show_item:nn } } \cs_generate_variant:Nn \prop_show:N { c } diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3seq.sty b/Master/texmf-dist/tex/latex/l3kernel/l3seq.sty index 58e3b205359..1a59d7c4911 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3seq.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3seq.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3seq.dtx 4092 2012-08-14 14:04:41Z bruno $ +\GetIdInfo$Id: l3seq.dtx 4212 2012-09-09 12:24:04Z bruno $ {L3 Sequences and stacks} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -433,7 +433,7 @@ \prg_new_eq_conditional:NNn \seq_gpop:cN \seq_gpop_left:cN { T , F , TF } \cs_new_protected:Npn \seq_show:N #1 { - \__msg_show_variable:Nnx #1 { seq } + \__msg_show_variable:Nnn #1 { seq } { \seq_map_function:NN #1 \__msg_show_item:n } } \cs_generate_variant:Nn \seq_show:N { c } diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3skip.sty b/Master/texmf-dist/tex/latex/l3kernel/l3skip.sty index adbdbc68d8c..4e7c82c333a 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3skip.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3skip.sty @@ -47,7 +47,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3bootstrap} -\GetIdInfo$Id: l3skip.dtx 4121 2012-08-17 01:36:30Z bruno $ +\GetIdInfo$Id: l3skip.dtx 4235 2012-09-26 09:48:18Z bruno $ {L3 Dimensions and skips} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -96,20 +96,6 @@ \cs_new_protected:Npn \dim_gset_eq:NN #1#2 { \tex_global:D #1 = #2 } \cs_generate_variant:Nn \dim_gset_eq:NN { c } \cs_generate_variant:Nn \dim_gset_eq:NN { Nc , cc } -\cs_new_protected_nopar:Npn \dim_set_max:Nn - { \__dim_set_max:NNNn < \dim_set:Nn } -\cs_new_protected_nopar:Npn \dim_gset_max:Nn - { \__dim_set_max:NNNn < \dim_gset:Nn } -\cs_new_protected_nopar:Npn \dim_set_min:Nn - { \__dim_set_max:NNNn > \dim_set:Nn } -\cs_new_protected_nopar:Npn \dim_gset_min:Nn - { \__dim_set_max:NNNn > \dim_gset:Nn } -\cs_new_protected:Npn \__dim_set_max:NNNn #1#2#3#4 - { \dim_compare:nNnT {#3} #1 {#4} { #2 #3 {#4} } } -\cs_generate_variant:Nn \dim_set_max:Nn { c } -\cs_generate_variant:Nn \dim_gset_max:Nn { c } -\cs_generate_variant:Nn \dim_set_min:Nn { c } -\cs_generate_variant:Nn \dim_gset_min:Nn { c } \cs_new_protected:Npn \dim_add:Nn #1#2 { \tex_advance:D #1 by \__dim_eval:w #2 \__dim_eval_end: } \cs_new_protected:Npn \dim_gadd:Nn { \tex_global:D \dim_add:Nn } @@ -122,14 +108,35 @@ \cs_generate_variant:Nn \dim_gsub:Nn { c } \cs_new:Npn \dim_abs:n #1 { - \dim_use:N - \__dim_eval:w - \if_dim:w \__dim_eval:w #1 < \c_zero_dim - - - \fi: - \__dim_eval:w #1 \__dim_eval_end: + \exp_after:wN \__dim_abs:N + \dim_use:N \__dim_eval:w #1 \__dim_eval_end: + } +\cs_new:Npn \__dim_abs:N #1 + { \if_meaning:w - #1 \else: \exp_after:wN #1 \fi: } +\cs_set:Npn \dim_max:nn #1#2 + { + \dim_use:N \__dim_eval:w \exp_after:wN \__dim_maxmin:wwN + \dim_use:N \__dim_eval:w #1 \exp_after:wN ; + \dim_use:N \__dim_eval:w #2 ; + > + \__dim_eval_end: + } +\cs_set:Npn \dim_min:nn #1#2 + { + \dim_use:N \__dim_eval:w \exp_after:wN \__dim_maxmin:wwN + \dim_use:N \__dim_eval:w #1 \exp_after:wN ; + \dim_use:N \__dim_eval:w #2 ; + < \__dim_eval_end: } +\cs_new:Npn \__dim_maxmin:wwN #1 ; #2 ; #3 + { + \if_dim:w #1 #3 #2 ~ + #1 + \else: + #2 + \fi: + } \cs_new:Npn \dim_ratio:nn #1#2 { \__dim_ratio:n {#1} / \__dim_ratio:n {#2} } \cs_new:Npn \__dim_ratio:n #1 @@ -441,6 +448,20 @@ \cs_new_eq:NN \prg_case_dim:nnn \dim_case:nnn \cs_new_eq:NN \dim_eval:w \__dim_eval:w \cs_new_eq:NN \dim_eval_end: \__dim_eval_end: +\cs_new_protected_nopar:Npn \dim_set_max:Nn + { \__dim_set_max:NNNn < \dim_set:Nn } +\cs_new_protected_nopar:Npn \dim_gset_max:Nn + { \__dim_set_max:NNNn < \dim_gset:Nn } +\cs_new_protected_nopar:Npn \dim_set_min:Nn + { \__dim_set_max:NNNn > \dim_set:Nn } +\cs_new_protected_nopar:Npn \dim_gset_min:Nn + { \__dim_set_max:NNNn > \dim_gset:Nn } +\cs_new_protected:Npn \__dim_set_max:NNNn #1#2#3#4 + { \dim_compare:nNnT {#3} #1 {#4} { #2 #3 {#4} } } +\cs_generate_variant:Nn \dim_set_max:Nn { c } +\cs_generate_variant:Nn \dim_gset_max:Nn { c } +\cs_generate_variant:Nn \dim_set_min:Nn { c } +\cs_generate_variant:Nn \dim_gset_min:Nn { c } %% %% %% End of file `l3skip.sty'. diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3tl.sty b/Master/texmf-dist/tex/latex/l3kernel/l3tl.sty index 8a8d89bb904..ef644d3dfd6 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 4201 2012-09-05 08:00:54Z joseph $ +\GetIdInfo$Id: l3tl.dtx 4244 2012-09-28 22:46:36Z bruno $ {L3 Token lists} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -216,8 +216,10 @@ \cs_generate_variant:Nn \tl_set_rescan:Nnn { c , cno , cnx } \cs_generate_variant:Nn \tl_gset_rescan:Nnn { Nno , Nnx } \cs_generate_variant:Nn \tl_gset_rescan:Nnn { c , cno } -\cs_new_eq:NN \tl_to_lowercase:n \tex_lowercase:D -\cs_new_eq:NN \tl_to_uppercase:n \tex_uppercase:D +\cs_new_protected:Npn \tl_to_lowercase:n #1 + { \tex_lowercase:D {#1} } +\cs_new_protected:Npn \tl_to_uppercase:n #1 + { \tex_uppercase:D {#1} } \cs_new_protected_nopar:Npn \tl_replace_once:Nnn { \__tl_replace:NNNnn \__tl_replace_once: \tl_set:Nx } \cs_new_protected_nopar:Npn \tl_greplace_once:Nnn @@ -340,9 +342,9 @@ \prg_new_protected_conditional:Npnn \tl_if_eq:nn #1#2 { T , F , TF } { \group_begin: - \tl_set:Nn \l_tl_internal_a_tl {#1} - \tl_set:Nn \l_tl_internal_b_tl {#2} - \if_meaning:w \l_tl_internal_a_tl \l_tl_internal_b_tl + \tl_set:Nn \l__tl_internal_a_tl {#1} + \tl_set:Nn \l__tl_internal_b_tl {#2} + \if_meaning:w \l__tl_internal_a_tl \l__tl_internal_b_tl \group_end: \prg_return_true: \else: @@ -350,8 +352,8 @@ \prg_return_false: \fi: } -\tl_new:N \l_tl_internal_a_tl -\tl_new:N \l_tl_internal_b_tl +\tl_new:N \l__tl_internal_a_tl +\tl_new:N \l__tl_internal_b_tl \cs_new_protected_nopar:Npn \tl_if_in:NnT { \exp_args:No \tl_if_in:nnT } \cs_new_protected_nopar:Npn \tl_if_in:NnF { \exp_args:No \tl_if_in:nnF } \cs_new_protected_nopar:Npn \tl_if_in:NnTF { \exp_args:No \tl_if_in:nnTF } @@ -588,10 +590,26 @@ { \tl_gset:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } } \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_head:n #1 - { \etex_unexpanded:D \exp_after:wN { \tl_head:w #1 { } \q_stop } } + { + \etex_unexpanded:D + \if_false: { \fi: \__tl_head_i:nw #1 { } \q_stop } + } +\cs_new:Npn \__tl_head_i:nw #1#2 \q_stop + { \exp_after:wN \__tl_head_ii:nw \exp_after:wN { \if_false: } \fi: {#1} } +\cs_new:Npn \__tl_head_ii:nw #1 + { + \exp_after:wN \if_meaning:w \exp_after:wN \q_nil + \tl_to_str:n \exp_after:wN { \use_none:n #1 } \q_nil + \exp_after:wN \use_i:nn + \else: + \exp_after:wN \use_ii:nn + \fi: + {#1} + { \if_false: { \fi: \__tl_head_i:nw #1 } } + } \cs_generate_variant:Nn \tl_head:n { V , v , f } +\cs_new:Npn \tl_head:w #1#2 \q_stop {#1} \cs_new_nopar:Npn \tl_head:N { \exp_args:No \tl_head:n } \cs_new:Npn \tl_tail:n #1 { @@ -723,9 +741,18 @@ { \exp_after:wN \c_zero \exp_after:wN \prg_return_false: } \exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi: } -\cs_new_protected:Npn \tl_show:N #1 { \cs_show:N #1 } +\cs_new_protected:Npn \tl_show:N #1 + { + \cs_if_exist:NTF #1 + { \cs_show:N #1 } + { + \__msg_kernel_error:nnx { kernel } { variable-not-defined } + { \token_to_str:N #1 } + } + } \cs_generate_variant:Nn \tl_show:N { c } -\cs_new_eq:NN \tl_show:n \etex_showtokens:D +\cs_new_protected:Npn \tl_show:n #1 + { \__msg_show_variable:n { > ~ \tl_to_str:n {#1} } } \tl_new:N \g_tmpa_tl \tl_new:N \g_tmpb_tl \tl_new:N \l_tmpa_tl |