``` Name                    Last modified      Size  Description Parent Directory                             -
CHANGES.html            06-Aug-2017 14:39   71K  CHANGE LOG
CHANGES.pdf             06-Aug-2017 14:39   88K
Makefile                26-Jul-2017 12:23  655
sourcexint.pdf          06-Aug-2017 14:39  641K
xint.dtx                06-Aug-2017 14:38  1.3M
xint.ins                06-Aug-2017 14:38  2.9K
xint.pdf                06-Aug-2017 14:39  773K
```
``````Source:  xint.dtx 1.2n 2017/08/06 (doc 2017/08/06)
Author:  Jean-Francois Burnol
Info:    Expandable operations on big integers, decimals, fractions

This `README` is also available as `README.pdf` and `README.html`.

Change log is to be found in `CHANGES.pdf` or `CHANGES.html`.

The user manual is `xint.pdf`, and the commented source code is available as `sourcexint.pdf`.

# Aim

The basic aim is provide expandable computations on integers, fractions, and floating point numbers. For example

``\xinttheexpr reduce(37189719/183618963+11390170/17310720)^17\relax``

will evaluate exactly the fraction; the result has 462 characters (including the fraction slash.) One can also work with dummy variables:

``\xinttheexpr mul(add(x(x+1)(x+2), x=y..y+15), y=171286,98762,9296)\relax``

evaluates to `15979066346135829902328007959448563667099190784`.

Float computations are possible at an adjustable precision (default 16).

``````\xintDigits:=48;\xintthefloatexpr 123_456_789^1_000.5\relax
->3.63692761822782679930738270515740797370813691938e8095``````

But currently, only integer and half-integer exponents are allowed for the power operation in expressions and only the square-root operation is implemented besides the four arithmetic operations. Square-root and the four operations achieve correct rounding in the given arbitrary precision.

Sub-units `xintcore`, `xint` and `xintfrac` provide the underlying macros, and `xintexpr` loads all of them and provides expandable parsers allowing computations such as the above (and more).

# Usage

It is possible to use the package with Plain (via `\input` anywhere) or with LaTeX (via `\usepackage` in the preamble).

## With LaTeX

``````\usepackage{xint}       % expandable arithmetic with big integers
\usepackage{xintfrac}   % decimal numbers, fractions, floats
\usepackage{xintexpr}   % expressions with infix operators``````

Further packages: `xintbinhex`, `xintgcd`, `xintseries` and `xintcfrac`.

Main dependencies are handled automatically. For example `xintexpr` automatically loads `xintfrac` which itself loads `xint`; but use of the `gcd` and `lcm` functions in expressions require explicit loading of `xintgcd`, and hexadecimal notation requires explicit loading of `xintbinhex`.

Package `xintcore` is the subset of `xint` providing only the five operations on big integers: `\xintiiAdd`, `\xintiiMul`, ... It is (by default) loaded by the (LaTeX only) package bnumexpr which provides a more light-weight expression parser handling only big integers, the four operations, the power operation and the factorial.

There is also `xinttools` which is a separate package providing, among others, expandable and non-expandable loops such as `\xintFor`.

## With TeX

One does for example:

``\input xintexpr.sty``

