summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/l3packages/xfp.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/l3packages/xfp.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/l3packages/xfp.dtx')
-rw-r--r--macros/latex/contrib/l3packages/xfp.dtx194
1 files changed, 194 insertions, 0 deletions
diff --git a/macros/latex/contrib/l3packages/xfp.dtx b/macros/latex/contrib/l3packages/xfp.dtx
new file mode 100644
index 0000000000..1b6cbd3680
--- /dev/null
+++ b/macros/latex/contrib/l3packages/xfp.dtx
@@ -0,0 +1,194 @@
+% \iffalse meta-comment
+%
+%% File: xfp.dtx
+%
+% Copyright (C) 2017-2019 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
+%
+% https://www.latex-project.org/lppl.txt
+%
+% This file is part of the "l3packages bundle" (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the bundle can be found at
+%
+% https://github.com/latex3/latex3
+%
+% for those people who are interested.
+%
+%<*driver|package>
+% The version of expl3 required is tested as early as possible, as
+% some really old versions do not define \ProvidesExplPackage.
+\RequirePackage{expl3}[2018/02/21]
+%<package>\@ifpackagelater{expl3}{2018/02/21}
+%<package> {}
+%<package> {%
+%<package> \PackageError{xfp}{Support package l3kernel too old}
+%<package> {%
+%<package> Please install an up to date version of l3kernel\MessageBreak
+%<package> using your TeX package manager or from CTAN.\MessageBreak
+%<package> \MessageBreak
+%<package> Loading xfp will abort!%
+%<package> }%
+%<package> \endinput
+%<package> }
+%<package>\RequirePackage{xparse}
+%</driver|package>
+%<*driver>
+\documentclass[full]{l3doc}
+\usepackage{amstext}
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \providecommand\nan{\texttt{NaN}}
+%
+% \title{^^A
+% The \textsf{xfp} package\\Floating Point Unit^^A
+% }
+%
+% \author{^^A
+% The \LaTeX3 Project\thanks
+% {^^A
+% E-mail:
+% \href{mailto:latex-team@latex-project.org}
+% {latex-team@latex-project.org}^^A
+% }^^A
+% }
+%
+% \date{Released 2019-05-28}
+%
+% \maketitle
+%
+% \begin{documentation}
+%
+% This package provides a \LaTeXe{} document-level interface to the \LaTeX{}3
+% floating point unit (part of \pkg{expl3}). It also provides a parallel
+% integer expression interface for convenience.
+%
+% \begin{function}[EXP]{\fpeval}
+% The expandable command \cs{fpeval} takes as its argument a floating
+% point expression and produces a result using the normal rules of
+% mathematics. As this command is expandable it can be used where \TeX{}
+% requires a number and for example within a low-level \cs{edef} operation
+% to give a purely numerical result.
+% \end{function}
+%
+% Briefly, the floating point expressions may comprise:
+% \begin{itemize}
+% \item Basic arithmetic: addition $x+y$, subtraction $x-y$,
+% multiplication $x*y$, division $x/y$, square root~$\sqrt{x}$,
+% and parentheses.
+% \item Comparison operators: $x\mathop{\mathtt{<}}y$,
+% $x\mathop{\mathtt{<=}}y$, $x\mathop{\mathtt{>?}}y$,
+% $x\mathop{\mathtt{!=}}y$ \emph{etc.}
+% \item Boolean logic: sign $\operatorname{sign} x$,
+% negation $\mathop{!}x$, conjunction
+% $x\mathop{\&\&}y$, disjunction $x\mathop{\vert\vert}y$, ternary
+% operator $x\mathop{?}y\mathop{:}z$.
+% \item Exponentials: $\exp x$, $\ln x$, $x^y$.
+% \item Integer factorial: $\operatorname{fact} x$.
+% \item Trigonometry: $\sin x$, $\cos x$, $\tan x$, $\cot x$, $\sec
+% x$, $\csc x$ expecting their arguments in radians, and
+% $\operatorname{sind} x$, $\operatorname{cosd} x$,
+% $\operatorname{tand} x$, $\operatorname{cotd} x$,
+% $\operatorname{secd} x$, $\operatorname{cscd} x$ expecting their
+% arguments in degrees.
+% \item Inverse trigonometric functions: $\operatorname{asin} x$,
+% $\operatorname{acos} x$, $\operatorname{atan} x$,
+% $\operatorname{acot} x$, $\operatorname{asec} x$,
+% $\operatorname{acsc} x$ giving a result in radians, and
+% $\operatorname{asind} x$, $\operatorname{acosd} x$,
+% $\operatorname{atand} x$, $\operatorname{acotd} x$,
+% $\operatorname{asecd} x$, $\operatorname{acscd} x$ giving a result
+% in degrees.
+% \item Extrema: $\max(x_{1},x_{2},\ldots)$, $\min(x_{1},x_{2},\ldots)$,
+% $\operatorname{abs}(x)$.
+% \item Rounding functions, controlled by two optional
+% values, $n$ (number of places, $0$ by default) and
+% $t$ (behavior on a tie, $\nan$ by default):
+% \begin{itemize}
+% \item $\operatorname{trunc}(x,n)$ rounds towards zero,
+% \item $\operatorname{floor}(x,n)$ rounds towards~$-\infty$,
+% \item $\operatorname{ceil}(x,n)$ rounds towards~$+\infty$,
+% \item $\operatorname{round}(x,n,t)$ rounds to the closest value, with
+% ties rounded to an even value by default, towards zero if $t=0$,
+% towards $+\infty$ if $t>0$ and towards $-\infty$ if $t<0$.
+% \end{itemize}
+% \item Random numbers: $\mathop{rand}()$, $\mathop{randint}(m,n)$.
+% \item Constants: \texttt{pi}, \texttt{deg} (one degree in radians).
+% \item Dimensions, automatically expressed in points, \emph{e.g.},
+% \texttt{pc} is~$12$.
+% \item Automatic conversion (no need for \cs{number}) of
+% integer, dimension, and skip variables to floating points numbers,
+% expressing dimensions in points and ignoring the stretch and
+% shrink components of skips.
+% \item Tuples: $(x_1,\ldots{},x_n)$ that can be added together,
+% multiplied or divided by a floating point number, and nested.
+% \end{itemize}
+%
+% An example of use could be the following.
+% \begin{verbatim}
+% \LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3}
+% = \fpeval{sin(3.5)/2 + 2e-3} $.
+% \end{verbatim}
+%
+% \begin{function}[EXP]{\inteval}
+% The expandable command \cs{inteval} takes as its argument an integer
+% expression and produces a result using the normal rules of
+% mathematics. The operations recognised are |+|, |-|, |*| and |/| plus
+% parentheses. Division occurs with \emph{rounding}, and ties are rounded
+% away from zero. As this command is
+% expandable it can be used where \TeX{} requires a number and for example
+% within a low-level \cs{edef} operation to give a purely numerical result.
+% \end{function}
+%
+% An example of use could be the following.
+% \begin{verbatim}
+% \LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$.
+% \end{verbatim}
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{\pkg{xfp} implementation}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProvidesExplPackage{xfp}{2019-05-28}{}
+ {L3 Floating point unit}
+% \end{macrocode}
+%
+% \begin{macro}{\fpeval}
+% A document level wrapper around the code level function.
+% \begin{macrocode}
+\NewExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\inteval}
+% A second one, this time around an \eTeX{} primitive.
+% \begin{macrocode}
+\NewExpandableDocumentCommand \inteval { m } { \int_eval:n {#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \end{implementation}
+%
+% \PrintIndex