Showing preview only (1,468K chars total). Download the full file or copy to clipboard to get everything.
Repository: wspr/unicode-math
Branch: master
Commit: 184a23b0cb25
Files: 373
Total size: 1.3 MB
Directory structure:
gitextract_bckax2lv/
├── .github/
│ ├── CONTRIBUTING.md
│ ├── ISSUE_TEMPLATE.md
│ └── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── .travis.yml
├── CHANGES.md
├── COPYRIGHT
├── LICENSE
├── MANIFEST.md
├── README.md
├── RELEASE_CHECKLIST.md
├── _config.yml
├── autorelease.lua
├── build.lua
├── githooks/
│ ├── enable-githooks.sh
│ └── post-commit
├── misc/
│ ├── amsmath-testmath.tex
│ ├── stix-extract.sh
│ └── torture.tex
├── tagrelease.lua
├── testfiles/
│ ├── aaa-loading.luatex.tlg
│ ├── aaa-loading.lvt
│ ├── aaa-loading.tlg
│ ├── aaa-sym.luatex.tlg
│ ├── aaa-sym.lvt
│ ├── aaa-sym.tlg
│ ├── active-frac.luatex.tlg
│ ├── active-frac.lvt
│ ├── active-frac.tlg
│ ├── active-sscripts-amsmath.luatex.tlg
│ ├── active-sscripts-amsmath.lvt
│ ├── active-sscripts-amsmath.tlg
│ ├── active-sscripts.luatex.tlg
│ ├── active-sscripts.lvt
│ ├── active-sscripts.tlg
│ ├── alph-range-calscr.luatex.tlg
│ ├── alph-range-calscr.lvt
│ ├── alph-range-calscr.tlg
│ ├── alph-range-fallback.luatex.tlg
│ ├── alph-range-fallback.lvt
│ ├── alph-range-fallback.tlg
│ ├── alph-range-mapping.luatex.tlg
│ ├── alph-range-mapping.lvt
│ ├── alph-range-mapping.tlg
│ ├── alph-range-sym-alph.luatex.tlg
│ ├── alph-range-sym-alph.lvt
│ ├── alph-range-sym-alph.tlg
│ ├── alph-range-sym-range.luatex.tlg
│ ├── alph-range-sym-range.lvt
│ ├── alph-range-sym-range.tlg
│ ├── alph-sym.luatex.tlg
│ ├── alph-sym.lvt
│ ├── alph-sym.tlg
│ ├── ascii-catcodes.luatex.tlg
│ ├── ascii-catcodes.lvt
│ ├── ascii-catcodes.tlg
│ ├── boldstyle-french.luatex.tlg
│ ├── boldstyle-french.lvt
│ ├── boldstyle-french.tlg
│ ├── boldstyle-iso.luatex.tlg
│ ├── boldstyle-iso.lvt
│ ├── boldstyle-iso.tlg
│ ├── boldstyle-literal.luatex.tlg
│ ├── boldstyle-literal.lvt
│ ├── boldstyle-literal.tlg
│ ├── boldstyle-tex.luatex.tlg
│ ├── boldstyle-tex.lvt
│ ├── boldstyle-tex.tlg
│ ├── boldstyle-upright.luatex.tlg
│ ├── boldstyle-upright.lvt
│ ├── boldstyle-upright.tlg
│ ├── cal-scr-equivalence.luatex.tlg
│ ├── cal-scr-equivalence.lvt
│ ├── cal-scr-equivalence.xetex.tlg
│ ├── cramped-style.luatex.tlg
│ ├── cramped-style.lvt
│ ├── cramped-style.tlg
│ ├── fontname-log.luatex.tlg
│ ├── fontname-log.lvt
│ ├── fontname-log.tlg
│ ├── hyperref-section.luatex.tlg
│ ├── hyperref-section.lvt
│ ├── hyperref-section.xetex.tlg
│ ├── hyphen.luatex.tlg
│ ├── hyphen.lvt
│ ├── hyphen.tlg
│ ├── input-fullwidth.luatex.tlg
│ ├── input-fullwidth.lvt
│ ├── input-fullwidth.tlg
│ ├── lmdefault-mathrm-it-bf.luatex.tlg
│ ├── lmdefault-mathrm-it-bf.lvt
│ ├── lmdefault-mathrm-it-bf.tlg
│ ├── mathit-symit-var.luatex.tlg
│ ├── mathit-symit-var.lvt
│ ├── mathit-symit-var.tlg
│ ├── mathit-symit.luatex.tlg
│ ├── mathit-symit.lvt
│ ├── mathit-symit.tlg
│ ├── mathoperator-mathbf.luatex.tlg
│ ├── mathoperator-mathbf.lvt
│ ├── mathoperator-mathbf.tlg
│ ├── mathrm-mathcal-nest.luatex.tlg
│ ├── mathrm-mathcal-nest.lvt
│ ├── mathrm-mathcal-nest.tlg
│ ├── mathrm-nobraces.luatex.tlg
│ ├── mathrm-nobraces.lvt
│ ├── mathrm-nobraces.tlg
│ ├── mathsizes.luatex.tlg
│ ├── mathsizes.lvt
│ ├── mathsizes.tlg
│ ├── mathstyle-french.luatex.tlg
│ ├── mathstyle-french.lvt
│ ├── mathstyle-french.tlg
│ ├── mathstyle-iso.luatex.tlg
│ ├── mathstyle-iso.lvt
│ ├── mathstyle-iso.tlg
│ ├── mathstyle-literal.luatex.tlg
│ ├── mathstyle-literal.lvt
│ ├── mathstyle-literal.tlg
│ ├── mathstyle-tex.luatex.tlg
│ ├── mathstyle-tex.lvt
│ ├── mathstyle-tex.tlg
│ ├── mathstyle-upright.luatex.tlg
│ ├── mathstyle-upright.lvt
│ ├── mathstyle-upright.tlg
│ ├── nabla.luatex.tlg
│ ├── nabla.lvt
│ ├── nabla.tlg
│ ├── nesting.luatex.tlg
│ ├── nesting.lvt
│ ├── nesting.tlg
│ ├── not.luatex.tlg
│ ├── not.lvt
│ ├── not.tlg
│ ├── operatorname.luatex.tlg
│ ├── operatorname.lvt
│ ├── operatorname.tlg
│ ├── partial.luatex.tlg
│ ├── partial.lvt
│ ├── partial.tlg
│ ├── radical-cuberoot-output.luatex.tlg
│ ├── radical-cuberoot-output.lvt
│ ├── radical-cuberoot-output.tlg
│ ├── range-char-cmd.luatex.tlg
│ ├── range-char-cmd.lvt
│ ├── range-char-cmd.tlg
│ ├── range-class.luatex.tlg
│ ├── range-class.lvt
│ ├── range-class.tlg
│ ├── range-nabla-partial.luatex.tlg
│ ├── range-nabla-partial.lvt
│ ├── range-nabla-partial.tlg
│ ├── range-up-num.luatex.tlg
│ ├── range-up-num.lvt
│ ├── range-up-num.tlg
│ ├── setmathfontface.luatex.tlg
│ ├── setmathfontface.lvt
│ ├── setmathfontface.tlg
│ ├── setmathsf.luatex.tlg
│ ├── setmathsf.lvt
│ ├── setmathsf.tlg
│ ├── sqrt-amsmath-output.luatex.tlg
│ ├── sqrt-amsmath-output.lvt
│ ├── sqrt-amsmath-output.tlg
│ ├── style-Bbbit.luatex.tlg
│ ├── style-Bbbit.lvt
│ ├── style-Bbbit.tlg
│ ├── support/
│ │ └── umtest-preamble.tex
│ ├── url.luatex.tlg
│ ├── url.lvt
│ └── url.tlg
├── testfiles-disabled/
│ ├── F-amsmath-subarray-1.lvt
│ ├── F-amsmath-subarray-2.lvt
│ ├── F-amsmath-subarray-3.lvt
│ ├── F-amsmath-subarray-4.lvt
│ ├── F-boldmath.lvt
│ ├── F-longdivision.lvt
│ ├── F-lrangle-chars.lvt
│ ├── F-mathtools-overbracket.lvt
│ ├── F-mathversion.lvt
│ ├── F-negation.lvt
│ ├── F-nolimits-spec.lvt
│ ├── F-over-under.lvt
│ ├── F-pkg-url.lvt
│ ├── F-primes-1.lvt
│ ├── F-primes-2.lvt
│ ├── F-primes-back.lvt
│ ├── F-query-mathstyle.lvt
│ ├── F-range-prime-check.lvt
│ ├── F-range-slots.lvt
│ ├── F-range-style.lvt
│ ├── F-range.lvt
│ ├── F-slash-delim-2.lvt
│ ├── F-sqrt-n.lvt
│ ├── F-sqrt.lvt
│ ├── F-sscript-features.lvt
│ ├── F-stacked-accents.lvt
│ ├── L-sscale-dimen.lvt
│ ├── L601a.lvt
│ ├── L601b.lvt
│ ├── L601f.lvt
│ ├── L602b.lvt
│ ├── L603b.lvt
│ ├── L604a.lvt
│ ├── L604b.lvt
│ ├── L650a.lvt
│ ├── L650b.lvt
│ ├── X002a.lvt
│ ├── X002b.lvt
│ ├── X002c.lvt
│ ├── X002d.lvt
│ ├── X002e.lvt
│ ├── X003a.lvt
│ ├── X003b.lvt
│ ├── X003c.lvt
│ ├── X003d.lvt
│ ├── X003e.lvt
│ ├── X003f.lvt
│ ├── X003g.lvt
│ ├── X003h.lvt
│ ├── X003i.lvt
│ ├── X003j.lvt
│ ├── X003k.lvt
│ ├── X003l.lvt
│ ├── X003m.lvt
│ ├── X003n.lvt
│ ├── X003o.lvt
│ ├── X003p.lvt
│ ├── X004a.lvt
│ ├── X004b.lvt
│ ├── X004c.lvt
│ ├── X004d.lvt
│ ├── X004e.lvt
│ ├── X004f.lvt
│ ├── X005a.lvt
│ ├── X005b.lvt
│ ├── X005c.lvt
│ ├── X005d.lvt
│ ├── X005e.lvt
│ ├── X005f.lvt
│ ├── X005g.lvt
│ ├── X005h.lvt
│ ├── X005i.lvt
│ ├── X005j.lvt
│ ├── X005k.lvt
│ ├── X005l.lvt
│ ├── X010a.lvt
│ ├── X010b.lvt
│ ├── X010c.lvt
│ ├── X010d.lvt
│ ├── X011a.lvt
│ ├── X011b.lvt
│ ├── X012a.lvt
│ ├── X012b.lvt
│ ├── X013a.lvt
│ ├── X013b.lvt
│ ├── X013c.lvt
│ ├── X013d.lvt
│ ├── X014a.lvt
│ ├── X014b.lvt
│ ├── X014c.lvt
│ ├── X015a.lvt
│ ├── X015b.lvt
│ ├── X016a.lvt
│ ├── X016b.lvt
│ ├── X016c.lvt
│ ├── X017a.lvt
│ ├── X017b.lvt
│ ├── X017c.lvt
│ ├── X017d.lvt
│ ├── X018a.lvt
│ ├── X018b.lvt
│ ├── X019a.lvt
│ ├── X019b.lvt
│ ├── X020a.lvt
│ ├── X020b.lvt
│ ├── X021a.lvt
│ ├── X021b.lvt
│ ├── X030a.lvt
│ ├── X031a.lvt
│ ├── X031b.lvt
│ ├── X031c.lvt
│ ├── X032a.lvt
│ ├── X032b.lvt
│ ├── X032c.lvt
│ ├── X101a.lvt
│ ├── X102a.lvt
│ ├── X150a.lvt
│ ├── X202a.lvt
│ ├── X202b.lvt
│ ├── X203a.lvt
│ ├── X206a.lvt
│ ├── X206b.lvt
│ ├── X206c.lvt
│ ├── X401a.lvt
│ ├── X502a.lvt
│ ├── X502b.lvt
│ ├── X503a.lvt
│ ├── X601a.lvt
│ ├── X601b.lvt
│ ├── X601f.lvt
│ ├── X604a.lvt
│ ├── X604b.lvt
│ ├── X610f.lvt
│ ├── X620b.lvt
│ ├── X650a.lvt
│ ├── X650b.lvt
│ ├── accents-arrows.luatex.tlg
│ ├── accents-arrows.lvt
│ ├── accents-arrows.xetex.tlg
│ ├── accents-bottom.luatex.tlg
│ ├── accents-bottom.lvt
│ ├── accents-bottom.xetex.tlg
│ ├── accents-wide.luatex.tlg
│ ├── accents-wide.lvt
│ ├── accents-wide.xetex.tlg
│ ├── accents.luatex.tlg
│ ├── accents.lvt
│ ├── accents.xetex.tlg
│ ├── fence-vert-all.luatex.tlg
│ ├── fence-vert-all.lvt
│ ├── fence-vert-all.xetex.tlg
│ ├── fence-vert.luatex.tlg
│ ├── fence-vert.lvt
│ ├── fence-vert.xetex.tlg
│ ├── fence-vvert.luatex.tlg
│ ├── fence-vvert.lvt
│ ├── fence-vvert.tlg
│ ├── fence-vvert.xetex.tlg
│ ├── fence-vvvert.luatex.tlg
│ ├── fence-vvvert.lvt
│ ├── fence-vvvert.xetex.tlg
│ ├── leftright-brace.lvt
│ ├── leftright-bracket.lvt
│ ├── leftright-group.lvt
│ ├── leftright-moustache.lvt
│ ├── leftright-paren.lvt
│ └── mathtext-nested.lvt
├── texlive.profile
├── texlive.sh
├── um-code-alphabets.dtx
├── um-code-amsmath.dtx
├── um-code-api.dtx
├── um-code-compat.dtx
├── um-code-epilogue.dtx
├── um-code-fontopt.dtx
├── um-code-fontparam.dtx
├── um-code-main.dtx
├── um-code-mathmap.dtx
├── um-code-mathtext.dtx
├── um-code-msg.dtx
├── um-code-opening.dtx
├── um-code-pkgopt.dtx
├── um-code-primes.dtx
├── um-code-setchar.dtx
├── um-code-sscript.dtx
├── um-code-sym-commands.dtx
├── um-code-ui.dtx
├── um-code-usv.dtx
├── um-code-variables.dtx
├── um-doc-legacyfontdimen.tex
├── um-doc-main.tex
├── um-doc-mathfontdimen.tex
├── um-doc-nfsssummary.tex
├── um-doc-stixextract.tex
├── um-doc-style.tex
├── unicode-math-code.ltx
├── unicode-math-table.tex
├── unicode-math.dtx
├── unicode-math.ins
├── unicode-math.ltx
├── unimath-example.ltx
└── unimath-symbols.ltx
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/CONTRIBUTING.md
================================================
# Development guide for `unicode-math`
This document covers both guidelines for issues and pull requests and
the general development details of the `unicode-math` package.
## Issues
If you're reading this to find out more about reporting an issue in the package,
thanks for taking the time! And apologies that I take longer, sometimes
*way longer*, than I should to address them.
There are two important key points for submitting an issue:
* When submitting an issue, please include a *complete* minimal example.
* When loading maths fonts, please do so by *filename* only.
* If you are using a proprietary/unusual font, please try a maths font in TeX Live to see
if it exhibits the same behaviour; it's obviously much harder for me to test with fonts
I don't yet have or can't access.
For example, this is a good minimal example:
```tex
\documentclass{article}
\usepackage{unicode-math}
\setmathfont{texgyrepagella-math.otf}
\begin{document}
\[
x^2 + y^2 = z^2
\]
\end{document}
```
This is an example of a *bad* example:
```tex
\usepackage{unicode-math}
\setmathfont{TeX Gyre Pagella Math}
% later:
\[
x^2 + y^2 = z^2
\]
```
## Branches and Pull Requests
There are two main branches in this repository: `master` and `working`.
Development happens on the `working` branch; once a release is sent to CTAN,
the `master` branch is rebased to bring it up to date.
The `working` branch should be considered only semi-public; it may have broken
code and/or use force-pushing to rewrite history on occasions.
If you wish to make a contribution, please start from the `master` branch.
Only ‘rebase’ or ‘squash rebase’ will be used to accept pull requests.
If you are changing documentation only (i.e., no code changes), you can add
`[ci skip]` to the commit message and the test suite won't be run to check that
the changes haven't broken anything.
## Test suite and Continuous Integration
The `l3build` system is used to maintain a test suite for the package.
This test suite is used in the Travis CI system to continuously monitor whether
the code passes the test suite.
* `master` branch: [](https://travis-ci.org/wspr/unicode-math)
* `working` branch: [](https://travis-ci.org/wspr/unicode-math)
The test suite is intended to be portable. To try it out yourself, simply run
`texlua build.lua check` and grab a quick coffee. With any luck you should see
that the test suite passes!
## Copyright
Copyright statements in most package files are updated en masse by the bash script
`update-copyright.sh` using the file COPYRIGHT as a template.
(The updating script has been tested on macOS only.)
Contributors are listed in the copyright statement if they have more than one
entry in the following list:
git log --all --date=short --format='%cN %ad' | sed 's/\(.*[0-9]*\)-[0-9]*-[0-9]*/\1/' | sort -u
Contributors are added to the COPYRIGHT file manually. If your name doesn't appear
in that list, you might need to check your Git setup.
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
## Description
A sentence or two describing the issue.
## Add info or delete as appropriate:
- Relevant for XeTeX
- Relevant for LuaTeX
- Issue tracker has been searched for similar issues?
- Links to <tex.stackexchange.com> discussion if appropriate
## Minimal example demonstrating the issue
```tex
\documentclass{article}
\usepackage{unicode-math}
\setmathfont{texgyrepagella-math.otf}% filename only please!
\begin{document}
\[
a = b
\]
\end{document}
```
## Further details
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## Status
**READY/UNDER DEVELOPMENT/FOR DISCUSSION**
## Description
A few sentences describing the overall goals of the pull request's commits.
## Todo
- [ ] Tests added to cover new/fixed functionality
- [ ] Documentation added if necessary
- [ ] Code follows expl3 style guidelines
## Minimal example demonstrating the new/fixed functionality
```tex
\documentclass{article}
\usepackage{unicode-math}
\setmathfont{texgyrepagella-math.otf}% filename only please!
\begin{document}
\[
a = b
\]
\end{document}
```
================================================
FILE: .gitignore
================================================
CHANGES-NEW.md
build/
testfiles/*.pdf
oldtestfiles/*
testfiles snapshot/
testfiles to update/
tidbits/
*.sty
*.pdf
*.toc
*.zip
*.ptc*
*.mtc*
*.log
*.idx
*.aux
*.hd
*.out
*.maf
*.orig
test.ltx
test.tex
stix-tbl.txt
umtable.tex
*.synctex*
.DS_Store
unicode-math/
================================================
FILE: .travis.yml
================================================
install:
- source ./texlive.sh
cache:
directories:
- /tmp/texlive
branches:
except:
- develop
stages:
- test
- doc
jobs:
include:
- stage: test
script: l3build check -H --engine xetex --shuffle --first aaa-loading || ( cat build/*/`ls -t build/*/*.log | head -n1 | xargs basename | cut -f 1 -d . `.log && false )
name: "XeTeX tests"
- script: l3build check -H --engine luatex --shuffle --first aaa-loading || ( cat build/*/`ls -t build/*/*.log | head -n1 | xargs basename | cut -f 1 -d . `.log && false )
name: "LuaTeX tests"
- stage: doc
script: l3build doc
name: "Typesetting documentation"
================================================
FILE: CHANGES.md
================================================
CHANGE HISTORY
==============
## v0.8r (2023/08/13)
* Revise definitions of `\\setminus` and `\\smallsetminus` (#181, #583) — long overdue.
Note that there are compatibility considerations with this change.
* Add `\\diagup` and `\\diagdown` (#604).
* Make `\\operator@font` protected to allow operators (e.g., `\\cos`) in section headings (etc). (#550)
* Allow `\\symcal` to handle lowercase Latin (#589).
* Add additional fonts to the symbol listing document (#597).
## v0.8q (2020/01/31)
* Update to adapt to / support new features in the upcoming 2e kernel.
* Give a better error message if used on non-supported engines that are not pdfTeX.
## v0.8p (2019/09/26)
* Remove dependency on `filehook` package. Just to simplify.
* Remove patch code for the `colonequals` package; now if you use that package
you will simply receive its standard ‘constructed’ symbols.
* Load `amsmath` automatically. This is not intended to save time for the user,
but to simplify the code logic. Users should continue to load `amsmath` explicitly IMO.
## v0.8o (2019/03/04)
* Avoid `'Dimension too large' error` for some (unpredictable) combinations of font
choice and the `Scale` option. Problems are still known to occur for very large or
very small values of `Scale`.
* Documentation is now run through ‘continuous integration’ (viz, *Travis* for the time being)
as well as the test suite.
## v0.8n (2019/01/26)
* Add note to readme that the `lm-math` package is required for minimal functionality.
* Spacing fixed for maths fonts loaded with the `Scale` fontspec feature (#287).
* Commands like `\crampedtextstyle` now longer lead to an infinite loop under XeTeX (#505).
* Improvements to the functionality of the test suite. (Although more tests would be nice.)
* Test suite is now (successfully) run with `expl3` debug mode enabled.
## v0.8m (2018/07/29)
* Restore behaviour of legacy syntax `x_\mathrm{x}` (i.e., with no braces).
While strictly ‘incorrectly’, this usage is widely used.
N.B. this syntax is not supported for the `\symXX` commands.
* Add `\cuberoot` and `\fourthroot` as proper radicals.
* Some additional input subscripts/superscripts.
* Some documentation additions (thanks for the contributions).
* Deprecation warning: the *internal* `\__um_switchto_XX:` commands will be dropped in
a future release in favour of `\__um_switch_to:n {XX}` (or similar). These are internal
commands and shouldn't be used by third-parties; please write if you have a use case.
## v0.8l (2018/02/02)
* Issue an error message if `\setmathfont{...}[range=...]` is used first; a `range`
declaration inherently implies a subset, so a ‘main’ math font needs to be set up first.
* Fix issue when nesting `\mathXX` and `\symZZ` commands. (#356, #435, #438)
* Fix another issue when using `mathXX` or `\symXX` inside `\DeclareMathOperator`. (#449)
* Document incompatibility with the `mathspec` package. (#436)
* Fix bugs for using `range=\partial` and `range=\nabla`. (#441)
## v0.8k (2018/01/13)
* Eliminate warnings `Variant form 'NV' invalid for base form`... (#430).
* Fix issue when loading the `cal` range (#431).
* Fix issue with `\sqrt[n]{x}` with `amsmath` (#432).
* Error when loading on (really) old versions of XeTeX/LuaTeX removed.
* More UM fonts listed in the README (#425).
## v0.8j (2018/01/07)
- NEW
* Numbers and latin letters in the fullwidth Unicode range are now supported
as aliases to their ASCII counterparts (#337).
* New commands `\(New|Renew)NegationCommand \foo` for defining custom negations
accessed via `\not\foo`.
- SYMBOLS
* `\typecolon` is now `\mathrel` instead of `\mathbin` (#360).
* New symbol `\mathhyphen` which acts like a ‘letter’ (#313).
* `\nabla` and `\partial` have corrected documentation (#257).
* The following legacy commands are listed as ‘unsupported’ and will result
in sensible error messages rather than the old behaviour of meaningless
output: `\arrowvert`, `\Arrowvert`, `\bracevert`. (#411).
- BUGS
* LuaTeX bug with shifted `\underbrace` when it contains accented symbols worked around (#391).
* When using the `range` feature, users commonly found they needed to call
`\setmathfont` a final time with the original font to ensure correct
formatting and correct selection of symbol alphabets. I hope the issues
that required this have now been corrected (#331, #387).
* If `\setmathfont` is called a second time in a document, it tries harder
to more properly reset the maths font setup for the new font (#224).
* Properly hard-coded the `\delcode` of the period to ensure `\left`/`\right`
behave correctly in all circumstances (#344, #351, #420).
* Correct `\mathrm` (etc.) situation when no fonts loaded explicitly by the user (#330).
* Various bug fixes to `\not` (#126, #343, #363)
* `\std@minus` & `\std@equal` now properly corrected (#332).
* Fix problem with infinite loop with `\cdots` when `amsmath` loaded after `unicode-math` (#227).
* If `\setmath(rm|sf|tt)` is called *before* loading `unicode-math`, the setting
is now remembered (#407).
- INTERNALS
* A number of improvements to efficiency when loading subsequent math fonts
using the `range` feature.
* No longer loads the `ucharcat` package.
* Test suite re-implemented for better portability and use with Travis CI.
See <https://travis-ci.org/wspr/unicode-math> for the up-to-date status
of whether the test suite is passing.
## v0.8i (2017/11/18)
* Many internal changes to support future work.
* Improved documentation describing the `\mathXX` and `\symXX` commands.
* Documentation is now split into `unicode-math.pdf` (for the user)
and `unicode-math-code.pdf` (for the typeset source code).
## v0.8h (2017/10/09)
* Some bugs crept in in the last update due to some code rearrangement:
* package version wasn't set;
* some code was being executed at the wrong time;
* `\sqrt[]{}` in LuaLaTeX gave incorrect output.
* The layout of the code is now structured far more sensibly.
* Remove (long deprecated) `\resetmathfont`; for years it has been a synonym for `\setmathfont`.
## v0.8g (2017/10/02)
* Better use of scriptstyle sizes in LuaTeX (I think a regression).
* Fix regression (`\mathbf` etc. not being set automatically) caused by the renaming of a `fontspec` internal command.
* Minor documentation improvements.
* (Only relevant for me: I've also disabled the test suite almost entirely to begin a re-write for ‘continuous integration’.)
## v0.8f (2017/08/02)
* Emergency fix (thanks Bruno) for another bug revealed by `expl3` update.
## v0.8e (2017/07/30)
* Add `\surd` to access the sqrt symbol.
* Fix bug exposed by `expl3` update to booleans.
* Add Deja Vu Math TeX Gyre in list of symbols.
* Add `\sime` alias for `\simeq` and `\nsimeq` for `\nsime`.
(For negations it's helpful when they have consistent naming.)
## v0.8d (2017/01/25)
* `vargreek-shape=TeX` and `vargreek-shape=unicode` package options dropped; for consistency and compatibility, `\phi` and `\epsilon` should and will now behave the same as in `TeX`.
* On that note, when using control sequences such as `\mbfitsansvarphi` (and so on), there were a few faulty definitions. The new behaviour is to consistently define the `varphi` and `varepsilon` ones as those with the "curly" designs.
* Add `\wideoverbar`, `\widebreve`, `\widecheck`.
* Add `\mathsection`, `\mathparagraph`.
* Remove `\mupvarbeta`, `upold(Kk)oppa`, `\up(Ss)tigma`, `\up(Kk)oppa`, `\up(Ss)ampi` — none of these are maths symbols.
* `!` (`\mathexclam`) changed from `\mathpunct` to `\mathclose` for backwards compatibility with TeX.
## v0.8c (2015/09/24)
* Add `\over(left/right)harpoon` as "wide" accents.
* Add RTL mathematics operators `\arabicmaj` and `\arabichad`, which correspond to `U+1EEF0` and `U+1EEF1`, resp.
* Remove `catchfile` package dependency.
* Update some internal names to match expl3 standards.
## v0.8b (2015/09/09)
* Bug fix: Use the "ucharcat" package to simplify some code that caused some headaches with \tl_rescan:nn.
## v0.8a (2015/08/06)
* Fix bug with \vert, \|, \(l/r)vert, etc., displaying with the wrong characters.
* Improve documentation to properly reflect changes in v0.8 and fix some broken examples.
* No longer reset catcodes of : and @ during \setmathfont .
* Fix remapping of alphabets (needed for Minion Math) in cases such as:
\setmathfont[range=bfit->it]{MinionMath-Bold.otf}
## v0.8 (2015/07/29) **Breaking changes in this update!**
* `\mathrm` (`\mathup`), `\mathit`, `\mathbf`, `\mathsf`, and `\mathtt` revert to their traditional LaTeX meanings; they are set up to match their equivalent text fonts unless specifically set using `\setmathrm` and friends from `fontspec` or the new `\setmathfontface` in `unicode-math`. These commands should be used for *multi*-letter identifiers.
* New "symbol" commands have been added, `\symrm` (`\symup`), `symit`, ..., to replace the behaviour of the old commands. These should be used for *single*-letter identifiers. See the package documentation for more detail on these and related commands.
* Package options `mathit=sym`, `mathbf=sym`, etc., reverse the changes above to revert to pre-v0.8 behaviour for `\mathXYZ`. Regardless of package option, `\symXYZ` always maps to symbols and `\mathtextXYZ` is provided for the traditional `\mathXYZ` font switch.
* New command `\setoperatorfont` to set the font used for commands such as `\sin` and `\cos`. Usage: `\setoperatorfont\mathbf` or any command defined with `\setmathfontface`.
* Traditional LaTeX `\DeclareMathAlphabet` now works again for legacy font-loading packages.
* Commands defined to "force" Greek letters with `\upbeta` and `\itbeta`, etc.
* Assorted bug fixes and minor changes.
## v0.7e (2014/06/30)
* No longer assume fixltx2e has been loaded.
* Some ascii math symbols have been renamed with a \math... prefix, such as \mathquestion.
* Assume latest luaotfload is being used; no need for a separate unicode-math.lua script.
* Assorted typos and minor bugs.
## v0.7e (2013/05/04)
* Track luaotfload updates.
## v0.7d (2013/03/16)
* More expl3 changes missed first time around. (Sorry again.)
## v0.7c (2013/02/25)
* The Latin Modern math font name changed TWICE. Only caught the first one.
Sorry for any inconvenience caused.
## v0.7b (2013/02/22)
* Keep in sync with Latin Modern Math font name change.
* Keep in sync with expl3 changes.
## v0.7a (2012/07/28)
* Keep in sync with expl3 changes.
## v0.7 (2012/05/30): The TeX Live 2012 release.
* Most changes (and all significant ones) in this release thanks to Khaled
Hosny, who is now credited as an author of the package.
* Many improvements for XeTeX support to take advantage of the new engine
(v0.9998) in TL2012.
* As a result, `\resetmathfont` is no longer required.
* Improve `\not` to use pre-combined glyphs where possible.
* LM Math is loaded by default.
* Support bottom accents.
* And add `\wideutilde`.
* The ‘symbols’ document is somewhat better organised and contains
information on whether a symbol is defined in plain TeX or amssymb.
* Various other minor fixes and additions:
* `\underleftrightarrow` added for fonts that support it.
* Don’t overwrite mathtool’s `\overbracket` and `\underbracket`.
* Bug in `[range=...]` parsing fixed.
* Add `\longdivision`.
* Add `\lgroup` and `\rgroup`.
* Fix ‘moustache’ delimiters.
* `\openbox` renamed to `\mathvisiblespace`, since it is already defined
in amsthm as an empty box.
## v0.6a (2011/09/19)
* Always a bug that slips through the cracks! Fixes `\left.` and `\right.`
* Add experimental package option `warnings-off=...` which allows warnings
to be suppressed on an individual basis.
## v0.6 (2011/09/18)
* Keep in sync with fontspec internals
(sorry for the small delay where things were broken)
* Keep in sync with expl3 deprecated functions
* Math versions (finally) implemented; can now change maths fonts
mid-document without reinitialising everything
(thanks to Ulrike Fischer and Ulrik Vieth)
* Symbols file `unimath-symbols.pdf` now uses maths versions to compare
all of the OpenType maths fonts I currently have access to
* Over- and under- braces, brackets, and parentheses now work in XeTeX
(thanks to Claudio Beccari)
* Many internal changes, including a re-write of the `range` feature;
it should now be faster and more robust
* Tentative programmer's interface for querying the current math style:
`\l_um_mathstyle_tl`.
* Remove (outdated) interaction with beamer; you must specify
`professionalfonts` manually for now
* Quieten the console output when loading maths fonts with incomplete maths
style coverage
* Synonym added: `\lnot` -> `\neg`
* Two added Unicode symbols (names tentative): `\blanksymbol` and `\openbox`
(thanks to Apostolos Syropoulos)
* Fixed literal sub-/super-script input.
## v0.5e (2011/07/31)
* Fix forward compatibility clash with deprecated expl3 functions (sorry)
* Command names are now `\protected`; this makes them safe to use in moving
arguments and so on
* Similarly to the change in v0.5c, the main math font is now loaded in
math family zero (equiv. to LaTeX's `operators` math font)
* `\mathring` added
* Ensure that a math font has been selected in order to prevent problems
in minimal documents (this will be unnecessary when the OpenType LM math
font is released)
* Documentation for which was which of epsilon/varepsilon was backwards!
(thank to Rasmus Villemoes for pointing this out)
* Spurious `\upUpsilon` removed (the one at U+03A5 is now the correct one)
* Typo when defining `\dprime` fixed
(thanks to Ulrik Vieth for these last two)
* Fix the math class of `\modtwosum`; it is now a large operator
(thanks to Michael Ummels)
* Move several LuaTeX-related patches to the `lualatex-math` package
* Fixed mathtool's `\cramped` in XeLaTeX usage
## v0.5d (2011/01/30)
* Assorted improvements to LuaLaTeX support, including non-growing accents
available in LuaTeX v0.65 and later
* Improved behaviour with reading and using maths font dimensions
* Better compatibility with legacy maths packages and environments
(always more worked needed, though)
* Fix the default setting for "vargreek-shape"
## v0.5c (2010/09/27)
* Fix a long-standing bug in XeLaTeX in which the "master" math
families 2 and 3 weren't being set; hence fraction rules and many other
parameters were not being set correctly
* Stay in sync with internal fontspec changes
## v0.5b (2010/09/19): Tune-up
* Added missing symbols/synonyms:
\diamond \smallint \emptyset \hbar \backepsilon \eth
* \overline works for LuaLaTeX
* Fix \slash; previously, it overwrote the text definition
* \vartriangle now has the correct math class
## v0.5a (2010/07/14): TeX Live 2010 release
* Numerous documentation improvements
* Bug fix against stray catcode changes
* Add `\mathcal` and `\mathbfcal` as distinct from the Script style;
these are only supported by the XITS fonts at present
* Small changes to the range of symbols offered (especially note that `\ac`
is now `\invlazys` to avoid acronym package clash)
* Superscripts are allowed after primes (as they should be)
* Numerous LuaLaTeX improvements, including roots and over/under braces.
## v0.5 (2010/06/03): Initial CTAN release
================================================
FILE: COPYRIGHT
================================================
%
% ------------------------------------------------
% The UNICODE-MATH package <wspr.io/unicode-math>
% ------------------------------------------------
% This package is free software and may be redistributed and/or modified under
% the conditions of the LaTeX Project Public License, version 1.3c or higher
% (your choice): <http://www.latex-project.org/lppl/>.
% ------------------------------------------------
% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
% Copyright 2010-2017 Philipp Stephani
% Copyright 2011-2017 Joseph Wright
% Copyright 2012-2015 Khaled Hosny
% ------------------------------------------------
%
================================================
FILE: LICENSE
================================================
The LaTeX Project Public License
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
LPPL Version 1.3c 2008-05-04
Copyright 1999 2002-2008 LaTeX3 Project
Everyone is allowed to distribute verbatim copies of this
license document, but modification of it is not allowed.
PREAMBLE
========
The LaTeX Project Public License (LPPL) is the primary license under
which the LaTeX kernel and the base LaTeX packages are distributed.
You may use this license for any work of which you hold the copyright
and which you wish to distribute. This license may be particularly
suitable if your work is TeX-related (such as a LaTeX package), but
it is written in such a way that you can use it even if your work is
unrelated to TeX.
The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
below, gives instructions, examples, and recommendations for authors
who are considering distributing their works under this license.
This license gives conditions under which a work may be distributed
and modified, as well as conditions under which modified versions of
that work may be distributed.
We, the LaTeX3 Project, believe that the conditions below give you
the freedom to make and distribute modified versions of your work
that conform with whatever technical specifications you wish while
maintaining the availability, integrity, and reliability of
that work. If you do not see how to achieve your goal while
meeting these conditions, then read the document `cfgguide.tex'
and `modguide.tex' in the base LaTeX distribution for suggestions.
DEFINITIONS
===========
In this license document the following terms are used:
`Work'
Any work being distributed under this License.
`Derived Work'
Any work that under any applicable law is derived from the Work.
`Modification'
Any procedure that produces a Derived Work under any applicable
law -- for example, the production of a file containing an
original file associated with the Work or a significant portion of
such a file, either verbatim or with modifications and/or
translated into another language.
`Modify'
To apply any procedure that produces a Derived Work under any
applicable law.
`Distribution'
Making copies of the Work available from one person to another, in
whole or in part. Distribution includes (but is not limited to)
making any electronic components of the Work accessible by
file transfer protocols such as FTP or HTTP or by shared file
systems such as Sun's Network File System (NFS).
`Compiled Work'
A version of the Work that has been processed into a form where it
is directly usable on a computer system. This processing may
include using installation facilities provided by the Work,
transformations of the Work, copying of components of the Work, or
other activities. Note that modification of any installation
facilities provided by the Work constitutes modification of the Work.
`Current Maintainer'
A person or persons nominated as such within the Work. If there is
no such explicit nomination then it is the `Copyright Holder' under
any applicable law.
`Base Interpreter'
A program or process that is normally needed for running or
interpreting a part or the whole of the Work.
A Base Interpreter may depend on external components but these
are not considered part of the Base Interpreter provided that each
external component clearly identifies itself whenever it is used
interactively. Unless explicitly specified when applying the
license to the Work, the only applicable Base Interpreter is a
`LaTeX-Format' or in the case of files belonging to the
`LaTeX-format' a program implementing the `TeX language'.
CONDITIONS ON DISTRIBUTION AND MODIFICATION
===========================================
1. Activities other than distribution and/or modification of the Work
are not covered by this license; they are outside its scope. In
particular, the act of running the Work is not restricted and no
requirements are made concerning any offers of support for the Work.
2. You may distribute a complete, unmodified copy of the Work as you
received it. Distribution of only part of the Work is considered
modification of the Work, and no right to distribute such a Derived
Work may be assumed under the terms of this clause.
3. You may distribute a Compiled Work that has been generated from a
complete, unmodified copy of the Work as distributed under Clause 2
above, as long as that Compiled Work is distributed in such a way that
the recipients may install the Compiled Work on their system exactly
as it would have been installed if they generated a Compiled Work
directly from the Work.
4. If you are the Current Maintainer of the Work, you may, without
restriction, modify the Work, thus creating a Derived Work. You may
also distribute the Derived Work without restriction, including
Compiled Works generated from the Derived Work. Derived Works
distributed in this manner by the Current Maintainer are considered to
be updated versions of the Work.
5. If you are not the Current Maintainer of the Work, you may modify
your copy of the Work, thus creating a Derived Work based on the Work,
and compile this Derived Work, thus creating a Compiled Work based on
the Derived Work.
6. If you are not the Current Maintainer of the Work, you may
distribute a Derived Work provided the following conditions are met
for every component of the Work unless that component clearly states
in the copyright notice that it is exempt from that condition. Only
the Current Maintainer is allowed to add such statements of exemption
to a component of the Work.
a. If a component of this Derived Work can be a direct replacement
for a component of the Work when that component is used with the
Base Interpreter, then, wherever this component of the Work
identifies itself to the user when used interactively with that
Base Interpreter, the replacement component of this Derived Work
clearly and unambiguously identifies itself as a modified version
of this component to the user when used interactively with that
Base Interpreter.
b. Every component of the Derived Work contains prominent notices
detailing the nature of the changes to that component, or a
prominent reference to another file that is distributed as part
of the Derived Work and that contains a complete and accurate log
of the changes.
c. No information in the Derived Work implies that any persons,
including (but not limited to) the authors of the original version
of the Work, provide any support, including (but not limited to)
the reporting and handling of errors, to recipients of the
Derived Work unless those persons have stated explicitly that
they do provide such support for the Derived Work.
d. You distribute at least one of the following with the Derived Work:
1. A complete, unmodified copy of the Work;
if your distribution of a modified component is made by
offering access to copy the modified component from a
designated place, then offering equivalent access to copy
the Work from the same or some similar place meets this
condition, even though third parties are not compelled to
copy the Work along with the modified component;
2. Information that is sufficient to obtain a complete,
unmodified copy of the Work.
7. If you are not the Current Maintainer of the Work, you may
distribute a Compiled Work generated from a Derived Work, as long as
the Derived Work is distributed to all recipients of the Compiled
Work, and as long as the conditions of Clause 6, above, are met with
regard to the Derived Work.
8. The conditions above are not intended to prohibit, and hence do not
apply to, the modification, by any method, of any component so that it
becomes identical to an updated version of that component of the Work as
it is distributed by the Current Maintainer under Clause 4, above.
9. Distribution of the Work or any Derived Work in an alternative
format, where the Work or that Derived Work (in whole or in part) is
then produced by applying some process to that format, does not relax or
nullify any sections of this license as they pertain to the results of
applying that process.
10. a. A Derived Work may be distributed under a different license
provided that license itself honors the conditions listed in
Clause 6 above, in regard to the Work, though it does not have
to honor the rest of the conditions in this license.
b. If a Derived Work is distributed under a different license, that
Derived Work must provide sufficient documentation as part of
itself to allow each recipient of that Derived Work to honor the
restrictions in Clause 6 above, concerning changes from the Work.
11. This license places no restrictions on works that are unrelated to
the Work, nor does this license place any restrictions on aggregating
such works with the Work by any means.
12. Nothing in this license is intended to, or may be used to, prevent
complete compliance by all parties with all applicable laws.
NO WARRANTY
===========
There is no warranty for the Work. Except when otherwise stated in
writing, the Copyright Holder provides the Work `as is', without
warranty of any kind, either expressed or implied, including, but not
limited to, the implied warranties of merchantability and fitness for a
particular purpose. The entire risk as to the quality and performance
of the Work is with you. Should the Work prove defective, you assume
the cost of all necessary servicing, repair, or correction.
In no event unless required by applicable law or agreed to in writing
will The Copyright Holder, or any author named in the components of the
Work, or any other party who may distribute and/or modify the Work as
permitted above, be liable to you for damages, including any general,
special, incidental or consequential damages arising out of any use of
the Work or out of inability to use the Work (including, but not limited
to, loss of data, data being rendered inaccurate, or losses sustained by
anyone as a result of any failure of the Work to operate with any other
programs), even if the Copyright Holder or said author or said other
party has been advised of the possibility of such damages.
MAINTENANCE OF THE WORK
=======================
The Work has the status `author-maintained' if the Copyright Holder
explicitly and prominently states near the primary copyright notice in
the Work that the Work can only be maintained by the Copyright Holder
or simply that it is `author-maintained'.
The Work has the status `maintained' if there is a Current Maintainer
who has indicated in the Work that they are willing to receive error
reports for the Work (for example, by supplying a valid e-mail
address). It is not required for the Current Maintainer to acknowledge
or act upon these error reports.
The Work changes from status `maintained' to `unmaintained' if there
is no Current Maintainer, or the person stated to be Current
Maintainer of the work cannot be reached through the indicated means
of communication for a period of six months, and there are no other
significant signs of active maintenance.
You can become the Current Maintainer of the Work by agreement with
any existing Current Maintainer to take over this role.
If the Work is unmaintained, you can become the Current Maintainer of
the Work through the following steps:
1. Make a reasonable attempt to trace the Current Maintainer (and
the Copyright Holder, if the two differ) through the means of
an Internet or similar search.
2. If this search is successful, then enquire whether the Work
is still maintained.
a. If it is being maintained, then ask the Current Maintainer
to update their communication data within one month.
b. If the search is unsuccessful or no action to resume active
maintenance is taken by the Current Maintainer, then announce
within the pertinent community your intention to take over
maintenance. (If the Work is a LaTeX work, this could be
done, for example, by posting to comp.text.tex.)
3a. If the Current Maintainer is reachable and agrees to pass
maintenance of the Work to you, then this takes effect
immediately upon announcement.
b. If the Current Maintainer is not reachable and the Copyright
Holder agrees that maintenance of the Work be passed to you,
then this takes effect immediately upon announcement.
4. If you make an `intention announcement' as described in 2b. above
and after three months your intention is challenged neither by
the Current Maintainer nor by the Copyright Holder nor by other
people, then you may arrange for the Work to be changed so as
to name you as the (new) Current Maintainer.
5. If the previously unreachable Current Maintainer becomes
reachable once more within three months of a change completed
under the terms of 3b) or 4), then that Current Maintainer must
become or remain the Current Maintainer upon request provided
they then update their communication data within one month.
A change in the Current Maintainer does not, of itself, alter the fact
that the Work is distributed under the LPPL license.
If you become the Current Maintainer of the Work, you should
immediately provide, within the Work, a prominent and unambiguous
statement of your status as Current Maintainer. You should also
announce your new status to the same pertinent community as
in 2b) above.
WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
======================================================
This section contains important instructions, examples, and
recommendations for authors who are considering distributing their
works under this license. These authors are addressed as `you' in
this section.
Choosing This License or Another License
----------------------------------------
If for any part of your work you want or need to use *distribution*
conditions that differ significantly from those in this license, then
do not refer to this license anywhere in your work but, instead,
distribute your work under a different license. You may use the text
of this license as a model for your own license, but your license
should not refer to the LPPL or otherwise give the impression that
your work is distributed under the LPPL.
The document `modguide.tex' in the base LaTeX distribution explains
the motivation behind the conditions of this license. It explains,
for example, why distributing LaTeX under the GNU General Public
License (GPL) was considered inappropriate. Even if your work is
unrelated to LaTeX, the discussion in `modguide.tex' may still be
relevant, and authors intending to distribute their works under any
license are encouraged to read it.
A Recommendation on Modification Without Distribution
-----------------------------------------------------
It is wise never to modify a component of the Work, even for your own
personal use, without also meeting the above conditions for
distributing the modified component. While you might intend that such
modifications will never be distributed, often this will happen by
accident -- you may forget that you have modified that component; or
it may not occur to you when allowing others to access the modified
version that you are thus distributing it and violating the conditions
of this license in ways that could have legal implications and, worse,
cause problems for the community. It is therefore usually in your
best interest to keep your copy of the Work identical with the public
one. Many works provide ways to control the behavior of that work
without altering any of its licensed components.
How to Use This License
-----------------------
To use this license, place in each of the components of your work both
an explicit copyright notice including your name and the year the work
was authored and/or last substantially modified. Include also a
statement that the distribution and/or modification of that
component is constrained by the conditions in this license.
Here is an example of such a notice and statement:
%% pig.dtx
%% Copyright 2005 M. Y. Name
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
% http://www.latex-project.org/lppl.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 `maintained'.
%
% The Current Maintainer of this work is M. Y. Name.
%
% This work consists of the files pig.dtx and pig.ins
% and the derived file pig.sty.
Given such a notice and statement in a file, the conditions
given in this license document would apply, with the `Work' referring
to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
referring to any `LaTeX-Format', and both `Copyright Holder' and
`Current Maintainer' referring to the person `M. Y. Name'.
If you do not want the Maintenance section of LPPL to apply to your
Work, change `maintained' above into `author-maintained'.
However, we recommend that you use `maintained', as the Maintenance
section was added in order to ensure that your Work remains useful to
the community even when you can no longer maintain and support it
yourself.
Derived Works That Are Not Replacements
---------------------------------------
Several clauses of the LPPL specify means to provide reliability and
stability for the user community. They therefore concern themselves
with the case that a Derived Work is intended to be used as a
(compatible or incompatible) replacement of the original Work. If
this is not the case (e.g., if a few lines of code are reused for a
completely different task), then clauses 6b and 6d shall not apply.
Important Recommendations
-------------------------
Defining What Constitutes the Work
The LPPL requires that distributions of the Work contain all the
files of the Work. It is therefore important that you provide a
way for the licensee to determine which files constitute the Work.
This could, for example, be achieved by explicitly listing all the
files of the Work near the copyright notice of each file or by
using a line such as:
% This work consists of all files listed in manifest.txt.
in that place. In the absence of an unequivocal list it might be
impossible for the licensee to determine what is considered by you
to comprise the Work and, in such a case, the licensee would be
entitled to make reasonable conjectures as to which files comprise
the Work.
================================================
FILE: MANIFEST.md
================================================
# Manifest for unicode-math
This file is a listing of all files considered to be part of this package.
It is automatically generated with `texlua build.lua manifest`.
## Repository manifest
The following groups list the files included in the development repository of the package.
Files listed with a ‘†’ marker are included in the TDS but not CTAN files, and files listed
with ‘‡’ are included in both.
### Source files
These are source files for a number of purposes, including the `unpack` process which
generates the installation files of the package. Additional files included here will also
be installed for processing such as testing.
| File | Flag | Description |
| --- | --- | --- |
| um-code-alphabets.dtx | ‡ | Definitions for setting up the "math symbol alphabets". |
| um-code-amsmath.dtx | ‡ | Compatibility with amsmath. |
| um-code-api.dtx | ‡ | The (underdeveloped) API to interface with the package internals. |
| um-code-compat.dtx | ‡ | Compatibility with 3rd party packages. |
| um-code-epilogue.dtx | ‡ | Assorted definitions to close up. |
| um-code-fontopt.dtx | ‡ | Keyval for `\setmathfont` |
| um-code-fontparam.dtx | ‡ | Cross-platform interface for font parameters |
| um-code-main.dtx | ‡ | Definition of `\setmainfont`. |
| um-code-mathmap.dtx | ‡ | Setup of symbol alphabets. |
| um-code-mathtext.dtx | ‡ | The "math text" commands such as `\mathbf` and co. |
| um-code-msg.dtx | ‡ | Definitions of error, warning, and log messages. |
| um-code-opening.dtx | ‡ | Assorted initialisation tasks, including some low-level function definitions. |
| um-code-pkgopt.dtx | ‡ | Package options. |
| um-code-primes.dtx | ‡ | The definitions needed for the input of primes. |
| um-code-setchar.dtx | ‡ | General assignment of maths symbols. |
| um-code-sscript.dtx | ‡ | Setup for active chars needed to process subscript/superscript input chars. |
| um-code-sym-commands.dtx | ‡ | Definition of "math symbol alphabet" commands such as `\symbf` and co. |
| um-code-ui.dtx | ‡ | The xparse user interface top-level definitions. |
| um-code-usv.dtx | ‡ | Mapping of mathematical unicode slots for alphabets. |
| um-code-variables.dtx | ‡ | Declaration of all code-level variables used in the package. |
| unicode-math.dtx | ‡ | Metadata for the package code, including files and versioning |
| unicode-math.ins | ‡ | Docstrip installer. |
| unicode-math-table.tex | ‡ | Source file of the math symbols. |
### Typeset documentation source files
These files are typeset using LaTeX to produce the PDF documentation for the package.
| File | Flag | Description |
| --- | --- | --- |
| unicode-math-code.ltx | ‡ | Typeset code. |
| unicode-math.ltx | ‡ | User documentation. |
| unimath-example.ltx | ‡ | A minimal example file to demonstrate the package. |
| unimath-symbols.ltx | ‡ | Listing of Unicode mathematics symbols using a variety of fonts. |
### Documentation files
These files form part of the documentation but are not typeset. Generally they will be
additional input files for the typeset documentation files listed above.
1. um-doc-legacyfontdimen.tex ‡
2. um-doc-main.tex ‡
3. um-doc-mathfontdimen.tex ‡
4. um-doc-nfsssummary.tex ‡
5. um-doc-stixextract.tex ‡
6. um-doc-style.tex ‡
### Text files
Plain text files included as documentation or metadata.
1. CHANGES.md ‡
2. MANIFEST.md ‡
3. README.md ‡
4. RELEASE_CHECKLIST.md ‡
5. LICENSE
### Derived files
The files created by ‘unpacking’ the package sources. This typically includes
`.sty` and `.cls` files created from DocStrip `.dtx` files.
1. unicode-math-luatex.sty †
2. unicode-math-xetex.sty †
3. unicode-math.sty †
### Typeset documents
The output files (PDF, essentially) from typesetting the various source, demo,
etc., package files.
1. unicode-math-code.pdf ‡
2. unicode-math.pdf ‡
3. unimath-example.pdf ‡
4. unimath-symbols.pdf ‡
### Checking-specific support files
Support files for checking the test suite.
1. umtest-preamble.tex
### Test files
These files form the test suite for the package. `.lvt` or `.lte` files are the individual
unit tests, and `.tlg` are the stored output for ensuring changes to the package produce
the same output. These output files are sometimes shared and sometime specific for
different engines (pdfTeX, XeTeX, LuaTeX, etc.).
1. aaa-loading.lvt
2. aaa-sym.lvt
3. active-frac.lvt
4. active-sscripts-amsmath.lvt
5. active-sscripts.lvt
6. alph-range-calscr.lvt
7. alph-range-fallback.lvt
8. alph-range-mapping.lvt
9. alph-range-sym-alph.lvt
10. alph-range-sym-range.lvt
11. alph-sym.lvt
12. ascii-catcodes.lvt
13. boldstyle-french.lvt
14. boldstyle-iso.lvt
15. boldstyle-literal.lvt
16. boldstyle-tex.lvt
17. boldstyle-upright.lvt
18. cramped-style.lvt
19. fontname-log.lvt
20. hyphen.lvt
21. input-fullwidth.lvt
22. lmdefault-mathrm-it-bf.lvt
23. mathit-symit-var.lvt
24. mathit-symit.lvt
25. mathoperator-mathbf.lvt
26. mathrm-mathcal-nest.lvt
27. mathrm-nobraces.lvt
28. mathsizes.lvt
29. mathstyle-french.lvt
30. mathstyle-iso.lvt
31. mathstyle-literal.lvt
32. mathstyle-tex.lvt
33. mathstyle-upright.lvt
34. nabla.lvt
35. nesting.lvt
36. not.lvt
37. operatorname.lvt
38. partial.lvt
39. radical-cuberoot-output.lvt
40. range-char-cmd.lvt
41. range-class.lvt
42. range-nabla-partial.lvt
43. range-up-num.lvt
44. setmathfontface.lvt
45. setmathsf.lvt
46. sqrt-amsmath-output.lvt
47. style-Bbbit.lvt
48. url.lvt
49. aaa-loading.luatex.tlg
50. aaa-loading.xetex.tlg
51. aaa-sym.luatex.tlg
52. aaa-sym.xetex.tlg
53. active-frac.luatex.tlg
54. active-frac.xetex.tlg
55. active-sscripts-amsmath.luatex.tlg
56. active-sscripts-amsmath.xetex.tlg
57. active-sscripts.luatex.tlg
58. active-sscripts.xetex.tlg
59. alph-range-calscr.luatex.tlg
60. alph-range-calscr.xetex.tlg
61. alph-range-fallback.luatex.tlg
62. alph-range-fallback.xetex.tlg
63. alph-range-mapping.luatex.tlg
64. alph-range-mapping.xetex.tlg
65. alph-range-sym-alph.luatex.tlg
66. alph-range-sym-alph.xetex.tlg
67. alph-range-sym-range.luatex.tlg
68. alph-range-sym-range.xetex.tlg
69. alph-sym.luatex.tlg
70. alph-sym.xetex.tlg
71. ascii-catcodes.luatex.tlg
72. ascii-catcodes.xetex.tlg
73. boldstyle-french.luatex.tlg
74. boldstyle-french.xetex.tlg
75. boldstyle-iso.luatex.tlg
76. boldstyle-iso.xetex.tlg
77. boldstyle-literal.luatex.tlg
78. boldstyle-literal.xetex.tlg
79. boldstyle-tex.luatex.tlg
80. boldstyle-tex.xetex.tlg
81. boldstyle-upright.luatex.tlg
82. boldstyle-upright.xetex.tlg
83. cramped-style.luatex.tlg
84. cramped-style.xetex.tlg
85. fontname-log.luatex.tlg
86. fontname-log.xetex.tlg
87. hyphen.luatex.tlg
88. hyphen.xetex.tlg
89. input-fullwidth.luatex.tlg
90. input-fullwidth.xetex.tlg
91. lmdefault-mathrm-it-bf.luatex.tlg
92. lmdefault-mathrm-it-bf.xetex.tlg
93. mathit-symit-var.luatex.tlg
94. mathit-symit-var.xetex.tlg
95. mathit-symit.luatex.tlg
96. mathit-symit.xetex.tlg
97. mathoperator-mathbf.luatex.tlg
98. mathoperator-mathbf.xetex.tlg
99. mathrm-mathcal-nest.luatex.tlg
100. mathrm-mathcal-nest.xetex.tlg
101. mathrm-nobraces.luatex.tlg
102. mathrm-nobraces.xetex.tlg
103. mathsizes.luatex.tlg
104. mathsizes.xetex.tlg
105. mathstyle-french.luatex.tlg
106. mathstyle-french.xetex.tlg
107. mathstyle-iso.luatex.tlg
108. mathstyle-iso.xetex.tlg
109. mathstyle-literal.luatex.tlg
110. mathstyle-literal.xetex.tlg
111. mathstyle-tex.luatex.tlg
112. mathstyle-tex.xetex.tlg
113. mathstyle-upright.luatex.tlg
114. mathstyle-upright.xetex.tlg
115. nabla.luatex.tlg
116. nabla.xetex.tlg
117. nesting.luatex.tlg
118. nesting.xetex.tlg
119. not.luatex.tlg
120. not.xetex.tlg
121. operatorname.luatex.tlg
122. operatorname.xetex.tlg
123. partial.luatex.tlg
124. partial.xetex.tlg
125. radical-cuberoot-output.luatex.tlg
126. radical-cuberoot-output.xetex.tlg
127. range-char-cmd.luatex.tlg
128. range-char-cmd.xetex.tlg
129. range-class.luatex.tlg
130. range-class.xetex.tlg
131. range-nabla-partial.luatex.tlg
132. range-nabla-partial.xetex.tlg
133. range-up-num.luatex.tlg
134. range-up-num.xetex.tlg
135. setmathfontface.luatex.tlg
136. setmathfontface.xetex.tlg
137. setmathsf.luatex.tlg
138. setmathsf.xetex.tlg
139. sqrt-amsmath-output.luatex.tlg
140. sqrt-amsmath-output.xetex.tlg
141. style-Bbbit.luatex.tlg
142. style-Bbbit.xetex.tlg
143. url.luatex.tlg
144. url.xetex.tlg
## TDS manifest
The following groups list the files included in the TeX Directory Structure used to install
the package into a TeX distribution.
### Source files (TDS)
All files included in the `unicode-math/source` directory.
1. um-code-alphabets.dtx
2. um-code-amsmath.dtx
3. um-code-api.dtx
4. um-code-compat.dtx
5. um-code-epilogue.dtx
6. um-code-fontopt.dtx
7. um-code-fontparam.dtx
8. um-code-main.dtx
9. um-code-mathmap.dtx
10. um-code-mathtext.dtx
11. um-code-msg.dtx
12. um-code-opening.dtx
13. um-code-pkgopt.dtx
14. um-code-primes.dtx
15. um-code-setchar.dtx
16. um-code-sscript.dtx
17. um-code-sym-commands.dtx
18. um-code-ui.dtx
19. um-code-usv.dtx
20. um-code-variables.dtx
21. unicode-math.dtx
22. unicode-math.ins
### TeX files (TDS)
All files included in the `unicode-math/tex` directory.
1. unicode-math-luatex.sty
2. unicode-math-table.tex
3. unicode-math-xetex.sty
4. unicode-math.sty
### Doc files (TDS)
All files included in the `unicode-math/doc` directory.
1. CHANGES.md
2. MANIFEST.md
3. README.md
4. RELEASE_CHECKLIST.md
5. um-doc-legacyfontdimen.tex
6. um-doc-main.tex
7. um-doc-mathfontdimen.tex
8. um-doc-nfsssummary.tex
9. um-doc-stixextract.tex
10. um-doc-style.tex
11. unicode-math-code.ltx
12. unicode-math-code.pdf
13. unicode-math.ltx
14. unicode-math.pdf
15. unimath-example.ltx
16. unimath-example.pdf
17. unimath-symbols.ltx
18. unimath-symbols.pdf
## CTAN manifest
The following group lists the files included in the CTAN package.
### CTAN files
1. CHANGES.md
2. MANIFEST.md
3. README.md
4. RELEASE_CHECKLIST.md
5. um-code-alphabets.dtx
6. um-code-amsmath.dtx
7. um-code-api.dtx
8. um-code-compat.dtx
9. um-code-epilogue.dtx
10. um-code-fontopt.dtx
11. um-code-fontparam.dtx
12. um-code-main.dtx
13. um-code-mathmap.dtx
14. um-code-mathtext.dtx
15. um-code-msg.dtx
16. um-code-opening.dtx
17. um-code-pkgopt.dtx
18. um-code-primes.dtx
19. um-code-setchar.dtx
20. um-code-sscript.dtx
21. um-code-sym-commands.dtx
22. um-code-ui.dtx
23. um-code-usv.dtx
24. um-code-variables.dtx
25. um-doc-legacyfontdimen.tex
26. um-doc-main.tex
27. um-doc-mathfontdimen.tex
28. um-doc-nfsssummary.tex
29. um-doc-stixextract.tex
30. um-doc-style.tex
31. unicode-math-code.ltx
32. unicode-math-code.pdf
33. unicode-math-table.tex
34. unicode-math.dtx
35. unicode-math.ins
36. unicode-math.ltx
37. unicode-math.pdf
38. unimath-example.ltx
39. unimath-example.pdf
40. unimath-symbols.ltx
41. unimath-symbols.pdf
================================================
FILE: README.md
================================================
The UNICODE-MATH package
========================
This package provides an implementation of Unicode/OpenType mathematics for
XeLaTeX and LuaLaTeX.
While I am a little wary of encouraging people to use this package for
production work, I understand that it has certain uses and am making it
available for distribution. Your testing and feedback is essential to fill
in the many gaps that I miss!
Please be aware that this package is undergoing continued development and the
interface and functionality should not be considered completely stable. But
the more the package is used the more stable it will become. (Things are
generally working now; it is only minutiae that may change in the future.)
Unicode maths is currently supported by the following freely available fonts:
- [Latin Modern Math][LM] (Bogusław Jackowski, Janusz M. Nowacki)
- [TeX Gyre Bonum Math][BM] (B. Jackowski, P. Strzelczyk and P. Pianowski)
- [TeX Gyre Pagella Math][PM] (B. Jackowski, P. Strzelczyk and P. Pianowski)
- [TeX Gyre Schola Math][SCM] (B. Jackowski, P. Strzelczyk and P. Pianowski)
- [TeX Gyre Termes Math][TM] (B. Jackowski, P. Strzelczyk and P. Pianowski)
- [DejaVu Math TeX Gyre][DEJA] (B. Jackowski, P. Strzelczyk and P. Pianowski)
- [Asana Math][AM] (Apostolos Syropolous),
- [STIX][STIX] (STIpub), and
- [XITS Math][XM] (Khaled Hosny),
- [Libertinus Math][LIB] (Philipp H. Poll and Khaled Hosny).
- [Fira Math][FIRA] (Xiangdong Zeng).
These fonts are available under open source licences
(the [GUST Font License][GFL] and [Open Font Licence][OFL]).
The following fonts are proprietary with OpenType maths support:
- [Lucida Bright Math][LUCI] (Charles Bigelow and Kris Holmes)
- [Cambria Math][CM] (Microsoft),
- [Minion Math][MM] (Johannes Küster, typoma GmbH)
I'm always looking for new fonts to test with, so please let me know of any
new releases.
[CM]: http://www.ascenderfonts.com/font/cambria-regular.aspx
[LUCI]: http://tug.org/store/lucida/opentype.html
[MM]: http://www.typoma.com/en/fonts.html
[LM]: http://www.gust.org.pl/projects/e-foundry/lm-math
[PM]: http://www.ctan.org/pkg/tex-gyre-math-pagella
[BM]: http://www.ctan.org/pkg/tex-gyre-math-bonum
[SCM]: http://www.ctan.org/pkg/tex-gyre-math-schola
[TM]: http://www.ctan.org/pkg/tex-gyre-math-termes
[DEJA]: https://ctan.org/pkg/tex-gyre-math-dejavu
[AM]: http://www.ctan.org/pkg/asana-math
[STIX]: http://www.stixfonts.org
[XM]: http://github.com/khaledhosny/xits-math
[LIB]: https://ctan.org/pkg/libertinus
[GFL]: http://www.gust.org.pl/projects/projects/e-foundry/licenses/
[OFL]: http://scripts.sil.org/OFL
[FIRA]: https://github.com/firamath/firamath
PACKAGE USAGE
-------------
Please see the PDF documentation for full details. A simple beginning is:
```tex
\usepackage{unicode-math}
\setmathfont{texgyrepagella-math.otf}
```
Most LaTeX math should still work after this. (Let me know if it doesn't.)
Furthermore, it will be in a different font.
REQUIREMENTS
------------
As well as running XeTeX or LuaTeX, this package requires recent versions of the
`lm-math`, `fontspec`, `expl3`, `xpackages`, and `lualatex-math` packages.
THANKS
------
I write LaTeX code as a hobby and a passion, not as part of my day job.
If you would like to say thanks, please consider a donation at: <https://www.patreon.com/wspr>
DEVELOPMENT and MAINTENANCE
---------------------------
The current release version is available from CTAN:
> <https://ctan.org/pkg/unicode-math>
Latest developmental and archived historical versions are available from Github:
> <http://github.com/wspr/unicode-math>
Please file bug reports with minimal examples:
> <http://github.com/wspr/unicode-math/issues>
See `CHANGES.md` for the complete listing of change history.
Further information on the details surrounding the development of the package
can be found in the `CONTRIBUTING.md` file in the Github repository.
LICENCE
-------
The unicode-math package may be modified and distributed under the terms and
conditions of the [LaTeX Project Public License][LPPL], version 1.3c or
greater.
[LPPL]: http://www.latex-project.org/lppl/
This work is maintained by Will Robertson and consists of the files listed in `MANIFEST.md`.
================================================
FILE: RELEASE_CHECKLIST.md
================================================
# UNICODE-MATH RELEASE CHECKLIST
- [ ] Finish final changes on `working` branch
- [ ] Ensure `CHANGES.md` is up-to-date with a new version number
- [ ] `git push`
- [ ] Check Travis build status
- [ ] Update local distro fully with tlmgr
- [ ] Run `build check` locally
- [ ] Install prerelease versions of `fontspec` and `latex3` and re-check
- [ ] `texlua autorelease.lua`
- [ ] Check `latex3/contrib/testfiles/unicode-math001.lvt` and update if necessary
================================================
FILE: _config.yml
================================================
theme: jekyll-theme-minimal
================================================
FILE: autorelease.lua
================================================
#!/usr/bin/env texlua
function os.capture(cmd, raw)
local f = assert(io.popen(cmd, 'r'))
local s = assert(f:read('*a'))
f:close()
if raw then return s end
s = string.gsub(s, '^%s+', '')
s = string.gsub(s, '%s+$', '')
s = string.gsub(s, '[\n\r]+', ' ')
return s
end
function exe(s)
print('=====================')
print('> '..s..'\n')
local e = os.execute(s)
if e > 0 then
error("EXECUTION FAILED: ABORT")
end
end
function usercheck()
print("\nHappy? [y/n]")
ans = io.read()
if not(string.lower(ans,1,1)=="y") then
error("USER ABORTED")
end
end
gitbranch = os.capture('git symbolic-ref --short HEAD')
if gitbranch ~= "working" then
print("Current git branch: "..gitbranch)
error("You must be on the 'working' branch")
else
print("Current git branch: "..gitbranch.." ... correct!")
end
gitstatus = os.capture('git status --porcelain')
if gitstatus ~= "" then
error("Files have been edited; please commit all changes.")
end
--[=========[
START
--]=========]
exe("git fetch")
aheadmaybe = os.capture('git branch -vv | grep `git symbolic-ref --short HEAD` | grep ahead')
if aheadmaybe ~= "" then
exe("git push")
end
exe("git checkout master")
exe("git pull")
exe("git rebase working")
print("***************************")
print(" REVIEW THE FOLLOWING ")
print("***************************")
changeslisting = nil
do
local f = assert(io.open("CHANGES.md", "r"))
changeslisting = f:read("*all")
f:close()
end
currentchanges = string.match(changeslisting,"(## %S+ %(.-%).-)%s*## %S+ %(.-%)")
if currentchanges:len() > 8192 then
local trunctext = " [...and more; see CHANGES.md for full details.]"
currentchanges = currentchanges:sub(1,8192-trunctext:len()-1) .. trunctext
end
print("***************************")
print(currentchanges)
print("***************************")
pkgversion = string.match(currentchanges,"## (%S+) %(.-%)")
print('New version: '..pkgversion)
oldversion = os.capture('git describe $(git rev-list --tags --max-count=1)')
print('Most recent tag: '..oldversion)
usercheck()
gitclean = os.capture('git clean -nx')
if gitclean ~= "" then
print("Before we start, the following files are about to be deleted. Please check.")
exe('git clean -nx')
usercheck()
end
--[============[
CONTINUE
--]============]
exe("git clean -fx")
exe("l3build tag")
gitstatus = os.capture('git status --porcelain')
if gitstatus ~= "" then
exe([===[
git commit -a -m 'update package version/date for release
[ci skip]';
]===])
end
exe("l3build ctan")
--[===========[
TAGGING
--]===========]
do
local f = assert(io.open("CHANGES-NEW.md", "w"))
f:write(currentchanges)
f:close()
end
exe("git tag -a '"..pkgversion.."' --file CHANGES-NEW.md")
exe("rm CHANGES-NEW.md")
--[=======================[
UPLOAD and CLEAN UP
--]=======================]
exe("l3build upload")
exe("git push")
exe("git checkout working")
exe("git rebase master")
exe("git push")
print('=====================')
print("Great success! Now time to fix some more bugs.")
================================================
FILE: build.lua
================================================
--[================[--
PARAMETERS
--]================]--
math.randomseed( os.time() )
module = "unicode-math"
sourcefiles = {"*.dtx","*.ins","unicode-math-table.tex"}
installfiles = {"*.sty","unicode-math-table.tex"}
typesetfiles = {"*.ltx"}
docfiles = {"um-doc-*.tex"}
textfiles = {"*.md","LICENSE"}
tagfiles = {"unicode-math.dtx","CHANGES.md"}
checkengines = {"xetex","luatex"}
typesetexe = "xelatex"
typesetopts = " -shell-escape -interaction=nonstopmode "
packtdszip = true
recordstatus = true
--[===[
DEV
--]===]
function os.capture(cmd)
local f = assert(io.popen(cmd, 'r'))
local s = assert(f:read('*a'))
f:close()
s = string.gsub(s, '^%s+', '')
s = string.gsub(s, '%s+$', '')
s = string.gsub(s, '[\n\r]+', ' ')
return s
end
gitbranch = os.capture('git rev-parse --abbrev-ref HEAD')
specialformats = specialformats or {}
if gitbranch == "develop" then
specialformats.latex = {
xetex = {binary = "xetex", format = "xelatex-dev"},
luatex = {binary = "luahbtex", format = "lualatex-dev"},
}
end
--[=============[--
VERSION
--]=============]--
changeslisting = nil
do
local f = assert(io.open("CHANGES.md", "r"))
changeslisting = f:read("*all")
f:close()
end
currentchanges = string.match(changeslisting,"(## %S+ %(.-%).-)%s*## %S+ %(.-%)")
pkgversion = string.match(changeslisting,"## v(%S+) %(.-%)")
gittag = 'v'..pkgversion
print('Current version (from first entry in CHANGES.md): '..pkgversion)
--[=================[--
CTAN UPLOAD
--]=================]--
local pkgdesc = [[
This package provides a comprehensive implementation of unicode maths for XeLaTeX and LuaLaTeX. Unicode maths requires an OpenType mathematics font, of which there are now a number of available via CTAN.
While backwards compatibility is strived for, there are some differences between the legacy mathematical definitions in LaTeX and amsmath, and the Unicode mathematics definitions. Care should be taken when transitioning from a legacy workflow to a Unicode-based one.
]]
uploadconfig = {
version = pkgversion,
author = "Will Robertson",
license = "lppl1.3c",
summary = "Unicode mathematics support for XeLaTeX and LuaLaTeX",
ctanPath = "/macros/latex/contrib/unicode-math",
repository = "https://github.com/wspr/unicode-math/",
bugtracker = "https://github.com/wspr/unicode-math/issues",
announcement = currentchanges,
description = pkgdesc,
}
local function prequire(m) -- from: https://stackoverflow.com/a/17878208
local ok, err = pcall(require, m)
if not ok then return nil, err end
return err
end
prequire("l3build-wspr.lua")
--[=============[--
TAGGING
--]=============]--
function update_tag(file, content, tagname, tagdate)
local date = string.gsub(tagdate, "%-", "/")
if string.match(content, "{%d%d%d%d/%d%d/%d%d}%s*{[^}]+}%s*{[^}]+}") then
print("Found expl3 version line in file: "..file)
content = content:gsub("{%d%d%d%d/%d%d/%d%d}(%s*){[^}]+}(%s*){([^}]+)}",
"{"..date.."}%1{"..pkgversion.."}%2{%3}")
end
if string.match(content, "\\def\\filedate{%d%d%d%d/%d%d/%d%d}") then
print("Found filedate line in file: "..file)
content = content:gsub("\\def\\filedate{[^}]+}", "\\def\\filedate{"..date.."}")
end
if string.match(content, "\\def\\fileversion{[^}]+}") then
print("Found fileversion line in file: "..file)
content = content:gsub("\\def\\fileversion{[^}]+}", "\\def\\fileversion{"..pkgversion.."}")
end
if string.match(content, "## (%S+) %([^)]+%)") then
print("Found changes line in file: "..file)
content = content:gsub("## (%S+) %([^)]+%)","## %1 ("..date..")",1)
end
return content
end
--[==============[--
MANIFEST
--]==============]--
manifest_setup = manifest_setup or function()
local groups = {
{
subheading = "Repository manifest",
description = [[
The following groups list the files included in the development repository of the package.
Files listed with a ‘†’ marker are included in the TDS but not CTAN files, and files listed
with ‘‡’ are included in both.
]],
},
{
name = "Source files",
description = [[
These are source files for a number of purposes, including the `unpack` process which
generates the installation files of the package. Additional files included here will also
be installed for processing such as testing.
]],
files = {sourcefiles},
dir = sourcefiledir or maindir, -- TODO: remove "or maindir" after rebasing onto master
},
{
name = "Typeset documentation source files",
description = [[
These files are typeset using LaTeX to produce the PDF documentation for the package.
]],
files = {typesetfiles,typesetsourcefiles,typesetdemofiles},
},
{
name = "Documentation files",
description = [[
These files form part of the documentation but are not typeset. Generally they will be
additional input files for the typeset documentation files listed above.
]],
files = {docfiles},
dir = docfiledir or maindir, -- TODO: remove "or maindir" after rebasing onto master
},
{
name = "Text files",
description = [[
Plain text files included as documentation or metadata.
]],
files = {textfiles},
skipfiledescription = true,
},
{
name = "Demo files",
description = [[
Files included to demonstrate package functionality. These files are *not*
typeset or compiled in any way.
]],
files = {demofiles},
},
{
name = "Bibliography and index files",
description = [[
Supplementary files used for compiling package documentation.
]],
files = {bibfiles,bstfiles,makeindexfiles},
},
{
name = "Derived files",
description = [[
The files created by ‘unpacking’ the package sources. This typically includes
`.sty` and `.cls` files created from DocStrip `.dtx` files.
]],
files = {installfiles},
exclude = {excludefiles,sourcefiles},
dir = unpackdir,
skipfiledescription = true,
},
{
name = "Typeset documents",
description = [[
The output files (PDF, essentially) from typesetting the various source, demo,
etc., package files.
]],
files = {typesetfiles,typesetsourcefiles,typesetdemofiles},
rename = {"%.%w+$", ".pdf"},
skipfiledescription = true,
},
{
name = "Support files",
description = [[
These files are used for unpacking, typesetting, or checking purposes.
]],
files = {unpacksuppfiles,typesetsuppfiles,checksuppfiles},
dir = supportdir,
},
{
name = "Release files",
description = [[
These files are used to manage the package behind the scenes. Not part of a CTAN release.
]],
files = {"*.lua"},
dir = maindir,
},
{
name = "Travis files",
description = [[
These are used to set up Travis CI. Not part of a CTAN release.
]],
files = {"texlive.*",".travis.yml"},
dir = maindir,
},
{
name = "Checking-specific support files",
description = [[
Support files for checking the test suite. Not part of a CTAN release.
]],
files = {"*.*"},
exclude = {{".",".."},excludefiles},
dir = testsuppdir,
},
{
name = "Test files",
description = [[
These files form the test suite for the package. The listed `.lvt` files are the individual unit tests, with matching `.tlg` (not shown, for brevity) are the stored output for ensuring changes to the package produce the same output. Not part of a CTAN release.
]],
files = {"*"..lvtext,"*"..lveext},
dir = testfiledir,
skipfiledescription = true,
},
{
subheading = "TDS manifest",
description = [[
The following groups list the files included in the TeX Directory Structure used to install
the package into a TeX distribution.
]],
},
{
name = "Source files (TDS)",
description = "All files included in the `"..module.."/source` directory.\n",
dir = tdsdir.."/source/"..moduledir,
files = {"*.*"},
exclude = {".",".."},
flag = false,
skipfiledescription = true,
},
{
name = "TeX files (TDS)",
description = "All files included in the `"..module.."/tex` directory.\n",
dir = tdsdir.."/tex/"..moduledir,
files = {"*.*"},
exclude = {".",".."},
flag = false,
skipfiledescription = true,
},
{
name = "Doc files (TDS)",
description = "All files included in the `"..module.."/doc` directory.\n",
dir = tdsdir.."/doc/"..moduledir,
files = {"*.*"},
exclude = {".",".."},
flag = false,
skipfiledescription = true,
},
{
subheading = "CTAN manifest",
description = [[
The following group lists the files included in the CTAN package.
]],
},
{
name = "CTAN files",
dir = ctandir.."/"..module,
files = {"*.*"},
exclude = {".",".."},
flag = false,
skipfiledescription = true,
},
}
return groups
end
filematches = {}
filematches["CHANGES.md"] = "Chronological list of release notes"
filematches["LICENSE"] = "Copy of the LPPL"
filematches["README.md"] = "General information about the package"
-- improve sorting
dtxlisting = nil
ltxlisting = nil
do
local f = assert(io.open("unicode-math.dtx", "r"))
dtxlisting = f:read("*all")
f:close()
local f = assert(io.open("unicode-math.ltx", "r"))
ltxlisting = f:read("*all")
f:close()
end
sort_by_loc = function(str,x,y)
m = string.find(str,x,1,true)
n = string.find(str,y,1,true)
return n > m
end
manifest_sort_within_match = manifest_sort_within_match or function(files)
local f = files
local sortfn = function(x,y) return y>x end
if f[1] then
if string.match(f[1],".*%.dtx") then
sortfn = function(x,y) return sort_by_loc(dtxlisting,x,y) end
elseif string.match(f[1],".*%.tex") then
sortfn = function(x,y) return sort_by_loc(ltxlisting,x,y) end
end
end
table.sort(f,sortfn)
return f
end
-- use an enumerated list for files (mostly just for testing)
manifest_write_group_file = function(filehandle,filename,param)
filehandle:write(string.format("%2i",param.count)..". " .. filename .. " " .. (param.flag or "") .. "\n")
end
-- Extract file descriptions from the 2nd line of each file:
manifest_extract_filedesc = function(filehandle,filename)
filedesc = filematches[filename]
if not(filedesc) then
local end_read_loop = 2
local matchstr = "%%%S%s+(.*)"
local this_line = ""
for ii = 1, end_read_loop do
this_line = filehandle:read("*line")
end
filedesc = string.match(this_line,matchstr)
end
return filedesc
end
================================================
FILE: githooks/enable-githooks.sh
================================================
## ENABLE-GITHOOKS.SH
git config core.hooksPath githooks
================================================
FILE: githooks/post-commit
================================================
## POST-COMMIT
# 1.
# Updates copyright for Will to the current year.
YEAR=`date +%Y`
sed -i'.tmp' 's/\(2006\)-[0-9]* /\1-'$YEAR' /' COPYRIGHT
rm COPYRIGHT.tmp
for ii in *.ins *.tex *.ltx *.dtx ; do
# 2.
# Updates copyright statements between lines surrounded by:
# % /©
#. ...
#. % ©/
# with the text in the file COPYRIGHT
awk 'FNR==NR{ _[++d]=$0;next}
/^% \/©$/{
print
for(i=1;i<=d;i++){ print _[i] }
f=1;next
}
/^% ©\/$/{f=0}!f' COPYRIGHT $ii > tmpfile
mv tmpfile $ii
# 3.
# Updates the first line of the file to match the filename
sed -i'.tmp' "1s/.*/%%^^A%% $ii -- part of UNICODE-MATH \<wspr.io\/unicode-math\>/" $ii
rm $ii.tmp
done
================================================
FILE: misc/amsmath-testmath.tex
================================================
% This is the AMS's testmath.tex modified to check unicode-math output.
\documentclass{article}
\pagestyle{headings}
\title{Sample Paper for the \pkg{amsmath} Package\\
File name: \fn{testmath.tex}}
\author{American Mathematical Society}
\date{Version 2.0, 1999/11/15}
\usepackage{amsmath,amsthm,trace}
\usepackage{unicode-math}
\setmainfont{XITS}
\setmathfont{XITS Math}
% Some definitions useful in producing this sort of documentation:
\chardef\bslash=`\\ % p. 424, TeXbook
% Normalized (nonbold, nonitalic) tt font, to avoid font
% substitution warning messages if tt is used inside section
% headings and other places where odd font combinations might
% result.
\newcommand{\ntt}{\normalfont\ttfamily}
% command name
\newcommand{\cn}[1]{{\protect\ntt\bslash#1}}
% LaTeX package name
\newcommand{\pkg}[1]{{\protect\ntt#1}}
% File name
\newcommand{\fn}[1]{{\protect\ntt#1}}
% environment name
\newcommand{\env}[1]{{\protect\ntt#1}}
\hfuzz1pc % Don't bother to report overfull boxes if overage is < 1pc
% Theorem environments
%% \theoremstyle{plain} %% This is the default
\newtheorem{thm}{Theorem}[section]
\newtheorem{cor}[thm]{Corollary}
\newtheorem{lem}[thm]{Lemma}
\newtheorem{prop}[thm]{Proposition}
\newtheorem{ax}{Axiom}
\theoremstyle{definition}
\newtheorem{defn}{Definition}[section]
\theoremstyle{remark}
\newtheorem{rem}{Remark}[section]
\newtheorem*{notation}{Notation}
%\numberwithin{equation}{section}
\newcommand{\thmref}[1]{Theorem~\ref{#1}}
\newcommand{\secref}[1]{\S\ref{#1}}
\newcommand{\lemref}[1]{Lemma~\ref{#1}}
\newcommand{\bysame}{\mbox{\rule{3em}{.4pt}}\,}
% Math definitions
\newcommand{\A}{\mathcal{A}}
\newcommand{\BB}{\mathcal{B}}
\newcommand{\st}{\sigma}
\newcommand{\XcY}{{(X,Y)}}
\newcommand{\SX}{{S_X}}
\newcommand{\SY}{{S_Y}}
\newcommand{\SXY}{{S_{X,Y}}}
\newcommand{\SXgYy}{{S_{X|Y}(y)}}
\newcommand{\Cw}[1]{{\hat C_#1(X|Y)}}
\newcommand{\GG}{{G(X|Y)}}
\newcommand{\PY}{{P_{\mathcal{Y}}}}
\newcommand{\X}{\mathcal{X}}
\newcommand{\wt}{\widetilde}
\newcommand{\wh}{\widehat}
\DeclareMathOperator{\per}{per}
\DeclareMathOperator{\cov}{cov}
\DeclareMathOperator{\non}{non}
\DeclareMathOperator{\cf}{cf}
\DeclareMathOperator{\add}{add}
\DeclareMathOperator{\Cham}{Cham}
\DeclareMathOperator{\IM}{Im}
\DeclareMathOperator{\esssup}{ess\,sup}
\DeclareMathOperator{\meas}{meas}
\DeclareMathOperator{\seg}{seg}
% \interval is used to provide better spacing after a [ that
% is used as a closing delimiter.
\newcommand{\interval}[1]{\mathinner{#1}}
% Notation for an expression evaluated at a particular condition. The
% optional argument can be used to override automatic sizing of the
% right vert bar, e.g. \eval[\biggr]{...}_{...}
\newcommand{\eval}[2][\right]{\relax
\ifx#1\right\relax \left.\fi#2#1\rvert}
% Enclose the argument in vert-bar delimiters:
\newcommand{\envert}[1]{\left\lvert#1\right\rvert}
\let\abs=\envert
% Enclose the argument in double-vert-bar delimiters:
\newcommand{\enVert}[1]{\left\lVert#1\right\rVert}
\let\norm=\enVert
\begin{document}
\maketitle
\markboth{Sample paper for the {\protect\ntt\lowercase{amsmath}} package}
{Sample paper for the {\protect\ntt\lowercase{amsmath}} package}
\renewcommand{\sectionmark}[1]{}
\section{Introduction}
This paper contains examples of various features from \AmS-\LaTeX{}.
\section{Enumeration of Hamiltonian paths in a graph}
Let $\mathbf{A}=(a_{ij})$ be the adjacency matrix of graph $G$. The
corresponding Kirchhoff matrix $\mathbf{K}=(k_{ij})$ is obtained from
$\mathbf{A}$ by replacing in $-\mathbf{A}$ each diagonal entry by the
degree of its corresponding vertex; i.e., the $i$th diagonal entry is
identified with the degree of the $i$th vertex. It is well known that
\begin{equation}
\det\mathbf{K}(i|i)=\text{ the number of spanning trees of $G$},
\quad i=1,\dots,n
\end{equation}
where $\mathbf{K}(i|i)$ is the $i$th principal submatrix of
$\mathbf{K}$.
\begin{verbatim}
\det\mathbf{K}(i|i)=\text{ the number of spanning trees of $G$},
\end{verbatim}
Let $C_{i(j)}$ be the set of graphs obtained from $G$ by attaching edge
$(v_iv_j)$ to each spanning tree of $G$. Denote by $C_i=\bigcup_j
C_{i(j)}$. It is obvious that the collection of Hamiltonian cycles is a
subset of $C_i$. Note that the cardinality of $C_i$ is $k_{ii}\det
\mathbf{K}(i|i)$. Let $\wh X=\{\hat x_1,\dots,\hat x_n\}$.
\begin{verbatim}
$\wh X=\{\hat x_1,\dots,\hat x_n\}$
\end{verbatim}
Define multiplication for the elements of $\wh X$ by
\begin{equation}\label{multdef}
\hat x_i\hat x_j=\hat x_j\hat x_i,\quad \hat x^2_i=0,\quad
i,j=1,\dots,n.
\end{equation}
Let $\hat k_{ij}=k_{ij}\hat x_j$ and $\hat k_{ij}=-\sum_{j\not=i} \hat
k_{ij}$. Then the number of Hamiltonian cycles $H_c$ is given by the
relation \cite{liuchow:formalsum}
\begin{equation}\label{H-cycles}
\biggl(\prod^n_{\,j=1}\hat x_j\biggr)H_c=\frac{1}{2}\hat k_{ij}\det
\wh{\mathbf{K}}(i|i),\qquad i=1,\dots,n.
\end{equation}
The task here is to express \eqref{H-cycles}
in a form free of any $\hat x_i$,
$i=1,\dots,n$. The result also leads to the resolution of enumeration of
Hamiltonian paths in a graph.
It is well known that the enumeration of Hamiltonian cycles and paths in
a complete graph $K_n$ and in a complete bipartite graph $K_{n_1n_2}$
can only be found from \textit{first combinatorial principles}
\cite{hapa:graphenum}. One wonders if there exists a formula which can
be used very efficiently to produce $K_n$ and $K_{n_1n_2}$. Recently,
using Lagrangian methods, Goulden and Jackson have shown that $H_c$ can
be expressed in terms of the determinant and permanent of the adjacency
matrix \cite{gouja:lagrmeth}. However, the formula of Goulden and
Jackson determines neither $K_n$ nor $K_{n_1n_2}$ effectively. In this
paper, using an algebraic method, we parametrize the adjacency matrix.
The resulting formula also involves the determinant and permanent, but
it can easily be applied to $K_n$ and $K_{n_1n_2}$. In addition, we
eliminate the permanent from $H_c$ and show that $H_c$ can be
represented by a determinantal function of multivariables, each variable
with domain $\{0,1\}$. Furthermore, we show that $H_c$ can be written by
number of spanning trees of subgraphs. Finally, we apply the formulas to
a complete multigraph $K_{n_1\dots n_p}$.
The conditions $a_{ij}=a_{ji}$, $i,j=1,\dots,n$, are not required in
this paper. All formulas can be extended to a digraph simply by
multiplying $H_c$ by 2.
\section{Main Theorem}
\label{s:mt}
\begin{notation} For $p,q\in P$ and $n\in\omega$ we write
$(q,n)\le(p,n)$ if $q\le p$ and $A_{q,n}=A_{p,n}$.
\begin{verbatim}
\begin{notation} For $p,q\in P$ and $n\in\omega$
...
\end{notation}
\end{verbatim}
\end{notation}
Let $\mathbf{B}=(b_{ij})$ be an $n\times n$ matrix. Let $\mathbf{n}=\{1,
\dots,n\}$. Using the properties of \eqref{multdef}, it is readily seen
that
\begin{lem}\label{lem-per}
\begin{equation}
\prod_{i\in\mathbf{n}}
\biggl(\sum_{\,j\in\mathbf{n}}b_{ij}\hat x_i\biggr)
=\biggl(\prod_{\,i\in\mathbf{n}}\hat x_i\biggr)\per \mathbf{B}
\end{equation}
where $\per \mathbf{B}$ is the permanent of $\mathbf{B}$.
\end{lem}
Let $\wh Y=\{\hat y_1,\dots,\hat y_n\}$. Define multiplication
for the elements of $\wh Y$ by
\begin{equation}
\hat y_i\hat y_j+\hat y_j\hat y_i=0,\quad i,j=1,\dots,n.
\end{equation}
Then, it follows that
\begin{lem}\label{lem-det}
\begin{equation}\label{detprod}
\prod_{i\in\mathbf{n}}
\biggl(\sum_{\,j\in\mathbf{n}}b_{ij}\hat y_j\biggr)
=\biggl(\prod_{\,i\in\mathbf{n}}\hat y_i\biggr)\det\mathbf{B}.
\end{equation}
\end{lem}
Note that all basic properties of determinants are direct consequences
of Lemma ~\ref{lem-det}. Write
\begin{equation}\label{sum-bij}
\sum_{j\in\mathbf{n}}b_{ij}\hat y_j=\sum_{j\in\mathbf{n}}b^{(\lambda)}
_{ij}\hat y_j+(b_{ii}-\lambda_i)\hat y_i\hat y
\end{equation}
where
\begin{equation}
b^{(\lambda)}_{ii}=\lambda_i,\quad b^{(\lambda)}_{ij}=b_{ij},
\quad i\not=j.
\end{equation}
Let $\mathbf{B}^{(\lambda)}=(b^{(\lambda)}_{ij})$. By \eqref{detprod}
and \eqref{sum-bij}, it is
straightforward to show the following
result:
\begin{thm}\label{thm-main}
\begin{equation}\label{detB}
\det\mathbf{B}=
\sum^n_{l =0}\sum_{I_l \subseteq n}
\prod_{i\in I_l}(b_{ii}-\lambda_i)
\det\mathbf{B}^{(\lambda)}(I_l |I_l ),
\end{equation}
where $I_l =\{i_1,\dots,i_l \}$ and $\mathbf{B}^{(\lambda)}(I_l |I_l )$
is the principal submatrix obtained from $\mathbf{B}^{(\lambda)}$
by deleting its $i_1,\dots,i_l $ rows and columns.
\end{thm}
\begin{rem}
Let $\mathbf{M}$ be an $n\times n$ matrix. The convention
$\mathbf{M}(\mathbf{n}|\mathbf{n})=1$ has been used in \eqref{detB} and
hereafter.
\end{rem}
Before proceeding with our discussion, we pause to note that
\thmref{thm-main} yields immediately a fundamental formula which can be
used to compute the coefficients of a characteristic polynomial
\cite{mami:matrixth}:
\begin{cor}\label{BI}
Write $\det(\mathbf{B}-x\mathbf{I})=\sum^n_{l =0}(-1)
^l b_l x^l $. Then
\begin{equation}\label{bl-sum}
b_l =\sum_{I_l \subseteq\mathbf{n}}\det\mathbf{B}(I_l |I_l ).
\end{equation}
\end{cor}
Let
\begin{equation}
\mathbf{K}(t,t_1,\dots,t_n)
=\begin{pmatrix} D_1t&-a_{12}t_2&\dots&-a_{1n}t_n\\
-a_{21}t_1&D_2t&\dots&-a_{2n}t_n\\
\hdotsfor[2]{4}\\
-a_{n1}t_1&-a_{n2}t_2&\dots&D_nt\end{pmatrix},
\end{equation}
\begin{verbatim}
\begin{pmatrix} D_1t&-a_{12}t_2&\dots&-a_{1n}t_n\\
-a_{21}t_1&D_2t&\dots&-a_{2n}t_n\\
\hdotsfor[2]{4}\\
-a_{n1}t_1&-a_{n2}t_2&\dots&D_nt\end{pmatrix}
\end{verbatim}
where
\begin{equation}
D_i=\sum_{j\in\mathbf{n}}a_{ij}t_j,\quad i=1,\dots,n.
\end{equation}
Set
\begin{equation*}
D(t_1,\dots,t_n)=\frac{\delta}{\delta t}\eval{\det\mathbf{K}(t,t_1,\dots,t_n)
}_{t=1}.
\end{equation*}
Then
\begin{equation}\label{sum-Di}
D(t_1,\dots,t_n)
=\sum_{i\in\mathbf{n}}D_i\det\mathbf{K}(t=1,t_1,\dots,t_n; i|i),
\end{equation}
where $\mathbf{K}(t=1,t_1,\dots,t_n; i|i)$ is the $i$th principal
submatrix of $\mathbf{K}(t=1,t_1,\dots,t_n)$.
Theorem ~\ref{thm-main} leads to
\begin{equation}\label{detK1}
\det\mathbf{K}(t_1,t_1,\dots,t_n)
=\sum_{I\in\mathbf{n}}(-1)^{\envert{I}}t^{n-\envert{I}}
\prod_{i\in I}t_i\prod_{j\in I}(D_j+\lambda_jt_j)\det\mathbf{A}
^{(\lambda t)}(\overline{I}|\overline I).
\end{equation}
Note that
\begin{equation}\label{detK2}
\det\mathbf{K}(t=1,t_1,\dots,t_n)=\sum_{I\in\mathbf{n}}(-1)^{\envert{I}}
\prod_{i\in I}t_i\prod_{j\in I}(D_j+\lambda_jt_j)\det\mathbf{A}
^{(\lambda)}(\overline{I}|\overline{I})=0.
\end{equation}
Let $t_i=\hat x_i,i=1,\dots,n$. Lemma ~\ref{lem-per} yields
\begin{multline}
\biggl(\sum_{\,i\in\mathbf{n}}a_{l _i}x_i\biggr)
\det\mathbf{K}(t=1,x_1,\dots,x_n;l |l )\\
=\biggl(\prod_{\,i\in\mathbf{n}}\hat x_i\biggr)
\sum_{I\subseteq\mathbf{n}-\{l \}}
(-1)^{\envert{I}}\per\mathbf{A}^{(\lambda)}(I|I)
\det\mathbf{A}^{(\lambda)}
(\overline I\cup\{l \}|\overline I\cup\{l \}).
\label{sum-ali}
\end{multline}
\begin{verbatim}
\begin{multline}
\biggl(\sum_{\,i\in\mathbf{n}}a_{l _i}x_i\biggr)
\det\mathbf{K}(t=1,x_1,\dots,x_n;l |l )\\
=\biggl(\prod_{\,i\in\mathbf{n}}\hat x_i\biggr)
\sum_{I\subseteq\mathbf{n}-\{l \}}
(-1)^{\envert{I}}\per\mathbf{A}^{(\lambda)}(I|I)
\det\mathbf{A}^{(\lambda)}
(\overline I\cup\{l \}|\overline I\cup\{l \}).
\label{sum-ali}
\end{multline}
\end{verbatim}
By \eqref{H-cycles}, \eqref{detprod}, and \eqref{sum-bij}, we have
\begin{prop}\label{prop:eg}
\begin{equation}
H_c=\frac1{2n}\sum^n_{l =0}(-1)^{l}
D_{l},
\end{equation}
where
\begin{equation}\label{delta-l}
D_{l}=\eval[2]{\sum_{I_{l}\subseteq \mathbf{n}}
D(t_1,\dots,t_n)}_{t_i=\left\{\begin{smallmatrix}
0,& \text{if }i\in I_{l}\quad\\% \quad added for centering
1,& \text{otherwise}\end{smallmatrix}\right.\;,\;\; i=1,\dots,n}.
\end{equation}
\end{prop}
\section{Application}
\label{lincomp}
We consider here the applications of Theorems~\ref{th-info-ow-ow} and
~\ref{th-weak-ske-owf} to a complete
multipartite graph $K_{n_1\dots n_p}$. It can be shown that the
number of spanning trees of $K_{n_1\dots n_p}$
may be written
\begin{equation}\label{e:st}
T=n^{p-2}\prod^p_{i=1}
(n-n_i)^{n_i-1}
\end{equation}
where
\begin{equation}
n=n_1+\dots+n_p.
\end{equation}
It follows from Theorems~\ref{th-info-ow-ow} and
~\ref{th-weak-ske-owf} that
\begin{equation}\label{e:barwq}
\begin{split}
H_c&=\frac1{2n}
\sum^n_{{l}=0}(-1)^{l}(n-{l})^{p-2}
\sum_{l _1+\dots+l _p=l}\prod^p_{i=1}
\binom{n_i}{l _i}\\
&\quad\cdot[(n-l )-(n_i-l _i)]^{n_i-l _i}\cdot
\biggl[(n-l )^2-\sum^p_{j=1}(n_i-l _i)^2\biggr].\end{split}
\end{equation}
\begin{verbatim}
... \binom{n_i}{l _i}\\
\end{verbatim}
and
\begin{equation}\label{joe}
\begin{split}
H_c&=\frac12\sum^{n-1}_{l =0}
(-1)^{l}(n-l )^{p-2}
\sum_{l _1+\dots+l _p=l}
\prod^p_{i=1}\binom{n_i}{l _i}\\
&\quad\cdot[(n-l )-(n_i-l _i)]^{n_i-l _i}
\left(1-\frac{l _p}{n_p}\right)
[(n-l )-(n_p-l _p)].
\end{split}
\end{equation}
The enumeration of $H_c$ in a $K_{n_1\dotsm n_p}$ graph can also be
carried out by Theorem ~\ref{thm-H-param} or ~\ref{thm-asym}
together with the algebraic method of \eqref{multdef}.
Some elegant representations may be obtained. For example, $H_c$ in
a $K_{n_1n_2n_3}$ graph may be written
\begin{equation}\label{j:mark}
\begin{split}
H_c=&
\frac{n_1!\,n_2!\,n_3!}
{n_1+n_2+n_3}\sum_i\left[\binom{n_1}{i}
\binom{n_2}{n_3-n_1+i}\binom{n_3}{n_3-n_2+i}\right.\\
&+\left.\binom{n_1-1}{i}
\binom{n_2-1}{n_3-n_1+i}
\binom{n_3-1}{n_3-n_2+i}\right].\end{split}
\end{equation}
\section{Secret Key Exchanges}
\label{SKE}
Modern cryptography is fundamentally concerned with the problem of
secure private communication. A Secret Key Exchange is a protocol
where Alice and Bob, having no secret information in common to start,
are able to agree on a common secret key, conversing over a public
channel. The notion of a Secret Key Exchange protocol was first
introduced in the seminal paper of Diffie and Hellman
\cite{dihe:newdir}. \cite{dihe:newdir} presented a concrete
implementation of a Secret Key Exchange protocol, dependent on a
specific assumption (a variant on the discrete log), specially
tailored to yield Secret Key Exchange. Secret Key Exchange is of
course trivial if trapdoor permutations exist. However, there is no
known implementation based on a weaker general assumption.
The concept of an informationally one-way function was introduced
in \cite{imlelu:oneway}. We give only an informal definition here:
\begin{defn} A polynomial time
computable function $f = \{f_k\}$ is informationally
one-way if there is no probabilistic polynomial time algorithm which
(with probability of the form $1 - k^{-e}$ for some $e > 0$)
returns on input $y \in \{0,1\}^{k}$ a random element of $f^{-1}(y)$.
\end{defn}
In the non-uniform setting \cite{imlelu:oneway} show that these are not
weaker than one-way functions:
\begin{thm}[\cite{imlelu:oneway} (non-uniform)]
\label{th-info-ow-ow}
The existence of informationally one-way functions
implies the existence of one-way functions.
\end{thm}
We will stick to the convention introduced above of saying
``non-uniform'' before the theorem statement when the theorem
makes use of non-uniformity. It should be understood that
if nothing is said then the result holds for both the uniform and
the non-uniform models.
It now follows from \thmref{th-info-ow-ow} that
\begin{thm}[non-uniform]\label{th-weak-ske-owf} Weak SKE
implies the existence of a one-way function.
\end{thm}
More recently, the polynomial-time, interior point algorithms for linear
programming have been extended to the case of convex quadratic programs
\cite{moad:quadpro,ye:intalg}, certain linear complementarity problems
\cite{komiyo:lincomp,miyoki:lincomp}, and the nonlinear complementarity
problem \cite{komiyo:unipfunc}. The connection between these algorithms
and the classical Newton method for nonlinear equations is well
explained in \cite{komiyo:lincomp}.
\section{Review}
\label{computation}
We begin our discussion with the following definition:
\begin{defn}
A function $H\colon \Re^n \to \Re^n$ is said to be
\emph{B-differentiable} at the point $z$ if (i)~$H$ is Lipschitz
continuous in a neighborhood of $z$, and (ii)~ there exists a positive
homogeneous function $BH(z)\colon \Re^n \to \Re^n$, called the
\emph{B-derivative} of $H$ at $z$, such that
\[ \lim_{v \to 0} \frac{H(z+v) - H(z) - BH(z)v}{\enVert{v}} = 0. \]
The function $H$ is \textit{B-differentiable in set $S$} if it is
B-differentiable at every point in $S$. The B-derivative $BH(z)$ is said
to be \textit{strong} if
\[ \lim_{(v,v') \to (0,0)} \frac{H(z+v) - H(z+v') - BH(z)(v
-v')}{\enVert{v - v'}} = 0. \]
\end{defn}
\begin{lem}\label{limbog} There exists a smooth function $\psi_0(z)$
defined for $\abs{z}>1-2a$ satisfying the following properties\textup{:}
\begin{enumerate}
\renewcommand{\labelenumi}{(\roman{enumi})}
\item $\psi_0(z)$ is bounded above and below by positive constants
$c_1\leq \psi_0(z)\leq c_2$.
\item If $\abs{z}>1$, then $\psi_0(z)=1$.
\item For all $z$ in the domain of $\psi_0$, $\Delta_0\ln \psi_0\geq 0$.
\item If $1-2a<\abs{z}<1-a$, then $\Delta_0\ln \psi_0\geq
c_3>0$.
\end{enumerate}
\end{lem}
\begin{proof}
We choose $\psi_0(z)$ to be a radial function depending only on $r=\abs{z}$.
Let $h(r)\geq 0$ be a suitable smooth function satisfying $h(r)\geq c_3$
for $1-2a<\abs{z}<1-a$, and $h(r)=0$ for $\abs{z}>1-\tfrac a2$. The radial
Laplacian
\[\Delta_0\ln\psi_0(r)=\left(\frac {d^2}{dr^2}+\frac
1r\frac d{dr}\right)\ln\psi_0(r)\]
has smooth coefficients for $r>1-2a$. Therefore, we may
apply the existence and uniqueness theory for ordinary differential
equations. Simply let $\ln \psi_0(r)$ be the solution of the differential
equation
\[\left(\frac{d^2}{dr^2}+\frac 1r\frac d{dr}\right)\ln \psi_0(r)=h(r)\]
with initial conditions given by $\ln \psi_0(1)=0$ and
$\ln\psi_0'(1)=0$.
Next, let $D_\nu$ be a finite collection of pairwise disjoint disks,
all of which are contained in the unit disk centered at the origin in
$C$. We assume that $D_\nu=\{z\mid \abs{z-z_\nu}<\delta\}$. Suppose that
$D_\nu(a)$ denotes the smaller concentric disk $D_\nu(a)=\{z\mid
\abs{z-z_\nu}\leq (1-2a)\delta\}$. We define a smooth weight function
$\Phi_0(z)$ for $z\in C-\bigcup_\nu D_\nu(a)$ by setting $\Phi_
0(z)=1$ when $z\notin \bigcup_\nu D_\nu$ and $\Phi_
0(z)=\psi_0((z-z_\nu)/\delta)$ when $z$ is an element of $D_\nu$. It
follows from \lemref{limbog} that $\Phi_ 0$ satisfies the properties:
\begin{enumerate}
\renewcommand{\labelenumi}{(\roman{enumi})}
\item \label{boundab}$\Phi_ 0(z)$ is bounded above and below by
positive constants $c_1\leq \Phi_ 0(z)\leq c_2$.
\item \label{d:over}$\Delta_0\ln\Phi_ 0\geq 0$ for all
$z\in C-\bigcup_\nu D_\nu(a)$,
the domain where the function $\Phi_ 0$ is defined.
\item \label{d:ad}$\Delta_0\ln\Phi_ 0\geq c_3\delta^{-2}$
when $(1-2a)\delta<\abs{z-z_\nu}<(1-a)\delta$.
\end{enumerate}
Let $A_\nu$ denote the annulus $A_\nu=\{(1-2a)\delta<\abs{z-z_\nu}<(1-a)
\delta \}$, and set $A=\bigcup_\nu A_\nu$. The
properties (\ref{d:over}) and (\ref{d:ad}) of $\Phi_ 0$
may be summarized as $\Delta_0\ln \Phi_ 0\geq c_3\delta^{-2}\chi_A$,
where $\chi _A$ is the characteristic function of $A$.
\end{proof}
Suppose that $\alpha$ is a nonnegative real constant. We apply
Proposition~\ref{prop:eg} with $\Phi(z)=\Phi_ 0(z) e^{\alpha\abs{z}^2}$. If
$u\in C^\infty_0(R^2-\bigcup_\nu D_\nu(a))$, assume that $\mathcal{D}$
is a bounded domain containing the support of $u$ and $A\subset
\mathcal{D}\subset R^2-\bigcup_\nu D_\nu(a)$. A calculation gives
\[\int_{\mathcal{D}}\abs{\overline\partial u}^2\Phi_ 0(z) e^{\alpha\abs{z}^2}
\geq c_4\alpha\int_{\mathcal{D}}\abs{u}^2\Phi_ 0e^{\alpha\abs{z}^2}
+c_5\delta^{-2}\int_ A\abs{u}^2\Phi_ 0e^{\alpha\abs{z}^2}.\]
The boundedness, property (\ref{boundab}) of $\Phi_ 0$, then yields
\[\int_{\mathcal{D}}\abs{\overline\partial u}^2e^{\alpha\abs{z}^2}\geq c_6\alpha
\int_{\mathcal{D}}\abs{u}^2e^{\alpha\abs{z}^2}
+c_7\delta^{-2}\int_ A\abs{u}^2e^{\alpha\abs{z}^2}.\]
Let $B(X)$ be the set of blocks of $\Lambda_{X}$
and let $b(X) = \abs{B(X)}$. If $\phi \in Q_{X}$ then
$\phi$ is constant on the blocks of $\Lambda_{X}$.
\begin{equation}\label{far-d}
P_{X} = \{ \phi \in M \mid \Lambda_{\phi} = \Lambda_{X} \},
\qquad
Q_{X} = \{\phi \in M \mid \Lambda_{\phi} \geq \Lambda_{X} \}.
\end{equation}
If $\Lambda_{\phi} \geq \Lambda_{X}$ then
$\Lambda_{\phi} = \Lambda_{Y}$ for some $Y \geq X$ so that
\[ Q_{X} = \bigcup_{Y \geq X} P_{Y}. \]
Thus by M\"obius inversion
\[ \abs{P_{Y}}= \sum_{X\geq Y} \mu (Y,X)\abs{Q_{X}}.\]
Thus there is a bijection from $Q_{X}$ to $W^{B(X)}$.
In particular $\abs{Q_{X}} = w^{b(X)}$.
Next note that $b(X)=\dim X$. We see this by choosing a
basis for $X$ consisting of vectors $v^{k}$ defined by
\[v^{k}_{i}=
\begin{cases} 1 & \text{if $i \in \Lambda_{k}$},\\
0 &\text{otherwise.} \end{cases}
\]
\begin{verbatim}
\[v^{k}_{i}=
\begin{cases} 1 & \text{if $i \in \Lambda_{k}$},\\
0 &\text{otherwise.} \end{cases}
\]
\end{verbatim}
\begin{lem}\label{p0201}
Let $\A$ be an arrangement. Then
\[ \chi (\A,t) = \sum_{\BB \subseteq \A}
(-1)^{\abs{\BB}} t^{\dim T(\BB)}. \]
\end{lem}
In order to compute $R''$ recall the definition
of $S(X,Y)$ from \lemref{lem-per}. Since $H \in \BB$,
$\A_{H} \subseteq \BB$. Thus if $T(\BB) = Y$ then
$\BB \in S(H,Y)$. Let $L'' = L(\A'')$. Then
\begin{equation}\label{E_SXgYy}
\begin{split}
R''&= \sum_{H\in \BB \subseteq \A} (-1)^{\abs{\BB}}
t^{\dim T(\BB)}\\
&= \sum_{Y \in L''} \sum_{\BB \in S(H,Y)}
(-1)^{\abs{\BB}}t^{\dim Y} \\
&= -\sum_{Y \in L''} \sum_{\BB \in S(H,Y)} (-1)^
{\abs{\BB - \A_{H}}} t^{\dim Y} \\
&= -\sum_{Y \in L''} \mu (H,Y)t^{\dim Y} \\
&= -\chi (\A '',t).
\end{split}
\end{equation}
\begin{cor}\label{tripleA}
Let $(\A,\A',\A'')$ be a triple of arrangements. Then
\[ \pi (\A,t) = \pi (\A',t) + t \pi (\A'',t). \]
\end{cor}
\begin{defn}
Let $(\A,\A',\A'')$ be a triple with respect to
the hyperplane $H \in \A$. Call $H$ a \textit{separator}
if $T(\A) \not\in L(\A')$.
\end{defn}
\begin{cor}\label{nsep}
Let $(\A,\A',\A'')$ be a triple with respect to $H \in \A$.
\begin{enumerate}
\renewcommand{\labelenumi}{(\roman{enumi})}
\item
If $H$ is a separator then
\[ \mu (\A) = - \mu (\A'') \]
and hence
\[ \abs{\mu (\A)} = \abs{ \mu (\A'')}. \]
\item If $H$ is not a separator then
\[\mu (\A) = \mu (\A') - \mu (\A'') \]
and
\[ \abs{\mu (\A)} = \abs{\mu (\A')} + \abs{\mu (\A'')}. \]
\end{enumerate}
\end{cor}
\begin{proof}
It follows from \thmref{th-info-ow-ow} that $\pi(\A,t)$
has leading term
\[(-1)^{r(\A)}\mu (\A)t^{r(\A)}.\]
The conclusion
follows by comparing coefficients of the leading
terms on both sides of the equation in
Corollary~\ref{tripleA}. If $H$ is a separator then
$r(\A') < r(\A)$ and there is no contribution
from $\pi (\A',t)$.
\end{proof}
The Poincar\'e polynomial of an arrangement
will appear repeatedly
in these notes. It will be shown to equal the
Poincar\'e polynomial
of the graded algebras which we are going to
associate with $\A$. It is also the Poincar\'e
polynomial of the complement $M(\A)$ for a
complex arrangement. Here we prove
that the Poincar\'e polynomial is the chamber
counting function for a real arrangement. The
complement $M(\A)$ is a disjoint union of chambers
\[M(\A) = \bigcup_{C \in \Cham(\A)} C.\]
The number
of chambers is determined by the Poincar\'e
polynomial as follows.
\begin{thm}\label{th-realarr}
Let $\A_{\mathbf{R}}$ be a real arrangement. Then
\[ \abs{\Cham(\A_{\mathbf{R}})} = \pi (\A_{\mathbf{R}},1). \]
\end{thm}
\begin{proof}
We check the properties required in Corollary~\ref{nsep}:
(i) follows from $\pi (\Phi_{ l},t) = 1$, and (ii) is a
consequence of Corollary~\ref{BI}.
\end{proof}
\begin{figure}
\vspace{5cm}
\caption[]{$Q(\A_{1}) = xyz(x-z)(x+z)(y-z)(y+z)$}
\end{figure}
\begin{figure}
\vspace{5cm}
\caption[]{$Q(\A_{2})= xyz(x+y+z)(x+y-z)(x-y+z)(x-y-z)$}
\end{figure}
\begin{thm}
\label{T_first_the_int}
Let $\phi$ be a protocol for a random pair $\XcY$.
If one of $\st_\phi(x',y)$ and $\st_\phi(x,y')$ is a prefix of the other
and $(x,y)\in\SXY$, then
\[
\langle \st_j(x',y)\rangle_{j=1}^\infty
=\langle \st_j(x,y)\rangle_{j=1}^\infty
=\langle \st_j(x,y')\rangle_{j=1}^\infty .
\]
\end{thm}
\begin{proof}
We show by induction on $i$ that
\[
\langle \st_j(x',y)\rangle_{j=1}^i
=\langle \st_j(x,y)\rangle_{j=1}^i
=\langle \st_j(x,y')\rangle_{j=1}^i.
\]
The induction hypothesis holds vacuously for $i=0$. Assume it holds for
$i-1$, in particular
$[\st_j(x',y)]_{j=1}^{i-1}=[\st_j(x,y')]_{j=1}^{i-1}$. Then one of
$[\st_j(x',y)]_{j=i}^{\infty}$ and $[\st_j(x,y')]_{j=i}^{\infty}$ is a
prefix of the other which implies that one of $\st_i(x',y)$ and
$\st_i(x,y')$ is a prefix of the other. If the $i$th message is
transmitted by $P_\X$ then, by the separate-transmissions property and
the induction hypothesis, $\st_i(x,y)=\st_i(x,y')$, hence one of
$\st_i(x,y)$ and $\st_i(x',y)$ is a prefix of the other. By the
implicit-termination property, neither $\st_i(x,y)$ nor $\st_i(x',y)$
can be a proper prefix of the other, hence they must be the same and
$\st_i(x',y)=\st_i(x,y)=\st_i(x,y')$. If the $i$th message is
transmitted by $\PY$ then, symmetrically, $\st_i(x,y)=\st_i(x',y)$ by
the induction hypothesis and the separate-transmissions property, and,
then, $\st_i(x,y)=\st_i(x,y')$ by the implicit-termination property,
proving the induction step.
\end{proof}
If $\phi$ is a protocol for $(X,Y)$, and $(x,y)$, $(x',y)$ are distinct
inputs in $\SXY$, then, by the correct-decision property,
$\langle\st_j(x,y)\rangle_{j=1}^\infty\ne\langle
\st_j(x',y)\rangle_{j=1}^\infty$.
Equation~(\ref{E_SXgYy}) defined $\PY$'s ambiguity set $\SXgYy$
to be the set of possible $X$ values when $Y=y$.
The last corollary implies that for all $y\in\SY$,
the multiset%
\footnote{A multiset allows multiplicity of elements.
Hence, $\{0,01,01\}$ is prefix free as a set, but not as a multiset.}
of codewords $\{\st_\phi(x,y):x\in\SXgYy\}$ is prefix free.
\section{One-Way Complexity}
\label{S_Cp1}
$\Cw1$, the one-way complexity of a random pair $\XcY$,
is the number of bits $P_\X$ must transmit in the worst case
when $\PY$ is not permitted to transmit any feedback messages.
Starting with $\SXY$, the support set of $\XcY$, we define $\GG$,
the \textit{characteristic hypergraph} of $\XcY$, and show that
\[
\Cw1=\lceil\,\log\chi(\GG)\rceil\ .
\]
Let $\XcY$ be a random pair. For each $y$ in $\SY$, the support set of
$Y$, Equation~(\ref{E_SXgYy}) defined $\SXgYy$ to be the set of possible
$x$ values when $Y=y$. The \textit{characteristic hypergraph} $\GG$ of
$\XcY$ has $\SX$ as its vertex set and the hyperedge $\SXgYy$ for each
$y\in\SY$.
We can now prove a continuity theorem.
\begin{thm}\label{t:conl}
Let $\Omega \subset\mathbf{R}^n$ be an open set, let
$u\in BV(\Omega ;\mathbf{R}^m)$, and let
\begin{equation}\label{quts}
T^u_x=\left\{y\in\mathbf{R}^m:
y=\tilde u(x)+\left\langle \frac{Du}{\abs{Du}}(x),z
\right\rangle \text{ for some }z\in\mathbf{R}^n\right\}
\end{equation}
for every $x\in\Omega \backslash S_u$. Let $f\colon \mathbf{R}^m\to
\mathbf{R}^k$ be a Lipschitz continuous function such that $f(0)=0$, and
let $v=f(u)\colon \Omega \to \mathbf{R}^k$. Then $v\in BV(\Omega
;\mathbf{R}^k)$ and
\begin{equation}
Jv=\eval{(f(u^+)-f(u^-))\otimes \nu_u\cdot\,
\mathcal{H}_{n-1}}_{S_u}.
\end{equation}
In addition, for $\abs{\wt{D}u}$-almost every $x\in\Omega $ the
restriction of the function $f$ to $T^u_x$ is differentiable at $\tilde
u(x)$ and
\begin{equation}
\wt{D}v=\nabla (\eval{f}_{T^u_x})(\tilde u)
\frac{\wt{D}u}{\abs{\wt{D}u}}\cdot\abs{\wt{D}u}.\end{equation}
\end{thm}
Before proving the theorem, we state without proof three elementary
remarks which will be useful in the sequel.
\begin{rem}\label{r:omb}
Let $\omega\colon \left]0,+\infty\right[\to \left]0,+\infty\right[$
be a continuous function such that $\omega (t)\to 0$ as $t\to
0$. Then
\[\lim_{h\to 0^+}g(\omega(h))=L\Leftrightarrow\lim_{h\to
0^+}g(h)=L\]
for any function $g\colon \left]0,+\infty\right[\to \mathbf{R}$.
\end{rem}
\begin{rem}\label{r:dif}
Let $g \colon \mathbf{R}^n\to \mathbf{R}$ be a Lipschitz
continuous function and assume that
\[L(z)=\lim_{h\to 0^+}\frac{g(hz)-g(0)}h\]
exists for every $z\in\mathbf{Q}^n$ and that $L$ is a linear function of
$z$. Then $g$ is differentiable at 0.
\end{rem}
\begin{rem}\label{r:dif0}
Let $A \colon \mathbf{R}^n\to \mathbf{R}^m$ be a linear function, and
let $f \colon \mathbf{R}^m\to \mathbf{R}$ be a function. Then the
restriction of $f$ to the range of $A$ is differentiable at 0 if and
only if $f(A)\colon \mathbf{R}^n\to \mathbf{R}$ is differentiable at 0
and
\[\nabla(\eval{f}_{\IM(A)})(0)A=\nabla (f(A))(0).\]
\end{rem}
\begin{proof}
We begin by showing that $v\in BV(\Omega;\mathbf{R}^k)$ and
\begin{equation}\label{e:bomb}
\abs{Dv}(B)\le K\abs{Du}(B)\qquad\forall B\in\mathbf{B}(\Omega ),
\end{equation}
where $K>0$ is the Lipschitz constant of $f$. By \eqref{sum-Di} and by
the approximation result quoted in \secref{s:mt}, it is possible to find
a sequence $(u_h)\subset C^1(\Omega ;\mathbf{R}^m)$ converging to $u$ in
$L^1(\Omega ;\mathbf{R}^m)$ and such that
\[\lim_{h\to +\infty}\int_\Omega \abs{\nabla u_h}\,dx=\abs{Du}(\Omega ).\]
The functions $v_h=f(u_h)$ are locally Lipschitz continuous in $\Omega
$, and the definition of differential implies that $\abs{\nabla v_h}\le
K\abs{\nabla u_h}$ almost everywhere in $\Omega $. The lower semicontinuity
of the total variation and \eqref{sum-Di} yield
\begin{equation}
\begin{split}
\abs{Dv}(\Omega )\le\liminf_{h\to +\infty}\abs{Dv_h}(\Omega) &
=\liminf_{h\to +\infty}\int_\Omega \abs{\nabla v_h}\,dx\\
&\le K\liminf_{h\to +\infty}\int_\Omega
\abs{\nabla u_h}\,dx=K\abs{Du}(\Omega).
\end{split}\end{equation}
Since $f(0)=0$, we have also
\[\int_\Omega \abs{v}\,dx\le K\int_\Omega \abs{u}\,dx;\]
therefore $u\in BV(\Omega ;\mathbf{R}^k)$. Repeating the same argument
for every open set $A\subset\Omega $, we get \eqref{e:bomb} for every
$B\in\mathbf{B}(\Omega)$, because $\abs{Dv}$, $\abs{Du}$ are Radon measures. To
prove \lemref{limbog}, first we observe that
\begin{equation}\label{e:SS}
S_v\subset S_u,\qquad\tilde v(x)=f(\tilde u(x))\qquad \forall x\in\Omega
\backslash S_u.\end{equation}
In fact, for every $\varepsilon >0$ we have
\[\{y\in B_\rho(x): \abs{v(y)-f(\tilde u(x))}>\varepsilon \}\subset \{y\in
B_\rho(x): \abs{u(y)-\tilde u(x)}>\varepsilon /K\},\]
hence
\[\lim_{\rho\to 0^+}\frac{\abs{\{y\in B_\rho(x): \abs{v(y)-f(\tilde u(x))}>
\varepsilon \}}}{\rho^n}=0\]
whenever $x\in\Omega \backslash S_u$. By a similar argument, if $x\in
S_u$ is a point such that there exists a triplet $(u^+,u^-,\nu_u)$
satisfying \eqref{detK1}, \eqref{detK2}, then
\[
(v^+(x)-v^-(x))\otimes \nu_v=(f(u^+(x))-f(u^-(x)))\otimes\nu_u\quad
\text{if }x\in S_v
\]
and $f(u^-(x))=f(u^+(x))$ if $x\in S_u\backslash S_v$. Hence, by (1.8)
we get
\begin{equation*}\begin{split}
Jv(B)=\int_{B\cap S_v}(v^+-v^-)\otimes \nu_v\,d\mathcal{H}_{n-1}&=
\int_{B\cap S_v}(f(u^+)-f(u^-))\otimes \nu_u\,d\mathcal{H}_{n-1}\\
&=\int_{B\cap S_u}(f(u^+)-f(u^-))\otimes \nu_u\,d\mathcal{H}_{n-1}
\end{split}\end{equation*}
and \lemref{limbog} is proved.
\end{proof}
To prove \eqref{e:SS}, it is not restrictive to assume that $k=1$.
Moreover, to simplify our notation, from now on we shall assume that
$\Omega = \mathbf{R}^n$. The proof of \eqref{e:SS} is divided into two
steps. In the first step we prove the statement in the one-dimensional
case $(n=1)$, using \thmref{th-weak-ske-owf}. In the second step we
achieve the general result using \thmref{t:conl}.
\subsection*{Step 1}
Assume that $n=1$. Since $S_u$ is at most countable, \eqref{sum-bij}
yields that $\abs{\wt{D}v}(S_u\backslash S_v)=0$, so that
\eqref{e:st} and \eqref{e:barwq} imply that $Dv=\wt{D}v+Jv$ is
the Radon-Nikod\'ym decomposition of $Dv$ in absolutely continuous and
singular part with respect to $\abs{\wt{D} u}$. By
\thmref{th-weak-ske-owf}, we have
\begin{equation*}
\frac{\wt{D}v}{\abs{\wt{D}u}}(t)=\lim_{s\to t^+}
\frac{Dv(\interval{\left[t,s\right[})}
{\abs{\wt{D}u}(\interval{\left[t,s\right[})},\qquad
\frac{\wt{D}u}{\abs{\wt{D}u}}(t)=\lim_{s\to t^+}
\frac{Du(\interval{\left[t,s\right[})}
{\abs{\wt{D}u}(\interval{\left[t,s\right[})}
\end{equation*}
$\abs{\wt{D}u}$-almost everywhere in $\mathbf{R}$. It is well known
(see, for instance, \cite[2.5.16]{ste:sint}) that every one-dimensional
function of bounded variation $w$ has a unique left continuous
representative, i.e., a function $\hat w$ such that $\hat w=w$ almost
everywhere and $\lim_{s\to t^-}\hat w(s)=\hat w(t)$ for every $t\in
\mathbf{R}$. These conditions imply
\begin{equation}
\hat u(t)=Du(\interval{\left]-\infty,t\right[}),
\qquad \hat v(t)=Dv(\interval{\left]-\infty,t\right[})\qquad
\forall t\in\mathbf{R}
\end{equation}
and
\begin{equation}\label{alimo}
\hat v(t)=f(\hat u(t))\qquad\forall t\in\mathbf{R}.\end{equation}
Let $t\in\mathbf{R}$ be such that
$\abs{\wt{D}u}(\interval{\left[t,s\right[})>0$ for every $s>t$ and
assume that the limits in \eqref{joe} exist. By \eqref{j:mark} and
\eqref{far-d} we get
\begin{equation*}\begin{split}
\frac{\hat v(s)-\hat
v(t)}{\abs{\wt{D}u}(\interval{\left[t,s\right[})}&=\frac {f(\hat
u(s))-f(\hat u(t))}{\abs{\wt{D}u}(\interval{\left[t,s\right[})}\\
&=\frac{f(\hat u(s))-f(\hat
u(t)+\dfrac{\wt{D}u}{\abs{\wt{D}u}}(t)\abs{\wt{D}u
}(\interval{\left[t,s\right[}))}%
{\abs{\wt{D}u}(\interval{\left[t,s\right[})}\\
&+\frac
{f(\hat u(t)+\dfrac{\wt{D}u}{\abs{\wt{D}u}}(t)\abs{\wt{D}
u}(\interval{\left[t,s\right[}))-f(\hat
u(t))}{\abs{\wt{D}u}(\interval{\left[t,s\right[})}
\end{split}\end{equation*}
for every $s>t$. Using the Lipschitz condition on $f$ we find
{\setlength{\multlinegap}{0pt}
\begin{multline*}
\left\lvert\frac{\hat v(s)-\hat
v(t)}{\abs{\wt{D}u}(\interval{\left[t,s\right[})} -\frac{f(\hat
u(t)+\dfrac{\wt{D}u}{\abs{\wt{D}u}}(t)
\abs{\wt{D}u}(\interval{\left[t,s\right[}))-f(\hat
u(t))}{\abs{\wt{D}u}(\interval{\left[t,s\right[})}\right\rvert\\
\le K\left\lvert
\frac{\hat u(s)-\hat u(t)}
{\abs{\wt{D}u}(\interval{\left[t,s\right[})}
-\frac{\wt{D}u}{\abs{
\wt{D}u}}(t)\right\rvert.\end{multline*}
}% end of group with \multlinegap=0pt
By \eqref{e:bomb}, the function $s\to
\abs{\wt{D}u}(\interval{\left[t,s\right[})$ is continuous and
converges to 0 as $s\downarrow t$. Therefore Remark~\ref{r:omb} and the
previous inequality imply
\[\frac{\wt{D}v}{\abs{\wt{D}u}}(t)=\lim_{h\to 0^+}
\frac{f(\hat u(t)+h\dfrac{\wt{D}u}{\abs{\wt{D}u}}
(t))-f(\hat u(t))}h\quad\abs{\wt{D}u}\text{-a.e. in }\mathbf{R}.\]
By \eqref{joe}, $\hat u(x)=\tilde u(x)$ for every
$x\in\mathbf{R}\backslash S_u$; moreover, applying the same argument to
the functions $u'(t)=u(-t)$, $v'(t)=f(u'(t))=v(-t)$, we get
\[\frac{\wt{D}v}{\abs{\wt{D}u}}(t)=\lim_{h\to 0}
\frac{f(\tilde u(t)
+h\dfrac{\wt{D}u}{\abs{\wt{D}u}}(t))-f(\tilde u(t))}{h}
\qquad\abs{\wt{D}u}\text{-a.e. in }\mathbf{R}\]
and our statement is proved.
\subsection*{Step 2}
Let us consider now the general case $n>1$. Let $\nu\in \mathbf{R}^n$ be
such that $\abs{\nu}=1$, and let $\pi_\nu=\{y\in\mathbf{R}^n: \langle
y,\nu\rangle =0\}$. In the following, we shall identify $\mathbf{R}^n$
with $\pi_\nu\times\mathbf{R}$, and we shall denote by $y$ the variable
ranging in $\pi_\nu$ and by $t$ the variable ranging in $\mathbf{R}$. By
the just proven one-dimensional result, and by \thmref{thm-main}, we get
\[\lim_{h\to 0}\frac{f(\tilde u(y+t\nu)+h\dfrac{\wt{D}u_y}{\abs{
\wt{D}u_y}}(t))-f(\tilde u(y+t\nu))}h=\frac{\wt{D}v_y}{\abs{
\wt{D}u_y}}(t)\qquad\abs{\wt{D}u_y}\text{-a.e. in }\mathbf{R}\]
for $\mathcal{H}_{n-1}$-almost every $y\in \pi_\nu$. We claim that
\begin{equation}
\frac{\langle \wt{D}u,\nu\rangle }{\abs{\langle \wt{D}u,\nu\rangle
}}(y+t\nu)=\frac{\wt{D}u_y}
{\abs{\wt{D}u_y}}(t)\qquad\abs{\wt{D}u_y}\text{-a.e. in }\mathbf{R}
\end{equation}
for $\mathcal{H}_{n-1}$-almost every $y\in\pi_\nu$. In fact, by
\eqref{sum-ali} and \eqref{delta-l} we get
\begin{multline*}
\int_{\pi_\nu}\frac{\wt{D}u_y}{\abs{\wt{D}u_y}}\cdot\abs{\wt{D}u_y
}\,d\mathcal{H}_{n-1}(y)=\int_{\pi_\nu}\wt{D}u_y\,d\mathcal{H}_{n-1}(y)\\
=\langle \wt{D}u,\nu\rangle =\frac
{\langle \wt{D}u,\nu\rangle }{\abs{\langle \wt{D}u,\nu\rangle}}\cdot
\abs{\langle \wt{D}u,\nu\rangle }=\int_{\pi_\nu}\frac{
\langle \wt{D}u,\nu\rangle }{\abs{\langle \wt{D}u,\nu\rangle }}
(y+\cdot \nu)\cdot\abs{\wt{D}u_y}\,d\mathcal{H}_{n-1}(y)
\end{multline*}
and \eqref{far-d} follows from \eqref{sum-Di}. By the same argument it
is possible to prove that
\begin{equation}
\frac{\langle \wt{D}v,\nu\rangle }{\abs{\langle \wt{D}u,\nu\rangle
}}(y+t\nu)=\frac{\wt{D}v_y}{\abs{\wt{D}u_y}}(t)\qquad\abs{
\wt{D}u_y}\text{-a.e. in }\mathbf{R}\end{equation}
for $\mathcal{H}_{n-1}$-almost every $y\in \pi_\nu$. By \eqref{far-d}
and \eqref{E_SXgYy} we get
\[
\lim_{h\to 0}\frac{f(\tilde u(y+t\nu)+h\dfrac{\langle \wt{D}
u,\nu\rangle }{\abs{\langle \wt{D}u,\nu\rangle }}(y+t\nu))-f(\tilde
u(y+t\nu))}{h}
=\frac{\langle \wt{D}v,\nu\rangle }{\abs{\langle
\wt{D}u,\nu\rangle }}(y+t\nu)\]
for $\mathcal{H}_{n-1}$-almost every $y\in\pi_\nu$, and using again
\eqref{detK1}, \eqref{detK2} we get
\[
\lim_{h\to 0}\frac{f(\tilde u(x)+h\dfrac{\langle
\wt{D}u,\nu\rangle }{\abs{\langle \wt{D}u,\nu\rangle }}(x))-f(\tilde
u(x))}{h}=\frac{\langle \wt{D}v,\nu\rangle }{\abs{\langle \wt{D}u,\nu
\rangle }}(x)
\]
$\abs{\langle \wt{D}u,\nu\rangle}$-a.e. in $\mathbf{R}^n$.
Since the function $\abs{\langle \wt{D}u,\nu\rangle }/\abs{\wt{D}u}$
is strictly positive $\abs{\langle \wt{D}u,\nu\rangle }$-almost everywhere,
we obtain also
\begin{multline*}
\lim_{h\to 0}\frac{f(\tilde u(x)+h\dfrac{\abs{\langle
\wt{D}u,\nu\rangle }}{\abs{\wt{D}u}}(x)\dfrac{\langle \wt{D}
u,\nu\rangle }{\abs{\langle \wt{D}u,\nu\rangle }}(x))-f(\tilde u(x))}{h}\\
=\frac{\abs{\langle \wt{D}u,\nu\rangle }}{\abs{\wt{D}u}}(x)\frac
{\langle \wt{D}v,\nu\rangle }{\abs{\langle
\wt{D}u,\nu\rangle }}(x)
\end{multline*}
$\abs{\langle \wt{D}u,\nu\rangle }$-almost everywhere in $\mathbf{R}^n$.
Finally, since
\begin{align*}
&\frac{\abs{\langle \wt{D}u,\nu\rangle }}{\abs{\wt{D}u}}
\frac{\langle \wt{D}u,\nu\rangle }{\abs{\langle \wt{D}u,\nu\rangle}}
=\frac{\langle \wt{D}u,\nu\rangle }{\abs{\wt{D}u}}
=\left\langle \frac{\wt{D}u}{\abs{\wt{D}u}},\nu\right\rangle
\qquad\abs{\wt{D}u}\text{-a.e. in }\mathbf{R}^n\\
&\frac{\abs{\langle \wt{D}u,\nu\rangle }}{\abs{\wt{D}u}}
\frac{\langle \wt{D}v,\nu\rangle }{\abs{\langle \wt{D}u,\nu\rangle}}
=\frac{\langle \wt{D}v,\nu\rangle }{\abs{\wt{D}u}}
=\left\langle \frac{\wt{D}v}{\abs{\wt{D}u}},\nu\right\rangle
\qquad\abs{\wt{D}u}\text{-a.e. in }\mathbf{R}^n
\end{align*}
and since both sides of \eqref{alimo}
are zero $\abs{\wt{D}u}$-almost everywhere
on $\abs{\langle \wt{D}u,\nu\rangle }$-negligible sets, we conclude that
\[
\lim_{h\to 0}\frac{f\left(
\tilde u(x)+h\left\langle \dfrac{\wt{D}
u}{\abs{\wt{D}u}}(x),\nu\right\rangle \right)-f(\tilde u(x))}h
=\left\langle \frac{\wt{D}v}{\abs{\wt{D}u}}(x),\nu\right\rangle,
\]
$\abs{\wt{D}u}$-a.e. in $\mathbf{R}^n$.
Since $\nu$ is arbitrary, by Remarks \ref{r:dif} and~\ref{r:dif0}
the restriction of $f$ to
the affine space $T^u_x$ is differentiable at $\tilde u(x)$ for $\abs{\wt{D}
u}$-almost every $x\in \mathbf{R}^n$ and \eqref{quts} holds.\qed
It follows from \eqref{sum-Di}, \eqref{detK1}, and \eqref{detK2} that
\begin{equation}\label{Dt}
D(t_1,\dots,t_n)=\sum_{I\in\mathbf{n}}(-1)^{\abs{I}-1}\abs{I}
\prod_{i\in I}t_i\prod_{j\in I}(D_j+\lambda_jt_j)\det\mathbf{A}^{(\lambda)}
(\overline I|\overline I).
\end{equation}
Let $t_i=\hat x_i$, $i=1,\dots,n$. Lemma 1 leads to
\begin{equation}\label{Dx}
D(\hat x_1,\dots,\hat x_n)=\prod_{i\in\mathbf{n}}\hat x_i
\sum_{I\in\mathbf{n}}(-1)^{\abs{I}-1}\abs{I}\per \mathbf{A}
^{(\lambda)}(I|I)\det\mathbf{A}^{(\lambda)}(\overline I|\overline I).
\end{equation}
By \eqref{H-cycles}, \eqref{sum-Di}, and \eqref{Dx},
we have the following result:
\begin{thm}\label{thm-H-param}
\begin{equation}\label{H-param}
H_c=\frac{1}{2n}\sum^n_{l =1}l (-1)^{l -1}A_{l}
^{(\lambda)},
\end{equation}
where
\begin{equation}\label{A-l-lambda}
A^{(\lambda)}_l =\sum_{I_l \subseteq\mathbf{n}}\per \mathbf{A}
^{(\lambda)}(I_l |I_l )\det\mathbf{A}^{(\lambda)}
(\overline I_{l}|\overline I_l ),\abs{I_{l}}=l .
\end{equation}
\end{thm}
It is worth noting that $A_l ^{(\lambda)}$ of \eqref{A-l-lambda} is
similar to the coefficients $b_l $ of the characteristic polynomial of
\eqref{bl-sum}. It is well known in graph theory that the coefficients
$b_l $ can be expressed as a sum over certain subgraphs. It is
interesting to see whether $A_l $, $\lambda=0$, structural properties
of a graph.
We may call \eqref{H-param} a parametric representation of $H_c$. In
computation, the parameter $\lambda_i$ plays very important roles. The
choice of the parameter usually depends on the properties of the given
graph. For a complete graph $K_n$, let $\lambda_i=1$, $i=1,\dots,n$.
It follows from \eqref{A-l-lambda} that
\begin{equation}\label{compl-gr}
A^{(1)}_l =\begin{cases} n!,&\text{if }l =1\\
0,&\text{otherwise}.\end{cases}
\end{equation}
By \eqref{H-param}
\begin{equation}
H_c=\frac 12(n-1)!.
\end{equation}
For a complete bipartite graph $K_{n_1n_2}$, let $\lambda_i=0$, $i=1,\dots,n$.
By \eqref{A-l-lambda},
\begin{equation}
A_l =
\begin{cases} -n_1!n_2!\delta_{n_1n_2},&\text{if }l =2\\
0,&\text{otherwise }.\end{cases}
\label{compl-bip-gr}
\end{equation}
Theorem ~\ref{thm-H-param}
leads to
\begin{equation}
H_c=\frac1{n_1+n_2}n_1!n_2!\delta_{n_1n_2}.
\end{equation}
Now, we consider an asymmetrical approach. Theorem \ref{thm-main} leads to
\begin{multline}
\det\mathbf{K}(t=1,t_1,\dots,t_n;l |l )\\
=\sum_{I\subseteq\mathbf{n}-\{l \}}
(-1)^{\abs{I}}\prod_{i\in I}t_i\prod_{j\in I}
(D_j+\lambda_jt_j)\det\mathbf{A}^{(\lambda)}
(\overline I\cup\{l \}|\overline I\cup\{l \}).
\end{multline}
By \eqref{H-cycles} and \eqref{sum-ali} we have the following asymmetrical
result:
\begin{thm}\label{thm-asym}
\begin{equation}
H_c=\frac12\sum_{I\subseteq\mathbf{n}-\{l \}}
(-1)^{\abs{I}}\per\mathbf{A}^{(\lambda)}(I|I)\det
\mathbf{A}^{(\lambda)}
(\overline I\cup\{l \}|\overline I\cup\{l \})
\end{equation}
which reduces to Goulden--Jackson's formula when $\lambda_i=0,i=1,\dots,n$
\cite{mami:matrixth}.
\end{thm}
\section{Various font features of the \pkg{amsmath} package}
\label{s:font}
\subsection{Bold versions of special symbols}
In the \pkg{amsmath} package \cn{boldsymbol} is used for getting
individual bold math symbols and bold Greek letters---everything in
math except for letters of the Latin alphabet,
where you'd use \cn{mathbf}. For example,
\begin{verbatim}
A_\infty + \pi A_0 \sim
\mathbf{A}_{\boldsymbol{\infty}} \boldsymbol{+}
\boldsymbol{\pi} \mathbf{A}_{\boldsymbol{0}}
\end{verbatim}
looks like this:
\[A_\infty + \pi A_0 \sim \mathbf{A}_{\boldsymbol{\infty}}
\boldsymbol{+} \boldsymbol{\pi} \mathbf{A}_{\boldsymbol{0}}\]
\subsection{``Poor man's bold''}
If a bold version of a particular symbol doesn't exist in the
available fonts,
then \cn{boldsymbol} can't be used to make that symbol bold.
At the present time, this means that
\cn{boldsymbol} can't be used with symbols from
the \fn{msam} and \fn{msbm} fonts, among others.
In some cases, poor man's bold (\cn{pmb}) can be used instead
of \cn{boldsymbol}:
% Can't show example from msam or msbm because this document is
% supposed to be TeXable even if the user doesn't have
% AMSFonts. MJD 5-JUL-1990
\[\frac{\partial x}{\partial y}
\pmb{\bigg\vert}
\frac{\partial y}{\partial z}\]
\begin{verbatim}
\[\frac{\partial x}{\partial y}
\pmb{\bigg\vert}
\frac{\partial y}{\partial z}\]
\end{verbatim}
So-called ``large operator'' symbols such as $\sum$ and $\prod$
require an additional command, \cn{mathop},
to produce proper spacing and limits when \cn{pmb} is used.
For further details see \textit{The \TeX book}.
\[\sum_{\substack{i<B\\\text{$i$ odd}}}
\prod_\kappa \kappa F(r_i)\qquad
\mathop{\pmb{\sum}}_{\substack{i<B\\\text{$i$ odd}}}
\mathop{\pmb{\prod}}_\kappa \kappa(r_i)
\]
\begin{verbatim}
\[\sum_{\substack{i<B\\\text{$i$ odd}}}
\prod_\kappa \kappa F(r_i)\qquad
\mathop{\pmb{\sum}}_{\substack{i<B\\\text{$i$ odd}}}
\mathop{\pmb{\prod}}_\kappa \kappa(r_i)
\]
\end{verbatim}
\section{Compound symbols and other features}
\label{s:comp}
\subsection{Multiple integral signs}
\cn{iint}, \cn{iiint}, and \cn{iiiint} give multiple integral signs
with the spacing between them nicely adjusted, in both text and
display style. \cn{idotsint} gives two integral signs with dots
between them.
\begin{gather}
\iint\limits_A f(x,y)\,dx\,dy\qquad\iiint\limits_A
f(x,y,z)\,dx\,dy\,dz\\
\iiiint\limits_A
f(w,x,y,z)\,dw\,dx\,dy\,dz\qquad\idotsint\limits_A f(x_1,\dots,x_k)
\end{gather}
\subsection{Over and under arrows}
Some extra over and under arrow operations are provided in
the \pkg{amsmath} package. (Basic \LaTeX\ provides
\cn{overrightarrow} and \cn{overleftarrow}).
\begin{align*}
\overrightarrow{\psi_\delta(t) E_t h}&
=\underrightarrow{\psi_\delta(t) E_t h}\\
\overleftarrow{\psi_\delta(t) E_t h}&
=\underleftarrow{\psi_\delta(t) E_t h}\\
\overleftrightarrow{\psi_\delta(t) E_t h}&
=\underleftrightarrow{\psi_\delta(t) E_t h}
\end{align*}
\begin{verbatim}
\begin{align*}
\overrightarrow{\psi_\delta(t) E_t h}&
=\underrightarrow{\psi_\delta(t) E_t h}\\
\overleftarrow{\psi_\delta(t) E_t h}&
=\underleftarrow{\psi_\delta(t) E_t h}\\
\overleftrightarrow{\psi_\delta(t) E_t h}&
=\underleftrightarrow{\psi_\delta(t) E_t h}
\end{align*}
\end{verbatim}
These all scale properly in subscript sizes:
\[\int_{\overrightarrow{AB}} ax\,dx\]
\begin{verbatim}
\[\int_{\overrightarrow{AB}} ax\,dx\]
\end{verbatim}
\subsection{Dots}
Normally you need only type \cn{dots} for ellipsis dots in a
math formula. The main exception is when the dots
fall at the end of the formula; then you need to
specify one of \cn{dotsc} (series dots, after a comma),
\cn{dotsb} (binary dots, for binary relations or operators),
\cn{dotsm} (multiplication dots), or \cn{dotsi} (dots after
an integral). For example, the input
\begin{verbatim}
Then we have the series $A_1,A_2,\dotsc$,
the regional sum $A_1+A_2+\dotsb$,
the orthogonal product $A_1A_2\dotsm$,
and the infinite integral
\[\int_{A_1}\int_{A_2}\dotsi\].
\end{verbatim}
produces
\begin{quotation}
Then we have the series $A_1,A_2,\dotsc$,
the regional sum $A_1+A_2+\dotsb$,
the orthogonal product $A_1A_2\dotsm$,
and the infinite integral
\[\int_{A_1}\int_{A_2}\dotsi\]
\end{quotation}
\subsection{Accents in math}
Double accents:
\[\Hat{\Hat{H}}\quad\Check{\Check{C}}\quad
\Tilde{\Tilde{T}}\quad\Acute{\Acute{A}}\quad
\Grave{\Grave{G}}\quad\Dot{\Dot{D}}\quad
\Ddot{\Ddot{D}}\quad\Breve{\Breve{B}}\quad
\Bar{\Bar{B}}\quad\Vec{\Vec{V}}\]
\begin{verbatim}
\[\Hat{\Hat{H}}\quad\Check{\Check{C}}\quad
\Tilde{\Tilde{T}}\quad\Acute{\Acute{A}}\quad
\Grave{\Grave{G}}\quad\Dot{\Dot{D}}\quad
\Ddot{\Ddot{D}}\quad\Breve{\Breve{B}}\quad
\Bar{\Bar{B}}\quad\Vec{\Vec{V}}\]
\end{verbatim}
This double accent operation is complicated
and tends to slow down the processing of a \LaTeX\ file.
\subsection{Dot accents}
\cn{dddot} and \cn{ddddot} are available to
produce triple and quadruple dot accents
in addition to the \cn{dot} and \cn{ddot} accents already available
in \LaTeX:
\[\dddot{Q}\qquad\ddddot{R}\]
\begin{verbatim}
\[\dddot{Q}\qquad\ddddot{R}\]
\end{verbatim}
\subsection{Roots}
In the \pkg{amsmath} package \cn{leftroot} and \cn{uproot} allow you to adjust
the position of the root index of a radical:
\begin{verbatim}
\sqrt[\leftroot{-2}\uproot{2}\beta]{k}
\end{verbatim}
gives good positioning of the $\beta$:
\[\sqrt[\leftroot{-2}\uproot{2}\beta]{k}\]
\subsection{Boxed formulas} The command \cn{boxed} puts a box around its
argument, like \cn{fbox} except that the contents are in math mode:
\begin{verbatim}
\boxed{W_t-F\subseteq V(P_i)\subseteq W_t}
\end{verbatim}
\[\boxed{W_t-F\subseteq V(P_i)\subseteq W_t}.\]
\subsection{Extensible arrows}
\cn{xleftarrow} and \cn{xrightarrow} produce
arrows that extend automatically to accommodate unusually wide
subscripts or superscripts. The text of the subscript or superscript
are given as an optional resp.\@ mandatory argument:
Example:
\[0 \xleftarrow[\zeta]{\alpha} F\times\triangle[n-1]
\xrightarrow{\partial_0\alpha(b)} E^{\partial_0b}\]
\begin{verbatim}
\[0 \xleftarrow[\zeta]{\alpha} F\times\triangle[n-1]
\xrightarrow{\partial_0\alpha(b)} E^{\partial_0b}\]
\end{verbatim}
\subsection{\cn{overset}, \cn{underset}, and \cn{sideset}}
Examples:
\[\overset{*}{X}\qquad\underset{*}{X}\qquad
\overset{a}{\underset{b}{X}}\]
\begin{verbatim}
\[\overset{*}{X}\qquad\underset{*}{X}\qquad
\overset{a}{\underset{b}{X}}\]
\end{verbatim}
The command \cn{sideset} is for a rather special
purpose: putting symbols at the subscript and superscript
corners of a large operator symbol such as $\sum$ or $\prod$,
without affecting the placement of limits.
Examples:
\[\sideset{_*^*}{_*^*}\prod_k\qquad
\sideset{}{'}\sum_{0\le i\le m} E_i\beta x
\]
\begin{verbatim}
\[\sideset{_*^*}{_*^*}\prod_k\qquad
\sideset{}{'}\sum_{0\le i\le m} E_i\beta x
\]
\end{verbatim}
\subsection{The \cn{text} command}
The main use of the command \cn{text} is for words or phrases in a
display:
\[\mathbf{y}=\mathbf{y}'\quad\text{if and only if}\quad
y'_k=\delta_k y_{\tau(k)}\]
\begin{verbatim}
\[\mathbf{y}=\mathbf{y}'\quad\text{if and only if}\quad
y'_k=\delta_k y_{\tau(k)}\]
\end{verbatim}
\subsection{Operator names}
The more common math functions such as $\log$, $\sin$, and $\lim$
have predefined control sequences: \verb=\log=, \verb=\sin=,
\verb=\lim=.
The \pkg{amsmath} package provides \cn{DeclareMathOperator} and
\cn{DeclareMathOperator*}
for producing new function names that will have the
same typographical treatment.
Examples:
\[\norm{f}_\infty=
\esssup_{x\in R^n}\abs{f(x)}\]
\begin{verbatim}
\[\norm{f}_\infty=
\esssup_{x\in R^n}\abs{f(x)}\]
\end{verbatim}
\[\meas_1\{u\in R_+^1\colon f^*(u)>\alpha\}
=\meas_n\{x\in R^n\colon \abs{f(x)}\geq\alpha\}
\quad \forall\alpha>0.\]
\begin{verbatim}
\[\meas_1\{u\in R_+^1\colon f^*(u)>\alpha\}
=\meas_n\{x\in R^n\colon \abs{f(x)}\geq\alpha\}
\quad \forall\alpha>0.\]
\end{verbatim}
\cn{esssup} and \cn{meas} would be defined in the document preamble as
\begin{verbatim}
\DeclareMathOperator*{\esssup}{ess\,sup}
\DeclareMathOperator{\meas}{meas}
\end{verbatim}
The following special operator names are predefined in the \pkg{amsmath}
package: \cn{varlimsup}, \cn{varliminf}, \cn{varinjlim}, and
\cn{varprojlim}. Here's what they look like in use:
\begin{align}
&\varlimsup_{n\rightarrow\infty}
\mathcal{Q}(u_n,u_n-u^{\#})\le0\\
&\varliminf_{n\rightarrow\infty}
\left\lvert a_{n+1}\right\rvert/\left\lvert a_n\right\rvert=0\\
&\varinjlim (m_i^\lambda\cdot)^*\le0\\
&\varprojlim_{p\in S(A)}A_p\le0
\end{align}
\begin{verbatim}
\begin{align}
&\varlimsup_{n\rightarrow\infty}
\mathcal{Q}(u_n,u_n-u^{\#})\le0\\
&\varliminf_{n\rightarrow\infty}
\left\lvert a_{n+1}\right\rvert/\left\lvert a_n\right\rvert=0\\
&\varinjlim (m_i^\lambda\cdot)^*\le0\\
&\varprojlim_{p\in S(A)}A_p\le0
\end{align}
\end{verbatim}
\subsection{\cn{mod} and its relatives}
The commands \cn{mod} and \cn{pod} are variants of
\cn{pmod} preferred by some authors; \cn{mod} omits the parentheses,
whereas \cn{pod} omits the `mod' and retains the parentheses.
Examples:
\begin{align}
x&\equiv y+1\pmod{m^2}\\
x&\equiv y+1\mod{m^2}\\
x&\equiv y+1\pod{m^2}
\end{align}
\begin{verbatim}
\begin{align}
x&\equiv y+1\pmod{m^2}\\
x&\equiv y+1\mod{m^2}\\
x&\equiv y+1\pod{m^2}
\end{align}
\end{verbatim}
\subsection{Fractions and related constructions}
\label{fracs}
The usual notation for binomials is similar to the fraction concept,
so it has a similar command \cn{binom} with two arguments. Example:
\begin{equation}
\begin{split}
\sum_{\gamma\in\Gamma_C} I_\gamma&
=2^k-\binom{k}{1}2^{k-1}+\binom{k}{2}2^{k-2}\\
&\quad+\dots+(-1)^l\binom{k}{l}2^{k-l}
+\dots+(-1)^k\\
&=(2-1)^k=1
\end{split}
\end{equation}
\begin{verbatim}
\begin{equation}
\begin{split}
[\sum_{\gamma\in\Gamma_C} I_\gamma&
=2^k-\binom{k}{1}2^{k-1}+\binom{k}{2}2^{k-2}\\
&\quad+\dots+(-1)^l\binom{k}{l}2^{k-l}
+\dots+(-1)^k\\
&=(2-1)^k=1
\end{split}
\end{equation}
\end{verbatim}
There are also abbreviations
\begin{verbatim}
\dfrac \dbinom
\tfrac \tbinom
\end{verbatim}
for the commonly needed constructions
\begin{verbatim}
{\displaystyle\frac ... } {\displaystyle\binom ... }
{\textstyle\frac ... } {\textstyle\binom ... }
\end{verbatim}
The generalized fraction command \cn{genfrac} provides full access to
the six \TeX{} fraction primitives:
\begin{align}
\text{\cn{over}: }&\genfrac{}{}{}{}{n+1}{2}&
\text{\cn{overwithdelims}: }&
\genfrac{\langle}{\rangle}{}{}{n+1}{2}\\
\text{\cn{atop}: }&\genfrac{}{}{0pt}{}{n+1}{2}&
\text{\cn{atopwithdelims}: }&
\genfrac{(}{)}{0pt}{}{n+1}{2}\\
\text{\cn{above}: }&\genfrac{}{}{1pt}{}{n+1}{2}&
\text{\cn{abovewithdelims}: }&
\genfrac{[}{]}{1pt}{}{n+1}{2}
\end{align}
\begin{verbatim}
\text{\cn{over}: }&\genfrac{}{}{}{}{n+1}{2}&
\text{\cn{overwithdelims}: }&
\genfrac{\langle}{\rangle}{}{}{n+1}{2}\\
\text{\cn{atop}: }&\genfrac{}{}{0pt}{}{n+1}{2}&
\text{\cn{atopwithdelims}: }&
\genfrac{(}{)}{0pt}{}{n+1}{2}\\
\text{\cn{above}: }&\genfrac{}{}{1pt}{}{n+1}{2}&
\text{\cn{abovewithdelims}: }&
\genfrac{[}{]}{1pt}{}{n+1}{2}
\end{verbatim}
\subsection{Continued fractions}
The continued fraction
\begin{equation}
\cfrac{1}{\sqrt{2}+
\cfrac{1}{\sqrt{2}+
\cfrac{1}{\sqrt{2}+
\cfrac{1}{\sqrt{2}+
\cfrac{1}{\sqrt{2}+\dotsb
}}}}}
\end{equation}
can be obtained by typing
\begin{verbatim}
\cfrac{1}{\sqrt{2}+
\cfrac{1}{\sqrt{2}+
\cfrac{1}{\sqrt{2}+
\cfrac{1}{\sqrt{2}+
\cfrac{1}{\sqrt{2}+\dotsb
}}}}}
\end{verbatim}
Left or right placement of any of the numerators is accomplished by using
\cn{cfrac[l]} or \cn{cfrac[r]} instead of \cn{cfrac}.
\subsection{Smash}
In \pkg{amsmath} there are optional arguments \verb"t" and \verb"b" for
the plain \TeX\ command \cn{smash}, because sometimes it is advantageous
to be able to `smash' only the top or only the bottom of something while
retaining the natural depth or height. In the formula
$X_j=(1/\sqrt{\smash[b]{\lambda_j}})X_j'$ \cn{smash}\verb=[b]= has been
used to limit the size of the radical symbol.
\begin{verbatim}
$X_j=(1/\sqrt{\smash[b]{\lambda_j}})X_j'$
\end{verbatim}
Without the use of \cn{smash}\verb=[b]= the formula would have appeared
thus: $X_j=(1/\sqrt{\lambda_j})X_j'$, with the radical extending to
encompass the depth of the subscript $j$.
\subsection{The `cases' environment}
`Cases' constructions like the following can be produced using
the \env{cases} environment.
\begin{equation}
P_{r-j}=
\begin{cases}
0& \text{if $r-j$ is odd},\\
r!\,(-1)^{(r-j)/2}& \text{if $r-j$ is even}.
\end{cases}
\end{equation}
\begin{verbatim}
\begin{equation} P_{r-j}=
\begin{cases}
0& \text{if $r-j$ is odd},\\
r!\,(-1)^{(r-j)/2}& \text{if $r-j$ is even}.
\end{cases}
\end{equation}
\end{verbatim}
Notice the use of \cn{text} and the embedded math.
\subsection{Matrix}
Here are samples of the matrix environments,
\cn{matrix}, \cn{pmatrix}, \cn{bmatrix}, \cn{Bmatrix}, \cn{vmatrix}
and \cn{Vmatrix}:
\begin{equation}
\begin{matrix}
\vartheta& \varrho\\\varphi& \varpi
\end{matrix}\quad
\begin{pmatrix}
\vartheta& \varrho\\\varphi& \varpi
\end{pmatrix}\quad
\begin{bmatrix}
\vartheta& \varrho\\\varphi& \varpi
\end{bmatrix}\quad
\begin{Bmatrix}
\vartheta& \varrho\\\varphi& \varpi
\end{Bmatrix}\quad
\begin{vmatrix}
\vartheta& \varrho\\\varphi& \varpi
\end{vmatrix}\quad
\begin{Vmatrix}
\vartheta& \varrho\\\varphi& \varpi
\end{Vmatrix}
\end{equation}
%
\begin{verbatim}
\begin{matrix}
\vartheta& \varrho\\\varphi& \varpi
\end{matrix}\quad
\begin{pmatrix}
\vartheta& \varrho\\\varphi& \varpi
\end{pmatrix}\quad
\begin{bmatrix}
\vartheta& \varrho\\\varphi& \varpi
\end{bmatrix}\quad
\begin{Bmatrix}
\vartheta& \varrho\\\varphi& \varpi
\end{Bmatrix}\quad
\begin{vmatrix}
\vartheta& \varrho\\\varphi& \varpi
\end{vmatrix}\quad
\begin{Vmatrix}
\vartheta& \varrho\\\varphi& \varpi
\end{Vmatrix}
\end{verbatim}
To produce a small matrix suitable for use in text, use the
\env{smallmatrix} environment.
\begin{verbatim}
\begin{math}
\bigl( \begin{smallmatrix}
a&b\\ c&d
\end{smallmatrix} \bigr)
\end{math}
\end{verbatim}
To show
the effect of the matrix on the surrounding lines of
a paragraph, we put it here: \begin{math}
\bigl( \begin{smallmatrix}
a&b\\ c&d
\end{smallmatrix} \bigr)
\end{math}
and follow it with enough text to ensure that there will
be at least one full line below the matrix.
\cn{hdotsfor}\verb"{"\textit{number}\verb"}" produces a row of dots in a matrix
spanning the given number of columns:
\[W(\Phi)= \begin{Vmatrix}
\dfrac\varphi{(\varphi_1,\varepsilon_1)}&0&\dots&0\\
\dfrac{\varphi k_{n2}}{(\varphi_2,\varepsilon_1)}&
\dfrac\varphi{(\varphi_2,\varepsilon_2)}&\dots&0\\
\hdotsfor{5}\\
\dfrac{\varphi k_{n1}}{(\varphi_n,\varepsilon_1)}&
\dfrac{\varphi k_{n2}}{(\varphi_n,\varepsilon_2)}&\dots&
\dfrac{\varphi k_{n\,n-1}}{(\varphi_n,\varepsilon_{n-1})}&
\dfrac{\varphi}{(\varphi_n,\varepsilon_n)}
\end{Vmatrix}\]
\begin{verbatim}
\[W(\Phi)= \begin{Vmatrix}
\dfrac\varphi{(\varphi_1,\varepsilon_1)}&0&\dots&0\\
\dfrac{\varphi k_{n2}}{(\varphi_2,\varepsilon_1)}&
\dfrac\varphi{(\varphi_2,\varepsilon_2)}&\dots&0\\
\hdotsfor{5}\\
\dfrac{\varphi k_{n1}}{(\varphi_n,\varepsilon_1)}&
\dfrac{\varphi k_{n2}}{(\varphi_n,\varepsilon_2)}&\dots&
\dfrac{\varphi k_{n\,n-1}}{(\varphi_n,\varepsilon_{n-1})}&
\dfrac{\varphi}{(\varphi_n,\varepsilon_n)}
\end{Vmatrix}\]
\end{verbatim}
The spacing of the dots can be varied through use of a square-bracket
option, for example, \verb"\hdotsfor[1.5]{3}". The number in square brackets
will be used as a multiplier; the normal value is 1.
\subsection{The \cn{substack} command}
The \cn{substack} command can be used to produce a multiline
subscript or superscript:
for example
\begin{verbatim}
\sum_{\substack{0\le i\le m\\ 0<j<n}} P(i,j)
\end{verbatim}
produces a two-line subscript underneath the sum:
\begin{equation}
\sum_{\substack{0\le i\le m\\ 0<j<n}} P(i,j)
\end{equation}
A slightly more generalized form is the \env{subarray} environment which
allows you to specify that each line should be left-aligned instead of
centered, as here:
\begin{equation}
\sum_{\begin{subarray}{l}
0\le i\le m\\ 0<j<n
\end{subarray}}
P(i,j)
\end{equation}
\begin{verbatim}
\sum_{\begin{subarray}{l}
0\le i\le m\\ 0<j<n
\end{subarray}}
P(i,j)
\end{verbatim}
\subsection{Big-g-g delimiters}
Here are some big delimiters, first in \cn{normalsize}:
\[\biggl(\mathbf{E}_{y}
\int_0^{t_\varepsilon}L_{x,y^x(s)}\varphi(x)\,ds
\biggr)
\]
\begin{verbatim}
\[\biggl(\mathbf{E}_{y}
\int_0^{t_\varepsilon}L_{x,y^x(s)}\varphi(x)\,ds
\biggr)
\]
\end{verbatim}
and now in \cn{Large} size:
{\Large
\[\biggl(\mathbf{E}_{y}
\int_0^{t_\varepsilon}L_{x,y^x(s)}\varphi(x)\,ds
\biggr)
\]}
\begin{verbatim}
{\Large
\[\biggl(\mathbf{E}_{y}
\int_0^{t_\varepsilon}L_{x,y^x(s)}\varphi(x)\,ds
\biggr)
\]}
\end{verbatim}
\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter
%% This turns on vertical rules at the right and left margins, to
%% better illustrate the spacing for certain multiple-line equation
%% structures.
\def\@makecol{\ifvoid\footins \setbox\@outputbox\box\@cclv
\else\setbox\@outputbox
\vbox{\boxmaxdepth \maxdepth
\unvbox\@cclv\vskip\skip\footins\footnoterule\unvbox\footins}\fi
\xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
\setbox\@outputbox\hbox{\vrule width\marginrulewidth
\vbox to\@colht{\boxmaxdepth\maxdepth
\@texttop\dimen128=\dp\@outputbox\unvbox\@outputbox
\vskip-\dimen128\@textbottom}%
\vrule width\marginrulewidth}%
\global\maxdepth\@maxdepth}
\newdimen\marginrulewidth
\setlength{\marginrulewidth}{.1pt}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\appendix
\section{Examples of multiple-line equation structures}
\label{s:eq}
\textbf{\large Note: Starting on this page, vertical rules are
added at the margins so that the positioning of various display elements
with respect to the margins can be seen more clearly.}
\subsection{Split}
The \env{split} environment is not an independent environment
but should be used inside something else such as \env{equation}
or \env{align}.
If there is not enough room for it, the equation number for a
\env{split} will be shifted to the previous line, when equation numbers are
on the left; the number shifts down to the next line when numbers are on
the right.
\begin{equation}
\begin{split}
f_{h,\varepsilon}(x,y)
&=\varepsilon\mathbf{E}_{x,y}\int_0^{t_\varepsilon}
L_{x,y_\varepsilon(\varepsilon u)}\varphi(x)\,du\\
&= h\int L_{x,z}\varphi(x)\rho_x(dz)\\
&\quad+h\biggl[\frac{1}{t_\varepsilon}\biggl(\mathbf{E}_{y}
\int_0^{t_\varepsilon}L_{x,y^x(s)}\varphi(x)\,ds
-t_\varepsilon\int L_{x,z}\varphi(x)\rho_x(dz)\biggr)\\
&\phantom{{=}+h\biggl[}+\frac{1}{t_\varepsilon}
\biggl(\mathbf{E}_{y}\int_0^{t_\varepsilon}L_{x,y^x(s)}
\varphi(x)\,ds -\mathbf{E}_{x,y}\int_0^{t_\varepsilon}
L_{x,y_\varepsilon(\varepsilon s)}
\varphi(x)\,ds\biggr)\biggr]\\
&=h\wh{L}_x\varphi(x)+h\theta_\varepsilon(x,y),
\end{split}
\end{equation}
Some text after to test the below-display spacing.
\begin{verbatim}
\begin{equation}
\begin{split}
f_{h,\varepsilon}(x,y)
&=\varepsilon\mathbf{E}_{x,y}\int_0^{t_\varepsilon}
L_{x,y_\varepsilon(\varepsilon u)}\varphi(x)\,du\\
&= h\int L_{x,z}\varphi(x)\rho_x(dz)\\
&\quad+h\biggl[\frac{1}{t_\varepsilon}\biggl(\mathbf{E}_{y}
\int_0^{t_\varepsilon}L_{x,y^x(s)}\varphi(x)\,ds
-t_\varepsilon\int L_{x,z}\varphi(x)\rho_x(dz)\biggr)\\
&\phantom{{=}+h\biggl[}+\frac{1}{t_\varepsilon}
\biggl(\mathbf{E}_{y}\int_0^{t_\varepsilon}L_{x,y^x(s)}
\varphi(x)\,ds -\mathbf{E}_{x,y}\int_0^{t_\varepsilon}
L_{x,y_\varepsilon(\varepsilon s)}
\varphi(x)\,ds\biggr)\biggr]\\
&=h\wh{L}_x\varphi(x)+h\theta_\varepsilon(x,y),
\end{split}
\end{equation}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
Unnumbered version:
\begin{equation*}
\begin{split}
f_{h,\varepsilon}(x,y)
&=\varepsilon\mathbf{E}_{x,y}\int_0^{t_\varepsilon}
L_{x,y_\varepsilon(\varepsilon u)}\varphi(x)\,du\\
&= h\int L_{x,z}\varphi(x)\rho_x(dz)\\
&\quad+h\biggl[\frac{1}{t_\varepsilon}\biggl(\mathbf{E}_{y}
\int_0^{t_\varepsilon}L_{x,y^x(s)}\varphi(x)\,ds
-t_\varepsilon\int L_{x,z}\varphi(x)\rho_x(dz)\biggr)\\
&\phantom{{=}+h\biggl[}+\frac{1}{t_\varepsilon}
\biggl(\mathbf{E}_{y}\int_0^{t_\varepsilon}L_{x,y^x(s)}
\varphi(x)\,ds -\mathbf{E}_{x,y}\int_0^{t_\varepsilon}
L_{x,y_\varepsilon(\varepsilon s)}
\varphi(x)\,ds\biggr)\biggr]\\
&=h\wh{L}_x\varphi(x)+h\theta_\varepsilon(x,y),
\end{split}
\end{equation*}
Some text after to test the below-display spacing.
\begin{verbatim}
\begin{equation*}
\begin{split}
f_{h,\varepsilon}(x,y)
&=\varepsilon\mathbf{E}_{x,y}\int_0^{t_\varepsilon}
L_{x,y_\varepsilon(\varepsilon u)}\varphi(x)\,du\\
&= h\int L_{x,z}\varphi(x)\rho_x(dz)\\
&\quad+h\biggl[\frac{1}{t_\varepsilon}\biggl(\mathbf{E}_{y}
\int_0^{t_\varepsilon}L_{x,y^x(s)}\varphi(x)\,ds
-t_\varepsilon\int L_{x,z}\varphi(x)\rho_x(dz)\biggr)\\
&\phantom{{=}+h\biggl[}+\frac{1}{t_\varepsilon}
\biggl(\mathbf{E}_{y}\int_0^{t_\varepsilon}L_{x,y^x(s)}
\varphi(x)\,ds -\mathbf{E}_{x,y}\int_0^{t_\varepsilon}
L_{x,y_\varepsilon(\varepsilon s)}
\varphi(x)\,ds\biggr)\biggr]\\
&=h\wh{L}_x\varphi(x)+h\theta_\varepsilon(x,y),
\end{split}
\end{equation*}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
If the option \env{centertags} is included in the options
list of the \pkg{amsmath} package,
the equation numbers for \env{split} environments will be
centered vertically on the height
of the \env{split}:
{\makeatletter\ctagsplit@true
\begin{equation}
\begin{split}
\abs{I_2}&=\left\lvert \int_{0}^T \psi(t)\left\{u(a,t)-\int_{\gamma(t)}^a
\frac{d\theta}{k(\theta,t)}
\int_{a}^\theta c(\xi)u_t(\xi,t)\,d\xi\right\}dt\right\rvert\\
&\le C_6\left\lvert \left\lvert f\int_\Omega\left\lvert \wt{S}^{-1,0}_{a,-}
W_2(\Omega,\Gamma_l)\right\rvert\right\rvert
\left\lvert \abs{u}\overset{\circ}\to W_2^{\wt{A}}
(\Omega;\Gamma_r,T)\right\rvert\right\rvert.
\end{split}
\end{equation}}%
Some text after to test the below-display spacing.
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
Use of \env{split} within \env{align}:
{\delimiterfactor750
\begin{align}
\begin{split}\abs{I_1}
&=\left\lvert \int_\Omega gRu\,d\Omega\right\rvert\\
&\le C_3\left[\int_\Omega\left(\int_{a}^x
g(\xi,t)\,d\xi\right)^2d\Omega\right]^{1/2}\\
&\quad\times \left[\int_\Omega\left\{u^2_x+\frac{1}{k}
\left(\int_{a}^x cu_t\,d\xi\right)^2\right\}
c\Omega\right]^{1/2}\\
&\le C_4\left\lvert \left\lvert f\left\lvert \wt{S}^{-1,0}_{a,-}
W_2(\Omega,\Gamma_l)\right\rvert\right\rvert
\left\lvert \abs{u}\overset{\circ}\to W_2^{\wt{A}}
(\Omega;\Gamma_r,T)\right\rvert\right\rvert.
\end{split}\label{eq:A}\\
\begin{split}\abs{I_2}&=\left\lvert \int_{0}^T \psi(t)\left\{u(a,t)
-\int_{\gamma(t)}^a\frac{d\theta}{k(\theta,t)}
\int_{a}^\theta c(\xi)u_t(\xi,t)\,d\xi\right\}dt\right\rvert\\
&\le C_6\left\lvert \left\lvert f\int_\Omega
\left\lvert \wt{S}^{-1,0}_{a,-}
W_2(\Omega,\Gamma_l)\right\rvert\right\rvert
\left\lvert \abs{u}\overset{\circ}\to W_2^{\wt{A}}
(\Omega;\Gamma_r,T)\right\rvert\right\rvert.
\end{split}
\end{align}}%
Some text after to test the below-display spacing.
\begin{verbatim}
\begin{align}
\begin{split}\abs{I_1}
&=\left\lvert \int_\Omega gRu\,d\Omega\right\rvert\\
&\le C_3\left[\int_\Omega\left(\int_{a}^x
g(\xi,t)\,d\xi\right)^2d\Omega\right]^{1/2}\\
&\quad\times \left[\int_\Omega\left\{u^2_x+\frac{1}{k}
\left(\int_{a}^x cu_t\,d\xi\right)^2\right\}
c\Omega\right]^{1/2}\\
&\le C_4\left\lvert \left\lvert f\left\lvert \wt{S}^{-1,0}_{a,-}
W_2(\Omega,\Gamma_l)\right\rvert\right\rvert
\left\lvert \abs{u}\overset{\circ}\to W_2^{\wt{A}}
(\Omega;\Gamma_r,T)\right\rvert\right\rvert.
\end{split}\label{eq:A}\\
\begin{split}\abs{I_2}&=\left\lvert \int_{0}^T \psi(t)\left\{u(a,t)
-\int_{\gamma(t)}^a\frac{d\theta}{k(\theta,t)}
\int_{a}^\theta c(\xi)u_t(\xi,t)\,d\xi\right\}dt\right\rvert\\
&\le C_6\left\lvert \left\lvert f\int_\Omega
\left\lvert \wt{S}^{-1,0}_{a,-}
W_2(\Omega,\Gamma_l)\right\rvert\right\rvert
\left\lvert \abs{u}\overset{\circ}\to W_2^{\wt{A}}
(\Omega;\Gamma_r,T)\right\rvert\right\rvert.
\end{split}
\end{align}
\end{verbatim}
%%%%%%%%%%%%%%%%%%
\newpage
Unnumbered \env{align}, with a number on the second \env{split}:
\begin{align*}
\begin{split}\abs{I_1}&=\left\lvert \int_\Omega gRu\,d\Omega\right\rvert\\
&\le C_3\left[\int_\Omega\left(\int_{a}^x
g(\xi,t)\,d\xi\right)^2d\Omega\right]^{1/2}\\
&\phantom{=}\times \left[\int_\Omega\left\{u^2_x+\frac{1}{k}
\left(\int_{a}^x cu_t\,d\xi\right)^2\right\}
c\Omega\right]^{1/2}\\
&\le C_4\left\lvert \left\lvert f\left\lvert \wt{S}^{-1,0}_{a,-}
W_2(\Omega,\Gamma_l)\right\rvert\right\rvert
\left\lvert \abs{u}\overset{\circ}\to W_2^{\wt{A}}
(\Omega;\Gamma_r,T)\right\rvert\right\rvert.
\end{split}\\
\begin{split}\abs{I_2}&=\left\lvert \int_{0}^T \psi(t)\left\{u(a,t)
-\int_{\gamma(t)}^a\frac{d\theta}{k(\theta,t)}
\int_{a}^\theta c(\xi)u_t(\xi,t)\,d\xi\right\}dt\right\rvert\\
&\le C_6\left\lvert \left\lvert f\int_\Omega
\left\lvert \wt{S}^{-1,0}_{a,-}
W_2(\Omega,\Gamma_l)\right\rvert\right\rvert
\left\lvert \abs{u}\overset{\circ}\to W_2^{\wt{A}}
(\Omega;\Gamma_r,T)\right\rvert\right\rvert.
\end{split}\tag{\theequation$'$}
\end{align*}
Some text after to test the below-display spacing.
\begin{verbatim}
\begin{align*}
\begin{split}\abs{I_1}&=\left\lvert \int_\Omega gRu\,d\Omega\right\rvert\\
&\le C_3\left[\int_\Omega\left(\int_{a}^x
g(\xi,t)\,d\xi\right)^2d\Omega\right]^{1/2}\\
&\phantom{=}\times \left[\int_\Omega\left\{u^2_x+\frac{1}{k}
\left(\int_{a}^x cu_t\,d\xi\right)^2\right\}
c\Omega\right]^{1/2}\\
&\le C_4\left\lvert \left\lvert f\left\lvert \wt{S}^{-1,0}_{a,-}
W_2(\Omega,\Gamma_l)\right\rvert\right\rvert
\left\lvert \abs{u}\overset{\circ}\to W_2^{\wt{A}}
(\Omega;\Gamma_r,T)\right\rvert\right\rvert.
\end{split}\\
\begin{split}\abs{I_2}&=\left\lvert \int_{0}^T \psi(t)\left\{u(a,t)
-\int_{\gamma(t)}^a\frac{d\theta}{k(\theta,t)}
\int_{a}^\theta c(\xi)u_t(\xi,t)\,d\xi\right\}dt\right\rvert\\
&\le C_6\left\lvert \left\lvert f\int_\Omega
\left\lvert \wt{S}^{-1,0}_{a,-}
W_2(\Omega,\Gamma_l)\right\rvert\right\rvert
\left\lvert \abs{u}\overset{\circ}\to W_2^{\wt{A}}
(\Omega;\Gamma_r,T)\right\rvert\right\rvert.
\end{split}\tag{\theequation$'$}
\end{align*}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\subsection{Multline}
Numbered version:
\begin{multline}\label{eq:E}
\int_a^b\biggl\{\int_a^b[f(x)^2g(y)^2+f(y)^2g(x)^2]
-2f(x)g(x)f(y)g(y)\,dx\biggr\}\,dy \\
=\int_a^b\biggl\{g(y)^2\int_a^bf^2+f(y)^2
\int_a^b g^2-2f(y)g(y)\int_a^b fg\biggr\}\,dy
\end{multline}
To test the use of \verb=\label= and
\verb=\ref=, we refer to the number of this
equation here: (\ref{eq:E}).
\begin{verbatim}
\begin{multline}\label{eq:E}
\int_a^b\biggl\{\int_a^b[f(x)^2g(y)^2+f(y)^2g(x)^2]
-2f(x)g(x)f(y)g(y)\,dx\biggr\}\,dy \\
=\int_a^b\biggl\{g(y)^2\int_a^bf^2+f(y)^2
\int_a^b g^2-2f(y)g(y)\int_a^b fg\biggr\}\,dy
\end{multline}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
Unnumbered version:
\begin{multline*}
\int_a^b\biggl\{\int_a^b[f(x)^2g(y)^2+f(y)^2g(x)^2]
-2f(x)g(x)f(y)g(y)\,dx\biggr\}\,dy \\
=\int_a^b\biggl\{g(y)^2\int_a^bf^2+f(y)^2
\int_a^b g^2-2f(y)g(y)\int_a^b fg\biggr\}\,dy
\end{multline*}
Some text after to test the below-display spacing.
\begin{verbatim}
\begin{multline*}
\int_a^b\biggl\{\int_a^b[f(x)^2g(y)^2+f(y)^2g(x)^2]
-2f(x)g(x)f(y)g(y)\,dx\biggr\}\,dy \\
=\int_a^b\biggl\{g(y)^2\int_a^bf^2+f(y)^2
\int_a^b g^2-2f(y)g(y)\int_a^b fg\biggr\}\,dy
\end{multline*}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\iffalse % bugfix needed, error message "Multiple \tag"
% [mjd,24-Jan-1995]
\newpage
And now an ``unnumbered'' version numbered with a literal tag:
\begin{multline*}\tag*{[a]}
\int_a^b\biggl\{\int_a^b[f(x)^2g(y)^2+f(y)^2g(x)^2]
-2f(x)g(x)f(y)g(y)\,dx\biggr\}\,dy \\
=\int_a^b\biggl\{g(y)^2\int_a^bf^2+f(y)^2
\int_a^b g^2-2f(y)g(y)\int_a^b fg\biggr\}\,dy
\end{multline*}
Some text after to test the below-display spacing.
\begin{verbatim}
\begin{multline*}\tag*{[a]}
\int_a^b\biggl\{\int_a^b[f(x)^2g(y)^2+f(y)^2g(x)^2]
-2f(x)g(x)f(y)g(y)\,dx\biggr\}\,dy \\
=\int_a^b\biggl\{g(y)^2\int_a^bf^2+f(y)^2
\int_a^b g^2-2f(y)g(y)\int_a^b fg\biggr\}\,dy
\end{multline*}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
The same display with \verb=\multlinegap= set to zero.
Notice that the space on the left in
the first line does not change, because of the equation number, while
the second line is pushed over to the right margin.
{\setlength{\multlinegap}{0pt}
\begin{multline*}\tag*{[a]}
\int_a^b\biggl\{\int_a^b[f(x)^2g(y)^2+f(y)^2g(x)^2]
-2f(x)g(x)f(y)g(y)\,dx\biggr\}\,dy \\
=\int_a^b\biggl\{g(y)^2\int_a^bf^2+f(y)^2
\int_a^b g^2-2f(y)g(y)\int_a^b fg\biggr\}\,dy
\end{multline*}}%
Some text after to test the below-display spacing.
\begin{verbatim}
{\setlength{\multlinegap}{0pt}
\begin{multline*}\tag*{[a]}
\int_a^b\biggl\{\int_a^b[f(x)^2g(y)^2+f(y)^2g(x)^2]
-2f(x)g(x)f(y)g(y)\,dx\biggr\}\,dy \\
=\int_a^b\biggl\{g(y)^2\int_a^bf^2+f(y)^2
\int_a^b g^2-2f(y)g(y)\int_a^b fg\biggr\}\,dy
\end{multline*}}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fi % matches \iffalse above [mjd,24-Jan-1995]
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\subsection{Gather}
Numbered version with \verb;\notag; on the second line:
\begin{gather}
D(a,r)\equiv\{z\in\mathbf{C}\colon \abs{z-a}<r\},\\
\seg(a,r)\equiv\{z\in\mathbf{C}\colon
\Im z= \Im a,\ \abs{z-a}<r\},\notag\\
c(e,\theta,r)\equiv\{(x,y)\in\mathbf{C}
\colon \abs{x-e}<y\tan\theta,\ 0<y<r\},\\
C(E,\theta,r)\equiv\bigcup_{e\in E}c(e,\theta,r).
\end{gather}
\begin{verbatim}
\begin{gather}
D(a,r)\equiv\{z\in\mathbf{C}\colon \abs{z-a}<r\},\\
\seg(a,r)\equiv\{z\in\mathbf{C}\colon
\Im z= \Im a,\ \abs{z-a}<r\},\notag\\
c(e,\theta,r)\equiv\{(x,y)\in\mathbf{C}
\colon \abs{x-e}<y\tan\theta,\ 0<y<r\},\\
C(E,\theta,r)\equiv\bigcup_{e\in E}c(e,\theta,r).
\end{gather}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
Unnumbered version.
\begin{gather*}
D(a,r)\equiv\{z\in\mathbf{C}\colon \abs{z-a}<r\},\\
\seg (a,r)\equiv\{z\in\mathbf{C}\colon
\Im z= \Im a,\ \abs{z-a}<r\},\\
c(e,\theta,r)\equiv\{(x,y)\in\mathbf{C}
\colon \abs{x-e}<y\tan\theta,\ 0<y<r\},\\
C(E,\theta,r)\equiv\bigcup_{e\in E}c(e,\theta,r).
\end{gather*}
Some text after to test the below-display spacing.
\begin{verbatim}
\begin{gather*}
D(a,r)\equiv\{z\in\mathbf{C}\colon \abs{z-a}<r\},\\
\seg (a,r)\equiv\{z\in\mathbf{C}\colon
\Im z= \Im a,\ \abs{z-a}<r\},\\
c(e,\theta,r)\equiv\{(x,y)\in\mathbf{C}
\colon \abs{x-e}<y\tan\theta,\ 0<y<r\},\\
C(E,\theta,r)\equiv\bigcup_{e\in E}c(e,\theta,r).
\end{gather*}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\subsection{Align}
Numbered version:
\begin{align}
\gamma_x(t)&=(\cos tu+\sin tx,v),\\
\gamma_y(t)&=(u,\cos tv+\sin ty),\\
\gamma_z(t)&=\left(\cos tu+\frac\alpha\beta\sin tv,
-\frac\beta\alpha\sin tu+\cos tv\right).
\end{align}
Some text after to test the below-display spacing.
\begin{verbatim}
\begin{align}
\gamma_x(t)&=(\cos tu+\sin tx,v),\\
\gamma_y(t)&=(u,\cos tv+\sin ty),\\
\gamma_z(t)&=\left(\cos tu+\frac\alpha\beta\sin tv,
-\frac\beta\alpha\sin tu+\cos tv\right).
\end{align}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
Unnumbered version:
\begin{align*}
\gamma_x(t)&=(\cos tu+\sin tx,v),\\
\gamma_y(t)&=(u,\cos tv+\sin ty),\\
\gamma_z(t)&=\left(\cos tu+\frac\alpha\beta\sin tv,
-\frac\beta\alpha\sin tu+\cos tv\right).
\end{align*}
Some text after to test the below-display spacing.
\begin{verbatim}
\begin{align*}
\gamma_x(t)&=(\cos tu+\sin tx,v),\\
\gamma_y(t)&=(u,\cos tv+\sin ty),\\
\gamma_z(t)&=\left(\cos tu+\frac\alpha\beta\sin tv,
-\frac\beta\alpha\sin tu+\cos tv\right).
\end{align*}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
A variation:
\begin{align}
x& =y && \text {by (\ref{eq:C})}\\
x'& = y' && \text {by (\ref{eq:D})}\\
x+x' & = y+y' && \text {by Axiom 1.}
\end{align}
Some text after to test the below-display spacing.
\begin{verbatim}
\begin{align}
x& =y && \text {by (\ref{eq:C})}\\
x'& = y' && \text {by (\ref{eq:D})}\\
x+x' & = y+y' && \text {by Axiom 1.}
\end{align}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\subsection{Align and split within gather}
When using the \env{align} environment within the \env{gather}
environment, one or the other, or both, should be unnumbered (using the
\verb"*" form); numbering both the outer and inner environment would
cause a conflict.
Automatically numbered \env{gather} with \env{split} and \env{align*}:
\begin{gather}
\begin{split} \varphi(x,z)
&=z-\gamma_{10}x-\gamma_{mn}x^mz^n\\
&=z-Mr^{-1}x-Mr^{-(m+n)}x^mz^n
\end{split}\\[6pt]
\begin{align*}
\zeta^0 &=(\xi^0)^2,\\
\zeta^1 &=\xi^0\xi^1,\\
\zeta^2 &=(\xi^1)^2,
\end{align*}
\end{gather}
Here the \env{split} environment gets a number from the outer
\env{gather} environment; numbers for individual lines of the
\env{align*} are suppressed because of the star.
\begin{verbatim}
\begin{gather}
\begin{split} \varphi(x,z)
&=z-\gamma_{10}x-\gamma_{mn}x^mz^n\\
&=z-Mr^{-1}x-Mr^{-(m+n)}x^mz^n
\end{split}\\[6pt]
\begin{align*}
\zeta^0 &=(\xi^0)^2,\\
\zeta^1 &=\xi^0\xi^1,\\
\zeta^2 &=(\xi^1)^2,
\end{align*}
\end{gather}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
The \verb"*"-ed form of \env{gather} with the non-\verb"*"-ed form of
\env{align}.
\begin{gather*}
\begin{split} \varphi(x,z)
&=z-\gamma_{10}x-\gamma_{mn}x^mz^n\\
&=z-Mr^{-1}x-Mr^{-(m+n)}x^mz^n
\end{split}\\[6pt]
\begin{align} \zeta^0&=(\xi^0)^2,\\
\zeta^1 &=\xi^0\xi^1,\\
\zeta^2 &=(\xi^1)^2,
\end{align}
\end{gather*}
Some text after to test the below-display spacing.
\begin{verbatim}
\begin{gather*}
\begin{split} \varphi(x,z)
&=z-\gamma_{10}x-\gamma_{mn}x^mz^n\\
&=z-Mr^{-1}x-Mr^{-(m+n)}x^mz^n
\end{split}\\[6pt]
\begin{align} \zeta^0&=(\xi^0)^2,\\
\zeta^1 &=\xi^0\xi^1,\\
\zeta^2 &=(\xi^1)^2,
\end{align}
\end{gather*}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\subsection{Alignat}
Numbered version:
\begin{alignat}{3}
V_i & =v_i - q_i v_j, & \qquad X_i & = x_i - q_i x_j,
& \qquad U_i & = u_i,
\qquad \text{for $i\ne j$;}\label{eq:B}\\
V_j & = v_j, & \qquad X_j & = x_j,
& \qquad U_j & u_j + \sum_{i\ne j} q_i u_i.
\end{alignat}
Some text after to test the below-display spacing.
\begin{verbatim}
\begin{alignat}{3}
V_i & =v_i - q_i v_j, & \qquad X_i & = x_i - q_i x_j,
& \qquad U_i & = u_i,
\qquad \text{for $i\ne j$;}\label{eq:B}\\
V_j & = v_j, & \qquad X_j & = x_j,
& \qquad U_j & u_j + \sum_{i\ne j} q_i u_i.
\end{alignat}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
Unnumbered version:
\begin{alignat*}3
V_i & =v_i - q_i v_j, & \qquad X_i & = x_i - q_i x_j,
& \qquad U_i & = u_i,
\qquad \text{for $i\ne j$;} \\
V_j & = v_j, & \qquad X_j & = x_j,
& \qquad U_j & u_j + \sum_{i\ne j} q_i u_i.
\end{alignat*}
Some text after to test the below-display spacing.
\begin{verbatim}
\begin{alignat*}3
V_i & =v_i - q_i v_j, & \qquad X_i & = x_i - q_i x_j,
& \qquad U_i & = u_i,
\qquad \text{for $i\ne j$;} \\
V_j & = v_j, & \qquad X_j & = x_j,
& \qquad U_j & u_j + \sum_{i\ne j} q_i u_i.
\end{alignat*}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
The most common use for \env{alignat} is for things like
\begin{alignat}{2}
x& =y && \qquad \text {by (\ref{eq:A})}\label{eq:C}\\
x'& = y' && \qquad \text {by (\ref{eq:B})}\label{eq:D}\\
x+x' & = y+y' && \qquad \text {by Axiom 1.}
\end{alignat}
Some text after to test the below-display spacing.
\begin{verbatim}
\begin{alignat}{2}
x& =y && \qquad \text {by (\ref{eq:A})}\label{eq:C}\\
x'& = y' && \qquad \text {by (\ref{eq:B})}\label{eq:D}\\
x+x' & = y+y' && \qquad \text {by Axiom 1.}
\end{alignat}
\end{verbatim}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\setlength{\marginrulewidth}{0pt}
\begin{thebibliography}{10}
\bibitem{dihe:newdir}
W.~Diffie and E.~Hellman, \emph{New directions in cryptography}, IEEE
Transactions on Information Theory \textbf{22} (1976), no.~5, 644--654.
\bibitem{fre:cichon}
D.~H. Fremlin, \emph{Cichon's diagram}, 1983/1984, presented at the
S{\'e}minaire Initiation {\`a} l'Analyse, G. Choquet, M. Rogalski, J.
Saint Raymond, at the Universit{\'e} Pierre et Marie Curie, Paris, 23e
ann{\'e}e.
\bibitem{gouja:lagrmeth}
I.~P. Goulden and D.~M. Jackson, \emph{The enumeration of directed
closed {E}uler trails and directed {H}amiltonian circuits by
{L}angrangian methods}, European J. Combin. \textbf{2} (1981), 131--212.
\bibitem{hapa:graphenum}
F.~Harary and E.~M. Palmer, \emph{Graphical enumeration}, Academic
Press, 1973.
\bibitem{imlelu:oneway}
R.~Impagliazzo, L.~Levin, and M.~Luby, \emph{Pseudo-random generation
from one-way functions}, Proc. 21st STOC (1989), ACM, New York,
pp.~12--24.
\bibitem{komiyo:unipfunc}
M.~Kojima, S.~Mizuno, and A.~Yoshise, \emph{A new continuation method
for complementarity problems with uniform p-functions}, Tech. Report
B-194, Tokyo Inst. of Technology, Tokyo, 1987, Dept. of Information
Sciences.
\bibitem{komiyo:lincomp}
\bysame, \emph{A polynomial-time algorithm for a class of linear
complementarity problems}, Tech. Report B-193, Tokyo Inst. of
Technology, Tokyo, 1987, Dept. of Information Sciences.
\bibitem{liuchow:formalsum}
C.~J. Liu and Yutze Chow, \emph{On operator and formal sum methods for
graph enumeration problems}, SIAM J. Algorithms Discrete Methods
\textbf{5} (1984), 384--438.
\bibitem{mami:matrixth}
M.~Marcus and H.~Minc, \emph{A survey of matrix theory and matrix
inequalities}, Complementary Series in Math. \textbf{14} (1964), 21--48.
\bibitem{miyoki:lincomp}
S.~Mizuno, A.~Yoshise, and T.~Kikuchi, \emph{Practical polynomial time
algorithms for linear complementarity problems}, Tech. Report~13, Tokyo
Inst. of Technology, Tokyo, April 1988, Dept. of Industrial Engineering
and Management.
\bibitem{moad:quadpro}
R.~D. Monteiro and I.~Adler, \emph{Interior path following primal-dual
algorithms, part {II}: Quadratic programming}, August 1987, Working
paper, Dept. of Industrial Engineering and Operations Research.
\bibitem{ste:sint}
E.~M. Stein, \emph{Singular integrals and differentiability properties
of functions}, Princeton Univ. Press, Princeton, N.J., 1970.
\bibitem{ye:intalg}
Y.~Ye, \emph{Interior algorithms for linear, quadratic and linearly
constrained convex programming}, Ph.D. thesis, Stanford Univ., Palo
Alto, Calif., July 1987, Dept. of Engineering--Economic Systems,
unpublished.
\end{thebibliography}
\end{document}
\endinput
================================================
FILE: misc/stix-extract.sh
================================================
#!/bin/sh
cat stix-tbl.txt |
awk '
{
# USV characters to ignore
#
ignoreusv["000C5"] = "\\AA "
ignoreusv["000C6"] = "\\AE "
ignoreusv["000D0"] = "\\DH "
ignoreusv["000DE"] = "\\TH "
ignoreusv["000DF"] = "\\ss "
ignoreusv["000E5"] = "\\aa "
ignoreusv["000E6"] = "\\ae "
ignoreusv["000F0"] = "\\dh "
ignoreusv["000FE"] = "\\th "
ignoreusv["00110"] = "\\DJ "
ignoreusv["00111"] = "\\dj "
ignoreusv["00131"] = "\\imath "
ignoreusv["0014A"] = "\\NG "
ignoreusv["0014B"] = "\\ng "
ignoreusv["00152"] = "\\OE "
ignoreusv["00153"] = "\\oe "
ignoreusv["0019B"] = "\\lambdaslash "
ignoreusv["001A0"] = "\\Ohorn "
ignoreusv["001A1"] = "\\ohorn "
ignoreusv["001AF"] = "\\Uhorn "
ignoreusv["001B0"] = "\\uhorn "
ignoreusv["002B9"] = "\\cprime "
ignoreusv["002BA"] = "\\cdprime "
ignoreusv["002BC"] = "\\rasp "
ignoreusv["002BD"] = "\\lasp "
ignoreusv["003D2"] = "\\upUpsilon " # repeated from 03A5
ignoreusv["02002"] = "\\enspace "
ignoreusv["02003"] = "\\quad "
ignoreusv["02004"] = "\\thirdemspace "
ignoreusv["02005"] = "\\thickspace "
ignoreusv["02006"] = "\\sixthemspace "
ignoreusv["02007"] = "\\digitspace "
ignoreusv["02008"] = "\\punctspace "
ignoreusv["02009"] = "\\thinspace "
ignoreusv["0200A"] = "\\hspace "
ignoreusv["0200B"] = "\\zwspace "
ignoreusv["0200C"] = "\\zwnonjoin "
ignoreusv["0200D"] = "\\zwjoin "
ignoreusv["0200E"] = "\\LtoRmark "
ignoreusv["0200F"] = "\\RtoLmark "
ignoreusv["02011"] = "\\nobreakhyphen "
ignoreusv["02012"] = "\\figdash "
ignoreusv["02013"] = "\\endash "
ignoreusv["02014"] = "\\emdash "
ignoreusv["0205F"] = "\\medmathspace "
ignoreusv["02060"] = "\\wordjoin "
ignoreusv["02061"] = "\\functionapply "
ignoreusv["02062"] = "\\invisibletimes "
ignoreusv["02063"] = "\\invisiblesep "
ignoreusv["02064"] = "\\invisibleplus "
ignoreusv["02329"] = "\\clangle "
ignoreusv["0232A"] = "\\crangle "
ignoreusv["024C8"] = "\\circledS "
ignoreusv["027CB"] = "\\mathoverlaylongsolidus "
ignoreusv["0300A"] = "\\lAngle "
ignoreusv["0300B"] = "\\rAngle "
ignoreusv["0301A"] = "\\lBrack "
ignoreusv["0301B"] = "\\rBrack "
ignoreusv["0301E"] = "\\cjkdprimequote "
ignoreusv["0FFFD"] = "\\unknown "
ignoreusv["0FE35"] = "\\overparen "
ignoreusv["0FE36"] = "\\underparen "
ignoreusv["0FE37"] = "\\overbrace "
ignoreusv["0FE38"] = "\\underbrace "
ignoreusv["0203E"] = "\\overline " # primitive in luatex
# READ LINE
if ( \
printusv != substr($0,2,5) && \
printtexname != substr($0,84,25) && \
substr($0,2,1) != " " \
)
{
# GRAB INFO
flag = substr($0,1,1)
usv = substr($0,2,5)
texname = substr($0,84,26)
type = substr($0,55,1)
class = substr($0,57,1)
description = tolower(substr($0,233,350))
# THROW AWAY NON-MATH CHARS
if ( \
!( usv in ignoreusv ) && \
flag !~ "%" && \
texname ~ /[\\]/ && \
( \
substr(texname,0,5) != "\\text" || \
substr(texname,0,12) == "\\textUpsilon" \
) && \
substr(texname,0,4) != "\\ipa" && \
substr(texname,0,5) != "\\tone" && \
substr(texname,3,1) != " " && \
type !~ 1 && \
description !~ /<reserved>/ && \
description !~ /box drawings/ && \
description !~ /crop mark/ && \
description !~ /circled digit/ && \
description !~ /circled latin/ && \
description !~ /dingbat circled/ && \
description !~ /dingbat negative circled/ && \
description !~ /quot/ \
)
{
# SAVE DATA FOR NEXT LINE READS
printusv = usv;
printtexname = texname;
# FIXES
if (texname == "\\bigtriangleup ") { class = "B" }
if (texname == "\\Vvert ") { class = "F" }
if (usv == "02995") { class = "O" }
if (usv == "02996") { class = "C" }
if (usv == "02982") { class = "B" }
if (usv == "022EF") { class = "N" }
if (usv == "0219C") { printtexname = "\\leftwavearrow " }
if (usv == "0219D") { printtexname = "\\rightwavearrow " }
if (texname == "\\textUpsilon ") { printtexname = "\\upUpsilon " }
if (texname == "\\upvarepsilon ") { printtexname = "\\upepsilon " }
if (texname == "\\upepsilon ") { printtexname = "\\upvarepsilon " }
if (texname == "\\mbfvarepsilon ") { printtexname = "\\mbfepsilon " }
if (texname == "\\mbfepsilon ") { printtexname = "\\mbfvarepsilon " }
if (texname == "\\mitvarepsilon ") { printtexname = "\\mitepsilon " }
if (texname == "\\mitepsilon ") { printtexname = "\\mitvarepsilon " }
if (texname == "\\mbfitvarepsilon ") { printtexname = "\\mbfitepsilon " }
if (texname == "\\mbfitepsilon ") { printtexname = "\\mbfitvarepsilon " }
if (texname == "\\mbfsansvarepsilon ") { printtexname = "\\mbfsansepsilon " }
if (texname == "\\mbfsansepsilon ") { printtexname = "\\mbfsansvarepsilon " }
if (texname == "\\mbfitsansvarepsilon ") { printtexname = "\\mbfitsansepsilon " }
if (texname == "\\mbfitsansepsilon ") { printtexname = "\\mbfitsansvarepsilon " }
if (texname == "\\slash ") { printtexname = "\\divslash " }
if (texname == "\\colon ") { printtexname = "\\mathratio " }
if (texname == "\\dots ") { printtexname = "\\unicodeellipsis " }
if (texname == "\\cdots ") { printtexname = "\\unicodecdots " }
if (texname == "\\# ") { printtexname = "\\mathoctothorpe " }
if (texname == "\\% ") { printtexname = "\\mathpercent " }
if (texname == "\\& ") { printtexname = "\\mathampersand " }
if (texname == "\\ac ") { printtexname = "\\invlazys " }
if (texname == "\\ntriangleleft ") { printtexname = "\\nvartriangleleft " }
if (texname == "\\ntriangleright ") { printtexname = "\\nvartriangleright " }
# partials:
if (usv == "02202") { class = "A" }
if (usv == "1D6DB") { class = "A" }
if (usv == "1D715") { class = "A" }
if (usv == "1D74F") { class = "A" }
if (usv == "1D789") { class = "A" }
if (usv == "1D7C3") { class = "A" }
# nablas:
if (usv == "02207") { class = "A" }
if (usv == "1D6C1") { class = "A" }
if (usv == "1D6FB") { class = "A" }
if (usv == "1D735") { class = "A" }
if (usv == "1D76F") { class = "A" }
if (usv == "1D7A9") { class = "A" }
# Corrections
if (usv == "025B3") { class = "\\mathbin" }
if (usv == "025B5") { class = "\\mathrel" }
if (usv == "02980") { class = "\\mathfence" }
if (usv == "02A0A") { class = "\\mathop" }
# OVER/UNDER brackets/parens/braces (resp.)
if (usv == "023B4") { class = "\\mathover" }
if (usv == "023DC") { class = "\\mathover" }
if (usv == "023DE") { class = "\\mathover" }
if (usv == "023B5") { class = "\\mathunder" }
if (usv == "023DD") { class = "\\mathunder" }
if (usv == "023DF") { class = "\\mathunder" }
if (usv == "0203E") { class = "\\mathover" } # overline
# bottom accents
if (usv == "00331") { class = "\\mathbotaccent" }
if (usv == "020E8") { class = "\\mathbotaccent" }
# moustache
if (usv == "023B0") { class = "\\mathopen" }
if (usv == "023B1") { class = "\\mathclose" }
# TRANSFORM MATH CLASSES
if (class == "N") { class = "\\mathord" }
if (class == " ") { class = "\\mathord" }
if (class == "F") { class = "\\mathfence" }
if (class == "A") { class = "\\mathalpha" }
if (class == "D") { class = "\\mathaccent" }
if (class == "P") { class = "\\mathpunct" }
if (class == "B") { class = "\\mathbin" }
if (class == "R") { class = "\\mathrel" }
if (class == "L") { class = "\\mathop" }
if (class == "O") { class = "\\mathopen" }
if (class == "C") { class = "\\mathclose" }
# PRINT
sub(/\^/, "\\string^", description)
sub(/\%/, "\\\%", description)
print "\\UnicodeMathSymbol{\"" \
usv "}{" \
printtexname "}{" \
class "}{" \
description "}%"
}
}
}' > umtable.tex
================================================
FILE: misc/torture.tex
================================================
% Torture test for math fonts (Mostly from TeX book, some via Karl Berry)
% run in plain TeX
% verbose mode:
% \tracingoutput = 1
% \tracingboxes
\def\newpage{\vfill\eject}
% Following is for even bigger sizes than plain provides (for CMEX10 at 10pt)
\def\biggg#1{{\hbox{$\left#1\vbox to20.5pt{}\right.$}}}
\def\bigggl{\mathopen\biggg}
\def\bigggr{\mathclose\biggg}
\def\Biggg#1{{\hbox{$\left#1\vbox to23.5pt{}\right.$}}}
\def\Bigggl{\mathopen\Biggg}
\def\Bigggr{\mathclose\Biggg}
% NOTE: The above is for CM. All of it subsumed by code in lcdplain.tex...
\input lcdplain.tex %
\input texnansi.tex
% Change general typesetting parameters.
%
\rm
% \headline = {{\tenrm\folio} \hfil \timestamp}
\headline = {\hfil {\tenrm\folio} \hfil}
\footline = {}
\advance\vsize by .1in
\raggedbottom
\raggedright
\rightskip = 2em plus 5em minus 2em
\parindent = 0pt
\parskip = .5\baselineskip
% Test the basic character repertoire: we go through the math symbols
% listed in Appendix F of the TeXbook. This code is based on the \math
% test in testfont.tex.
% Apply \\ to roman and Greek upper- and lowercase, and script
% uppercase. Use \ii and \jj for `i' and `j', since sometimes we want
% the dotless versions.
\def\lettertrial{Letters: $
\\A \\B \\C \\D \\E \\F \\G \\H \\I \\J \\K \\L \\M \\N \\O \\P \\Q
\\R \\S \\T \\U \\V \\W \\X \\Y \\Z
$\par$
\\a \\b \\c \\d \\e \\f \\g \\h \\\ii \\\jj \\k \\l \\m \\n \\o \\p
\\q \\r \\s \\t \\u \\v \\w \\x \\y \\z
$\par$
\\\alpha \\\beta \\\gamma \\\delta \\\epsilon \\\zeta \\\eta \\\theta
\\\vartheta \\\iota \\\kappa \\\lambda \\\mu \\\nu \\\xi \\\pi
\\\varpi \\\rho \\\sigma \\\tau \\\upsilon \\\phi \\\varphi \\\chi
\\\psi \\\omega
$\par$
\\\Gamma \\\Delta \\\Theta \\\Lambda \\\Xi \\\Pi \\\Sigma \\\Upsilon
\\\Phi \\\Psi \\\Omega
$\par$
\\\scriptA \\\scriptB \\\scriptC \\\scriptD \\\scriptE \\\scriptF
\\\scriptG \\\scriptH \\\scriptI \\\scriptJ \\\scriptK \\\scriptL
\\\scriptM \\\scriptN \\\scriptO \\\scriptP \\\scriptQ \\\scriptR
\\\scriptS \\\scriptT \\\scriptU \\\scriptV \\\scriptW \\\scriptX
\\\scriptY \\\scriptZ
$\par
}
% NOTE: present release of TeXtures has a problem with on-screen display of
% characters with codes above 128 due to attempt to remap from Mac encoding
% to StandardEncoding, which is inappropriate for math fonts.
% So some of the upper case Greek characters will display wrong (but print OK).
% Test miscellaneous Ord symbols, except for \imath and \jmath.
\def\miscordtrial{Miscellaneous ordinary symbols: $
\\\aleph \\\hbar \\\ell \\\wp \\\Re \\\Im \\\partial \\\infty
\\\emptyset \\\nabla \\\surd \\\top \\\bot \\\| \\\angle \\\triangle
\\\backslash \\\forall \\\exists \\\neg \\\flat \\\natural \\\sharp
\\\clubsuit \\\diamondsuit \\\heartsuit \\\spadesuit \\! \\? \\. \\|
\\/ \\` \\@ \\"
$\par
}
% Test the various styles of digits.
\def\digittest{Digits: $0123456789$, $\oldstyle 0123456789$\par}
% Test large operators.
\def\largeoptrial{Large operators: $
\\\sum \\\prod \\\coprod \\\int \\\oint \\\bigcap \\\bigcup
\\\bigsqcup \\\bigvee \\\bigwedge \\\bigodot \\\bigotimes \\\bigoplus
\\\biguplus
$\par
}
% Binary operators.
\def\binoptrial{Binary operators: $
\\\pm \\\cap \\\vee \\\mp \\\cup \\\wedge \\\setminus \\\uplus
\\\oplus \\\cdot \\\sqcap \\\ominus \\\times \\\sqcup \\\otimes \\\ast
\\\triangleleft \\\oslash \\\star \\\triangleright \\\odot \\\diamond
\\\wr \\\dagger \\\circ \\\bigcirc \\\ddagger \\\bullet
\\\bigtriangleup \\\amalg \\\div \\\bigtriangledown \\* \\+ \\-
$\par
}
% \bmod and \pmod, from p.164 of the TeXbook.
\def\modtest{Mod:
$\gcd(m,n) = \gcd(n,m \bmod n)$, and
$x\equiv y+1 \pmod{m^2}$.
\par
}
% Relations.
\def\relationtrial{Relations: $
\\\leq \\\geq \\\equiv \\\prec \\\succ \\\approx \\\preceq \\\succeq
\\\asymp \\\subset \\\supset \\\sim \\\subseteq
\\\supseteq \\\simeq \\\sqsubseteq \\\sqsupseteq
\\\cong \\\in \\\ni \\\vdash \\\models
\\\parallel \\= \\< \\> \\\mid \\\propto \\\ll \\\gg
\\\bowtie \\\dashv \\\smile \\\frown \\\doteq \\\perp \\:
% \\\ne
$\par
}
% Negated relations (for LucidaBright test to use actual composite chars)
\def\modrelationtrial{Relations: $
\\\notleq \\\notgeq \\\notequiv \\\notprec \\\notsucc \\\notapprox
\\\notpreceq \\\notsucceq
\\\notasymp \\\notsubset \\\notsupset \\\notsim \\\notsubseteq
\\\notsupseteq \\\notsimeq \\\notsqsubseteq \\\notsqsupseteq
\\\notcong \\\notin \\\notni \\\notvdash \\\notmodels
\\\notparallel \\\noteq \\\notless \\\notgreater \\{\notmid}
% no compound character available for the following
\\{\not\propto} \\{\not\ll} \\{\not\gg}
\\{\not\bowtie} \\{\not\dashv} \\{\not\smile} \\{\not\frown}
\\{\not\doteq} \\{\not\perp}
% \\{\not:} \\{\not\ne}
$\par
}
% Negated relations (version for CM)
\def\negrelationtrial{Negated \begingroup
\let\temp = \\%
\def\\##1{\temp{\not##1}}%
\let\par = \relax
\relationtrial
$\temp\notin$
\endgraf
\endgroup}
% Negated relations (modified for LucidaBright)
\def\negrelationtrial{Negated \begingroup
\let\temp = \\%
\def\\##1{\temp{##1}}%
\let\par = \relax
\modrelationtrial
$\temp\notin$
\endgraf
\endgroup}
% Arrows.
\def\arrowtrial{Arrows: $
\\\leftarrow \\\longleftarrow \\\uparrow \\\Leftarrow \\\Longleftarrow
\\\Uparrow \\\rightarrow \\\longrightarrow \\\downarrow \\\Rightarrow
\\\Longrightarrow \\\Downarrow \\\leftrightarrow \\\longleftrightarrow
\\\updownarrow \\\Leftrightarrow \\\Longleftrightarrow \\\Updownarrow
\\\mapsto \\\longmapsto \\\nearrow \\\hookleftarrow \\\hookrightarrow
\\\searrow \\\leftharpoonup \\\rightharpoonup \\\swarrow
\\\leftharpoondown \\\rightharpoondown \\\nwarrow \\\rightleftharpoons
$\par
}
% \buildrel.
\def\buildreltest{Buildrel:
$\buildrel \alpha\beta \over \longrightarrow$, and
$\buildrel \rm def \over =$.
% , and
% $\defineequal$. % only in lcdbright
\par
}
% Delimiters are more complicated, since we want to see them grow. This
% code is from the Metafontbook, the end of Appendix H.
\let\interitem = .
\newcount\delimpaircount
\def\testdelimpair#1#2{%
\Bigggl{#1}\interitem
\bigggl{#1}\interitem
\Biggl{#1}\interitem
\biggl{#1}\interitem
\Bigl{#1}\interitem
\bigl{#1}\interitem
\left#1 \bullet
\right#2\interitem
\bigr{#2}\interitem
\Bigr{#2}\interitem
\biggr{#2}\interitem
\Biggr{#2}\interitem
\bigggr{#2}\interitem
\Bigggr{#2}%
\advance\delimpaircount by 1
\ifodd\delimpaircount \hfil \else \expandafter \foo \fi
}
\def\foo{\cr}
\def\delimtest{Delimiters: $$\displaylines{\delimpaircount = 0
\testdelimpair ()
\testdelimpair \lbrack\rbrack
\testdelimpair \lgroup\rgroup
\testdelimpair \lmoustache\rmoustache
\testdelimpair \vert\Vert
\testdelimpair \arrowvert\Arrowvert
\testdelimpair \uparrow\downarrow
\testdelimpair \updownarrow\Updownarrow
\testdelimpair \Uparrow\Downarrow
\testdelimpair \bracevert{\delimiter"342}
\testdelimpair \backslash/
\testdelimpair \langle\rangle
\testdelimpair \lbrace\rbrace
\testdelimpair \lceil\rceil
\testdelimpair \lfloor\rfloor
\testdelimpair \ldbrack\rdbrack
\crcr
}$$
%
% Throw in square roots, too, as long as we're here.
$$\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{-1}}}}}}}}}$$
}
% Punctuation.
\def\puncttest{Punctuation:
$f\colon A\rightarrow B$,
$L(a, b; c\colon x, y;z)$,
$a.b : c, d$,
\dots, and $x_1 + \cdots + x_n$,
don't forget $f(x_1, \ldots, x_n)$.
\par
}
% Test fractions.
\def\fractiontrial{Fractions: $
\\\over
\\\atop
\\\choose
\\{\above.5pt}
\\{\overwithdelims<>}
\\{\atopwithdelims[]}
\\{\abovewithdelims\lbrace\rbrace1pt}
$\par
}
% Test roots.
\def\roottest{Roots:
$\sqrt{2i}$,
$\root 3 \of 2$,
$\root n \of {x^n + y^n}$,
$\sqrt{\mathstrut a} + \sqrt{\mathstrut d} + \sqrt{\mathstrut y}$,
and $\root n+1 \of Q$.
\par
}
% Test various fills.
\def\filltrial{Filling: $
\\\overline \\\underline \\\widehat
\\\widetilde \\\overbrace \\\underbrace
$\par
}
% Test accents.
\def\accenttrial{Accents: $
\let\ii = \imath
\let\jj = \jmath
\\\hat \\\check \\\tilde \\\acute \\\grave \\\dot \\\ddot \\\breve
\\\bar \\\vec
$\par
}
% Challenges, from pp.180-182 of the TeXbook.
\def\challenge{
$n^{\rm th}$ root
% \bf omitted here, since we're not trying to test bold.
% ${S^{\rm-1}TS=dg}(\omega_1,\ldots,\omega_n) =\Lambda$
% no bold face \Lambda ...
${\bf S^{\rm-1}TS=dg}(\omega_1,\ldots,\omega_n) =\Lambda$
$\Pr(\,m=n\mid m+n=3\,)$
$\sin18^\circ={1\over4}(\sqrt5-1)$
$k=1.38\times10^{-16}\rm\,erg/^\circ K$
$\bar\Phi\subset NL_1^*/N=\bar L_1^*
\subseteq\cdots\subseteq NL_n^*/N=\bar L_n^*$
$I(\lambda)=\int\!\!\int_Dg(x,y)e^{i\lambda h(x,y)}\,dx\,dy$
$\int_0^1\!\cdots\int_0^1f(x_1,\ldots,x_n)\,dx_1\ldots\,dx_n$
$$x_{2m}\equiv\cases{Q(X_m^2-P_2W_m^2)-2S^2&($m$ odd)\cr
\noalign{\vskip2pt} % spread the lines apart a little
P_2^2(X_m^2-P_2W_m^2)-2S^2&($m$ even)\cr}\pmod N.$$
$$(1+x_1z+x_1^2z^2+\cdots\,)\ldots(1+x_nz+x_n^2z^2+\cdots\,)
={1\over(1-x_1z)\ldots(1-x_nz)}.$$
$$\prod_{j\ge0}\biggl(\sum_{k\ge0}a_{jk}z^k\biggr)
=\sum_{n\ge0}z^n\,\Biggl(\sum_
{\scriptstyle k_0,k_1,\ldots\ge0\atop
\scriptstyle k_0+k_1+\cdots=n}
a_{0k_0}a_{1k_1}\ldots\,\Biggr).$$
$${(n_1+n_2+\cdots+n_m)!\over n_1!\,n_2!\ldots n_m!}
={n_1+n_2\choose n_2}{n_1+n_2+n_3\choose n_3}
\ldots{n_1+n_2+\cdots+n_m\choose n_m}.$$
$$\def\\##1##2{(1-q^{##1_##2+n})} % to save typing
\Pi_R{a_1,a_2,\ldots,a_M\atopwithdelims[]b_1,b_2,\ldots,b_N}
=\prod_{n=0}^R{\\a1\\a2\ldots\\aM\over\\b1\\b2\ldots\\bN}.$$
$$\sum_{p\rm\;prime}f(p)=\int_{t>1}f(t)\,d\pi(t).$$
$$\{\underbrace{\overbrace{\mathstrut a,\ldots,a}
^{k\;a\mathchar`'\rm s},
\overbrace{\mathstrut b,\ldots,b}
^{l\;b\mathchar`'\rm s}}_{k+l\rm\;elements}\}.$$
$$\pmatrix{\pmatrix{a&b\cr c&d\cr}&
\pmatrix{e&f\cr g&h\cr}\cr
\noalign{\smallskip}
0&\pmatrix{i&j\cr k&l\cr}\cr}.$$
$$\det\left|\,\matrix{
c_0&c_1\hfill&c_2\hfill&\ldots&c_n\hfill\cr
c_1&c_2\hfill&c_3\hfill&\ldots&c_{n+1}\hfill\cr
c_2&c_3\hfill&c_4\hfill&\ldots&c_{n+2}\hfill\cr
\,\vdots\hfill&\,\vdots\hfill&
\,\vdots\hfill&&\,\vdots\hfill\cr
c_n&c_{n+1}\hfill&c_{n+2}\hfill&\ldots&c_{2n}\hfill\cr
}\right|>0.$$
$$\mathop{{\sum}'}_{x\in A}f(x)\mathrel{\mathop=^{\rm def}}
\sum_{\scriptstyle x\in A\atop\scriptstyle x\ne0}f(x).$$
$$2\uparrow\uparrow k\mathrel{\mathop=^{\rm def}}
2^{2^{2^{\cdot^{\cdot^{\cdot^2}}}}}
\vbox{\hbox{$\Big\}\scriptstyle k$}\kern0pt}.$$
$$\def\normalbaselines{\baselineskip20pt
\lineskip3pt \lineskiplimit3pt }
\def\mapright##1{\smash{
\mathop{\longrightarrow}\limits^{##1}}}
\def\mapdown##1{\Big\downarrow
\rlap{$\vcenter{\hbox{$\scriptstyle##1$}}$}}
\matrix{&&&&&&0\cr
&&&&&&\mapdown{}\cr
0&\mapright{}&{\cal O}_C&\mapright\iota&
\cal E&\mapright\rho&\cal L&\mapright{}&0\cr
&&\Big\Vert&&\mapdown\phi&&\mapdown\psi\cr
0&\mapright{}&{\cal O}_C&\mapright{}&
\pi_*{\cal O}_D&\mapright\delta&
R^1f_*{\cal O}_V(-D)&\mapright{}&0\cr
&&&&&&\mapdown{\theta_i\otimes\gamma^{-1}}\cr
&&&&&&\hidewidth R^1f_*\bigl({\cal O}
_V(-iM)\bigr)\otimes\gamma^{-1}\hidewidth\cr
&&&&&&\mapdown{}\cr
&&&&&&0\cr}$$
}
% We need the calligraphic capitals available via a control sequence.
\def\scriptA{{\cal A}} \def\scriptN{{\cal N}}
\def\scriptB{{\cal B}} \def\scriptO{{\cal O}}
\def\scriptC{{\cal C}} \def\scriptP{{\cal P}}
\def\scriptD{{\cal D}} \def\scriptQ{{\cal Q}}
\def\scriptE{{\cal E}} \def\scriptR{{\cal R}}
\def\scriptF{{\cal F}} \def\scriptS{{\cal S}}
\def\scriptG{{\cal G}} \def\scriptT{{\cal T}}
\def\scriptH{{\cal H}} \def\scriptU{{\cal U}}
\def\scriptI{{\cal I}} \def\scriptV{{\cal V}}
\def\scriptJ{{\cal J}} \def\scriptW{{\cal W}}
\def\scriptK{{\cal K}} \def\scriptX{{\cal X}}
\def\scriptL{{\cal L}} \def\scriptY{{\cal Y}}
\def\scriptM{{\cal M}} \def\scriptZ{{\cal Z}}
% Ordinarily, use the normal letters.
\let\ii = i
\let\jj = j
% Run #1 in each of the four main styles.
\def\styletest#1{\begingroup
(Display style) \everymath = {\displaystyle}#1%
(Text style) \everymath = {\textstyle}#1%
(Script style) \everymath = {\scriptstyle}#1%
(Scriptscript style) \everymath = {\scriptscriptstyle}#1%
\endgroup}
\def\printparam#1{%
$\hbox{\tt #1} = \hbox{\rm \expandafter\the\csname #1\endcsname}$%
}
\def\interspace{\allowbreak\hskip 1em plus.5em minus.5em}
% Run the tests.
\centerline{\bf This is a torture test for math fonts.}
\vskip .1in
\noindent
Testing with \printparam{thinmuskip}, \printparam{medmuskip},
\printparam{thickmuskip}, \printparam{scriptspace},
\printparam{delimitershortfall}, \printparam{delimiterfactor},
\printparam{mathsurround}, \printparam{nulldelimiterspace}.
\def\\#1{-#1'}\lettertrial
\def\\#1{\allowbreak\quad#1x}\miscordtrial
\styletest\digittest
% Tests the large operators first in text size, then display size.
\def\\#1{#1^a_b B\interspace}\largeoptrial
\def\\#1{\displaystyle #1^b_a B \interspace}\largeoptrial
\def\\#1{A#1x\allowbreak\quad}\binoptrial
\styletest\modtest
\def\\#1{x#1A\allowbreak\quad}\relationtrial
\def\\#1{y#1B\allowbreak\quad}\negrelationtrial
\def\\#1{B#1y\allowbreak\quad}\arrowtrial
\newpage % \vskip .25in % try and force page break ...
\styletest\buildreltest
\delimtest
\styletest\puncttest
\def\\#1{{Z #1 W}\interspace}\fractiontrial
\def\\#1{{g #1 d}\interspace}\fractiontrial
\def\\#1{{b #1 a}\interspace}\fractiontrial
\newpage % \vskip .25in % try and force page break ...
\styletest\roottest
\def\\#1{#1{o}\interspace}\filltrial
\def\\#1{#1{A + \cdots - Q - \cdots + g}\interspace}\filltrial
\def\\#1{- #1A + #1q}\accenttrial
% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%%
%% recent additions:
% extra stuff from mathtest
$
\hat{A}\hat{B}\hat{C}\hat{D}\hat{E}\hat{F}\hat{G}\hat{H}
\hat{I}\hat{J}\hat{K}\hat{L}\hat{M}\hat{N}\hat{O}\hat{P}
\hat{Q}\hat{R}\hat{S}\hat{T}\hat{U}\hat{V}\hat{W}\hat{X}
\hat{Y}\hat{Z}
%
\quad
%
\hat{a}\hat{b}\hat{c}\hat{d}\hat{e}\hat{f}\hat{g}\hat{h}
\hat{i}\hat{j}\hat{k}\hat{l}\hat{m}\hat{n}\hat{o}\hat{p}
\hat{q}\hat{r}\hat{s}\hat{t}\hat{u}\hat{v}\hat{w}\hat{x}
\hat{y}\hat{z}
$
% Define uppercase Greek italic to use the math italic font.
\mathchardef\varGamma="100 \mathchardef\varDelta="101
\mathchardef\varTheta="102 \mathchardef\varLambda="103 \mathchardef\varXi="104
\mathchardef\varPi="105 \mathchardef\varSigma="106 \mathchardef\varUpsilon="107
\mathchardef\varPhi="108 \mathchardef\varPsi="109 \mathchardef\varOmega="10A
% Upright uppercase Greek is actually in LBR
$
\hat{\Gamma}\hat{\Delta}\hat{\Theta}\hat{\Lambda}\hat{\Xi}\hat{\Pi}
\hat{\Sigma}\hat{\Upsilon}\hat{\Phi}\hat{\Psi}\hat{\Omega}
%
\quad
%
\hat{\varGamma}\hat{\varDelta}\hat{\varTheta}\hat{\varLambda}\hat{\varXi}\hat{\varPi}
\hat{\varSigma}\hat{\varUpsilon}\hat{\varPhi}\hat{\varPsi}\hat{\varOmega}
$
$
\hat{\alpha}\hat{\beta}\hat{\gamma}\hat{\delta}\hat{\epsilon}\hat{\zeta}
\hat{\eta}\hat{\theta}\hat{\iota}\hat{\kappa}\hat{\lambda}\hat{\mu}\hat{\nu}
\hat{\xi}\hat{\pi}\hat{\rho}\hat{\sigma}\hat{\tau}\hat{\upsilon}\hat{\phi}
\hat{\chi}\hat{\psi}\hat{\omega}\hat{\varepsilon}\hat{\vartheta}\hat{\varpi}
\hat{\varrho}\hat{\varsigma}\hat{\varphi}
%
\quad
%
\hat{\partial}\hat{\ell}\hat{\imath}\hat{\jmath}\hat{\wp}
$
$
\hat{{\cal A}}\hat{{\cal B}}\hat{{\cal C}}\hat{{\cal D}}\hat{{\cal E}}
\hat{{\cal F}}\hat{{\cal G}}\hat{{\cal H}}\hat{{\cal I}}\hat{{\cal J}}
\hat{{\cal K}}\hat{{\cal L}}\hat{{\cal M}}\hat{{\cal N}}\hat{{\cal O}}
\hat{{\cal P}}\hat{{\cal Q}}\hat{{\cal R}}\hat{{\cal S}}\hat{{\cal T}}
\hat{{\cal U}}\hat{{\cal V}}\hat{{\cal W}}\hat{{\cal X}}\hat{{\cal Y}}
\hat{{\cal Z}}
$
% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%%
%% extra random stuff added from TeX book
% page 133
$x + y - z$, \quad $x + y * z$, \quad $z * y / z$, \quad
$(x+y)(x-y) = x^2 - y^2$,
$x \times y \cdot z = [x\, y\, z]$, \quad $x\circ y \bullet z$, \quad
$x\cup y \cap z$, \quad $x\sqcup y \sqcap z$, \quad
$x \vee y \wedge z$, \quad $x\pm y\mp z$, \quad
$x=y/z$, \quad $x:=y$, \quad $x\le y \ne z$, \quad $x \sim y \simeq z$
$x \equiv y \notequiv z$, \quad $x\subset y \subseteq z$
$\sin2\theta=2\sin\theta\cos\theta$, \quad
$\hbox{O}(n\log n\log n)$, \quad
$\Pr(X>x)=\exp(-x/\mu)$,
$\bigl(x\in A(n)\bigm|x\in B(n)\bigr)$, \quad
$\bigcup_n X_n\bigm\|\bigcap_n Y_n$
% page 178
In text matrices $1\,1\choose0\,1$ and $\bigl({a\atop 1}{b\atop m}{c\atop n}\bigr)$
% page 142
$$a_0+{1\over\displaystyle a_1 +
{\strut 1\over\displaystyle a_2 +
{\strut 1\over\displaystyle a_3 +
{\strut 1\over\displaystyle a_4}}}}$$
% page 143
$${p \choose 2}x^2y^{p-2} - {1\over 1 - x}{1 \over 1 - x^2}
=
{a+1\over b}\bigg/{c+1\over d}.$$
%% page 145
$$\sqrt{1+\sqrt{1+\sqrt{1+\sqrt{1+\sqrt{1+x}}}}}$$
%% page 147
$$\left({\partial^2\over\partial x^2} + {\partial^2\over\partial y^2}\right)
\bigl|\varphi(x+iy)\bigr|^2=0$$
%% page 149
% $$\pi(n)=\sum_{m=2}^n\left\lfloor\biggl(\sum_{k=1}^{m-1}\bigl
% \lfloor(m/k)\big/\lceil m/k\rceil\bigr\rfloor\biggr)^{-1}\right\rfloor.$$
$$\pi(n)=\sum_{m=2}^n\left\lfloor\Biggl(\sum_{k=1}^{m-1}\bigl
\lfloor(m/k)\big/\lceil m/k\rceil\bigr\rfloor\Biggr)^{-1}\right\rfloor.$$
% page 168
$$\int_0^\infty {t - i b\over t^2 + b^2}e^{iat}\,dt=e^{ab}E_1(ab), \quad
a,b > 0.$$
% page 176
$$A = \left(\matrix{x-\lambda&1&0\cr
0&x-\lambda&1\cr
0&0&x-\lambda\cr}\right).$$
$$\left\lgroup\matrix{a&b&c\cr d&e&f\cr}\right\rgroup
\left\lgroup\matrix{u&x\cr v&y\cr w&z\cr}\right\rgroup$$
% page 177
$$A = \pmatrix{a_{11}&a_{12}&\ldots&a_{1n}\cr
a_{21}&a_{22}&\ldots&a_{2n}\cr
\vdots&\vdots&\ddots&\vdots\cr
a_{m1}&a_{m2}&\ldots&a_{mn}\cr}$$
$$M=\bordermatrix{&C&I&C'\cr
C&1&0&0\cr I&b&1-b&0\cr C'&0&a&1-a\cr}$$
%% page 186
$$\sum_{n=0}^\infty a_nz^n\qquad\hbox{converges if}\qquad
|z|<\Bigl(\limsup_{n\to\infty}\root n\!\of{|a_n|}\,\Bigr)^{-1}.$$
$${f(x+\Delta x)-f(x)\over\Delta x}\to f'(x)
\qquad \hbox{as $\Delta x\to0$.}$$
$$\|u_i\|=1,\qquad u_i\cdot u_j=0\quad\hbox{if $i\ne j$.}$$
%% page 191
$$\it\hbox{The confluent image of}\quad\left\{
\matrix{\hbox{an arc}\hfill\cr\hbox{a circle}\hfill\cr
\hbox{a fan}\hfill\cr}
\right\}\quad\hbox{is}\quad\left\{
\matrix{\hbox{an arc}\hfill\cr
\hbox{an arc or a circle}\hfill\cr
\hbox{a fan or an arc}\hfill\cr}\right\}.$$
%% page 191
$$\eqalign{T(n)\le T(2^{\lceil\lg n\rceil})
&\le c(3^{\lceil\lg n\rceil}-2^{\lceil\lg n\rceil})\cr
&<3c\cdot3^{\lg n}\cr
&=3c\,n^{\lg3}.\cr}$$
$$\left\{
\eqalign{\alpha&=f(z)\cr \beta&=f(z^2)\cr \gamma&=f(z^3)\cr}
\right\}
\qquad
\left\{
\eqalign{x&=\alpha^2-\beta\cr y&=2\gamma\cr}\right\}.$$
%% page 192
$$\eqalignno{
(x+y)(x-y)&=x^2-xy+yx-y^2;&(3)\cr
&=x^2-y^2;&(4)\cr
(x+y)^2&=x^2+2xy+y^2.&(5)\cr}$$
%% page 192
$$\eqalignno{
\biggl(\int_{-\infty}^\infty e^{-x^2}\,dx\biggr)^2
&=\int_{-\infty}^\infty\int_{-\infty}^\infty e^{-(x^2+y^2)}\,dx\,dy\cr
&=\int_0^{2\pi}\int_0^\infty e^{-r^2}\,dr\,d\theta\cr
&=\int_0^{2\pi}\biggl(-{e^{-r^2}\over2}
\biggl|_{r=0}^{r=\infty}\,\biggr)\,d\theta\cr
&=\pi.&(11)\cr}$$
%% page 197
$$\prod_{k\ge0}{1\over(1-q^kz)}=
\sum_{n\ge0}z^n\bigg/\!\!\prod_{1\le k\le n}(1-q^k).$$
$$\sum_{\scriptstyle0< i\le m\atop\scriptstyle0<j\le n}p(i,j) \,\ne
%
% $$\sum_{i=1}^p \sum_{j=1}^q \sum_{k=1}^r a_{ij} b_{jk} c_{ki}$$
%
\sum_{i=1}^p \sum_{j=1}^q \sum_{k=1}^r a_{ij} b_{jk} c_{ki} \,\ne
%
\sum_{{\scriptstyle 1\le i\le p \atop \scriptstyle 1\le j\le q}
\atop \scriptstyle 1\le k\le r} a_{ij} b_{jk} c_{ki}$$
$$\max_{1\le n\le m}\log_2P_n \quad \hbox{and} \quad
\lim_{x\to0}{\sin x\over x}=1$$
$$p_1(n)=\lim_{m\to\infty}\sum_{\nu=0}^\infty\bigl(1-\cos^{2m}(\nu!^n\pi/n)\bigr)$$
%% new extra stuff imported from math test
$$\widehat{s}, \widehat{ss}, \widehat{sss}, \widehat{ssss},
\widehat{sssss},
%
\widehat{f}, \widehat{ff}, \widehat{fff}, \widehat{ffff},
\widehat{fffff}$$
$$\widetilde{s}, \widetilde{ss}, \widetilde{sss}, \widetilde{ssss},
\widetilde{sssss},
%
\widetilde{f}, \widetilde{ff}, \widetilde{fff}, \widetilde{ffff},
\widetilde{fffff}$$
% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%%
$$
\midint f(x) \, dx \quad
\bigg\largeint f(x) \, dx \quad
\Bigg\largeint f(x) \, dx \quad
\biggg\largeint f(x) \, dx \quad
\Biggg\largeint f(x) \, dx $$
% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%%
$$\int_0^1f(x)\,dx={\sqrt{3}\over2} \neq {\sqrt{2\pi}\over\sqrt{3}}$$
% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%%
$$\sqrt{x}, \sqrt{\pi}, \sqrt{x^2}, \sqrt{{a \over b}},
\sqrt{{a^2+b^2\over a^2 -b^2}},
\sqrt{\sum_{i \neq j}^{n < m}{a^2+b^2\over a^2 -b^2}}
$$
$${(x+10y)(x-10y)\over x^2-100y^2} = 1 + {a+{x\over y}+c \over 2 + {5^2\over\epsilon_2}-9}$$
$$30^{\circ}, 60^{\circ}, 90^{\circ}, 120^{\circ}$$
$$\sum_{i=1}^{n} \int_0^x f(x)\,dx = \root n+1\of{a^n+b^n}
= {\pi\over 2}$$
$$\overbrace{x+y} = \underbrace{x+y} = x_{n-2}^{i}$$
$$\overline{x+y} = \underline{x+y} = x_n^{-2}$$
$$\left( \left( \left( \left( \left( \left( \left( x
\right)^2 \right)^2 \right)^2 \right)^2 \right)^2 \right)^2 \right)^2
\quad \quad
\left[ \left[ \left[ \left[ \left[ \left[ \left[ x
\right]^2 \right]^2 \right]^2 \right]^2 \right]^2 \right]^2 \right]^2$$
$$\pmatrix{
A&B&C&D&E&F\cr
G&H&H&I&J&K\cr
L&M&N&O&P&Q\cr
R&S&T&U&V&W\cr} =
\left[\matrix{
A&B&C&D&E&F\cr
G&H&H&I&J&K\cr
L&M&N&O&P&Q\cr
R&S&T&U&V&W\cr}\right].
$$
$$\pmatrix{\pmatrix{\pmatrix{a&b\cr c&d\cr}&
\pmatrix{e&f\cr g&h\cr}\cr
\noalign{\smallskip}
0&\pmatrix{i&j\cr k&l\cr}\cr}&
\pmatrix{\pmatrix{a&b\cr c&d\cr}&
\pmatrix{e&f\cr g&h\cr}\cr
\noalign{\smallskip}
0&\pmatrix{i&j\cr k&l\cr}\cr}\cr
\pmatrix{\pmatrix{a&b\cr c&d\cr}&
\pmatrix{e&f\cr g&h\cr}\cr
\noalign{\smallskip}
0&\pmatrix{i&j\cr k&l\cr}\cr}&
\pmatrix{\pmatrix{a&b\cr c&d\cr}&
\pmatrix{e&f\cr g&h\cr}\cr
\noalign{\smallskip}
0&\pmatrix{i&j\cr k&l\cr}\cr}\cr}.$$
% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% %%%
\challenge
\vskip .25in % \vskip 0.5in
%% Texture
$$\hbox to \hsize{\cleaders\vbox to .5in{\cleaders\hbox{\TeX}\vfil}\hfil}$$
\bye
% Y&Y, Inc. 106 Indian Hill, Carlisle, MA 01741 (508) 371-3286
================================================
FILE: tagrelease.lua
================================================
#!/usr/bin/env texlua
changeslisting = nil
do
local f = assert(io.open("CHANGES.md", "r"))
changeslisting = f:read("*all")
f:close()
end
currentchanges = string.match(changeslisting,"(## %S+ %(.-%).-)%s*## %S+ %(.-%)")
do
local f = assert(io.open("CHANGES-NEW.md", "w"))
f:write(currentchanges)
f:close()
end
changeslisting = nil
do
local f = assert(io.open("CHANGES-NEW.md", "r"))
changeslisting = f:read("*all")
f:close()
end
print("******************")
print(changeslisting)
print("******************")
pkgversion = string.match(changeslisting,"## (%S+) %(.-%)")
print('Current version: '..pkgversion)
print('Current tag:')
os.execute('git tag --contains | head -n1')
gitcmd = 'git tag -a \''..pkgversion..'\' -F CHANGES-NEW.md'
print('Tag command: "'..gitcmd..'"')
os.execute(gitcmd)
os.execute('rm CHANGES-NEW.md')
================================================
FILE: testfiles/aaa-loading.luatex.tlg
================================================
This is a generated file for the l3build validation system.
Don't change this file in any respect.
No log output; test loading only.
Completed box being shipped out [2]
\hbox(0.0+0.0)x0.0, direction TLT
.\mathon
.\TU/latinmodern-math.otf(1)/m/n/10 𝑎
.\glue(\thickmuskip) 2.77771 plus 2.77771
.\TU/latinmodern-math.otf(1)/m/n/10 =
.\glue(\thickmuskip) 2.77771 plus 2.77771
.\TU/latinmodern-math.otf(1)/m/n/10 𝛼
.\mathoff
***************
Compilation 1 of test file completed with exit status 0
================================================
FILE: testfiles/aaa-loading.lvt
================================================
\input{umtest-preamble}
%\START\TIMO % this line is here so I can uncomment it to debug CI errors
\usepackage{unicode-math}
\setmathfont{latinmodern-math.otf}
\begin{document}
\MSG{No log output; test loading only.}
\SHIPOUT{$a=\alpha$}
\end{document}
================================================
FILE: testfiles/aaa-loading.tlg
================================================
This is a generated file for the l3build validation system.
Don't change this file in any respect.
No log output; test loading only.
Completed box being shipped out [2]
\hbox(0.0+0.0)x0.0
.\mathon
.\TU/latinmodern-math.otf(1)/m/n/10 glyph#1296
.\glue(\thickmuskip) 2.77802 plus 2.77802
.\TU/latinmodern-math.otf(1)/m/n/10 glyph#30
.\glue(\thickmuskip) 2.77802 plus 2.77802
.\TU/latinmodern-math.otf(1)/m/n/10 glyph#4459
.\mathoff
***************
Compilation 1 of test file completed with exit status 0
================================================
FILE: testfiles/aaa-sym.luatex.tlg
================================================
This is a generated file for the l3build validation system.
Don't change this file in any respect.
***************
Compilation 1 of test file completed with exit status 0
================================================
FILE: testfiles/aaa-sym.lvt
================================================
\input{umtest-preamble}
\usepackage{amsmath}
\usepackage{unicode-math}
\begin{document}
$\symbf{A}$
$\symsf{A}$
$\symbb{A}$
\end{document}
================================================
FILE: testfiles/aaa-sym.tlg
================================================
This is a generated file for the l3build validation system.
Don't change this file in any respect.
***************
Compilation 1 of test file completed with exit status 0
================================================
FILE: testfiles/active-frac.luatex.tlg
================================================
This is a generated file for the l3build validation system.
Don't change this file in any respect.
NORMALSIZE
Completed box being shipped out [2]
\hbox(0.0+0.0)x0.0, direction TLT
.\mathon
.\hbox(8.588+3.45)x6.383, direction TLT
..\hbox(8.588+3.45)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.45)x3.983, direction TLT
....\hbox(4.648+0.0)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 1
....\kern1.24 (font)
....\rule(0.4+0.0)x*
....\kern1.032 (font)
....\hbox(4.718+0.0)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 4
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.588+3.45)x6.383, direction TLT
..\hbox(8.588+3.45)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.45)x3.983, direction TLT
....\hbox(4.648+0.0)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 1
....\kern1.24 (font)
....\rule(0.4+0.0)x*
....\kern1.102 (font)
....\hbox(4.648+0.0)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 2
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.588+3.45)x6.383, direction TLT
..\hbox(8.588+3.45)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.45)x3.983, direction TLT
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 3
....\kern1.1 (font)
....\rule(0.4+0.0)x*
....\kern1.032 (font)
....\hbox(4.718+0.0)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 4
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.588+3.59)x6.383, direction TLT
..\hbox(8.588+3.59)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.59)x3.983, direction TLT
....\hbox(4.648+0.0)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 1
....\kern1.24 (font)
....\rule(0.4+0.0)x*
....\kern1.018 (font)
....\hbox(4.732+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 7
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.588+3.59)x6.383, direction TLT
..\hbox(8.588+3.59)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.59)x3.983, direction TLT
....\hbox(4.648+0.0)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 1
....\kern1.24 (font)
....\rule(0.4+0.0)x*
....\kern1.102 (font)
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 9
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.588+3.59)x10.366, direction TLT
..\hbox(8.588+3.59)x10.366, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.59)x7.966, direction TLT
....\hbox(4.648+0.0)x7.966, glue set 1.9915fil, direction TLT
.....\glue 0.0 plus 1.0fil minus 1.0fil
.....\TU/latinmodern-math.otf(1)/m/n/7 1
.....\glue 0.0 plus 1.0fil minus 1.0fil
....\kern1.24 (font)
....\rule(0.4+0.0)x*
....\kern1.102 (font)
....\hbox(4.648+0.14)x7.966, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 1
.....\TU/latinmodern-math.otf(1)/m/n/7 0
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.588+3.59)x6.383, direction TLT
..\hbox(8.588+3.59)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.59)x3.983, direction TLT
....\hbox(4.648+0.0)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 1
....\kern1.24 (font)
....\rule(0.4+0.0)x*
....\kern1.102 (font)
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 3
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.588+3.59)x6.383, direction TLT
..\hbox(8.588+3.59)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.59)x3.983, direction TLT
....\hbox(4.648+0.0)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 2
....\kern1.24 (font)
....\rule(0.4+0.0)x*
....\kern1.102 (font)
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 3
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.588+3.59)x6.383, direction TLT
..\hbox(8.588+3.59)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.59)x3.983, direction TLT
....\hbox(4.648+0.0)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 1
....\kern1.24 (font)
....\rule(0.4+0.0)x*
....\kern1.102 (font)
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 5
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.588+3.59)x6.383, direction TLT
..\hbox(8.588+3.59)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.59)x3.983, direction TLT
....\hbox(4.648+0.0)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 2
....\kern1.24 (font)
....\rule(0.4+0.0)x*
....\kern1.102 (font)
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 5
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.588+3.59)x6.383, direction TLT
..\hbox(8.588+3.59)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.59)x3.983, direction TLT
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 3
....\kern1.1 (font)
....\rule(0.4+0.0)x*
....\kern1.102 (font)
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 5
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.658+3.59)x6.383, direction TLT
..\hbox(8.658+3.59)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.658+3.59)x3.983, direction TLT
....\hbox(4.718+0.0)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 4
....\kern1.24 (font)
....\rule(0.4+0.0)x*
....\kern1.102 (font)
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 5
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.588+3.59)x6.383, direction TLT
..\hbox(8.588+3.59)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.59)x3.983, direction TLT
....\hbox(4.648+0.0)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 1
....\kern1.24 (font)
....\rule(0.4+0.0)x*
....\kern1.102 (font)
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 6
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.588+3.59)x6.383, direction TLT
..\hbox(8.588+3.59)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.59)x3.983, direction TLT
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 5
....\kern1.1 (font)
....\rule(0.4+0.0)x*
....\kern1.102 (font)
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 6
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.588+3.59)x6.383, direction TLT
..\hbox(8.588+3.59)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.59)x3.983, direction TLT
....\hbox(4.648+0.0)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 1
....\kern1.24 (font)
....\rule(0.4+0.0)x*
....\kern1.102 (font)
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 8
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.588+3.59)x6.383, direction TLT
..\hbox(8.588+3.59)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.59)x3.983, direction TLT
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 3
....\kern1.1 (font)
....\rule(0.4+0.0)x*
....\kern1.102 (font)
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 8
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.588+3.59)x6.383, direction TLT
..\hbox(8.588+3.59)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.588+3.59)x3.983, direction TLT
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 5
....\kern1.1 (font)
....\rule(0.4+0.0)x*
....\kern1.102 (font)
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 8
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\hbox(8.672+3.59)x6.383, direction TLT
..\hbox(8.672+3.59)x6.383, direction TLT
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
...\vbox(8.672+3.59)x3.983, direction TLT
....\hbox(4.732+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 7
....\kern1.1 (font)
....\rule(0.4+0.0)x*
....\kern1.102 (font)
....\hbox(4.648+0.14)x3.983, direction TLT
.....\TU/latinmodern-math.otf(1)/m/n/7 8
...\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
.\mathoff
SMALL
Completed box being shipped out [2]
\hbox(0.0+0.0)x0.0, direction TLT
.\mathon
.\hbox(8.588+3.45)x6.383, direction TLT
..\hbox(8.588+3.45)x6.383, direction TLT
...\hbox(8.588+3.45)x6.383, direction TLT
....\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
....\vbox(8.588+3.45)x3.983, direction TLT
.....\hbox(4.648+0.0)x3.983, direction TLT
......\TU/latinmodern-math.otf(1)/m/n/7 1
.....\kern1.24 (font)
.....\rule(0.4+0.0)x*
.....\kern1.032 (font)
.....\hbox(4.718+0.0)x3.983, direction TLT
......\TU/latinmodern-math.otf(1)/m/
gitextract_bckax2lv/ ├── .github/ │ ├── CONTRIBUTING.md │ ├── ISSUE_TEMPLATE.md │ └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .travis.yml ├── CHANGES.md ├── COPYRIGHT ├── LICENSE ├── MANIFEST.md ├── README.md ├── RELEASE_CHECKLIST.md ├── _config.yml ├── autorelease.lua ├── build.lua ├── githooks/ │ ├── enable-githooks.sh │ └── post-commit ├── misc/ │ ├── amsmath-testmath.tex │ ├── stix-extract.sh │ └── torture.tex ├── tagrelease.lua ├── testfiles/ │ ├── aaa-loading.luatex.tlg │ ├── aaa-loading.lvt │ ├── aaa-loading.tlg │ ├── aaa-sym.luatex.tlg │ ├── aaa-sym.lvt │ ├── aaa-sym.tlg │ ├── active-frac.luatex.tlg │ ├── active-frac.lvt │ ├── active-frac.tlg │ ├── active-sscripts-amsmath.luatex.tlg │ ├── active-sscripts-amsmath.lvt │ ├── active-sscripts-amsmath.tlg │ ├── active-sscripts.luatex.tlg │ ├── active-sscripts.lvt │ ├── active-sscripts.tlg │ ├── alph-range-calscr.luatex.tlg │ ├── alph-range-calscr.lvt │ ├── alph-range-calscr.tlg │ ├── alph-range-fallback.luatex.tlg │ ├── alph-range-fallback.lvt │ ├── alph-range-fallback.tlg │ ├── alph-range-mapping.luatex.tlg │ ├── alph-range-mapping.lvt │ ├── alph-range-mapping.tlg │ ├── alph-range-sym-alph.luatex.tlg │ ├── alph-range-sym-alph.lvt │ ├── alph-range-sym-alph.tlg │ ├── alph-range-sym-range.luatex.tlg │ ├── alph-range-sym-range.lvt │ ├── alph-range-sym-range.tlg │ ├── alph-sym.luatex.tlg │ ├── alph-sym.lvt │ ├── alph-sym.tlg │ ├── ascii-catcodes.luatex.tlg │ ├── ascii-catcodes.lvt │ ├── ascii-catcodes.tlg │ ├── boldstyle-french.luatex.tlg │ ├── boldstyle-french.lvt │ ├── boldstyle-french.tlg │ ├── boldstyle-iso.luatex.tlg │ ├── boldstyle-iso.lvt │ ├── boldstyle-iso.tlg │ ├── boldstyle-literal.luatex.tlg │ ├── boldstyle-literal.lvt │ ├── boldstyle-literal.tlg │ ├── boldstyle-tex.luatex.tlg │ ├── boldstyle-tex.lvt │ ├── boldstyle-tex.tlg │ ├── boldstyle-upright.luatex.tlg │ ├── boldstyle-upright.lvt │ ├── boldstyle-upright.tlg │ ├── cal-scr-equivalence.luatex.tlg │ ├── cal-scr-equivalence.lvt │ ├── cal-scr-equivalence.xetex.tlg │ ├── cramped-style.luatex.tlg │ ├── cramped-style.lvt │ ├── cramped-style.tlg │ ├── fontname-log.luatex.tlg │ ├── fontname-log.lvt │ ├── fontname-log.tlg │ ├── hyperref-section.luatex.tlg │ ├── hyperref-section.lvt │ ├── hyperref-section.xetex.tlg │ ├── hyphen.luatex.tlg │ ├── hyphen.lvt │ ├── hyphen.tlg │ ├── input-fullwidth.luatex.tlg │ ├── input-fullwidth.lvt │ ├── input-fullwidth.tlg │ ├── lmdefault-mathrm-it-bf.luatex.tlg │ ├── lmdefault-mathrm-it-bf.lvt │ ├── lmdefault-mathrm-it-bf.tlg │ ├── mathit-symit-var.luatex.tlg │ ├── mathit-symit-var.lvt │ ├── mathit-symit-var.tlg │ ├── mathit-symit.luatex.tlg │ ├── mathit-symit.lvt │ ├── mathit-symit.tlg │ ├── mathoperator-mathbf.luatex.tlg │ ├── mathoperator-mathbf.lvt │ ├── mathoperator-mathbf.tlg │ ├── mathrm-mathcal-nest.luatex.tlg │ ├── mathrm-mathcal-nest.lvt │ ├── mathrm-mathcal-nest.tlg │ ├── mathrm-nobraces.luatex.tlg │ ├── mathrm-nobraces.lvt │ ├── mathrm-nobraces.tlg │ ├── mathsizes.luatex.tlg │ ├── mathsizes.lvt │ ├── mathsizes.tlg │ ├── mathstyle-french.luatex.tlg │ ├── mathstyle-french.lvt │ ├── mathstyle-french.tlg │ ├── mathstyle-iso.luatex.tlg │ ├── mathstyle-iso.lvt │ ├── mathstyle-iso.tlg │ ├── mathstyle-literal.luatex.tlg │ ├── mathstyle-literal.lvt │ ├── mathstyle-literal.tlg │ ├── mathstyle-tex.luatex.tlg │ ├── mathstyle-tex.lvt │ ├── mathstyle-tex.tlg │ ├── mathstyle-upright.luatex.tlg │ ├── mathstyle-upright.lvt │ ├── mathstyle-upright.tlg │ ├── nabla.luatex.tlg │ ├── nabla.lvt │ ├── nabla.tlg │ ├── nesting.luatex.tlg │ ├── nesting.lvt │ ├── nesting.tlg │ ├── not.luatex.tlg │ ├── not.lvt │ ├── not.tlg │ ├── operatorname.luatex.tlg │ ├── operatorname.lvt │ ├── operatorname.tlg │ ├── partial.luatex.tlg │ ├── partial.lvt │ ├── partial.tlg │ ├── radical-cuberoot-output.luatex.tlg │ ├── radical-cuberoot-output.lvt │ ├── radical-cuberoot-output.tlg │ ├── range-char-cmd.luatex.tlg │ ├── range-char-cmd.lvt │ ├── range-char-cmd.tlg │ ├── range-class.luatex.tlg │ ├── range-class.lvt │ ├── range-class.tlg │ ├── range-nabla-partial.luatex.tlg │ ├── range-nabla-partial.lvt │ ├── range-nabla-partial.tlg │ ├── range-up-num.luatex.tlg │ ├── range-up-num.lvt │ ├── range-up-num.tlg │ ├── setmathfontface.luatex.tlg │ ├── setmathfontface.lvt │ ├── setmathfontface.tlg │ ├── setmathsf.luatex.tlg │ ├── setmathsf.lvt │ ├── setmathsf.tlg │ ├── sqrt-amsmath-output.luatex.tlg │ ├── sqrt-amsmath-output.lvt │ ├── sqrt-amsmath-output.tlg │ ├── style-Bbbit.luatex.tlg │ ├── style-Bbbit.lvt │ ├── style-Bbbit.tlg │ ├── support/ │ │ └── umtest-preamble.tex │ ├── url.luatex.tlg │ ├── url.lvt │ └── url.tlg ├── testfiles-disabled/ │ ├── F-amsmath-subarray-1.lvt │ ├── F-amsmath-subarray-2.lvt │ ├── F-amsmath-subarray-3.lvt │ ├── F-amsmath-subarray-4.lvt │ ├── F-boldmath.lvt │ ├── F-longdivision.lvt │ ├── F-lrangle-chars.lvt │ ├── F-mathtools-overbracket.lvt │ ├── F-mathversion.lvt │ ├── F-negation.lvt │ ├── F-nolimits-spec.lvt │ ├── F-over-under.lvt │ ├── F-pkg-url.lvt │ ├── F-primes-1.lvt │ ├── F-primes-2.lvt │ ├── F-primes-back.lvt │ ├── F-query-mathstyle.lvt │ ├── F-range-prime-check.lvt │ ├── F-range-slots.lvt │ ├── F-range-style.lvt │ ├── F-range.lvt │ ├── F-slash-delim-2.lvt │ ├── F-sqrt-n.lvt │ ├── F-sqrt.lvt │ ├── F-sscript-features.lvt │ ├── F-stacked-accents.lvt │ ├── L-sscale-dimen.lvt │ ├── L601a.lvt │ ├── L601b.lvt │ ├── L601f.lvt │ ├── L602b.lvt │ ├── L603b.lvt │ ├── L604a.lvt │ ├── L604b.lvt │ ├── L650a.lvt │ ├── L650b.lvt │ ├── X002a.lvt │ ├── X002b.lvt │ ├── X002c.lvt │ ├── X002d.lvt │ ├── X002e.lvt │ ├── X003a.lvt │ ├── X003b.lvt │ ├── X003c.lvt │ ├── X003d.lvt │ ├── X003e.lvt │ ├── X003f.lvt │ ├── X003g.lvt │ ├── X003h.lvt │ ├── X003i.lvt │ ├── X003j.lvt │ ├── X003k.lvt │ ├── X003l.lvt │ ├── X003m.lvt │ ├── X003n.lvt │ ├── X003o.lvt │ ├── X003p.lvt │ ├── X004a.lvt │ ├── X004b.lvt │ ├── X004c.lvt │ ├── X004d.lvt │ ├── X004e.lvt │ ├── X004f.lvt │ ├── X005a.lvt │ ├── X005b.lvt │ ├── X005c.lvt │ ├── X005d.lvt │ ├── X005e.lvt │ ├── X005f.lvt │ ├── X005g.lvt │ ├── X005h.lvt │ ├── X005i.lvt │ ├── X005j.lvt │ ├── X005k.lvt │ ├── X005l.lvt │ ├── X010a.lvt │ ├── X010b.lvt │ ├── X010c.lvt │ ├── X010d.lvt │ ├── X011a.lvt │ ├── X011b.lvt │ ├── X012a.lvt │ ├── X012b.lvt │ ├── X013a.lvt │ ├── X013b.lvt │ ├── X013c.lvt │ ├── X013d.lvt │ ├── X014a.lvt │ ├── X014b.lvt │ ├── X014c.lvt │ ├── X015a.lvt │ ├── X015b.lvt │ ├── X016a.lvt │ ├── X016b.lvt │ ├── X016c.lvt │ ├── X017a.lvt │ ├── X017b.lvt │ ├── X017c.lvt │ ├── X017d.lvt │ ├── X018a.lvt │ ├── X018b.lvt │ ├── X019a.lvt │ ├── X019b.lvt │ ├── X020a.lvt │ ├── X020b.lvt │ ├── X021a.lvt │ ├── X021b.lvt │ ├── X030a.lvt │ ├── X031a.lvt │ ├── X031b.lvt │ ├── X031c.lvt │ ├── X032a.lvt │ ├── X032b.lvt │ ├── X032c.lvt │ ├── X101a.lvt │ ├── X102a.lvt │ ├── X150a.lvt │ ├── X202a.lvt │ ├── X202b.lvt │ ├── X203a.lvt │ ├── X206a.lvt │ ├── X206b.lvt │ ├── X206c.lvt │ ├── X401a.lvt │ ├── X502a.lvt │ ├── X502b.lvt │ ├── X503a.lvt │ ├── X601a.lvt │ ├── X601b.lvt │ ├── X601f.lvt │ ├── X604a.lvt │ ├── X604b.lvt │ ├── X610f.lvt │ ├── X620b.lvt │ ├── X650a.lvt │ ├── X650b.lvt │ ├── accents-arrows.luatex.tlg │ ├── accents-arrows.lvt │ ├── accents-arrows.xetex.tlg │ ├── accents-bottom.luatex.tlg │ ├── accents-bottom.lvt │ ├── accents-bottom.xetex.tlg │ ├── accents-wide.luatex.tlg │ ├── accents-wide.lvt │ ├── accents-wide.xetex.tlg │ ├── accents.luatex.tlg │ ├── accents.lvt │ ├── accents.xetex.tlg │ ├── fence-vert-all.luatex.tlg │ ├── fence-vert-all.lvt │ ├── fence-vert-all.xetex.tlg │ ├── fence-vert.luatex.tlg │ ├── fence-vert.lvt │ ├── fence-vert.xetex.tlg │ ├── fence-vvert.luatex.tlg │ ├── fence-vvert.lvt │ ├── fence-vvert.tlg │ ├── fence-vvert.xetex.tlg │ ├── fence-vvvert.luatex.tlg │ ├── fence-vvvert.lvt │ ├── fence-vvvert.xetex.tlg │ ├── leftright-brace.lvt │ ├── leftright-bracket.lvt │ ├── leftright-group.lvt │ ├── leftright-moustache.lvt │ ├── leftright-paren.lvt │ └── mathtext-nested.lvt ├── texlive.profile ├── texlive.sh ├── um-code-alphabets.dtx ├── um-code-amsmath.dtx ├── um-code-api.dtx ├── um-code-compat.dtx ├── um-code-epilogue.dtx ├── um-code-fontopt.dtx ├── um-code-fontparam.dtx ├── um-code-main.dtx ├── um-code-mathmap.dtx ├── um-code-mathtext.dtx ├── um-code-msg.dtx ├── um-code-opening.dtx ├── um-code-pkgopt.dtx ├── um-code-primes.dtx ├── um-code-setchar.dtx ├── um-code-sscript.dtx ├── um-code-sym-commands.dtx ├── um-code-ui.dtx ├── um-code-usv.dtx ├── um-code-variables.dtx ├── um-doc-legacyfontdimen.tex ├── um-doc-main.tex ├── um-doc-mathfontdimen.tex ├── um-doc-nfsssummary.tex ├── um-doc-stixextract.tex ├── um-doc-style.tex ├── unicode-math-code.ltx ├── unicode-math-table.tex ├── unicode-math.dtx ├── unicode-math.ins ├── unicode-math.ltx ├── unimath-example.ltx └── unimath-symbols.ltx
Condensed preview — 373 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,515K chars).
[
{
"path": ".github/CONTRIBUTING.md",
"chars": 3121,
"preview": "# Development guide for `unicode-math`\n\nThis document covers both guidelines for issues and pull requests and\nthe genera"
},
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 485,
"preview": "## Description\nA sentence or two describing the issue.\n\n## Add info or delete as appropriate:\n\n- Relevant for XeTeX\n- Re"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 517,
"preview": "## Status\n**READY/UNDER DEVELOPMENT/FOR DISCUSSION**\n\n## Description\nA few sentences describing the overall goals of the"
},
{
"path": ".gitignore",
"chars": 269,
"preview": "\nCHANGES-NEW.md\n\nbuild/\ntestfiles/*.pdf\noldtestfiles/*\ntestfiles snapshot/\ntestfiles to update/\ntidbits/\n\n*.sty\n*.pdf\n*."
},
{
"path": ".travis.yml",
"chars": 667,
"preview": "install:\n - source ./texlive.sh\n\ncache:\n directories:\n - /tmp/texlive\n\nbranches:\n except:\n - develop\n\nstages:\n - "
},
{
"path": "CHANGES.md",
"chars": 15831,
"preview": "CHANGE HISTORY\n==============\n\n## v0.8r (2023/08/13)\n\n * Revise definitions of `\\\\setminus` and `\\\\smallsetminus` (#181"
},
{
"path": "COPYRIGHT",
"chars": 640,
"preview": "%\n% ------------------------------------------------\n% The UNICODE-MATH package <wspr.io/unicode-math>\n% --------------"
},
{
"path": "LICENSE",
"chars": 19106,
"preview": "The LaTeX Project Public License\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\nLPPL Version 1.3c 2008-05-04\n\nCopyright 1999 2002-20"
},
{
"path": "MANIFEST.md",
"chars": 12391,
"preview": "# Manifest for unicode-math\n\nThis file is a listing of all files considered to be part of this package.\nIt is automatica"
},
{
"path": "README.md",
"chars": 4204,
"preview": "The UNICODE-MATH package\n========================\n\nThis package provides an implementation of Unicode/OpenType mathemati"
},
{
"path": "RELEASE_CHECKLIST.md",
"chars": 459,
"preview": "# UNICODE-MATH RELEASE CHECKLIST\n\n- [ ] Finish final changes on `working` branch\n- [ ] Ensure `CHANGES.md` is up-to-date"
},
{
"path": "_config.yml",
"chars": 27,
"preview": "theme: jekyll-theme-minimal"
},
{
"path": "autorelease.lua",
"chars": 3061,
"preview": "#!/usr/bin/env texlua\n\nfunction os.capture(cmd, raw)\n local f = assert(io.popen(cmd, 'r'))\n local s = assert(f:read('*"
},
{
"path": "build.lua",
"chars": 10952,
"preview": "\n--[================[--\n PARAMETERS\n--]================]--\n\nmath.randomseed( os.time() )\n\nmodule = \"unicode-math\"\n\n"
},
{
"path": "githooks/enable-githooks.sh",
"chars": 58,
"preview": "## ENABLE-GITHOOKS.SH\n\ngit config core.hooksPath githooks\n"
},
{
"path": "githooks/post-commit",
"chars": 663,
"preview": "## POST-COMMIT\n\n# 1.\n# Updates copyright for Will to the current year.\n\nYEAR=`date +%Y`\nsed -i'.tmp' 's/\\(2006\\)-[0-9]* "
},
{
"path": "misc/amsmath-testmath.tex",
"chars": 80552,
"preview": "\n% This is the AMS's testmath.tex modified to check unicode-math output.\n\n\\documentclass{article}\n\\pagestyle{headings}\n\n"
},
{
"path": "misc/stix-extract.sh",
"chars": 9546,
"preview": "#!/bin/sh\n\ncat stix-tbl.txt |\nawk '\n {\n\t# USV characters to ignore\n\n\t#\n\tignoreusv[\"000C5\"] = \"\\\\AA "
},
{
"path": "misc/torture.tex",
"chars": 22395,
"preview": "% Torture test for math fonts (Mostly from TeX book, some via Karl Berry)\n\n% run in plain TeX\n\n% verbose mode:\n% \\tracin"
},
{
"path": "tagrelease.lua",
"chars": 847,
"preview": "#!/usr/bin/env texlua\n\nchangeslisting = nil\ndo\n local f = assert(io.open(\"CHANGES.md\", \"r\"))\n changeslisting = f:read("
},
{
"path": "testfiles/aaa-loading.luatex.tlg",
"chars": 492,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nNo log output; test l"
},
{
"path": "testfiles/aaa-loading.lvt",
"chars": 252,
"preview": "\\input{umtest-preamble}\n%\\START\\TIMO % this line is here so I can uncomment it to debug CI errors\n\\usepackage{unicode-ma"
},
{
"path": "testfiles/aaa-loading.tlg",
"chars": 502,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nNo log output; test l"
},
{
"path": "testfiles/aaa-sym.luatex.tlg",
"chars": 171,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\n***************\nCompi"
},
{
"path": "testfiles/aaa-sym.lvt",
"chars": 145,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{amsmath}\n\\usepackage{unicode-math}\n\\begin{document}\n\n$\\symbf{A}$\n\n$\\symsf{A}$\n\n$\\s"
},
{
"path": "testfiles/aaa-sym.tlg",
"chars": 171,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\n***************\nCompi"
},
{
"path": "testfiles/active-frac.luatex.tlg",
"chars": 18002,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nNORMALSIZE\nCompleted "
},
{
"path": "testfiles/active-frac.lvt",
"chars": 304,
"preview": "\\input{umtest-preamble}\n\n\\usepackage{amsmath}\n\\usepackage{unicode-math}\n\n\\begin{document}\n\n\\MSG{NORMALSIZE}\n\\unimathsetu"
},
{
"path": "testfiles/active-frac.tlg",
"chars": 15756,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nNORMALSIZE\nCompleted "
},
{
"path": "testfiles/active-sscripts-amsmath.luatex.tlg",
"chars": 193,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nJUST TEST COMPILATION"
},
{
"path": "testfiles/active-sscripts-amsmath.lvt",
"chars": 191,
"preview": "\n\\input{umtest-preamble}\n\\usepackage{amsmath}\n\\usepackage{unicode-math}\n\\begin{document}\n\n\\MSG{JUST TEST COMPILATION}\n\n\\"
},
{
"path": "testfiles/active-sscripts-amsmath.tlg",
"chars": 193,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nJUST TEST COMPILATION"
},
{
"path": "testfiles/active-sscripts.luatex.tlg",
"chars": 7834,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/active-sscripts.lvt",
"chars": 502,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\begin{document}\n\n\\SHIPOUT{$x₀₁₂$}\n\\SHIPOUT{$x₁₂₃$}\n\\SHIPOUT{$x₂₃₄$}\n\\"
},
{
"path": "testfiles/active-sscripts.tlg",
"chars": 8059,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/alph-range-calscr.luatex.tlg",
"chars": 9039,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/alph-range-calscr.lvt",
"chars": 359,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\n\\setmathfont{XITSMath-Regular.otf}\n\\setmathfont{XITSMath-Regular.ot"
},
{
"path": "testfiles/alph-range-calscr.tlg",
"chars": 9283,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/alph-range-fallback.luatex.tlg",
"chars": 5936,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/alph-range-fallback.lvt",
"chars": 322,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\n\\setmathfont[Colour=000000]{texgyrepagella-math.otf}\n\\setmathfont[r"
},
{
"path": "testfiles/alph-range-fallback.tlg",
"chars": 6203,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/alph-range-mapping.luatex.tlg",
"chars": 10427,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/alph-range-mapping.lvt",
"chars": 489,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\n\\setmathfont{XITSMath-Regular.otf}\n\\setmathfont[\n range={\n "
},
{
"path": "testfiles/alph-range-mapping.tlg",
"chars": 11567,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/alph-range-sym-alph.luatex.tlg",
"chars": 6718,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/alph-range-sym-alph.lvt",
"chars": 573,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\n\\setmathfont[Colour=330000]{XITSMath-Regular.otf}\n\\setmathfont[rang"
},
{
"path": "testfiles/alph-range-sym-alph.tlg",
"chars": 6789,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/alph-range-sym-range.luatex.tlg",
"chars": 3962,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/alph-range-sym-range.lvt",
"chars": 304,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\n\\setmathfont{XITSMath-Regular.otf}\n\\setmathfont[\n range={\n "
},
{
"path": "testfiles/alph-range-sym-range.tlg",
"chars": 4385,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/alph-sym.luatex.tlg",
"chars": 1265,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/alph-sym.lvt",
"chars": 300,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage[math-style=ISO]{unicode-math}\n\\setmathfont{XITSMath-Regular.otf}\n\\setmathfont[rang"
},
{
"path": "testfiles/alph-sym.tlg",
"chars": 1341,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/ascii-catcodes.luatex.tlg",
"chars": 231,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\ncatcode of \"_\" - 11\nc"
},
{
"path": "testfiles/ascii-catcodes.lvt",
"chars": 532,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\begin{document}\n\n% This test checks that \\setmathfont doesn't affect "
},
{
"path": "testfiles/ascii-catcodes.tlg",
"chars": 231,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\ncatcode of \"_\" - 11\nc"
},
{
"path": "testfiles/boldstyle-french.luatex.tlg",
"chars": 9923,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/boldstyle-french.lvt",
"chars": 332,
"preview": "\\input{umtest-preamble}\n\\usepackage[math-style=french]{unicode-math}\n\\begin{document}\n\\SHIPOUT{$\\symbf\\LATINtext$}\n\\SHIP"
},
{
"path": "testfiles/boldstyle-french.tlg",
"chars": 11369,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/boldstyle-iso.luatex.tlg",
"chars": 11843,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/boldstyle-iso.lvt",
"chars": 330,
"preview": "\\input{umtest-preamble}\n\\usepackage[math-style=ISO]{unicode-math}\n\\begin{document}\n\\SHIPOUT{$\\symbf\\LATINtext$}\n\\SHIPOUT"
},
{
"path": "testfiles/boldstyle-iso.tlg",
"chars": 12489,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/boldstyle-literal.luatex.tlg",
"chars": 10883,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/boldstyle-literal.lvt",
"chars": 333,
"preview": "\\input{umtest-preamble}\n\\usepackage[math-style=literal]{unicode-math}\n\\begin{document}\n\\SHIPOUT{$\\symbf\\LATINtext$}\n\\SHI"
},
{
"path": "testfiles/boldstyle-literal.tlg",
"chars": 11929,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/boldstyle-tex.luatex.tlg",
"chars": 10291,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/boldstyle-tex.lvt",
"chars": 330,
"preview": "\\input{umtest-preamble}\n\\usepackage[math-style=TeX]{unicode-math}\n\\begin{document}\n\\SHIPOUT{$\\symbf\\LATINtext$}\n\\SHIPOUT"
},
{
"path": "testfiles/boldstyle-tex.tlg",
"chars": 11575,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/boldstyle-upright.luatex.tlg",
"chars": 9923,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/boldstyle-upright.lvt",
"chars": 334,
"preview": "\\input{umtest-preamble}\n\\usepackage[math-style=upright]{unicode-math}\n\\begin{document}\n\\SHIPOUT{$\\symbf\\LATINtext$}\n\\SHI"
},
{
"path": "testfiles/boldstyle-upright.tlg",
"chars": 11369,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/cal-scr-equivalence.luatex.tlg",
"chars": 12245,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/cal-scr-equivalence.lvt",
"chars": 391,
"preview": "\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\\setmathfont{STIXTwoMath-Regular.otf}\n\n\\begin{document}\n\n\\SHIPOUT{$\\s"
},
{
"path": "testfiles/cal-scr-equivalence.xetex.tlg",
"chars": 12705,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/cramped-style.luatex.tlg",
"chars": 394,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/cramped-style.lvt",
"chars": 118,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\begin{document}\n\n\\SHIPOUT{$\\crampedtextstyle abc$}\n\n\\end{document}\n"
},
{
"path": "testfiles/cramped-style.tlg",
"chars": 408,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/fontname-log.luatex.tlg",
"chars": 354,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\n\\1\n\\2\n\\2\n\\3\n\\1\nHere i"
},
{
"path": "testfiles/fontname-log.lvt",
"chars": 775,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\n\\begin{document}\n\n% Here is a font loaded in csname \\string\\1:\n\n\\fo"
},
{
"path": "testfiles/fontname-log.tlg",
"chars": 353,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\n\\1 \n\\2 \n\\2 \n\\3 \n\\1 \nH"
},
{
"path": "testfiles/hyperref-section.luatex.tlg",
"chars": 171,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\n***************\nCompi"
},
{
"path": "testfiles/hyperref-section.lvt",
"chars": 144,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\usepackage{hyperref}\n\\begin{document}\n\\tableofcontents\n\\section{$\\cos"
},
{
"path": "testfiles/hyperref-section.xetex.tlg",
"chars": 171,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\n***************\nCompi"
},
{
"path": "testfiles/hyphen.luatex.tlg",
"chars": 1028,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/hyphen.lvt",
"chars": 190,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\n\\begin{document}\n\n\\SHIPOUT{$a-b$} % ascii hyphen minus\n\\SHIPOUT{$a‐"
},
{
"path": "testfiles/hyphen.tlg",
"chars": 1093,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/input-fullwidth.luatex.tlg",
"chars": 3531,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nnumbers\nCompleted box"
},
{
"path": "testfiles/input-fullwidth.lvt",
"chars": 229,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\n\\begin{document}\n\n\\MSG{numbers}\n\\SHIPOUT{$0123456789$}\n\n\\MSG{Latin}"
},
{
"path": "testfiles/input-fullwidth.tlg",
"chars": 3721,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nnumbers\nCompleted box"
},
{
"path": "testfiles/lmdefault-mathrm-it-bf.luatex.tlg",
"chars": 2206,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nOPERATORNAME\nComplete"
},
{
"path": "testfiles/lmdefault-mathrm-it-bf.lvt",
"chars": 494,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{amsmath}\n\\usepackage{unicode-math}\n\\setmathfont{XITSMath-Regular.otf}\n\n\\begin{docu"
},
{
"path": "testfiles/lmdefault-mathrm-it-bf.tlg",
"chars": 1866,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nOPERATORNAME\nComplete"
},
{
"path": "testfiles/mathit-symit-var.luatex.tlg",
"chars": 588,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nTEXTIT:\nCompleted box"
},
{
"path": "testfiles/mathit-symit-var.lvt",
"chars": 324,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage[mathit=sym]{unicode-math}\n\n\\setmainfont{texgyretermes-regular.otf}[ItalicFont=texg"
},
{
"path": "testfiles/mathit-symit-var.tlg",
"chars": 573,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nTEXTIT:\nCompleted box"
},
{
"path": "testfiles/mathit-symit.luatex.tlg",
"chars": 611,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nTEXTIT:\nCompleted box"
},
{
"path": "testfiles/mathit-symit.lvt",
"chars": 312,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\n\\setmainfont{texgyretermes-regular.otf}[ItalicFont=texgyretermes-it"
},
{
"path": "testfiles/mathit-symit.tlg",
"chars": 565,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nTEXTIT:\nCompleted box"
},
{
"path": "testfiles/mathoperator-mathbf.luatex.tlg",
"chars": 398,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/mathoperator-mathbf.lvt",
"chars": 244,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{amsmath}\n\\usepackage{unicode-math}\n\\DeclareMathOperator{\\Op}{\\mathbf{OB}}\n\n\\begin{"
},
{
"path": "testfiles/mathoperator-mathbf.tlg",
"chars": 362,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/mathrm-mathcal-nest.luatex.tlg",
"chars": 425,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/mathrm-mathcal-nest.lvt",
"chars": 176,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\n\\errorcontextlines=999\n\\begin{document}\n\n\\START\n\n\\SHIPOUT{$\\mathcal"
},
{
"path": "testfiles/mathrm-mathcal-nest.tlg",
"chars": 413,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/mathrm-nobraces.luatex.tlg",
"chars": 220,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nNo log expected; test"
},
{
"path": "testfiles/mathrm-nobraces.lvt",
"chars": 252,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\begin{document}\n\\MSG{No log expected; testing compilation status only"
},
{
"path": "testfiles/mathrm-nobraces.tlg",
"chars": 220,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nNo log expected; test"
},
{
"path": "testfiles/mathsizes.luatex.tlg",
"chars": 182,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\n10/7.4/5.5\n**********"
},
{
"path": "testfiles/mathsizes.lvt",
"chars": 193,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\\setmathfont{texgyrepagella-math.otf}\n\n\\begin{document}\n\n\\[x\\]\n\n\\mak"
},
{
"path": "testfiles/mathsizes.tlg",
"chars": 182,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\n10/7.4/5.5\n**********"
},
{
"path": "testfiles/mathstyle-french.luatex.tlg",
"chars": 10209,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/mathstyle-french.lvt",
"chars": 284,
"preview": "\\input{umtest-preamble}\n\\usepackage[math-style=french]{unicode-math}\n\\begin{document}\n\\SHIPOUT{$\\LATINtext$}\n\\SHIPOUT{$\\"
},
{
"path": "testfiles/mathstyle-french.tlg",
"chars": 11445,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/mathstyle-iso.luatex.tlg",
"chars": 12083,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/mathstyle-iso.lvt",
"chars": 282,
"preview": "\\input{umtest-preamble}\n\\usepackage[math-style=ISO]{unicode-math}\n\\begin{document}\n\\SHIPOUT{$\\LATINtext$}\n\\SHIPOUT{$\\lat"
},
{
"path": "testfiles/mathstyle-iso.tlg",
"chars": 12641,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/mathstyle-literal.luatex.tlg",
"chars": 11147,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/mathstyle-literal.lvt",
"chars": 285,
"preview": "\\input{umtest-preamble}\n\\usepackage[math-style=literal]{unicode-math}\n\\begin{document}\n\\SHIPOUT{$\\LATINtext$}\n\\SHIPOUT{$"
},
{
"path": "testfiles/mathstyle-literal.tlg",
"chars": 11982,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/mathstyle-tex.luatex.tlg",
"chars": 11285,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/mathstyle-tex.lvt",
"chars": 282,
"preview": "\\input{umtest-preamble}\n\\usepackage[math-style=TeX]{unicode-math}\n\\begin{document}\n\\SHIPOUT{$\\LATINtext$}\n\\SHIPOUT{$\\lat"
},
{
"path": "testfiles/mathstyle-tex.tlg",
"chars": 12181,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/mathstyle-upright.luatex.tlg",
"chars": 10211,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/mathstyle-upright.lvt",
"chars": 286,
"preview": "\\input{umtest-preamble}\n\\usepackage[math-style=upright]{unicode-math}\n\\begin{document}\n\\SHIPOUT{$\\LATINtext$}\n\\SHIPOUT{$"
},
{
"path": "testfiles/mathstyle-upright.tlg",
"chars": 11323,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/nabla.luatex.tlg",
"chars": 950,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\ndefault\nCompleted box"
},
{
"path": "testfiles/nabla.lvt",
"chars": 381,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\n\\begin{document}\n\n\\setmathfont{texgyrepagella-math.otf}\n\\MSG{defaul"
},
{
"path": "testfiles/nabla.tlg",
"chars": 988,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\ndefault\nCompleted box"
},
{
"path": "testfiles/nesting.luatex.tlg",
"chars": 755,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nOPERATOR FONT + MATHB"
},
{
"path": "testfiles/nesting.lvt",
"chars": 354,
"preview": "\\input{umtest-preamble.tex}\n\\usepackage{unicode-math}\n\\begin{document}\n\\makeatletter\n\n\\MSG{OPERATOR FONT + MATHBB}\n\\SHIP"
},
{
"path": "testfiles/nesting.tlg",
"chars": 742,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nOPERATOR FONT + MATHB"
},
{
"path": "testfiles/not.luatex.tlg",
"chars": 6233,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nempty\nCompleted box b"
},
{
"path": "testfiles/not.lvt",
"chars": 818,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\n\\begin{document}\n\n\\MSG{empty}\n\\SHIPOUT{$\\not$} % #126\n\n\\newcommand"
},
{
"path": "testfiles/not.tlg",
"chars": 6525,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nempty\nCompleted box b"
},
{
"path": "testfiles/operatorname.luatex.tlg",
"chars": 592,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/operatorname.lvt",
"chars": 223,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{amsmath}\n\\usepackage{unicode-math}\n\n\\begin{document}\n\n\\SHIPOUT{$ \\mathrm{s} $}\n\n\\S"
},
{
"path": "testfiles/operatorname.tlg",
"chars": 540,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/partial.luatex.tlg",
"chars": 950,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\ndefault\nCompleted box"
},
{
"path": "testfiles/partial.lvt",
"chars": 397,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\n\\begin{document}\n\n\\setmathfont{texgyrepagella-math.otf}\n\\MSG{defaul"
},
{
"path": "testfiles/partial.tlg",
"chars": 967,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\ndefault\nCompleted box"
},
{
"path": "testfiles/radical-cuberoot-output.luatex.tlg",
"chars": 1974,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nSQRT x\nCompleted box "
},
{
"path": "testfiles/radical-cuberoot-output.lvt",
"chars": 348,
"preview": "\n\\input{umtest-preamble}\n\n\n\\usepackage{unicode-math}\n\n\\setmainfont{texgyrepagella-regular.otf}\n\\setmathfont{XITSMath-Reg"
},
{
"path": "testfiles/radical-cuberoot-output.tlg",
"chars": 1740,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nSQRT x\nCompleted box "
},
{
"path": "testfiles/range-char-cmd.luatex.tlg",
"chars": 986,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/range-char-cmd.lvt",
"chars": 360,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\\setmathfont{texgyrepagella-math.otf}\n\\setmathfont[range=\"1D4B0,Colo"
},
{
"path": "testfiles/range-char-cmd.tlg",
"chars": 826,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/range-class.luatex.tlg",
"chars": 428,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/range-class.lvt",
"chars": 204,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\\setmathfont{texgyrepagella-math.otf}\n\\setmathfont[range=\\mathbin]{X"
},
{
"path": "testfiles/range-class.tlg",
"chars": 412,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/range-nabla-partial.luatex.tlg",
"chars": 557,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/range-nabla-partial.lvt",
"chars": 281,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\\setmathfont{latinmodern-math.otf}\n\\setmathfont{texgyrepagella-math."
},
{
"path": "testfiles/range-nabla-partial.tlg",
"chars": 550,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/range-up-num.luatex.tlg",
"chars": 340,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/range-up-num.lvt",
"chars": 192,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\\setmathfont{latinmodern-math.otf}\n\\setmathfont{texgyreheros-regular"
},
{
"path": "testfiles/range-up-num.tlg",
"chars": 342,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/setmathfontface.luatex.tlg",
"chars": 698,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/setmathfontface.lvt",
"chars": 387,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\\setmathfontface\\mathfoo{texgyrebonum-regular.otf}\n\\setmathfontface\\"
},
{
"path": "testfiles/setmathfontface.tlg",
"chars": 669,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/setmathsf.luatex.tlg",
"chars": 463,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/setmathsf.lvt",
"chars": 172,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{fontspec}\n\\setmathsf{texgyrecursor-regular.otf}\n\\usepackage{unicode-math}\n\n\\begin{"
},
{
"path": "testfiles/setmathsf.tlg",
"chars": 483,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/sqrt-amsmath-output.luatex.tlg",
"chars": 4328,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nSQRT x\nCompleted box "
},
{
"path": "testfiles/sqrt-amsmath-output.lvt",
"chars": 580,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{amsmath}\n\\usepackage{unicode-math}\n\n\\setmainfont{texgyretermes-regular.otf}[Italic"
},
{
"path": "testfiles/sqrt-amsmath-output.tlg",
"chars": 4375,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nSQRT x\nCompleted box "
},
{
"path": "testfiles/style-Bbbit.luatex.tlg",
"chars": 1549,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nMATHBBIT\nCompleted bo"
},
{
"path": "testfiles/style-Bbbit.lvt",
"chars": 294,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\setmathfont{XITSMath-Regular.otf}\n\\begin{document}\n\n\\MSG{MATHBBIT}\n\\S"
},
{
"path": "testfiles/style-Bbbit.tlg",
"chars": 1601,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nMATHBBIT\nCompleted bo"
},
{
"path": "testfiles/support/umtest-preamble.tex",
"chars": 4220,
"preview": "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n\\input{regression-test.tex}\n\\documentclass{article}\n\n%%%%%%%%%%"
},
{
"path": "testfiles/url.luatex.tlg",
"chars": 947,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles/url.lvt",
"chars": 163,
"preview": "\n\\input{umtest-preamble}\n\n\\usepackage{url}\n\\usepackage{unicode-math}\n\n\\begin{document}\n\n\\SHIPOUT{\\url{http://abc.com/}}\n"
},
{
"path": "testfiles/url.tlg",
"chars": 1090,
"preview": "This is a generated file for the l3build validation system.\nDon't change this file in any respect.\nCompleted box being s"
},
{
"path": "testfiles-disabled/F-amsmath-subarray-1.lvt",
"chars": 199,
"preview": "\\input{umtest-preamble}\n\\usepackage{amsmath}\n\\begin{document}\n\\[\n\\sum_{\\substack{a \\\\ bbb}}\n\\sum_{\\substack{\\dfrac12 \\\\ "
},
{
"path": "testfiles-disabled/F-amsmath-subarray-2.lvt",
"chars": 252,
"preview": "\\input{umtest-preamble}\n\\usepackage{amsmath}\n\\usepackage{unicode-math}\n\\setmathfont{Cambria Math}\n\\begin{document}\n\\[\n\\s"
},
{
"path": "testfiles-disabled/F-amsmath-subarray-3.lvt",
"chars": 250,
"preview": "\\input{umtest-preamble}\n\\usepackage{amsmath}\n\\usepackage{unicode-math}\n\\setmathfont{Asana Math}\n\\begin{document}\n\\[\n\\sum"
},
{
"path": "testfiles-disabled/F-amsmath-subarray-4.lvt",
"chars": 249,
"preview": "\\input{umtest-preamble}\n\\usepackage{amsmath}\n\\usepackage{unicode-math}\n\\setmathfont{XITS Math}\n\\begin{document}\n\\[\n\\sum_"
},
{
"path": "testfiles-disabled/F-boldmath.lvt",
"chars": 200,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\setmathfont{Lucida Bright Math OT}\n\\begin{document}\n\\begin{tabular}{l"
},
{
"path": "testfiles-disabled/F-longdivision.lvt",
"chars": 152,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\setmathfont{xits-math.otf}\n\\begin{document}\n\\[\n\\longdivision{a+b}\n\\]\n"
},
{
"path": "testfiles-disabled/F-lrangle-chars.lvt",
"chars": 330,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\begin{document}\n\\setmathfont[math-style=TeX]{Free Serif}\n\\[ıȷ\\quad 𝚤𝚥"
},
{
"path": "testfiles-disabled/F-mathtools-overbracket.lvt",
"chars": 255,
"preview": "\\input{umtest-preamble}\n\\usepackage{mathtools}\n\\usepackage{unicode-math}\n\\setmathfont{xits-math.otf}\n\\begin{document}\n\\["
},
{
"path": "testfiles-disabled/F-mathversion.lvt",
"chars": 236,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\setmathfont{xits-math.otf}\n\\setmathfont[version=bold,Colour=009900]{x"
},
{
"path": "testfiles-disabled/F-negation.lvt",
"chars": 1323,
"preview": "\\input{umtest-preamble}\n\\usepackage{multicol}\n\\usepackage{unicode-math}\n\\setmathfont{xits-math.otf}\n\\begin{document}\n\\be"
},
{
"path": "testfiles-disabled/F-nolimits-spec.lvt",
"chars": 189,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\setmathfont{xits-math.otf}\n\\begin{document}\n\\[\\iiint_V\\]\n\\removenolim"
},
{
"path": "testfiles-disabled/F-over-under.lvt",
"chars": 309,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\setmathfont{xits-math.otf}\n\\begin{document}\n\\[\n\\overbrace{a+b+c+d}^{e"
},
{
"path": "testfiles-disabled/F-pkg-url.lvt",
"chars": 432,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\setmainfont{TeX Gyre Pagella}\n\\setsansfont{TeX Gyre Adventor}\n\\setmon"
},
{
"path": "testfiles-disabled/F-primes-1.lvt",
"chars": 326,
"preview": "\\input{umtest-preamble}\n\\usepackage{amsmath,unicode-math}\n\\setmathfont{Cambria Math}\n\\begin{document}\n [${x\\prime\\prim"
},
{
"path": "testfiles-disabled/F-primes-2.lvt",
"chars": 310,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\setmathfont{Asana Math}\n\\begin{document}\n[$x_{x}'$]\n[$x_{x}′$]\n[$x_{x"
},
{
"path": "testfiles-disabled/F-primes-back.lvt",
"chars": 364,
"preview": "\\input{umtest-preamble}\n\\usepackage{amsmath,unicode-math}\n\\setmathfont{Asana Math}\n\\begin{document}\n [${x\\backprime\\ba"
},
{
"path": "testfiles-disabled/F-query-mathstyle.lvt",
"chars": 589,
"preview": "\\input{umtest-preamble}\n\n\\usepackage{unicode-math}\n\\setmathfont[Colour=FF0000]{xits-math.otf}\n\n\\begin{document}\n\n\\ExplSy"
},
{
"path": "testfiles-disabled/F-range-prime-check.lvt",
"chars": 464,
"preview": "%\n% See http://github.com/wspr/unicode-math/issues/171\n%\n% The fix is related to the fact that primes use the `mathactiv"
},
{
"path": "testfiles-disabled/F-range-slots.lvt",
"chars": 528,
"preview": "\\input{umtest-preamble}\n\\usepackage[svgnames]{xcolor}\n\\usepackage[vargreek-shape=unicode]{unicode-math}\n\\setmathfont{xit"
},
{
"path": "testfiles-disabled/F-range-style.lvt",
"chars": 372,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\setmathfont[Colour=000000]{Cambria Math}\n\\setmathfont[range=\\mathscr,"
},
{
"path": "testfiles-disabled/F-range.lvt",
"chars": 441,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\setmathfont[Colour=000000]{Cambria Math}\n\\setmathfont[range={\\mathop}"
},
{
"path": "testfiles-disabled/F-slash-delim-2.lvt",
"chars": 501,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\begin{document}\n\\newcommand\\ARRAY[4]{%\n \\begin{array}{cc}\n #1 & #2 "
},
{
"path": "testfiles-disabled/F-sqrt-n.lvt",
"chars": 175,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\setmathfont{Cambria Math}\n\\begin{document}\n\\[ \\sqrt[n]{1+\\sqrt[n]{1+\\"
},
{
"path": "testfiles-disabled/F-sqrt.lvt",
"chars": 187,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\setmathfont{Cambria Math}\n\\begin{document}\n\\[ \\sqrt{\\sin^{2}x+\\cos^{2"
},
{
"path": "testfiles-disabled/F-sscript-features.lvt",
"chars": 392,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\setmathfont[script-font = {Asana Math},\n script-"
},
{
"path": "testfiles-disabled/F-stacked-accents.lvt",
"chars": 318,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\setmathfont{xits-math.otf}\n\\begin{document}\n\\[\n\\hat{\\hat{H}}\\quad\\che"
},
{
"path": "testfiles-disabled/L-sscale-dimen.lvt",
"chars": 418,
"preview": "\\input{umtest-preamble}\n\\usepackage{unicode-math}\n\\setmathfont{XITS Math}\n\\begin{document}\n$ $ "
},
{
"path": "testfiles-disabled/L601a.lvt",
"chars": 547,
"preview": "\\input{umtest-preamble}\n\\usepackage{mathtools}\n\\begin{document}\n\\[\n\\frac{a^2 + b^2}{a^2 + b^2}\n\\frac{\\cramped{a^2 + b^2}"
},
{
"path": "testfiles-disabled/L601b.lvt",
"chars": 600,
"preview": "\\input{umtest-preamble}\n\\usepackage{mathtools}\n\\usepackage{unicode-math}\n\\setmathfont{Cambria Math}\n\\begin{document}\n\\[\n"
}
]
// ... and 173 more files (download for full content)
About this extraction
This page contains the full source code of the wspr/unicode-math GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 373 files (1.3 MB), approximately 544.0k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.