# README

## xint 1.2k

### 2017/01/06

    Source:  xint.dtx 1.2k 2017/01/06 (doc 2017/01/06)
    Author:  Jean-Francois Burnol
    Info:    Expandable operations on big integers, decimals, fractions
    License: LPPL 1.3c

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 123456789^1000.5\relax
    ->3.63692761822782679930738270515740797370813691938e8095

However, only integer and half-integer exponents are currently allowed. The `sqrt` operation achieves correct rounding in arbitrary precision.

It is possible to use the package with Plain as well as with LaTeX.

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).

A more light-weight (LaTeX only) package bnumexpr loads only `xintcore` and provides a parser which handles only big integers, the four operations, the power operation and the factorial.

# Usage

## 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`. All dependencies are handled automatically. For example `xintexpr` automatically loads `xintfrac` which itself loads `xint`. Package `xintcore` is the subset of `xint` providing only the five operations on big integers: `\xintiiAdd`, `\xintiiMul`, ... 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

All dependencies are handled automatically. 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

2. cd to the download repertory and issue:

       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.

# License

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.