The packages may be loaded in any catcode context such that letters, digits, `\` and `%` have their standard catcodes.

`xintcore.sty` and `xinttools.sty` both import `xintkernel.sty` which has the catcode handler and package identifier and defines a few utilities such as `\oodef`, `\fdef`, or `\xint_dothis/\xint_orthat`.

# Installation

## Method A: using the package manager of your TeX distribution

`xint` is included in TeXLive (hence also MacTeX) and MikTeX.

There can be a few days of delay between apparition of a new version on CTAN and availability via the distribution package manager.

## Method B: manual installation using `xint.tds.zip` and `unzip`

Assumes a GNU/Linux-like system (or Mac OS X).

1. obtain `xint.tds.zip` from CTAN: http://mirror.ctan.org/install/macros/generic/xint.tds.zip

``unzip xint.tds.zip -d <TEXMF>``

where `<TEXMF>` is a suitable TDS-compliant destination repertory. For example, with TeXLive:

• Linux, standard access rights, hence sudo is needed, installation into the "local" tree:

``````sudo unzip xint.tds.zip -d /usr/local/texlive/texmf-local
sudo texhash /usr/local/texlive/texmf-local``````
• Mac OS X, installation into user home folder (no sudo needed, and it is recommended to not have a ls-R file there, hence no texhash):

``unzip xint.tds.zip -d  ~/Library/texmf``

## Method C: manual installation using `Makefile` and `xint.dtx`

The Makefile automatizes rebuilding from `xint.dtx` all documentation files as well as `xint.tds.zip`. It is for GNU/Linux-like (inc. Mac OS X) systems, with a teTeX like installation such as TeXLive. Furthermore the Pandoc software is required.

1. obtain `xint.dtx` and `Makefile` from http://mirror.ctan.org/macros/generic/xint.

2. put them in an otherwise empty working repertory, run `make` or equivalently `make help` for further instructions.

## Method D: installation starting with only `xint.dtx`

Run `"tex xint.dtx"` or `"etex xint.dtx"` to extract from `xint.dtx` all packages as well as these files:

`README.md`
the current README with Markdown formatting.
`CHANGES.md`
the changes across successive releases.
`xint.tex`
used to generate `xint.pdf` via `"latex xint.tex"` (thrice) then `"dvipdfmx xint.dvi"`. It is also possible to compile `xint.tex` with `xelatex`, or with `pdflatex` (this latter option produces a bigger pdf).

For successful compilation, packages `newtxtt`, `newtxmath`, `etoc`, `mathastext` are needed. Inclusion of the source code is off by default, but the toggle can be set in `xint.tex`.

A third option is to generate `xint.pdf` via `xelatex xint.dtx` or `pdflatex xint.dtx`. Source code is then included by default (but some code comments in French use 8bit characters, hence for `xelatex` an a priori conversion of xint.dtx into utf-8 will give a better result).

`Makefile.mk`
this is for UNIX-like systems. Note: this file is only produced with `"etex xint.dtx"`, not with `"tex xint.dtx"`. Rename it to `Makefile` and run `make` on the command line for further help.
`doHTMLs.sh` and `doPDFs.sh`
these are scripts (for UNIX-like systems) which can be used to convert the `README.md` and `CHANGES.md` to HTML and PDF formats. They require Pandoc.
`pandoctpl.latex`
a Pandoc template used by `doPDFs.sh`.

Finishing the installation in a TDS hierarchy:

• move the style files to `TDS:tex/generic/xint/`

• `xint.dtx` goes to `TDS:source/generic/xint/`

• the documentation (xint.pdf, README.md,...) goes to `TDS:doc/generic/xint/`

Depending on the destination, it may then be necessary to refresh a filename database.

Copyright (C) 2013-2017 by Jean-Francois Burnol

This Work may be distributed and/or modified under the conditions of the LaTeX Project Public License version 1.3c. This version of this license is in

http://www.latex-project.org/lppl/lppl-1-3c.txt

and version 1.3 or later is part of all distributions of LaTeX version 2005/12/01 or later.

This Work has the LPPL maintenance status `author-maintained`.

The Author of this Work is Jean-Francois Burnol.

This Work consists of the source file xint.dtx and of its derived files: xintkernel.sty, xintcore.sty, xint.sty, xintfrac.sty, xintexpr.sty, xintbinhex.sty, xintgcd.sty, xintseries.sty, xintcfrac.sty, xinttools.sty, xint.ins, xint.tex, README, README.md, README.html, README.pdf, CHANGES.md, CHANGES.html, CHANGES.pdf, pandoctpl.latex, doHTMLs.sh, doPDFs.sh, xint.dvi, xint.pdf, Makefile.mk.